ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

双足机器人设计:从自由度选型到步态控制与验收排查

双足机器人设计:从自由度选型到步态控制与验收排查

简介:《双足机器人设计》是一份面向机器人开发学习者与嵌入式运动控制方向工程师的技术文档,聚焦北京汉库 HGR-3HV-C 双足机器人的步伐源代码解析,帮助读者理解从初始站立到蹲起、侧身、抬腿等动作的关节协同与变速控制逻辑。压缩包内含1个doc文档,约9.07MB,内容按步伐函数、单一动作变速子程序、姿态检测与传感器融合、动力学模型及控制算法等模块组织,便于按主题查阅。已有477人学习,说明其在双足机器人控制入门与源码研读中具有一定参考价值。读者可从中获得子程序级控制流程、参数调整思路以及步态优化与稳定性分析的切入点,适合用于课程设计、项目预研和运动控制算法复现。

1. 双足机器人设计先定边界:为什么“能走”不等于“能稳住”

双足机器人设计最容易被误解成一张关节布置图:髋、膝、踝画齐,电机选大一号,似乎就能站起来。真到样机第一次离地,最先翻车的往往不是腿长,而是支撑相与摆动相切换时,质心投影和落脚点差了十几毫米。这个标题背后要解决的是把“能走”拆成可校核的关节参数、可复现的步态状态机和可排查的控制分层,而不是先堆一个会摆腿的结构。它适合正在做第一台验证样机的人,也适合从轮式、四足转过来的团队:先知道稳定边界在哪,再决定自由度、驱动和传感器怎么配,后面才不会被反复返工拖住。

2. 自由度与驱动选型:把双足机器人设计的关节表落到可制造参数

2.1 从任务反推自由度:髋、膝、踝各要几个轴

双足机器人设计的自由度不是越多越稳。先列任务:平地低速行走、原地转向、单腿支撑、轻扰动恢复。对大多数验证样机,12 个主动自由度够用:每条腿髋 3 轴、膝 1 轴、踝 2 轴。髋 pitch 负责前后摆腿,髋 roll 负责侧向重心转移,髋 yaw 负责转向;膝 pitch 负责抬脚和缓冲;踝 pitch 提供蹬地,踝 roll 修正侧向支撑。脚趾关节可以后加,但第一版把它算进去,会让状态机和足底接触模型复杂一大截。

我一般会先用矢状面简图把任务走一遍:支撑腿从脚踝到髋的连线是否能在步长范围内保持质心投影落在脚掌支撑多边形内;摆动腿的膝角是否会在抬脚最高点碰到大腿;踝 pitch 在蹬地时是否还有余量。这个过程不需要仿真,拿卷尺和纸就能做。常见错误是先选电机再补结构,结果髋 roll 的扭矩够、转速不够,侧向重心转移慢半拍,步态看起来像“拖着走”。

自由度确定后,给每个轴写清三件事:运动范围、最大角速度、连续/峰值扭矩。运动范围要留机械限位余量,软件限位通常比机械限位早 3 到 5 度。最大角速度按步行周期反推:周期 0.7 秒、步长 0.15 米时,髋 pitch 的峰值角速度常在 2 到 4 rad/s,选型时留 1.5 倍余量。扭矩则按单腿支撑静力矩乘动态系数估算,动态系数取 1.5 到 2.0,别拿双支撑的平均值糊弄。

提示:先把 12 自由度表冻结,再改结构。自由度表一变,步态状态机、控制器接口和仿真模型都要跟着改,返工成本比想象中高。

2.2 驱动与减速比:扭矩、转速、背隙的三条红线

双足机器人设计的驱动选型,本质是在扭矩密度、反驱能力和控制带宽之间做取舍。常见方案有三类:准直驱、行星减速加同步带、谐波减速。准直驱反驱好、控制带宽高,但同等体积下扭矩密度低,适合髋 roll、踝 roll 这类需要柔顺的轴;行星加减速成本低、维护方便,但背隙要控制,适合膝和踝 pitch;谐波减速扭矩密度高、背隙小,但冲击敏感、价格高,适合髋 pitch 这类大扭矩轴。没有一种方案能通吃。

