双足机械人稳定性方法
双足机器人保持稳定,本质上是在不断解决一个问题:
机器人怎么移动身体和双脚,使自己产生的力矩不会把自己“掀翻”。
如果你正在学双足/人形机器人,可以先建立下面这套框架:
状态估计 → 稳定性判断 → 落脚规划 → 全身控制 → 电机执行 → 状态反馈
1. 最基础:重心不能乱跑
机器人站在地面上时,脚与地面形成一个支撑区域 Support Polygon。





双脚站立时,支撑区域比较大:
COM
↓
┌────●─────────┐
│ 左脚 右脚 │
└──────────────┘
如果机器人身体倾斜:
COM
↓
┌──────────────┐ ●
│ 支撑区域 │
└──────────────┘
就可能倒下。
但这里要注意:“重心投影在支撑面内”主要适用于静态或准静态理解。
机器人真正走起来以后,还必须考虑惯性。
2. 走起来以后:ZMP
所以双足机器人里面非常经典的概念就是:
ZMP(Zero Moment Point,零力矩点)
简单理解:
地面对机器人产生的合力作用效果,可以用地面上的一个关键点来描述。
传统 ZMP 稳定控制希望:
[
p_{ZMP}\in Support\ Polygon
]
ZMP 越靠近支撑区域边缘,一般稳定裕度越小。
例如机器人向前走:
身体
● COM
↓
左脚 右脚
┌────┐ ┌────┐
│ZMP ● │ │
└────┘ └────┘
↑
当前支撑脚
因此你以后看到论文里的:
CoM / CoP / ZMP / Support Polygon
基本都是双足稳定控制里的核心概念。
3. 为什么机器人走路必须“提前动身体”?
假设机器人准备迈右腿。
最开始:
左脚 右脚
███ ███
↑
共同支撑
右脚要离地之前,机器人通常需要调整身体状态,让左腿能够承担支撑任务:
COM →
●
左脚 右脚
███ ███
支撑 准备抬起
然后:
●
COM
左脚 右脚
███ ↑
支撑脚 摆动脚
最后右脚落地,再进行支撑切换。
所以走路实际上是一个周期:
双脚支撑 → 重心/动量调整 → 单脚支撑 → 摆腿 → 落脚 → 双脚支撑 → 换脚
4. 现代机器人不只是靠 ZMP
如果你以后研究 Unitree G1、H1、Atlas 这一类动态人形机器人,仅仅理解 ZMP 就不够了。
现代方法经常使用:
LIPM + MPC
先把复杂的人形机器人简化成线性倒立摆模型 LIPM:
● COM
/|
/ |
/ | h
/ |
─────●──────────── ground
ZMP
一个经典关系是:
[
\ddot{x}=\frac{g}{h}(x-p)
]
其中:
-
(x):CoM 水平位置
-
(p):ZMP
-
(h):CoM 高度
-
(g):重力加速度
这意味着:
机器人可以通过控制落脚点/ZMP以及身体运动,控制 CoM 的动态。
然后使用 MPC(Model Predictive Control):
根据未来几百毫秒甚至更长时间的运动趋势,提前计算接下来身体怎么动、脚应该踩在哪里。
5. 被人推一下怎么办?
这个问题特别能体现双足稳定控制。
机器人突然受到:
[
F_{external}
]
例如:
→→→ 推
●
/|\
/ \
██ ██
机器人一般有三个层次的恢复策略。
第一层:Ankle Strategy(踝关节策略)
轻微扰动时:
身体倾斜
↓
踝关节产生补偿力矩
↓
身体恢复
类似人站着轻轻晃一下,并不会马上迈步。
第二层:Hip Strategy(髋关节策略)
扰动更大:
身体要倒
↓
髋部快速运动
↓
改变身体角动量
↓
恢复平衡
第三层:Stepping Strategy(迈步策略)
如果推得太狠:
原来的支撑区域已经救不回来了。
机器人就必须:
重新计算落脚点 → 快速迈一步 → 建立新的支撑区域。
这和人被猛推一下以后下意识向前跨一步是一样的。
6. Capture Point 很重要
这里你就会遇到另一个双足机器人核心概念:
Capture Point
简单说:
机器人现在如果要避免倒下,下一脚应该踩在哪里?
LIPM 下常见形式:
[
\xi=x+\frac{\dot{x}}{\omega_0}
]
其中:
[
\omega_0=\sqrt{\frac{g}{h}}
]
所以:
[
\xi=x+\dot{x}\sqrt{\frac{h}{g}}
]
这很好理解。
机器人身体向前运动越快:
[
\dot{x}\uparrow
]
Capture Point 就越靠前。
所以人快要向前摔倒的时候,会本能地往前跨一大步。
7. 真正机器人怎么知道自己快倒了?
这就进入状态估计 State Estimation。
机器人通常综合:
-
IMU:身体姿态、角速度、加速度
-
关节编码器:关节位置/速度
-
足底力传感器:脚受到的力
-
六维力传感器:(F_x,F_y,F_z,M_x,M_y,M_z)
-
电机信息
-
有时还有视觉、LiDAR
例如 IMU 检测到:
[
pitch = 8^\circ
]
同时:
[
\dot{pitch}>0
]
足底压力中心又开始向脚尖移动。
控制器就可以判断:
机器人正在向前失稳。
然后立即产生补偿动作。
8. 最后还有一层:WBC
MPC可能告诉机器人:
CoM 应该往这里走,左脚应该产生多少地面反作用力,右脚下一步踩这里。
但机器人真正有:
[
q_1,q_2,...,q_n
]
几十个关节。
所以还需要:
Whole-Body Control(WBC,全身控制)
把:
CoM目标 + 足端目标 + 身体姿态 + 接触约束 + 地面反作用力
转换成:
各个关节的力矩/位置目标。
最后才到:
[
\tau_1,\tau_2,\cdots,\tau_n
]
交给电机执行。
把整个稳定系统串起来
你可以把双足机器人稳定控制记成这一张逻辑图:
IMU
↓
关节编码器 → 状态估计 ← 足底力传感器
↓
当前机器人状态
q, dq, CoM
↓
稳定性/动力学模型
ZMP / LIPM / CP
↓
MPC
┌──────┴──────┐
↓ ↓
CoM规划 落脚点规划
└──────┬──────┘
↓
WBC
↓
关节力矩/位置
↓
电机
↓
机器人
↓
与地面产生作用力
↓
传感器重新测量
↺
所以,双足稳定不是某一个 PID 就能解决的,而是一个闭环系统。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)