4. 步态规划:Trot、Walk、Bound 与切换逻辑
步态规划,说白了就是决定四条腿什么时候抬、什么时候落。很多新手一上来就调 PID,结果狗子站都站不稳——其实问题往往出在步态上。我个人习惯先把步态逻辑理清楚,再去碰底层控制。
四足机器人的步态,核心就三个参数:占空比(一条腿支撑相占整个周期的比例)、相位差(腿与腿之间的时间偏移)、步频(每秒走几步)。不同的组合,就产生了不同的步态。
4.1 Trot 步态——最常用的“对角线小跑”
Trot 步态,就是对角线腿成对运动。左前+右后为一组,右前+左后为另一组。两组交替支撑和摆动。这是四足机器人最经典、最稳定的动态步态。
关键参数:
- 占空比:0.5(每条腿一半时间支撑,一半时间摆动)
- 相位差:0.5(两组之间错开半个周期)
- 步频:2~4 Hz(视机器人尺寸而定)
我在项目中遇到过一个问题:Trot 步态跑起来之后,机身会左右摇晃。后来发现是支撑相切换时,重心转移不够平滑。解决办法是在支撑相末尾加一段“双支撑”过渡,让重心先移到新支撑腿上,再抬另一条。
4.2 Walk 步态——低速下的“静稳定”选择
Walk 步态,就是四条腿依次抬起、落下,任何时候至少有三条腿在地上。这种步态是静稳定的——即使突然断电,机器人也不会倒。
关键参数:
- 占空比:0.75(每条腿 75% 时间支撑,25% 时间摆动)
- 相位差:0.25(四条腿依次错开 1/4 周期)
- 抬腿顺序:左后→左前→右后→右前(常见的一种)
Walk 步态适合在崎岖地面、狭窄空间或者需要精确定位的场景。缺点就是慢。你想想看,如果让狗子用 Walk 步态跑起来,那画面会非常滑稽——四条腿倒腾得飞快,但速度就是上不去。
4.3 Bound 步态——高速下的“跳跃式”奔跑
Bound 步态,就是前腿一组、后腿一组,两组交替触地。这其实是四足动物在高速奔跑时的常用步态,比如兔子、猎豹。
关键参数:
- 占空比:0.3~0.4(支撑相很短,摆动相很长)
- 相位差:0.5(前后两组错开半个周期)
- 特点:存在“腾空期”——四条腿同时离地
Bound 步态对动力学要求很高。因为存在腾空期,落地时的冲击力会很大。我曾经在仿真里跑 Bound,结果落地瞬间关节力矩直接爆表,电机冒烟(仿真里冒烟,哈哈)。后来加了落地缓冲控制,才稳住。
| 步态 | 速度 | 稳定性 | 占空比 | 适用场景 |
|---|---|---|---|---|
| Trot | 中速 | 动态稳定 | 0.5 | 平坦地面、常规行走 |
| Walk | 低速 | 静稳定 | 0.75 | 崎岖地面、精确定位 |
| Bound | 高速 | 动态稳定(有腾空) | 0.3~0.4 | 平坦地面、高速奔跑 |
4.4 步态切换逻辑——从走到跑,平滑过渡
步态切换,是实际部署中最容易出问题的地方。直接从一个步态跳到另一个,机器人会像触电一样抽搐。原因很简单:切换瞬间,腿的位置、速度、加速度都不连续。
我常用的切换策略是相位插值法。具体来说:
- 检测到切换指令后,记录当前步态的相位和足端位置。
- 在下一个周期内,逐步将相位偏移和占空比过渡到目标步态。
- 过渡时间一般设 0.5~1 个步态周期。
举个例子,从 Trot 切换到 Bound:
- Trot 的占空比是 0.5,Bound 是 0.3。不能直接跳,要每步减少 0.05,花 4 步完成。
- 相位差也要同步调整。Trot 是对角线成对,Bound 是前后成对。这个变化要平滑。
- 足端轨迹的抬腿高度也要渐变。Trot 抬得低,Bound 抬得高。
下面这张图是我自己画的步态切换状态机,你可以参考一下:
4.5 步态参数在线调整
实际部署时,步态参数不能写死。我一般会在上位机里开一个参数接口,允许运行时调整:
- 步频: 根据遥控器油门值线性映射
- 抬腿高度: 根据地面的崎岖程度自动调整(用 IMU 和足端力传感器判断)
- 占空比: 根据速度指令自动切换(低速用高占空比,高速用低占空比)
最后说一句,步态规划没有银弹。Trot、Walk、Bound 各有各的脾气。我的建议是:先在仿真里把三种步态都跑通,然后重点调好 Trot 到 Bound 的切换——这是实际部署中最常用的场景。等你把切换逻辑调顺了,剩下的就是细节打磨了。