三条红线要先算再选。第一条是连续扭矩:关节连续扭矩不超过电机额定扭矩乘减速比再乘 0.7,剩下 30% 留给温升和摩擦。第二条是峰值扭矩:峰值不超过连续扭矩的 1.8 到 2.2 倍,且持续时间控制在 1 秒以内,否则驱动器会先于电机保护。第三条是背隙:脚端误差约等于关节背隙乘腿长,背隙 0.2 度、腿长 0.6 米时脚端误差约 2 毫米;如果背隙到 0.5 度,脚端误差超过 5 毫米,落脚点规划会开始漂。

减速比不是越大越好。减速比大,扭矩上去了,但关节最大转速被压下来,摆动腿跟不上步频;同时反驱变差,脚触地时的冲击更容易传到减速器。验证样机常用 20 到 50 的减速比,髋 pitch 可以取高一些,踝 roll 取低一些。选完做一次“末端误差预算”:编码器分辨率、减速比背隙、连杆柔性、脚底橡胶压缩各占多少毫米,合计不要超过脚掌长度的 5%。超过就先改机械,不要指望控制器补。

2.3 关节参数表与质量分布校核

把选型结果落成一张关节表,是双足机器人设计从草图走向制造的关键一步。表里至少要有轴名、运动范围、连续扭矩、峰值扭矩、减速比、编码器位数和故障阈值。下面给一张验证样机的示例表,数值只用于说明格式,实际要按你的整机质量和腿长重算。

关节轴范围连续扭矩峰值扭矩减速比编码器备注
髋pitch-80° 到 80°35 N·m75 N·m4017 bit前后摆腿
髋roll-25° 到 25°25 N·m55 N·m3017 bit侧向重心转移
髋yaw-40° 到 40°15 N·m35 N·m2517 bit转向
膝pitch0° 到 120°40 N·m85 N·m4517 bit抬脚与缓冲
踝pitch-35° 到 35°20 N·m45 N·m2016 bit蹬地
踝roll-20° 到 20°12 N·m28 N·m1816 bit侧向修正

质量分布要同步校核。以一台身高 1.1 米、整机 25 公斤的样机为例:躯干加电池 10 公斤,大腿各 3 公斤,小腿各 1.5 公斤,脚各 0.5 公斤,头部和线束 2 公斤。质心高度控制在 0.55 米左右,脚掌长 0.24 米、宽 0.12 米。单腿支撑时,质心投影到支撑脚中心的距离不要超过脚掌长度方向的 40%,否则踝关节要额外付出很大扭矩去“拽”回来。

校核步骤可以按这个顺序走:先用电子秤逐段称重,记录每个连杆的质心和转动惯量;再把质量表填进单腿支撑静力矩计算,算出髋 pitch 和踝 pitch 的静态扭矩;然后乘 1.5 到 2.0 的动态系数,和关节表里的连续扭矩对一遍;最后留 10% 的余量给线束、散热器和后续加装传感器。不要用整机总重乘腿长拍脑袋,误差会大到让膝电机频繁过流。

注意:质量表不是一次填完就结束。每加一个散热片、每换一版脚底橡胶,都要回填。双足机器人设计里,质心偏移 10 毫米,步态参数可能就要重调一轮。

3. 步态状态机与落脚点规划:双足机器人设计里最先翻车的环节

3.1 支撑相/摆动相的状态机骨架

双足机器人设计的步态状态机,最怕写成“到时间就切”。时间只能做粗调度,真正决定切换的是足底接触和关节跟踪误差。一个够用的骨架包含五个状态:双支撑、左支撑右摆动、右支撑左摆动、触地确认、异常回退。双支撑占周期 10% 到 20%,支撑相占 50% 到 60%,摆动相占 30% 到 40%。周期从 0.7 秒起步,步高 0.04 到 0.06 米,步长 0.10 到 0.15 米。

