1. 案例定位:一句话说清楚“盲踩障碍物”到底做了什么
先把这个项目讲明白:这是一台完整的人形机器人,在视觉传感器不参与决策的情况下,靠腿部关节的力觉、足底的压力触觉和躯干的惯性感知,主动走到障碍物前面,用脚“摸”到它、踩上去、站稳,再继续迈出下一步。
“盲踩”不是瞎走,而是刻意关闭或弱化视觉通道,把感知重心完全压到本体感觉上。这套能力在真实环境里非常关键:室内外光线突变、灰尘蒙住相机镜头、视觉算法掉帧的瞬间,机器人不能一遇到感知失效就瘫在原地。脚底触觉和关节力矩是最接近物理接触的信息源,永远不会被“看不见”这件事骗到,因此盲踩本质上是一道人形机器人可靠性的保底题。
对谁有参考价值?三类人可以直接拿走思路:第一类是在做足式机器人毕业设计或竞赛的学生,这个案例落地到真机,不是仿真动画;第二类是做具身智能算法但缺少整机经验的朋友,可以借这个案例理解感知、规划、控制如何在一台机器人上闭环;第三类是准备做机器人产品预研的工程师,这里涉及选型、机械结构、传感器布局和调试流程,能避开不少自己闷头设计会踩的坑。
这个案例选自一个编号为11-4-03的完整教学项目模块,它前面还有整机结构设计和基础双足步态的内容,到这一节专门解决“视觉掉线后怎么办”的问题。我在复现过程中发现,真正有挑战的并不是让它踩中一块砖,而是在踩中之后如何不栽跟头、不烧电机、不被地面反作用力弹飞。后面所有的内容,都围绕这条主线展开。
1.1 这个项目的核心需求拆解
做完整人形机器人,最难的不是某个单项性能做到极致,而是所有子系统彼此打架时要找到一个平衡点。我先把“盲踩障碍物”这个动作拆成四个子需求,后面所有设计都在为这四个需求服务:
第一,机器人要能保持站立和行进。这是基础双足步态的问题,涉及零力矩点(ZMP,Zero Moment Point)控制、支撑脚切换和质心轨迹规划,不解决这个,盲踩无从谈起。
第二,机器人要知道脚下碰到了硬物。这一步需要足底压力传感器或关节力矩估算。难点在于区分“正常踩到地面”和“踩到凸起障碍物”,两者在力信号上非常接近,必须靠触地位置、压力分布变化率和时间窗口区分。
第三,踩上障碍物之后,机身姿态会发生突变。因为一只脚被垫高了,骨盆会倾斜,质心位置瞬间偏移。此时必须通过踝关节和髋关节的协同调整快速补偿,否则下一步还没迈出去,上半身已经倒向一边。
第四,整个动作要平滑、低冲击。不能用位置控制直接砸下去,否则足底传感器容易撞击损坏、减速器齿轮承受冲击载荷。必须引入柔顺控制,让脚在接触障碍物时“顺着力走”而不是“顶着速度走”。
这四个需求分别对应结构设计、感知、姿态控制、柔顺控制四个领域。任何一块缺失,盲踩动作都会在真机上露出破绽。这也是我说这个案例“完整”的原因——它不是单点算法展示,而是整机闭环。
1.2 为什么拿“盲踩”当完整案例而不是直接做避障
可能有人会问,既然有视觉,为什么不直接让机器人绕过障碍物,非要踩上去?我在调试时也反复想过这个问题,后来发现“盲踩”这个场景其实有不可替代的价值。
首先是工程价值的倒逼。避障只要发现障碍物并绕开路径即可,这要求视觉算法足够可靠;但盲踩要求机器人在感知受限时还能安全与物理世界交互。这种交互能力,直接决定了机器人在复杂地面(楼梯、碎石、门槛)上的通行能力。你不可能指望每个障碍物都有足够大的体积和对比度让视觉模型稳定识别。
其次是控制精度的试金石。绕开障碍物只需要路径规划正确,而踩上障碍物需要落足位置准、触地感知快、姿态补偿稳,整个控制链路的时延必须压缩到几十毫秒以内。这比单纯避障高一个难度等级。
最后是成本上的务实考量。视觉传感器的价格可以差几十倍,而足底压力传感器和关节力矩估算的边际成本很低。如果能让机器人在视觉降级时依然保证基础行走能力,产品在光线恶劣、尘土飞扬的实际场景中可靠性会显著提升。
所以这个场景的设计哲学是:默认视觉可用,但整个控制决策链路上存在一条不依赖视觉的兜底通路。这才是完整人形机器人该有的系统架构。
1.3 目标技术指标与验收标准
项目在立项时定了一组可达成的指标,我在复现时基本卡在范围内,供大家参考:
| 指标项 | 目标值 | 备注 |
|---|---|---|
| 机器人身高/总重 | 约1.2米 / 28kg | 教学级整机,便于吊装保护 |
| 腿部自由度 | 每条腿6个 | 髋3、膝1、踝2 |
| 单步周期 | 0.8秒 | 盲踩时临时降到1.2秒 |
| 障碍高度 | ≤4cm | 高于脚踝1/3即触发退回策略 |
| 触地检测时延 | ≤50ms | 从碰触到控制指令生效 |
| 姿态恢复角度 | ≤6° | 踩上40mm障碍后躯干俯仰角变化 |
| 连续盲踩步数 | ≥10步 | 验证动态稳定性而非单次运气 |
这些指标不算激进。真正高级的人形机器人可以做到更高的动态性能和更快的响应,但教学级整机最重要的是“每一项目标都能在实验室条件下稳定复现”。如果指标定得太高,调试会陷入反复炸机的泥潭,反而不利于理解设计逻辑。
2. 整机设计:机械结构、驱动与传感器怎么搭
盲踩障碍物这个动作,对机械结构的考验集中在腿部。很多人做机器人喜欢先堆自由度、再调算法,最后发现机构干涉或者关节刚度不足。我的建议是反过来:先明确动作需求,再反推结构参数。
2.1 腿部机械结构与自由度配置
这个项目的腿部采用了经典的六自由度串联构型:髋关节3个自由度(横滚、俯仰、偏航),膝关节1个自由度(俯仰),踝关节2个自由度(俯仰、横滚)。这种分配方式几乎是双足机器人的标配,原因是它恰好覆盖了足式运动的核心需求:髋关节负责抬腿方向和骨盆姿态调整,膝关节负责主要的高度变化,踝关节负责脚掌落地后的自适应贴合。
踝关节保留俯仰和横滚两个自由度非常关键。盲踩障碍物时,脚掌可能以倾斜角度接触硬物表面,如果踝关节只有一个俯仰自由度,脚掌无法在横滚方向贴合障碍物边缘,压力会集中到一个点上,轻则传感器读数失真,重则整机侧向失稳。
躯干部分不需要太复杂,留出两个肩关节和两个髋关节的连接接口即可,手臂在盲踩过程中不参与主动支撑,主要作用是配重和扰动时的惯性补偿。实测发现,双臂保持在自然下垂且轻度外展的姿态,对步态稳定性的贡献比想象中大,因为它在侧向上扩展了转动惯量,减少了躯干绕纵轴的突然转动。
膝关节是承力最大的关节。盲踩瞬间,整机重量会从单腿支撑快速过渡到障碍物上的那只脚,膝关节承受的是体重加冲击载荷的组合。设计上给膝关节选用了较大减速比的谐波减速器,同时在外壳上增加了加强筋。有一个很容易被忽略的地方:膝关节电机的散热。连续做盲踩动作时,膝关节电机的瞬时电流很高,如果外壳导热设计不好,电机温度会在几分钟内冲到保护阈值。该项目在膝关节外壳上专门设计了散热鳍片,调试时实测温升比平顶外壳版本低了接近20%。
2.2 驱动方案对比与选型逻辑
驱动方案上,这个案例对比过准直驱电机方案和“无框电机+谐波减速器”方案。两者各有拥趸,我站在落地项目复现的角度说说优劣。
准直驱方案(高力矩密度电机+低减速比)的优点是反向驱动性好,机器人脚底碰到障碍物时,外力能比较“透明”地反传到电机端,力矩估算非常自然,控制上可以实现高带宽的力控。缺点是电机本体发热严重,需要大电流驱动器,对供电系统压力大,整机成本偏高,适合实验室级别的动态研究,不太适合作为教学案例反复折腾。
“无框电机+谐波减速器”方案刚好反过来:反向驱动性差,外力不容易反传,但力矩密度高、结构紧凑、能自锁,静态保持时几乎不耗电。盲踩需要的不是高频动态跑跳,而是低速大扭矩和稳定保持,因此这个方案更契合。代价是关节力矩不能直接靠电机电流准确估算,必须在足底装传感器,或者在关节输出端加力矩传感器。
这个案例选择了后者,理由很务实:在有限预算和有限调试周期内,谐波减速器方案的机械故障率更低,更容易让学生把精力集中在感知和控制算法上。注意,如果你在关节端直接粘贴应变片做关节力矩传感,标定工作量和温度漂移问题会比想象中麻烦。我的建议是能选足底六维力传感器就选六维力,关节力矩可以用电流估算做辅助信号,不要一开始就指望电流环精度。
2.3 传感系统配置:脚底、关节与躯干的信息源
盲踩的信息来源主要有四类,它们各司其职,缺一不可:
足底压力传感器阵列,这是盲踩的核心传感器。项目用四枚FSR薄膜压力传感器贴在脚底四角(脚掌前内侧、前外侧、脚跟内侧、脚跟外侧),再配合一块中置的压力分布板。FSR不是精度最高的方案(温漂多、重复性一般),但胜在响应快、成本低、便于布置。如果预算充足,可以替换为阵列式电容压力传感器,或者直接用足底六维力/力矩传感器,但后者的厚度和重量都会增加,影响脚踝的转动惯量。
关节编码器,每个关节配备绝对值编码器,用来获取关节角度。盲踩时会用这些数据反推腿部构型和脚掌姿态。注意到膝盖关节的编码器要选择多圈绝对值型,避免机器人被外力推动后丢失零位。
躯干惯性测量单元(IMU,Inertial Measurement Unit),安装在骨盆中心位置,提供三轴加速度和三轴角速度。它是姿态补偿的主力传感器。安装位置非常讲究:放在质心投影附近,而不是放在胸口或头部。我的实测经验是,IMU离质心越远,行走时躯干摆动带来的离心加速度干扰越严重,姿态解算结果越飘。
关节驱动器内置电流采样,用于估算关节力矩。精度不高,但可以用来做碰撞检测的粗筛,比如踩到非常硬的障碍物瞬间,膝盖电流会有一个陡峭的尖峰,这个尖峰可以作为触发信号的前哨。
这一套传感配置在整机成本中的占比很低,却承载了盲踩全部的低层感知任务,说明可靠感知不是靠堆高价传感器,而是靠合理的信号组合和时序配合。
2.4 主控架构:实时控制与上层逻辑的分工
控制系统的架构直接决定了调试效率。这个项目采用了两级主控:上层是通用计算板,运行操作系统和状态机逻辑,负责步态规划、传感器融合和高层策略;下层是实时控制器,运行在单片机/工业控制板上,负责关节电流环、位置环和CAN总线通信。
为什么这么分?因为盲踩过程中,关节控制必须保证确定性的时序,不允许操作系统的调度抖动干扰。上层即使发生轻微卡顿,下层仍能按照最后一个有效指令维持关节位置,这是安全兜底的底线。
上下层之间通过CAN总线通信,周期设为2ms。上层以1kHz频率运行姿态解算和步态状态机,将目标关节位置和力矩指令下发到下层;下层以更高的环路频率执行关节伺服控制。实测下来,一个完整的盲踩决策链路——从足底受压、传感器信号处理、姿态计算、指令更新到关节执行——端到端时延大约在45ms左右,勉强满足50ms的设计指标。
通信协议设计上有一个小细节值得分享:所有关节指令都带时间戳和序号,下层如果发现指令序号跳跃,立即保持上一个指令进入安全模式,而不是执行不完整的中间值。这套机制在一些关键时刻救过我们:通信线松动导致的偶发丢包没有演变成机器人失控的险情。
3. 盲踩障碍物的感知链路:不看路怎么“摸”到障碍物
盲踩的第一性问题是:机器人如何知道脚下有东西、东西有多高、受力是否均匀。这一节的感知链路是全项目的技术核心,也是普通文档里几乎不会写细的部分。
3.1 足底压力感知:把脚底变成触觉皮肤
人之所以能闭眼走楼梯,依赖的是脚底丰富的触觉感受器。机器人想复现这件事,最直接的途径就是给脚底装上压力传感器。但压力传感器不是贴上去就完事,关键在布局和信号处理。
这个项目在脚底的四角各贴了一个FSR薄膜压力传感器,但实际工作时不能看单个数值,而是关注四个数值的相对关系和变化趋势。举个例子:正常平地上落足,四个值会几乎同时、平滑地增大;踩到一块凸起的砖块时,往往是前脚掌某一侧的传感器先出现一个突变尖峰,其他几个数值滞后数十毫秒才跟上。
这个“时间差”和“空间分布”信息,比绝对压力值更有价值。它告诉我们脚底不是平整接触,而是碰到一个局部硬物。为了捕捉这种信息,信号采集频率不能低,项目设置FSR采样率为500Hz,并做了滑动窗口中值滤波,去掉高频尖刺但不平滑掉真实的接触突变——这里有个平衡,滤波窗口太大会把触地瞬间的陡峭上升沿抹平,导致检测时延超标。
FSR的温漂问题也必须在软件层面处理。传感器刚开机和运行20分钟后的基线会漂移,所以项目在每次进入待机状态后自动执行一次零漂校正,把所有通道的当前读数作为基线并做零偏移除。如果机器人刚经历剧烈碰撞,FSR的机械蠕变也会导致零点偏移,这时需要人工确认并触发一次手动校正,不能依赖自动校正判断。
3.2 触地与碰撞的判别:阈值、时延与状态缓冲
踩到障碍物和正常踩到地面,在力信号上差异非常微弱,单纯设一个压力阈值根本区分不开。项目采用了一个三条件判定逻辑,比单阈值可靠得多:
条件一:压力增长率。障碍物是硬质的,接触后压力在短时间内急剧上升;正常地面虽然有支撑反力,但上升斜率平缓很多。因此设定斜率阈值K,只有超过该值才标记为“疑似碰撞”。
条件二:空间分布偏差。正常触地时四个传感器的受力分布较均匀,碰撞时某一侧通道的压力占比显著超出其他通道。判断标准是该通道占比超过总压力的70%以上并持续超过30ms。
条件三:关节电流尖峰。碰撞瞬间,膝盖和髋关节的电流会出现一个快速上升再回落的尖峰,这是机械冲击在电机端留下的“指纹”。把它作为辅助确认条件,能显著降低误判率。
只有三个条件同时满足,状态机才确认“踩到障碍物”。这个设计的妙处在于,它能将地面不平、步态切换、传感器噪声等干扰源逐一排除。我在调试中就多次遇到这样的情况:地面上有一颗小石子,压力增长率达标了,但空间分布偏差不够,不会误触发;地面上有轻微坡度,空间分布有偏差了,但压力增长率偏慢,同样不会误触发。
检测时延的压缩也不单靠传感器,还涉及控制频率。状态机以800Hz运行,判定确认后立即在同一个控制周期内切换状态,不允许跨周期缓冲。为了提高确定性,CAN通信发送的优先级设置为足底传感节点最高,确保碰撞信号在任何总线拥堵时都能最先送达。
3.3 姿态与力矩的融合估计:踩歪了要怎么救回来
机器人踩到障碍物后,机身姿态会瞬间倾斜,此时必须在极短时间内判断出倾斜方向和幅度,才能做出正确的补偿动作。项目采用IMU加关节运动学融合的姿态解算,类似互补滤波的思路,没有上太复杂的卡尔曼平滑——原因是卡尔曼的调参比较玄学,盲踩场景中姿态变化本来就剧烈,越简单的滤波越容易调出可靠的表现。
原理上讲:陀螺仪积分得到短时高频的姿态变化,加速度计提供长时低频的重力参考方向,互补滤波将两者按权重融合。权重选择依据是振动环境:双足行走时足底冲击会让加速度计信号充满噪声,所以加速度计的权重不宜过高,否则姿态估计会出现高频抖动。项目将加速度计的截止频率设在5Hz左右,陀螺仪用原始数据,表现足够稳定。
关节运动学作为第三路信息参与交叉校验:通过各关节编码器和已知杆长,可以正运动学计算出躯干在空间中的姿态角,与IMU解算结果比较。如果相差超过3°,认为是某一路传感器发生了漂移或异常,控制策略切到保守模式:降低下一步的步幅,重新调整支撑策略,而不是强行补偿。
这里有一个实操中血的教训:IMU的安装平面必须与骨盆底面严格平行。当时某次拆装后没有校准安装角度,导致IMU数据带了一个固定偏置,机器人每次站立都向一侧偏几度,排查了很久才发现是机械安装造成的系统性误差。后来所有涉及IMU的拆装,都强制加一道水平仪校准工序。
4. 步态规划与盲踩动作实现:从站得住到踩得稳
传感器拿到了“碰到了东西”这个信息之后,真正考验的是步态层如何把这个信息变成安全、连贯的身体动作。盲踩从来不是一个孤立动作,它发生在行走过程中,前后步态必须无缝衔接。
4.1 双足步态的底层约束
任何双足机器人的步态设计,都要先解决“不会倒”的基本问题。项目采用的是基于零力矩点(ZMP)的步态规划框架:质心轨迹被约束在地面支撑多边形内部,机器人行走过程中,ZMP始终不超出脚底支撑区域,就不会发生倾覆。
实现上,质心轨迹用三次样条插值生成,落足点由步态状态机动态调整。单步周期0.8秒,支撑相与摆动相按照60:40分配,即单脚支撑的时间不允许过短,否则换腿瞬间质心来不及跟上,机器人会像抽签一样左右摇摆。
盲踩发生的那一刻,机器人之前规划好的ZMP轨迹瞬间失效了。因为支撑脚脚底多了一个高度,等效支撑多边形被抬高且倾斜了。此时有两种处理策略:一是重新规划质心轨迹,将ZMP目标调整到实际支撑区域内,这是“重规划”思路;二是通过关节阻抗将质心“拉”回理想位置,这是“鲁棒控制”思路。项目选择了两者的混合:先快速重规划一个保守的修正轨迹,同时利用髋关节的柔顺控制允许小幅偏差,避免硬拉导致电机过流。
4.2 盲踩状态机:每一步都在动态决策
状态机的设计是整个盲踩逻辑的乐高积木,每个状态对应一个明确的任务,转移条件必须清晰、有限时。项目定义了一组核心状态:
正常摆动状态(SWING),这是步态的默认状态。摆动腿按照预规划轨迹向前迈出,踝关节执行低阻抗策略,脚底传感器持续监听,随时准备进入触地检测。
触地探测状态(CONTACT_DETECT),摆动腿在规划落足点附近开始探测。此时踝关节改用力矩控制模式,脚掌轻轻下压寻找支撑面。如果探测到硬物,标记接触点位置并进入承重过渡状态;如果探测不到,继续下压到最大允许深度,然后回退到信号丢失状态。
承重过渡状态(LOAD_TRANSFER),机器人开始把体重从支撑腿转移到刚触到障碍物的这条腿。由于脚底比正常地面高,躯干会倾斜,状态机实时监测骨盆高度和横滚角,将体重转移速度降低,同时让踝关节主动贴合障碍物表面,尽量扩大有效接触面积。
姿态补偿状态(COMPENSATE),躯干倾斜达到峰值前开始反向修正。髋关节微调骨盆倾角,踝关节调整脚掌压力分布,让质心重新回到支撑多边形中心。
重心转移与恢复状态(RESTORE),确认当前支撑稳定后,后腿抬起准备迈出下一步。如果姿态误差在允许范围内,则恢复正常步态周期;如果误差过大,进入修正姿态的安全状态,重新建立稳定站立再继续行走。
每个状态都设置了最大驻留时间。任何状态内超时未满足转移条件,立即切换到一个安全姿态——双膝微屈、重心下移、原地站稳。这套超时保护机制在调试中避免了很多次“僵在原地然后慢慢倒下去”的尴尬事故。
4.3 柔顺控制:为什么盲踩必须“软着地”
纯位置控制下,脚掌按照规划轨迹刚性地下落,遇到高于预期的障碍物时相当于撞墙,冲击力会直接传递到减速器和电机,轻则传感器过载,重则齿轮打齿。盲踩场景中障碍物高度未知,位置控制天然不适用。
项目在踝关节和髋关节上都实现了阻抗控制,虚拟出一个“弹簧-阻尼”系统。物理含义是:脚底接触障碍物后,位置误差被允许存在,但关节力矩与位置误差之比被约束在一个可控范围内。用生活化的类比理解,这相当于机器人脚上装了一个隐形软垫——碰到硬物会有点小幅变形吸收冲击,同时不会像弹簧完全放松那样失去支撑。
踝关节阻抗参数在盲踩过程中是动态调整的:摆动相后期,刚度降到较低值,让脚掌主动“让位”适应障碍物表面;承重转移时,逐渐提高刚度,让脚掌变成有效的支撑面。这两组参数的切换时序非常关键,切换早了会让机器人在没站稳时就变硬,反而放大冲击;切换晚了脚掌会发软,支撑不住躯干重量。
关节阻抗的底层实现并不复杂,无非是在位置控制环外面叠一层力反馈修正:测得接触力,沿着力方向反向修正位置指令。难点在阻抗参数的标定,这个放到第五部分细说。
4.4 踩空、踩滑、踩高:三种边界情况的兜底逻辑
盲踩除了成功踩中,还会面对踩空、踩滑、踩高三种失败情形。这部分属于典型的不踩坑不成文经验,我按项目实测情况逐一说明。
踩空对应障碍物是否真的存在,或者踩到了边缘只有一半受力。此时足底压力分布严重不均,有一侧完全无压力。兜底策略是立即放弃承重转移,摆动腿快速回摆到安全位置,同时支撑腿微屈降低质心,防止身体侧倾。这个回撤动作必须非常果断,如果犹豫,机器人会像人踩空台阶那样身体前倾摔倒。
踩滑对应障碍物表面光滑或沾水,脚底接触后摩擦力不足,压力分布改变的同时伴随脚掌在水平方向的滑移。脚底加速度计(如果有)或者IMU能捕捉到这个滑移信号。兜底策略是踝关节快速增加背屈力矩,同时髋关节向身体中线方向收紧——相当于人踩到香蕉皮时本能地收紧核心、张臂平衡的动作。
踩高对应障碍物高于规划预留的脚踝间隙,脚被卡住。此时关节位置误差持续增大,但接触力也很大,机器人的安全策略不是硬踩,而是反向发力收回脚,然后切换到绕行或重新规划路径的逻辑。这个阈值设置为4厘米,超过后不再尝试盲踩,回归到视觉引导模式。让“盲踩”作为一种兜底手段而不是万能解,这本身就是系统设计成熟的标志。
5. 实操调试流程与标定细节:从仿真到真机的完整步骤
真机调试和仿真完全是两码事,很多在仿真里永远遇不到的问题,真机第一次实验就全冒出来了。这一节我从头到尾梳理一条经过验证的调试路径,希望帮大家少走弯路。
5.1 安全准备:先让它安全地摔再说
真机调试的每一条建议,背后基本都是惨痛教训换来的。项目第一次上线就吃过亏:刚上电走两步,膝关节失控,整个机器人轰然倒地,虽然高度有限没炸碎结构件,但关节编码器受到了冲击,零位需要重新标定。从那以后再也不敢省略安全措施。
吊装保护是最有效的一道防线。在机器人骨盆上方安装一个承重接口,通过弹性吊绳连接到实验室顶部的龙门架。吊绳的张力调整为略小于自重但不完全分担体重,保证机器人站立时能承载自身重量,摔倒时被吊住而不砸地。这套吊装让调试人员敢放开了跑参数,大幅提高了试验效率。
地面准备也很讲究。机器人活动区铺设防滑减震垫,尽量减少踩滑和硬冲击。活动区四周留出足够空间,防止机器人摔倒时撞到桌腿或设备架。同时准备好远程急停开关,与驱动器使能信号串接,出现异常时一键断使能——断使能会让机器人瞬间瘫软,比强行保持关节力矩更安全。
最后是固件层面的软保护。给每个关节设定最大力矩阈值、最大速度阈值和位置软限位,超过任意一个立即触发保护停机。这个软保护一开始设得保守一点,后续随着调试数据积累逐渐放宽,而不是相反。
5.2 传感器标定与数据质量检查
传感器的标定质量直接决定算法上限,这一步偷懒,后面整个调试周期都会被拖延。首先是FSR标定。FSR出厂时给出的力-阻值曲线只是个大概范围,不同批次、不同安装预压力差别很大。项目采用分段标定的方法:在机器人空载时记录每个传感器的零点输出,然后在脚底施加已知压力(用标准砝码)记录满量程输出,建立两点线性标定。高精度要求不高的场景下两点标定够用,但要注意FSR在低压段和高压段存在非线性区间,中间常用段的线性尚可。
髋关节和膝关节需要做摩擦辨识。谐波减速器的摩擦特性复杂:有库伦摩擦、粘性摩擦和静摩擦。通过让关节以多个恒定速度转动,记录力矩-速度曲线,拟合出摩擦模型,在控制时前馈补偿。这个补偿能显著改善低速度段的跟随精度——盲踩动作大部分时间处于低速段,如果没有摩擦补偿,关节会出现典型的爬行现象。
IMU标定不能只做水平零点,还要做安装角度校准。操作方法是:将机器人躯干水平放置在台面上,记录IMU读数;然后分别向前倾90度、向左倾90度时记录读数,反推出IMU在躯干上的实际安装欧拉角。这组数值会标定到控制参数的宏定义里,如果在代码里看到IMU安装角变量被设成0,基本可以判断调试者跳过了这一步。
标定完成后必须做数据质量检查,而不是直接进算法。让每条腿单独抬起、放下,检查压力传感器波形是否平滑、有无跳变;让躯干在吊装保护下前后摇晃,检查IMU姿态解算是否平滑跟随;让腿在空中做小幅摆动,检查每个关节编码器有无换向死区。这一套流程走完大概需要半天时间,但能省下后面数天的排查时间。
5.3 状态机参数整定:三个关键数值
盲踩状态机里参数很多,但真正起决定作用的是三个数值:触地判定阈值K、承重转移时间T_load、姿态误差豁免角A_safe。这三个参数牵一发而动全身,单独调好一个没有用,必须联动整定。
触地判定阈值K,对应压力增长率的斜率阈值,单位取“百分比满量程每秒”。初始值从经验值8%/ms起步,如果发生“还没碰到东西就误判”,说明K太小,需要上调;如果“碰到障碍物了但没有触发判定”,说明K太大或滤波窗口延迟太高。临界状态可以通过观察日志中碰撞信号的上升时间来判断。
承重转移时间T_load,指从检测到触地到机器人将70%体重转移到新腿所用的时间。太短会导致质心猛烈晃动,太长会导致机器人单腿站立过久。初始值设为0.35秒,在吊装保护下逐步调整。判断标准是骨盆在承重转移过程中的最大下降量,理想状态应控制在3厘米以内。
姿态误差豁免角A_safe,指姿态补偿阶段允许的稳态误差角。初始设为6°。如果角度设得过大,机器人会歪着身子迈步,步态看起来非常不自然;如果设得过小,状态机频繁进入修正状态,行走速度和连贯性会受到严重影响。
这三个参数还有一个联动关系:K决定了什么时候触发承重转移,T_load决定了机身姿态畸变的程度,A_safe则决定补偿是否成功。整定顺序是“先K、再T_load、最后A_safe”,跳着调会顾此失彼,越调越乱。
5.4 从静态踩块到动态行走的递进式测试
真机调试最有价值的一条经验是:永远不要一步跳到完整目标场景。项目的递进路径分四步,每一步都有明确验证目标和通过标准,极大缩小了出问题时排查的范围。
第一步:静态站立踩块。机器人摆好双脚与肩同宽,把一块4厘米高的木块垫到左脚下方,观察踝关节压力分布变化和躯干姿态补偿是否正常。这一步只验证传感链路和局部柔顺控制,不涉及步态。通过标准是姿态误差角3秒内回到4°以内。
第二步:原地踏步踩块。在迈步轨迹的落点上放置障碍物,让机器人原地踏步并随机踩中它。此时不需要完成承重转移,只验证碰撞检测和回撤策略是否正常。通过标准是连续10次踩中不出现误判和漏判。
第三步:单步前行踩块。让机器人走向摆放的障碍物,只完成一次盲踩并停下来。变量从“是否踩中”升级为“踩中后能否重新站稳”。通过标准是踩中后停止位置与目标位置偏差不超过5厘米。
第四步:连续行走盲踩。在路径上随机放置多块障碍物,让机器人连续行走并逐个盲踩。这一阶段重点观察步态过渡的和平滑性和状态机切换的稳定性。通过标准是连续10步盲踩,无摔倒、无超限冲击、无电机过流报警。
每一阶段出现问题,就把问题记录到调试日志,带着具体现象回到对应环节排查,而不是盲目调整参数碰运气。某开发者在做这一步时卡了很久,后来发现第四步经常失败是因为前两步的测试场景太干净,机器人在地上的压力分布有一些潜在的模式依赖;加入“地面加一层薄泡沫垫”这种扰动变量后,压力分布不再那么理想化,反而逼出了更鲁棒的状态机参数。
6. 常见问题与系统鲁棒性提升实录
真机运行中出现的问题五花八门,但翻来覆去,根子主要集中在传感器噪声、通信时延、机械共振和参数边界这几类。我挑出几个反复踩过的坑,做成一个速查表,同时给出对应的排查思路。
| 现象 | 直接原因 | 排查与解决办法 |
|---|---|---|
| 没有碰到东西,机器人突然缩脚回撤 | 触地误判 | 调高斜率阈值K,检查滤波器窗口是否过短,观察FSR基线是否漂移 |
| 踩到障碍物但状态机没有反应 | 触地漏判 | 降低K,检查碰撞信号是否被低通滤波抹平,确认三个判定条件是否都满足 |
| 踩中后机身前倾过大甚至摔倒 | 承重转移过快或姿态补偿太晚 | 增大T_load,提前COMPENSATE状态触发时机,检查骨盆高度是否被错误估计 |
| 关节电机温度迅速过热 | 阻抗参数太硬,碰撞冲击反复传导 | 降低摆动相踝关节刚度,检查摩擦补偿是否偏大 |
| 行走时姿态数据高频抖动 | IMU受足底冲击干扰 | 降低加速度计融合权重,检查IMU安装是否松动 |
| 偶发关节抖动,像抽筋一样 | CAN通信丢包或时序错乱 | 检查指令时间戳机制,增加线路屏蔽和终端电阻,降低总线负载率 |
| 上电后站立逐渐偏向一侧 | IMU安装偏差或FSR零点漂移 | 重新执行安装角标定和传感器零漂校正 |
再补充两个调试中的现场经验。第一,任何传感器数值的突变,要先怀疑供电和接线,再怀疑算法。项目曾经出现过FSR读数出现规律性脉冲噪声,查了很久发现是一条信号线靠近了电机驱动线,受到电磁干扰,布线重新分离后问题消失。第二,谐波减速器的柔性在慢速大力矩工况下会引入明显的末端位置误差,这个误差反馈到压力传感器上,容易被误判成“碰到东西”。此时要么在算法里引入关节柔性前馈补偿,要么在机械结构上提高关节刚度,单纯调参很难根治。
6.1 系统鲁棒性的四个设计补强
单次盲踩成功不算本事,连续稳定运行不出问题才是。我在项目后期做了四件事,显著提升了系统鲁棒性。
第一件,给所有状态转移条件增加滞回区间。原来状态从A转到B后,只要条件不满足就会立刻转回A,导致状态机在边界来回横跳。加上滞回区间后,转移条件是在进入新状态后必须持续满足一定时间或满足反向更严格的条件才能转回,这个改动消除了绝大多数状态抖动现象。
第二件,在足底压力信号处理中引入“信号质量评级”。FSR传感器与脚底不同区域的贴合程度不同,每个传感器的信号质量会在调试时记录一个0到1的置信度权重。融合时会根据权重动态分配贡献,某个传感器长期贴不紧或信号异常,权重自动降低,避免劣质数据干扰整体判定。
第三件,增加动力学前馈。在承重转移和姿态补偿阶段,通过逆动力学计算预期的关节力矩,把这部分作为前馈量叠加到阻抗控制输出上。前馈不改变系统稳定性,但能显著减小反馈误差,让关节响应更快、更少超调。加入前馈后,姿态补偿阶段的躯干峰值角度从7°左右降到了接近4.5°。
第四件,给控制器写自动记录函数。每次盲踩完成,系统自动截取从触地前100ms到稳定后500ms的所有传感器数据和状态转移日志,压缩存储到本地。调试时遇到异常,直接回放这个时间段的数据,相当于飞机黑匣子。这个功能初看很基础,但实际调试效率把它顶到了所有功能的首位——没有它,每次排查都要复现故障,而很多故障是不可控的随机事件。
这一套盲踩系统从立项到稳定运行,前后花费了三个多月。回头复盘,真正花时间的不是写算法代码,而是把传感器数据质量打磨到可信、把状态机边界条件调整到不漏判不误判、把机械结构与控制参数的匹配调整到和谐共振。最后得到的这条完整的盲踩链路——机械结构、传感、规划、控制、调试方法论——才是这个案例最有价值的沉淀。有条件的朋友完全可以把它移植成自己的项目框架,在系统架构不变的前提下替换电机、传感器和主控型号。只要保持“信息流贯穿、状态机清晰、安全兜底完备”这三个原则,这个思路能适配大多数教学级足式机器人平台。