ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

仿生双足机器人变刚度驱动器设计全记录:从弹簧参数到台架实验

仿生双足机器人变刚度驱动器设计全记录:从弹簧参数到台架实验 搞过双足机器人的朋友多少都被关节“刚性”这件事折磨过。用刚性关节跑动态步态电机和减速箱总是最先出问题的那个用纯柔性关节又发现支撑相撑不住、位置精度一路下滑。做双足仿真、样机调试这几年我对关节驱动器的感觉已经从“越大越好”变成了“该硬的地方硬、该软的地方软才是真本事”。这也是我为什么花了大把功夫做了一个仿生双足机器人的新型变刚度驱动器从模块设计、参数计算到台架实验全部跑了一遍。这篇就是那段完整过程的实操记录。这套东西说白了就是给机器人关节加一套可以在运行中连续调节刚度的驱动模块。它能让关节在支撑相呈现高刚度、保证承载和精度在摆动相切换成低刚度、降低足端冲击和能耗比较适合做双足、四足这类腿足机器人的髋关节和膝关节也适合正在做毕业设计或者想改造关节结构的同学参考。全文以我实际选择的拮抗式变刚度方案为主线把怎么设计弹簧、怎么选电机、怎么标定、怎么测数据、翻过哪些车全部摊开写清楚。1. 设计理念与总体方案解析1.1 刚性关节的尴尬和双足的动态需求做双足机器人最常踩的坑是照搬工业机械臂那套“高刚度伺服”逻辑。工业机械臂底座固定它要的是绝对位置精度所以减速比大、刚度高、控制简单都是优点。但双足不一样——它每一迈步都在和地面碰撞高刚度意味着高阻抗脚落地的冲击会原原本本地传到减速箱齿轮、电机轴和法兰上。如果关节支撑相刚度过高步态稍微偏差一点整条腿的冲击力可能瞬间超过额定负载。而低刚度的柔性关节比如传统的串联弹性驱动器虽然能缓冲冲击、提升安全交互性却又带来了另一个问题支撑相时负载一大关节位置就偏得厉害跟踪精度上不来步态周期越跑越乱。也就是说单一刚度没办法同时满足“支撑相承载”和“摆动相柔顺”这两种矛盾需求。人类肌肉就是最好的参考答案。人在走路时腿关节的刚度并不是恒定的支撑期股四头肌和腓肠肌协同发硬维持身体不倒摆动期膝关节和踝关节主动放松让腿自然摆过。这个“肌肉协同变刚度”机制落到工程上就是变刚度驱动器。它追求的不只是“软”或“硬”而是“刚度可调”把刚度当成一个和位置、力矩并列的实时控制量。1.2 变刚度实现路线怎么选目前业内做变刚度驱动器的路线主要有三条拮抗式、机械杠杆调节式、半主动并联式。我做之前也纠结了很久三条路都翻过论文最后选了拮抗式。拮抗式变刚度思路是模仿人体一对拮抗肌。关节输出轮由两根钢丝绳或连杆分别连接到两组弹性元件和驱动器当一个驱动器收绳时另一个放绳实现关节转动而当两个驱动器同时向一个方向增加预紧时关节角度不变但两侧弹簧都被压得更紧整体刚度就变大。这套东西的优点非常直接刚度调节和关节位置调节在原理上是解耦的刚度变化不影响位置输出控制算法好写而且结构上能拆成独立模块装到髋关节、膝关节都方便。机械杠杆调节式的代表是 MACCEPA 这类结构用一个可移动支点改变杠杆力臂从而改变等效刚度刚性调节范围很大。但它机构复杂对加工精度和装配同心度要求极高我手里这台加工条件很难保证批量一致性所以放弃了。半主动并联式在关节上并联一组可接通/断开的弹性元件可以做到非常节能但刚度调节往往是阶跃式的做不到连续可调用在需要精细落地缓冲的膝关节上不够灵活。我做的是双电机拮抗弹簧预紧模块。一个主电机负责关节位置一个小型滑块电机负责同步调节两侧弹簧预紧量刚度通过滑块行程连续可调。整套模块化设计的好处是后续哪块出问题就拆哪块不影响其他部分。1.3 我的总体设计指标在画图之前我先把设计指标定死了这些指标直接影响后续结构尺寸和电机选型指标项目标值备注关节峰值力矩40 Nm按70kg级双足机器人髋关节估算关节行程±45°覆盖正常步态摆角刚度调节范围≥5倍低刚度0.8 Nm/°高刚度4.5 Nm/°刚度切换响应时间200 ms摆动态到支撑态切换模块总重≤1.8 kg含外壳、电机、传感器供电24 V DC单模块独立供电这些值不是拍脑袋定的。峰值力矩参考了同级别双足跑步时的髋关节力矩需求刚度范围参照了人类踝关节摆动相和支撑相的刚度比值估算模块重量则是考虑了腿部总重和惯量分配后给的包络。定好指标再细化零件否则很容易出现“结构画完了发现电机放不下”的返工事故。2. 关键模块设计与参数计算2.1 总体布局怎么拆我把整个驱动器拆成四个子模块位置驱动模块、弹性预紧模块、输出耦合模块、感知与控制模块。位置驱动模块负责输出关节转角核心是主电机和谐波减速器弹性预紧模块由两组压缩弹簧、滑块和滑块电机组成负责调节刚度输出耦合模块是输出轮和钢丝绳负责把两侧弹簧的力耦合成关节力矩感知与控制模块负责采集编码器、应变桥和电流信号同时在主控里跑力矩和刚度闭环。这个布局的核心思想是模块独立。弹簧、钢丝绳和滑块电机做在一个铝制小壳里主电机减速器做成另一个独立法兰件两边通过输出轮连接。这样装配误差只存在于输出轮和钢丝绳之间不影响电机和减速器大大降低了加工精度要求——对没有五轴加工中心的小实验室来说这点特别实际。结构材料上主体件我用6061铝合金减轻转动惯量输出轴和弹簧导向杆用不锈钢耐磨性更好滑块导轨选微型直线导轨行程做到25mm。这里要注意滑轨预紧力不要调太大调太大会让滑块电机额外承担很大摩擦阻力我实际测试中曾因为预紧过猛滑块电机直接堵转。2.2 弹性元件设计与校核计算弹簧是整个模块的灵魂我最开始随手买了几根淘宝压缩弹簧装上去完全不对后来老老实实自己算了一轮。以输出轮半径 R30mm 为例关节峰值力矩 40 Nm 时钢丝绳最大拉力为 F M / R 40 / 0.03 ≈ 1333 N。因为两侧弹簧并联承担单根弹簧最大需要承受约 667 N。弹簧最大压缩量我定为 15mm那么高刚度档下弹簧刚度大约 k_high ≈ 667 / 15 ≈ 44 N/mm。接下来校核刚度范围。低刚度档至少要到 8.8 N/mm以满足5倍调刚比。这个区间对普通圆柱压缩弹簧来说跨度较大我会通过滑块初始压缩量实现滑块行程越大初始压缩量越大等效刚度越大滑块回退弹簧松弛等效刚度下降。弹簧参数我最终选了线径 4.5mm、中径 28mm、有效圈数 12 的 60Si2MnA 合金弹簧钢弹簧。理论刚度计算式为k (G * d^4) / (8 * D^3 * n) (78500 * 4.5^4) / (8 * 28^3 * 12) ≈ 15.3 N/mm单根 15.3 N/mm两根串联到输出轮之后的等效刚度还会再调整加上预紧量之后最终关节刚度落在 0.8~4.5 Nm/° 这个区间正好覆盖设计要求。这里有一个容易踩的坑弹簧的出厂自由长度其实都有公差我买的同一批里竟然有 1~2mm 的长度差导致两侧初始预紧不一致装上之后关节自带了零点偏移。后来我在装配台上逐根测量弹簧长度把接近的配对使用才把这个问题解决掉。钢丝绳我选直径 1.5mm 的 7x19 不锈钢绳破断拉力约 1.8kN两个方向算下来安全系数大于2.5满足紧凑设计下的可靠性要求。如果钢丝绳绕度过小会显著降低寿命所以输出轮绳槽我特地优化过直径30mm保证钢丝绳弯曲寿命。2.3 驱动与传动选型主电机负责摆动腿和承载要兼顾响应速度和峰值转矩。我选了一台 150W 的直流伺服电机额定转速约 6000rpm配上国产 RGF 系列 21:1 谐波减速器。21:1 看起来不大但结合电机额定扭矩 0.238 Nm输出峰值可以到 5 Nm 左右已经凑不够 40 Nm。这时候就体现出钢丝绳杠杆的优势了——输出轮半径 30mm弹簧钢丝绳在输出轮上形成的力臂本身就是一级减速最终力矩经过弹簧耦合放大能满足 40 Nm 峰值需求。刚度调节电机要重调刚度的速度和控制精度我选了一个带 1:14 行星减速的 30W 直流电机配合导程 5mm 的丝杠。滑块需要提供的最大预紧力约 1333 N丝杠轴向负载换算到电机轴的扭矩大约是T (F * Lead) / (2π * η) (1333 * 0.005) / (2π * 0.6) ≈ 1.77 Nm再除以减速比14实际电机轴需要约 0.13 Nm30W 的电机带动这个负载问题不大。但如果想再快一点可以选择导程 10mm 的丝杠速度增加但扭矩也相应增加要根据滑块电机峰值扭矩折衷。我最终选了导程 5mm因为刚度调节速度不是瓶颈预紧力的稳定才是第一需求。2.4 传感与控制链路搭建变刚度驱动器必须同时知道三件事关节转角、关节输出力矩、当前刚度。缺一个环节控制都不闭环。关节转角用主电机后端的双圈绝对编码器读取分辨率 14bit关节输出力矩通过安装在输出轮轴上的应变桥式力矩传感器读取刚度用滑块位置换算滑块电机带线性电位器或者磁栅尺精密标定出滑块位移和关节刚度的映射关系之后实时查询即可。控制链路我采用两级架构主控板是 STM32F407跑 1kHz 控制循环驱动板上用两块独立伺服驱动器分别驱动主电机和滑块电机通过 CAN 总线把采集到的编码器、电流、力矩数据回传主控。CAN 总线终端电阻两端各 120Ω双绞屏蔽线这都是老规矩但少了任何一个都会导致偶发通信丢帧。控制算法上位置环、力矩环、刚度环三个环同步运行。刚度环是对滑块电机的闭环位置控制期望滑块位置由期望刚度反查标定表得到关节位置环是主电机的差动控制力矩环作为内环提供关节的直接力矩输出能力。固件里初始化部分大概长这样void joint_vsa_init(void) { can_filter_config(); encoder_zero(); slide_motor_clear_fault(); slide_motor_home(); // 滑块回零 spring_clamp_release(); set_stiffness(K_START); // 初始目标刚度 set_joint_position(0.0f); }很多人在做变刚度控制时习惯把刚度环和位置环串行处理先调刚度再调位置这样切换速度会很慢。正确做法是把刚度作为独立的第三个控制维度控制器输出直接拆差动和共模两个分量差动分量给主电机产生关节转角共模分量给滑块电机调节预紧两个环并行执行。2.5 关键模块设计的经验总结回过头看模块设计阶段最大的教训就是弹簧不能单独设计要和钢丝绳、输出轮半径联动。输出轮半径决定力臂力臂决定弹簧需求刚度弹簧刚度反查丝杠导程和滑块电机扭矩。这个链条必须一遍一遍地迭代计算我的第一版就是因为只算了弹簧没算丝杠结果发现滑块电机扭矩不够又换电机又改丝杠折腾了整整两周。另外所有旋转轴承都建议加轴向预紧否则输出轴串动时会直接反映到钢丝绳张力上导致力矩传感器读数抖动。轴承选型用角接触球轴承优于深沟球虽然贵一点但对轴向串动的抑制效果好很多。3. 装配、调试与核心环节实现3.1 机械装配顺序与关键手法装配顺序其实很有讲究。如果先装电机减速器再去装弹簧仓后面想调整滑块位置就很痛苦。我的装配顺序是先装输出轴和角接触轴承再装输出轮接着装弹簧导向套、弹簧和滑块组件然后把滑块导轨固定在外壳上最后才把主电机减速器通过法兰盘连到输出轮轴上。这样每一步都能单独检验转动顺滑度不会出现装完全部零件后找不到哪卡住的问题。弹簧导向套的同心度是最大难点。我第一版导向套用铝合金加工弹簧压缩时和导向杆摩擦声音很大后来把导向杆做了镀硬铬处理同时加了低摩擦的 PTFE 垫片异响才消失。弹簧两端也记得要磨平否则弹簧压缩时是歪的钢丝绳受力不平衡长时间跑下来输出轮会偏磨。钢丝绳安装也有技巧。固定端的锁紧螺丝一定要用螺纹胶否则振动几下就容易松。钢丝绳长度需要等弹簧预紧到目标位置后再调节到合适张紧度太紧会让关节零位偏移太松则会产生刚度空程。我的经验是把两侧弹簧先预紧到 3mm 压缩量再穿钢丝绳然后一点点收紧到目标张力用测力计现场确认。3.2 电气接线与通讯配置电气部分相对简单但有两个坑我说一下。第一个是编码器线的屏蔽层必须单端接地而且是靠近主控那一端接地否则电机 PWM 电流会通过地环路注入到编码器信号里轻则丢步重则位置跳变。第二个是 CAN 总线终端电阻不能忘我调试时忘接了一端的120Ω电阻结果控制指令偶发延迟一开始还以为是代码问题排查了一晚上才发现是终端电阻的问题。供电上主电机和滑块电机共用一个 24V 电源但逻辑供电要分开。我的方案是用一块 24V 转 5V 的隔离电源给编码器和主控供电避免电机启停时的电压跌落影响传感器读数。电源端加一个大电容至少 470µF和一个防反接二极管这是保护控制板最便宜有效的手段。CAN 通讯参数我设成 1Mbps 波特率主控 1kHz 控制循环下每次循环收发两条指令帧和一条状态帧总线负载率不到 20%留了足够余量。如果波特率降到 500k负载率会到40%左右依然可以工作但延迟会稍微明显对力矩闭环会有肉眼可见的影响。3.3 初始标定与安全机制标定是整个调试过程里最枯燥但最不能跳过的环节。零位标定很简单让关节输出轴自然水平此时理论上关节力矩为零记录两个编码器读数设置为零位。然后把滑块从最远行程缓慢移动到最近行程每移动1mm记录一次当前位置和弹簧预紧量绘制“滑块位置-关节刚度”映射表。这张表后续直接用来做刚度闭环的查询表不要用公式硬拟合因为弹簧存在批次公差实测映射比理想公式可靠得多。死区处理也很关键。滑块在反向移动时会有丝杠背隙反映到刚度映射上就是回程差。我的解决办法是在查询表里同时记录正向和反向两条曲线切换方向时根据上一次运动方向选择对应的曲线再做一个 0.3mm 的补偿。这样刚度控制误差可以从 10% 降到 2% 以内。安全机制要做软限位加硬限位双保险。软限位在固件里实现滑块行程超过预设范围立即停止硬限位是导轨前后的机械挡块和微动开关万一固件跑飞也不至于把弹簧压死。弹簧压到完全并紧会瞬间增加刚度到无穷大非常容易损坏结构所以硬限位的位置要在弹簧最大压缩量前留出2mm余量。4. 实验设计与结果分析4.1 刚度特性标定实验样机装好之后第一件事是验证“刚度能不能连续可调且可重复”。我的标定方法比较土但有效给关节输出轴固定一个力臂末端加力传感器用不同滑块位置下的预紧缓慢转动关节角度并记录力矩-角度曲线曲线的斜率就是该点的瞬时刚度。测力过程必须极慢排除动态加速度引入的惯性力否则斜率全是歪的。实测数据大致是这样滑块位置 0mm关节刚度约 0.8 Nm/°滑块位置 10mm关节刚度约 2.3 Nm/°滑块位置 20mm关节刚度约 4.2 Nm/°滑块位置 25mm关节刚度约 4.6 Nm/°刚度比做到了 5.8 倍超过设计目标的 5 倍说明参数设计基本正确。但注意低刚度档起步段滑块位置 0~3mm刚度变化很不线性几乎是平的原因是钢丝绳和弹簧之间存在初始间隙两侧弹簧还没有完全参与出力。这个区间在步态规划里要避开否则刚度和预紧的映射会失真。可重复性测试我重复了五次往复标定低刚度档重复性误差约 4%高刚度档约 2%。高刚度档误差小的原因很简单弹簧压缩量大预紧主导刚度外部因素比如钢丝绳蠕变影响占比小。低刚度档容易受摩擦和微小轴向位移干扰所以误差偏大。4.2 正弦轨迹跟踪与刚度在线切换实验刚度能调是前提更关键的是“切换过程中关节还能不能跟踪好轨迹”。我给关节下达一条 0.2Hz、幅值10°的正弦位置指令在运动过程中每两秒把期望刚度从低档切到高档再切回来然后记录位置跟踪误差。高刚度模式下位置跟踪误差大约 0.3°以内这是谐波减速器加高预紧带来的精度红利低刚度模式下误差升到 0.8°左右因为弹簧环节引入了额外柔性变形。但要注意低刚度下冲击缓冲能力明显变好这个牺牲是预期内的。刚度切换时间方面滑块电机从一端跑到另一端大约需要 0.6 秒听起来挺慢。但如果做步态规划我们不需要在关节运动到一半再切换——可以在摆动相结束前提前 200ms 让滑块开始预动到支撑相开始时刚度基本到位。配合这种“预置同步”的调度策略实际有效刚度切换时间可以压缩到 150ms 以内完全能满足支撑相-摆动相的切换节奏需求。我还做了一组更贴近步态的测试模拟落地前的刚度切换。从低刚度档启动在关节运动到幅值末端前 150ms 开始切向高刚度档结果是关节在到位后立刻表现出高刚度特性几乎没有软脚现象。这说明只要调度合理电机慢一点也没关系机械硬件的延迟可以用轨迹规划来补偿。4.3 落足冲击缓冲实验这项实验最直观体现变刚度的价值。我把驱动器装在一个简易单腿落足测试架上腿末端带一块模拟脚板从 10cm 高度释放在膝关节位置贴应变片对比固定高刚度模式和变刚度模式下的冲击峰值。结果很惊喜固定高刚度模式下落足瞬间关节感受到的冲击力峰值约 780N变刚度模式下落足前把刚度切到低档冲击力峰值降到约 470N降幅接近 40%。而且变刚度模式下冲击力的衰减也更平滑没有出现高刚度模式那种尖锐的过冲震荡。这说明低刚度在足地碰撞瞬间确实起到了“软着陆”的作用把短时冲击能量通过弹簧变形吸收掉了。不过我这里也发现了一个问题低刚度模式落地后如果步态不能立刻进入支撑相并切回高刚度腿会一直处于软绵绵的状态身体重心会下沉姿态会不稳定。所以变刚度的核心不仅在于“会变软”还在于“软完以后能快速变硬”支撑相和摆动相的时序配合比单纯追求大刚度调节范围重要得多。4.4 实验结果讨论与性能边界整套实验做完我对变刚度驱动器的能力边界有了比较清晰的认识。高刚度模式下关节表现出接近刚性关节的位置精度可以保证支撑相的承载和姿态稳定低刚度模式下关节表现出弹簧关节的柔顺特性可以吸收冲击、降低足端碰撞。但如果把刚度调到最低档位置跟踪误差和动态响应能力都明显变差所以低刚度模式只适合摆动相或落地缓冲阶段不适合长时间承载运行。关于能耗变刚度模式比恒定高刚度模式整体能耗低约15%主要节能来源是摆动相阶段的电机电流平均值下降。这部分节能量级不大但放在双足机器人的有限电池容量背景下是值得抠出来的。另一个有意思的发现是刚度切换过程中有一个短暂的能量回馈现象。落地瞬间弹簧被压缩存储的弹性势能在回弹阶段释放到关节这个能量如果不加以利用就会变成振动但如果控制得当可以在下一个摆动相开始时把这段弹性势能转化为推进力。这个方向我觉得比单纯做刚度调节更有潜力后续如果要做膝关节我会在控制策略里专门优化这部分能量回收。5. 常见问题与排查技巧实录5.1 弹簧“嗡嗡”响和结构共振刚装完第一版样机做实验时关节跑到一定转速就会出现弹簧仓里的“嗡嗡”声机器整个都在轻微发抖。排查下来发现是弹簧固有频率和关节激励频率凑到了一起形成了机械共振。解决办法有三招一是给弹簧两端加硅胶缓冲垫片把高频振动吸收掉二是稍微增大初始预紧量把弹簧固有频率移出激励频段三是换复合弹簧组合比如一根主弹簧加一根小直径副弹簧并联错开共振点。实测下来硅胶垫片对噪声消除最明显但注意垫片厚度太大会压缩预紧行程要根据实际刚度标定结果微调。5.2 力矩闭环的切换振荡变刚度驱动器最难受的问题在于刚度一变系统的等效带宽和相位裕度就变了。一个在高刚度下调好的 PID 参数切到低刚度后大概率出现过冲甚至振荡。我的方案是增益调度把控制增益写成刚度的函数刚度高时用较大的比例增益和较小积分刚度低时降低比例增益、增加微分阻尼。然后在刚度切换指令发出时做一次前馈补偿把切换瞬间的力矩突变抵消掉。这套做下来原来切换时 15% 的力矩过冲降到了 3% 以内。5.3 传感器温漂和读数乱跳力矩传感器在连续跑半小时后会慢慢零漂这是我实验中遇到的最隐蔽的问题。一开始怀疑是应变桥贴片问题后来发现主要是放大器温漂引起的其次是应变片没有做温度补偿。解决手段是双管齐下硬件上选温漂系数低的高精度应变片并保留同批次补偿片软件上在每次控制循环启停时做一次自动回零同时给力矩信号加一个截止频率 20Hz 的一阶低通滤波器。做完整套之后一小时内的零漂从原来的 0.6 Nm 降到了 0.1 Nm 左右效果非常明显。5.4 问题排查速查表异常现象可能原因排查方法解决方案刚度调节没有反应滑块电机堵转或丝杠卡滞手动转动丝杠检查阻力查看电机电流松滑轨预紧、检查丝杠润滑关节零位自偏两侧弹簧长度不一致拆下弹簧逐根测量长度匹配配对安装控制指令偶发延迟CAN终端电阻缺失或线缆过长检查两端电阻测总线波形补上120Ω电阻、换双绞屏蔽线力矩读数规律性波动编码器屏蔽层两端接地检查线缆接地方式改为单端接地高刚度时异响弹簧并紧或钢丝绳跳槽检查最大压缩量调整硬限位留出安全余量滑块发热严重电机连续堵转或负载过大查看电机电流曲线降低滑块预紧行程或换大扭矩电机位置跟踪超调增益没有随刚度调整对比高/低刚度下阶跃响应做增益调度表这些坑每个都是实打实花时间填出来的尤其温漂那个问题差点让我把好端端的应变桥方案整个推翻。如果你也在做类似项目建议直接把上面这一套当成默认检查清单能省掉不少排查时间。我个人的体会是变刚度驱动器这个方向真正的难点从来不在机械结构本身而在于怎么把刚度这个变量无缝融入到姿态控制和步态规划里。模块设计和样机实验只是第一步后面要把刚度闭环和整个双足控制器做联调让它在真实行走过程中自动感知何时该硬、何时该软这个才是最有价值的地方。这轮实验给我的最大收获就是明白了“结构设计要服务于整个控制体系”这句话的分量。希望这篇记录对正在折腾关节的你有点帮助。
返回列表