状态切换条件要写清楚:从双支撑进入左支撑,需要右腿髋 pitch 到达离地阈值、右足底力低于 20% 体重;从摆动进入触地确认,需要足底力超过 30% 体重并保持 20 毫秒,同时踝 pitch 跟踪误差小于 5 度。触地确认不是“碰到就算”,而是“碰到并稳住”。没有这个确认态,脚掌会在触地瞬间反复弹跳,状态机跟着抖,这就是后面要排查的典型问题。

摆动轨迹不要用直线插值。直线抬脚会让膝关节在离地和触地时速度突变,冲击直接传到减速器。常见做法是五次多项式或摆线:水平方向从当前落脚点到目标落脚点平滑过渡,垂直方向在中间 40% 周期达到最高点,离地和触地时垂直速度为零。参数上,抬脚高度不要超过脚掌长度的 30%,否则单腿支撑时间变长,侧向稳定性变差。

状态机还要有异常回退:关节跟踪误差超过 15 度、IMU 横滚角超过 10 度、足底力持续 50 毫秒低于阈值,都进入“收腿站立”而不是继续走。回退动作要简单:双腿微屈、步宽收窄、重心降低,先稳住再停机。别在异常时还尝试迈一步“救回来”,验证样机上这一步往往是最后一次迈步。

3.2 线性倒立摆与落脚点递推

双足机器人设计的落脚点规划,常用线性倒立摆做骨架。把整机质心当成倒立摆的摆锤,质心高度 z0 取 0.55 米,重力加速度 g 取 9.81,则自然频率 ω 等于根号下 g 除以 z0,约 4.22 rad/s。质心水平加速度和质心位置、支撑点位置的关系可以写成简化式:x 的二阶导等于 ω 的平方乘 x 减 p,p 是支撑点。这个式子不追求精确,它的价值是告诉你:质心速度越大,落脚点越要往前放。

捕获点是个好用的中间量:捕获点等于质心位置加质心速度除以 ω。步长 0.15 米、周期 0.7 秒时,质心速度大约 0.21 米每秒,捕获点会比质心位置前移约 0.05 米。落脚点不能直接等于捕获点,还要加一个偏置,偏置通常取 0.02 到 0.04 米,用来补偿脚掌尺寸和触地冲击。落脚点还要限幅:单步不要超过脚掌长度的 80%,连续两步的落脚点变化不要超过 0.05 米,否则摆动腿来不及跟踪。

递推步骤可以这样落地:先由当前质心位置和速度算捕获点;再用捕获点加偏置得到期望落脚点;然后和当前脚掌位置做差,限幅后送给摆动腿轨迹生成;最后用足底力估计实际支撑点,回填到下一次递推。这里的关键不是公式多漂亮,而是每个周期都用实测质心状态修正,而不是开环跑一条预录轨迹。开环轨迹在仿真里很稳,上机后地面稍微不平就会累积偏差。

提示:质心速度不要直接用关节角差分。关节编码器噪声经过差分会被放大,常见做法是用 IMU 加关节运动学做估计,再低通滤波,截止频率 20 到 30 赫兹。

3.3 参数扫掠表:步长、步高、周期怎么配

步态参数不要一次性全调。双足机器人设计里,步长、步高、周期三个量互相耦合:步长变大,质心速度变大,落脚点要前移;步高变大,单腿支撑时间变长,侧向力矩变大;周期变短,关节角速度上升,跟踪误差变大。建议先固定周期和步高,只扫步长;再固定步长,扫步高;最后调周期。每次只动一个参数,记录跌倒次数、足底滑动量、膝关节峰值扭矩和 IMU 横滚振荡。

组别步长步高周期观察重点
A0.10 m0.05 m0.7 s基础稳定性
B0.15 m0.05 m0.7 s落脚点是否漂移
C0.15 m0.07 m0.7 s膝关节峰值扭矩
D0.15 m0.05 m0.6 s关节跟踪误差与振荡
E0.12 m0.05 m0.8 s单腿支撑时间与侧向偏移

