双足机器人保持稳定,本质上是在不断解决一个问题:

机器人怎么移动身体和双脚,使自己产生的力矩不会把自己“掀翻”。

如果你正在学双足/人形机器人,可以先建立下面这套框架:

状态估计 → 稳定性判断 → 落脚规划 → 全身控制 → 电机执行 → 状态反馈


1. 最基础:重心不能乱跑

机器人站在地面上时,脚与地面形成一个支撑区域 Support Polygon

Image

Image

Image

Image

Image

双脚站立时,支撑区域比较大:

     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 就能解决的,而是一个闭环系统。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