扫掠时看四个指标:连续走 20 步的跌倒次数、脚掌触地后 200 毫秒内的滑动距离、膝关节峰值扭矩是否超过限幅的 80%、IMU 横滚角速度是否出现等幅振荡。步长每增加 0.02 米,落脚点偏置加 0.005 米左右;步高每增加 0.01 米,摆动相时间加 5% 左右;周期缩短 0.1 秒,关节速度限幅要重新核对。不要迷信“仿真里能走 0.3 米步长”,实机脚底橡胶和地面冲击会把有效步长打回原形。

4. 控制器分层:从关节PD到全身力矩分配的双足机器人设计落地

4.1 三层控制环:规划、稳定、关节伺服

双足机器人设计的控制器,建议分成三层,别把所有逻辑塞进一个循环。规划层 50 到 100 赫兹,负责步态状态机、落脚点和摆动轨迹;稳定层 200 到 500 赫兹,负责质心状态估计、姿态补偿和关节期望修正;关节伺服层 1 到 2 千赫兹,负责每个关节的 PD 加前馈。三层之间只传期望值、实测值和状态字,不传大段轨迹,避免通信抖动。

层级典型频率输入输出关键参数
规划层50 到 100 Hz步态命令、足底接触落脚点、摆动轨迹步长、步高、周期
稳定层200 到 500 HzIMU、关节角、足底力关节期望修正量姿态增益、质心偏置
关节伺服1 到 2 kHz期望角、前馈力矩电流/力矩指令Kp、Kd、限幅

延迟预算要提前算:IMU 采样到稳定层不超过 5 毫秒,稳定层到关节伺服不超过 2 毫秒,关节伺服到电流环不超过 1 毫秒。总延迟超过 10 毫秒,姿态环增益就上不去,走路会像踩在棉花上。常见坑是规划层算得太重,一次循环 30 毫秒,状态机切换滞后,脚已经触地了还在发摆动指令。规划层里不要放复杂优化,能查表就查表。

稳定层的输出不是直接改关节角,而是加修正量:横滚角偏差乘以增益,加到髋 roll 和踝 roll 的期望上;俯仰角偏差加到踝 pitch 和髋 pitch 上;质心速度偏差通过落脚点偏置修正。修正量要限幅,单周期不超过 3 度,否则会和关节伺服打架。关节伺服层只认最终期望角和前馈力矩,不再做步态判断。

4.2 关节PD参数整定的顺序

关节 PD 整定不要从整机行走开始。双足机器人设计的血泪经验是:单关节没过关,整机调参就是黑匣子。顺序是单关节空载、单关节带载、单腿支撑、双腿站立、低速行走。每一步都看阶跃响应:超调小于 10%,调节时间小于 50 毫秒,稳态误差在 1 度以内。达不到就降 Kp 或加 Kd,别急着上积分。

下面给一组验证样机的起步参数,单位是牛米每弧度,实际要按减速比、电机 torque constant 和连杆惯量重算。

关节Kp 起步Kd 起步限幅备注
髋 pitch80 到 1502 到 5峰值扭矩 80%先加前馈
髋 roll60 到 1202 到 4峰值扭矩 70%侧向修正
膝 pitch100 到 2003 到 6峰值扭矩 80%触地缓冲
踝 pitch40 到 801 到 3峰值扭矩 70%蹬地
踝 roll30 到 601 到 2峰值扭矩 60%易受噪声影响

整定顺序里,Kp 先给到能稳住重力负载的最小值,再逐渐加;Kd 从 0 开始,每次加 0.5,直到出现高频噪声就退回上一档。积分项在关节伺服里尽量不用,双足触地冲击会让积分饱和,抬脚时出现“黏住”现象。前馈力矩用重力补偿加惯性补偿,比例从 0.5 开始,看电流峰值是否下降;如果前馈加上去电流反而变大,说明模型符号或质心参数错了。

注意:Kd 对编码器噪声非常敏感。编码器分辨率 17 位、关节速度由差分得到时,Kd 过大直接把噪声放大成电流尖峰,驱动器会先报过流。

4.3 仿真到实机的接口表

仿真到实机最怕单位不一致和符号不一致。双足机器人设计的接口表要逐项写清:信号名、仿真单位、实机单位、正方向、量程、滤波截止频率、故障阈值。关节角仿真里常用弧度,实机驱动器可能回传脉冲数;力矩仿真里是关节侧,实机可能是电机侧,要乘减速比和效率。IMU 的横滚、俯仰正方向也要和控制器约定一致,否则姿态修正会越修越歪。

信号仿真单位实机单位正方向滤波故障阈值
关节角radrad逆时针为正200 Hz 低通跟踪误差 15°
关节角速度rad/srad/s同上100 Hz 低通超过 8 rad/s
关节力矩N·mN·m伸为正500 Hz峰值 90% 限幅
IMU 姿态radrad抬头为正50 Hz横滚 10°
足底力NN压为正100 Hz单脚低于 20 N

上实机前先做悬空测试:整机吊起来,脚不触地,发低速摆动指令,看关节是否跟踪、方向是否一致、急停是否有效。再做单腿支撑测试:一条腿踩地,另一条腿慢速抬起,看踝 roll 修正方向。最后才落地走。每次测试只改一个接口,改完记录旧值和新值。不要一上来就闭环走全程,翻车一次可能换减速器。

5. 双足机器人设计避坑排查:五条从仿真到样机的血泪记录

5.1 现象一:仿真走得稳,上机就前倾

现象很典型:仿真里连续走 100 步不跌,实机第一次落地走三步就往前栽,而且越加速越明显。原因通常不是控制器,而是模型参数和零位。整机实际质心比仿真靠前 10 到 20 毫米,关节零位又有 2 到 3 度偏差,两者叠加,稳定层每周期都在往一个方向修,修到限幅就前倾。地面刚度和脚底橡胶压缩也会让有效腿长变短,支撑点比模型更靠前。

解决顺序:先称重并重新测质心,把电池和线束的位置如实填进模型;再逐个关节做零位标定,用直角尺或水平仪确认机械零位,软件零位偏差记录到 0.1 度;然后把脚底橡胶压缩量加到有效腿长里,通常 2 到 3 毫米;最后把行走速度降到仿真值的 70%,先看前 10 步的质心偏差方向。如果偏差一直往一个方向累积,优先查零位和质心,不要先加姿态增益。

5.2 现象二:脚掌打滑导致落脚点漂移

现象是走了十几步后,脚掌每次触地都往前滑一点,落脚点越来越偏,最后状态机还在按原计划迈步,实际支撑点已经偏出脚掌。原因有三个:脚底摩擦不够、触地时水平速度没归零、支撑相速度控制把脚往后推。脚底橡胶硬度太高、地面有灰、脚掌面积偏小,都会让摩擦系数掉到 0.4 以下。触地瞬间摆动腿还有 0.1 米每秒的前向速度,冲击会把脚掌“推”出去。

解决:先换软一点的脚底橡胶,脚掌前后各留 10 毫米边缘,增加有效接触面积;再把摆动轨迹的触地段水平速度压到接近零,触地前 50 毫秒做减速;支撑相不要用位置控制硬顶,改成速度前馈加力矩限幅,让脚掌有一点顺应;最后用足底力变化率做滑动检测,连续两个周期检测到滑动就把步长缩 20%。打滑不是靠提高 Kp 能解决的,越硬顶越滑。

5.3 现象三:膝关节过流保护频繁触发

现象是站立没事,一抬腿或一触地,膝关节驱动器就报过流,复位后又能走两步。原因常见于三类:减速比选小了,峰值扭矩不够;触地缓冲太硬,Kp 给得高,冲击电流直接顶到限幅;前馈力矩符号或比例错了,重力补偿反而在帮倒忙。膝关节在触地瞬间承受的峰值扭矩可能是静态支撑扭矩的 2 倍以上,选型时只按静态算就会踩坑。

解决:先把膝关节峰值扭矩限幅降到连续扭矩的 1.5 倍,观察是否还触发;再把触地阶段的 Kp 降到行走阶段的 60%,Kd 适当加一点做阻尼;然后检查前馈力矩方向,用手轻推小腿,看电流是否抵抗重力;最后核对减速比和电机额定扭矩,如果连续扭矩余量不到 20%,别靠控制器硬撑,换减速比或换电机。过流保护是最后一道防线,频繁触发说明机械选型或缓冲策略已经不对。

5.4 现象四:IMU姿态角延迟引发振荡

现象是站立时轻微前后晃,频率大概 2 到 3 赫兹,越调姿态增益晃得越厉害。原因通常是 IMU 姿态角滤波截止频率太低,或者 IMU 时间戳和关节控制周期不同步。姿态角延迟 20 毫秒,稳定层看到的“当前姿态”其实是 20 毫秒前的,增益一高就相位滞后,形成等幅振荡。IMU 安装松动也会让高频振动混进姿态角。

解决:先把姿态滤波截止频率从 20 赫兹提到 50 赫兹,看振荡是否减弱;再把 IMU 采样和控制周期做硬件时间戳对齐,稳定层只用带时间戳的数据;然后检查 IMU 安装面,加防松垫片,线束留缓冲;最后把姿态增益降到原来的 60%,逐步加回去。不要用提高控制频率来掩盖延迟,延迟没消掉,频率越高越容易把噪声当姿态。

5.5 现象五:状态机在触地瞬间抖振

现象是脚刚触地,状态机在“摆动”和“触地确认”之间来回跳,关节发出咔哒声,足底力曲线像锯齿。原因是触地判据太单一:只用足底力超过阈值,脚掌弹跳一次就掉到阈值以下,状态机立刻退回摆动,下一次又触发。双支撑切换时间太短也会加剧抖振。这个坑在硬地面和软地面表现还不一样。

解决:触地判据改成“足底力超过 30% 体重并保持 20 毫秒”,加滞回:进入触地确认用 30% 体重,退出用 15% 体重;同时叠加踝 pitch 跟踪误差小于 5 度的条件,防止脚掌碰到障碍物误触发;状态切换加 20 毫秒去抖定时器;双支撑时间从 10% 周期加到 15%。抖振消掉后,再逐步缩短确认时间,不要一上来就追求快速切换。

6. 双足机器人设计的验收清单:用三组实验判断方案值不值得投入

6.1 静态支撑与单腿摆动测试

先做静态支撑:双腿站立 30 秒,记录质心漂移、踝 roll 修正量、膝关节电流。质心漂移控制在 5 毫米以内,踝 roll 修正不超过 3 度,膝关节电流不超过连续限幅的 50%,说明重力补偿和零位基本对。再做单腿摆动:一条腿支撑,另一条腿以 0.5 赫兹抬脚 10 次,步高 0.05 米,观察支撑腿踝 roll 是否振荡、状态机是否误触发。10 次里触发保护超过 1 次,就先别走。

6.2 扰动恢复与连续行走测试

扰动恢复用轻推:站在软垫上,从侧向和前后各推 3 次,力度以整机晃动但不倒为准,记录恢复时间和最大横滚角。恢复时间超过 1.5 秒,或者横滚角超过 8 度,说明稳定层增益或踝 roll 扭矩不够。连续行走测试走 20 步,记录跌倒次数、足底滑动、膝关节峰值扭矩、IMU 横滚角速度。峰值扭矩超过限幅 80% 的步数占比大于 10%,就把步长缩 10% 再测。

6.3 用表格记录:每次改动只动一个参数

验收记录不要写“调好了”,要写清旧值、新值和结果。下面这张表是我习惯用的格式,每次只填一行,避免同时改步高和 Kp 这种后悔药都来不及吃的操作。

日期参数旧值新值20 步跌倒膝峰值扭矩备注
第 1 轮步长0.15 m0.12 m1 次降到 0 次72% 降到 61%先保守
第 2 轮步高0.05 m0.06 m0 次61% 升到 68%可接受
第 3 轮膝 Kp1601400 次68% 降到 63%触地更软

我吃过一次同时改步高和膝关节 Kp 的亏,结果跌倒次数没降,反而不知道是哪一个参数起的作用,只能整组回退重来。后来就养成习惯:一次只动一个参数,记录旧值、新值和三项指标,指标变差就退回上一行。双足机器人设计没有一键稳定的玄学,能复现的表格比记忆可靠。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进