足式与人形机器人基础
腿能去轮子去不了的地方,代价是机器人没有了"固定的底座":躯干悬浮着,唯一能推它的外力是脚底的地面反力,而且脚只能推、不能拉,还要受摩擦锥的限制。这一节从支撑多边形讲起,看地面力如何成为驱动躯干的唯一通道,再用线性倒立摆、零力矩点(ZMP)和捕获点把"走路"理解成可控的、有节奏的摔倒,最后看四足的步态。走路的本质,是用脚去推一个你无法直接驱动的身体,同时不让它倒下。
1为什么机器人需要它
轮子需要一条路,腿只需要一个个落脚点:台阶、碎石、楼梯、灾后废墟,只有足式机器人进得去;人形机器人更是希望直接使用为人类设计的世界。但是腿把机械臂里没有的三个难题带了进来:
- 身体是"浮动"的。机械臂的底座拧在桌上,关节一转末端就动。足式机器人的躯干(浮动基座)没有被任何东西固定,它的位姿属于 \(SE(3)\)(7.2 节),其中 6 个自由度没有电机:关节力矩只能通过脚底的接触力,间接地推动躯干。
- 接触是间歇的、单向的。脚只能推地,不能拉地(法向力 \(\ge 0\));切向力还不能超过摩擦锥(8.4 节)。每迈一步,脚离地、落地,接触模式就切换一次。
- 平衡不是目标,是约束。静止的机械臂不会倒;站着的人形机器人像竖在指尖的一支笔,没有控制就在零点几秒内倒下。
这一节要建立一套最小的"足式直觉工具箱":支撑多边形(什么时候不用动也不会倒)、浮动基座上的力与力矩平衡(脚到底能给躯干什么)、线性倒立摆与 ZMP / 捕获点(怎样走、怎样被推了还不倒)、步态(四足怎样安排脚的节奏)。真实的足式控制器(Part IV 的 MPC 与全身控制,Part VI 的强化学习)都建立在这些概念之上。
2直觉:支撑多边形与"只能通过脚去推"
静态稳定:质心要落在脚围成的区域里
把机器人摆在地上,所有脚底接触点的凸包叫支撑多边形。只要质心(COM)沿重力方向在地面上的投影落在支撑多边形内,机器人静止就不会倒;投影越过某条边,它就绕这条边翻倒。投影点到最近边的距离叫稳定裕度。四足站立时多边形很大;抬起一条腿,它变成三角形,质心必须先挪进三角形;双足时多边形只是两只脚和它们之间的区域。
斜坡会"移动"投影点:质心高度为 \(h\)、坡度为 \(\alpha\) 时,重力方向的投影相对于"沿坡面法向"的投影向下坡方向偏移 \(h\tan\alpha\),所以重心越高,在斜坡上越容易翻。同时,沿坡面下滑的趋势 \(\tan\alpha\) 超过摩擦系数 \(\mu\) 时,脚会打滑,这时翻倒之前先滑倒(8.4 节)。
- 平地上四足站立:把质心拖到支撑多边形外面(裕度 \(<-2\) cm)。哪条边是翻倒轴?
- 选"抬左前"(或任何一条腿)。质心在中心时裕度是多少?把它挪进三角形,使裕度 \(>2\) cm。
- 四足着地,质心沿法向的位置在多边形里(裕度 \(>2\) cm),只靠加大坡度让紫点出界。再试试把质心高度降下来。
脚只能推,不能拉:地面反力是躯干唯一的"手"
支撑多边形只回答"静止时倒不倒"。要回答"能不能走起来、跑起来",必须问:脚能给躯干什么力?每只脚给出一个地面反力 \(\mathbf f_i\),它受两条约束:法向分量 \(f_z\ge0\)(单向),切向分量 \(|f_x|\le\mu f_z\)(摩擦锥,半角 \(\arctan\mu\),8.4 节)。把所有脚的力加起来,再加上重力,就是整个机器人的牛顿–欧拉方程(8.2 节):
左边是整台机器人质心的加速度和绕质心的角动量变化率(所有关节力矩都是内力,在求和中抵消了,所以式子里没有 \(\boldsymbol\tau\))。右边只有脚上的力。这就是"躯干只能通过脚被推动"的数学形式。下图是矢状面(侧视图)里的两只脚:拖动脚尖的力手柄,力被自动投影到摩擦锥内(最近点投影,1.9 节)。紫色箭头是躯干受到的净力 \(m\ddot{\mathbf c}\),琥珀色弧线是绕质心的净力矩。想让机器人静止,力要满足 \(\sum f_z=mg\)、\(\sum f_x=0\) 和力矩为零。
- 让机器人静止:\(|a_x|,|a_z|<0.03\,g\) 且 \(|\alpha|<5\) rad/s²。可以手动拖,也可以按"求解"(目标加速度 0)。
- 把目标前向加速度设为 \(0.4\,g\) 并求解成功。躯干为什么没有绕水平轴转起来?看 CoP 跑到了哪里:水平力在质心下方产生的力矩要由 CoP 后移来抵消,\(x_{\text{CoP}}=-h\,a_x/g\)。
- 把目标前向加速度设到比 \(\mu\) 大 0.05 以上并求解:为什么无解?(提示:摩擦锥是凸的,两个锥内的力之和仍在锥内。)再把质心高度升高,哪个限制先起作用?(提示:看 CoP 需要移到哪里。)
足式机器人的躯干不能被直接驱动:它的加速度由 \(\sum\mathbf f_i\) 和 \(\sum(\mathbf p_i-\mathbf c)\times\mathbf f_i\) 决定,而 \(\mathbf f_i\) 又被限制在摩擦锥里。因此质心水平加速度不可能超过 \(\mu(g+a_z)\),质心也只能在脚能"够到"的范围内被推动。整个足式运动控制,就是在这些约束下选择脚的位置、时刻和力。
3动手玩:把走路当作"有节奏地摔倒"
现在加上动力学。假设质心保持恒定高度 \(z_c\)、腿没有质量、不考虑绕质心的角动量变化,那么质心的水平运动满足一个线性方程,叫线性倒立摆模型(LIPM):
\(p\) 是脚下的支撑点(即 ZMP,下文解释)。对人形机器人 \(z_c\approx0.85\) m,\(\omega\approx3.4\ \mathrm{s^{-1}}\),时间常数 \(1/\omega\approx0.3\) s:质心偏离脚 \(x-p\),会以这个时间常数指数地"飞离"。走路就是每隔一步换一个支撑点,让质心在落到下一只脚上方时刚好被接住。下图让一个 LIPM 行走器按这个规则连续迈步:每一步结束时,把新脚放在 \(p_{\text{new}}=\hl{dcm}{\xi_{\text{end}}}-b\) 处(\(\xi=x+\dot x/\omega\) 是下文的"捕获点",\(b\) 由期望速度和步时决定,见"再看数学")。拖动滑块改变质心高度、步时和期望速度。
- 把期望速度调到 \(\ge1.0\) m/s 并走满 3 步。读数里的步长 \(L=vT\) 变成多少?质心的相图轨道有什么变化?
- 把期望速度调到 0,让行走器停下来(\(|\dot x|<0.03\) m/s 且在脚正上方)。它是怎么停的?看相图里的点沿哪条流形收敛。
LIPM 只有一个不稳定模态:质心相对于脚的位置和速度,只有组合 \(\xi=x+\dot x/\omega\) 会指数发散,另一个组合 \(x-\dot x/\omega\) 自己收敛。所以走路只需要控制一个量 \(\xi\):每一步选好落脚点,让下一步开始时的 \(\xi\) 恰好是想要的值。其余的(位置、速度的另一个自由度)会自动衰减。
4第二个视角:被推了怎么办?捕获点
站着的机器人被突然推了一把,质心得到速度 \(\dot x_0\)。捕获点(Pratt 等 2006,也叫发散分量 DCM)\(\xi=x+\dot x/\omega\) 回答:"脚落在哪里,机器人才会恰好停在那只脚上方?"答案就是 \(p=\xi\):因为 \(\dot\xi=\omega(\xi-p)\),脚放在 \(\xi\) 处,\(\xi\) 就不再变化,\(x\) 以时间常数 \(1/\omega\) 收敛到 \(\xi\)。但迈步需要时间 \(t_s\),这段时间里 \(\xi\) 仍在以 \(e^{\omega t_s}\) 增长,所以实际要落的位置是 \(\xi(t_s)=\xi_0e^{\omega t_s}\)。
脚能够到的范围有限(腿长、关节限位),于是出现捕获区域:推得不太狠时,只靠踝关节的力矩把 ZMP 移到脚尖就够了("踝策略",\(\xi_0\) 落在脚的范围内);更大的推力要迈步("迈步策略");再大,脚够不到 \(\xi(t_s)\),就一定倒。这就是人被推时会下意识迈出一步的原因:脚太小,踝策略的容量只有几厘米。
- 先试直觉做法:按"落在质心正下方",然后"推"。机器人停得住吗?为什么 \(\xi\) 不等于脚的位置就停不住?
- 按"落在捕获点"再推:质心应当恰好停在脚的正上方。再把推力 \(\Delta v\) 加大,直到 \(\xi(t_s)\) 超出可达范围(红色)。
时间视角:\(x(t)-p\) 是 \(e^{\omega t}\) 和 \(e^{-\omega t}\) 的组合,发散的那一项系数是 \(\tfrac12(\xi_0-p)\)。相平面视角(FIG 3):状态沿双曲线运动,稳定流形是唯一会走向脚下的路。捕获点视角(FIG 4):把发散的那个方向单独拿出来当作一个坐标 \(\xi\),脚放在 \(\xi\) 就关掉了发散。三者数学上完全等价,但第三个最适合设计控制器:只有一个量要管。
5再看数学
提示:把鼠标悬停在公式中带底色的符号(\(p\)、\(\xi\))上,FIG 3 中对应的元素会被高亮。
线性倒立摆的推导与假设
取矢状面,\(x\) 向前、\(z\) 向上。整台机器人质量为 \(m\),质心在 \((x,z)\),地面反力的合力 \(\mathbf F=(F_x,F_z)\) 作用在地面上的一点 \(p\)(压力中心 CoP)。牛顿–欧拉方程给出 \(F_x=m\ddot x\),\(F_z=m(\ddot z+g)\),合力对质心的力矩等于角动量变化率 \(\dot H\)(逆时针为正):
这就是 ZMP(零力矩点)的表达式:它是地面上那一点,在它上面,重力与惯性力的合力矩的水平分量为零。LIPM 做了四个假设:(1) 质量集中在质心;(2) 质心高度恒定,\(z=z_c\),\(\ddot z=0\);(3) 腿无质量(摆动腿不影响质心);(4) \(\dot H\approx0\)。代入即得
闭式解可以直接代回方程验证,FIG 3 的读数把它与 RK4 数值积分比较(一步之内差在 \(10^{-10}\) m 以下)。\(E\) 叫轨道能量:\(\dot E=\dot x\ddot x-\omega^2(x-p)\dot x=0\),所以在一步之内相平面轨迹是双曲线。\(E>0\) 说明质心会越过脚正上方继续前进,\(E<0\) 说明会在越过之前折返,\(E=0\) 恰好是两条流形。两条路得到同一个方程:对"刚性腿长 \(\ell\) 的摆",\(x=\ell\sin\theta\),\(\ddot\theta=\tfrac g\ell\sin\theta\),小角度下 \(\sin\theta\approx\theta\)(2.4 节的线性化)给出 \(\omega=\sqrt{g/\ell}\);LIPM 的"恒高度"假设则不要求角度小,但要求腿能伸缩来保持高度。
ZMP、CoP 与摩擦锥的关系
平地上,各接触点的法向力 \(f_{z,i}\ge0\),压力中心是它们的加权平均:
凸组合必定落在接触点的凸包内,所以真实的 CoP 永远在支撑多边形里;平地上 ZMP 与 CoP 重合。FIG 2 的读数用 \(\sum x_if_{z,i}/\sum f_{z,i}\) 和上面的 ZMP 公式(其中 \(\dot H\) 取脚力对质心的合力矩)各算一遍:两者在代数上等价,差值只是浮点误差,它检验的是公式与代码一致,并不是一次独立的测量。如果某个运动"需要"的 ZMP 在多边形之外,那个点只是一个虚构的 ZMP:真实的 CoP 会停在边上,多出来的力矩变成绕这条边的角加速度,脚开始滚动,机器人开始翻倒。ZMP 条件只管法向力的单向性(\(f_z\ge0\));切向力的限制是另一个独立的条件,即 \(\|\mathbf f_t\|\le\mu f_z\),另外还有绕竖直轴的摩擦力矩(偏航)。ZMP 在脚内,不保证不打滑。
捕获点(DCM)与步长规划
令 \(\xi=x+\dot x/\omega\),则 \(\dot\xi=\dot x+\ddot x/\omega=\dot x+\omega(x-p)=\omega\big(\hl{dcm}{\xi}-p\big)\),同时 \(\dot x=-\omega(x-\xi)\)。所以 \(\xi\) 的方程是一个独立的一阶不稳定系统,而 \(x\) 只是它的一个低通滤波后的跟随者。单支撑相内
周期步态:要求每一步开始时相对新脚的状态相同,且每步前进 \(L\)、历时 \(T\)。设开始时 \(x_0\)、\(\dot x_0\)(相对脚),结束时 \(x_T\)、\(\dot x_T\)。周期性要求 \(x_T-L=x_0\),\(\dot x_T=\dot x_0\),解得 \(x_0=-L/2\),\(\dot x_0=\tfrac{\omega L}{2}\coth\tfrac{\omega T}{2}\)(FIG 3 的行走器正是从这组初值出发的,两个条件都成立到 \(10^{-16}\))。平均速度 \(v=L/T\);轨道能量 \(E=\tfrac12\omega^2(L/2)^2/\sinh^2(\omega T/2)\)。每步开始时相对新脚的捕获点是 \(b=\xi_{0}=\tfrac L2(\coth\tfrac{\omega T}{2}-1)\),因此 DCM 落脚规则是
这一步把下一步开始时的 \(\xi\) 精确设成目标值(对不稳定模态是"一步到位"的),稳定模态每步以因子 \(e^{-\omega T}\approx0.2\) 衰减,所以 FIG 3 改变速度后两三步就进入新的周期步态。期望速度为 0 时 \(b=0\),规则变成 \(p=\xi\),正是捕获点。
浮动基座的动力学,为什么前 6 行没有驱动
7.2 节:浮动基座机器人的构型是 \(q=({}^{W}T_{B},\boldsymbol\theta)\in SE(3)\times\mathbb R^n\)(速度 \(\dot q\) 取 \(6+n\) 维:基座 twist 与关节速度)。8.3 节的运动方程加上接触力,写成
\(S^\top\boldsymbol\tau\) 的前 6 个分量恒为 0:电机只作用在关节上。所以前 6 行(基座方向)是 \(M_{bb}\dot{\mathbf v}_b+M_{b\theta}\ddot{\boldsymbol\theta}+h_b=\sum_iJ_{c,i,b}^{\top}\mathbf f_i\):基座加速度只能通过摆动关节带来的惯性耦合和接触力改变。接触力本身又由 \(J_c\dot{\mathbf v}+\dot J_c\mathbf v=0\)(脚不滑动)这类约束和关节力矩共同决定(8.4 节)。把前 6 行写成整体的力与力矩(所有关节的内力抵消),就得到 \(\sum_i\mathbf f_i+m\mathbf g=m\ddot{\mathbf c}\) 与 \(\dot{\mathbf h}_G=\sum_i(\mathbf p_i-\mathbf c)\times\mathbf f_i\)(加上脚上的接触力矩):这是质心动力学(centroidal dynamics)。地面力能产生的净 wrench(7.6 节)构成一个凸锥 \(\{\sum_iG_i\mathbf f_i:\mathbf f_i\in\mathcal F_i\}\),足式 MPC 和全身控制就是在这个锥里选 \(\mathbf f_i\)(Part IV,可写成 QP,6.8 节)。
Raibert 启发式、SLIP 与能量
Raibert(1986)的单腿跳跃机用一条朴素的规则平衡速度:脚落在"中性点" \(\dot x\,T_s/2\) 前方,再加一个速度反馈项,\(x_{\text{foot}}=\dot x\,\tfrac{T_s}{2}+k(\dot x-\dot x_{\text{des}})\),\(T_s\) 是支撑时间。形式上它和 DCM 落脚规则是近亲。把腿换成弹簧,就得到跑步的模型 SLIP(弹簧加载倒立摆):质心在支撑相像在弹簧上弹跳,腾空相是抛体。LIPM 的支撑相不做功(\(E\) 不变);真实机器人落脚时有碰撞损失、蹬地时补充能量,被动行走机(McGeer 1990)则靠斜坡上的重力势能补回。
6机器人中的它:四足步态与真实系统
四足动物(和四足机器人)按固定的节奏轮流抬腿,这个节奏叫步态。每条腿在一个周期里有一段支撑相(脚在地上,占周期的比例叫占空比 \(\beta\))和一段摆动相,四条腿的周期之间错开一定的相位。下图左上是步态图(Hildebrand 图):每行一条腿,实心是支撑,空白是摆动;左下画出每个时刻支撑多边形能给出的最大静态稳定裕度(多边形内最大内切圆的半径);右侧是俯视动画:实心圆是支撑脚,空心圆是摆动脚,紫环是理想的静态质心位置(质心在身体里,所以机器人必须在迈步之前先晃动身体,把质心挪过去)。
- 选"步行",把占空比 \(\beta\) 从 0.8 往下调:低于多少时,周期里开始出现只有 2 只脚着地的瞬间?为什么恰好是这个数?(提示:4 只脚的相位等间隔 1/4。)
- 选"小跑":\(\beta=0.5\) 时任何时刻都恰有 2 只脚(一条对角线)着地,裕度为 0。把 \(\beta\) 调到 0.5 以下,会出现什么新阶段?
四足:Boston Dynamics Spot、ANYbotics ANYmal、Unitree Go/B 系列、MIT Mini Cheetah。传统路线是"MPC + 全身控制":用质心动力学(带摩擦锥的接触力)做预测,再用全身控制器把期望的足力变成关节力矩(MIT Cheetah 3 的凸 MPC,Di Carlo 等 2018)。近年盲走式四足大量改用强化学习(Hwangbo 等 2019;Lee 等 2020):在仿真里训练策略,直接输出关节目标,再迁移到实机(sim-to-real,Part VI)。人形:本田 ASIMO 和日本产业技术综合研究所(AIST)的 HRP 系列都基于 ZMP 走路,其中 HRP 用预观控制(Kajita 等 2003),是 2000 年代的标志;Boston Dynamics 的 Atlas 用优化控制,近年又转向电动版本;Agility Robotics 的 Cassie / Digit(弹性腿,常用 RL 控制器)、Unitree H1 / G1、Tesla Optimus 等也在这条线上。执行器:高性能的腿多用准直驱(低减速比、大转矩电机)带来可反向驱动、对外力"透明"的腿,让接触力可以靠电流直接估计和控制(9.4 节)。状态估计:躯干位姿无法直接测量,要融合 IMU 和腿部里程计(Kalman 滤波,4.8 节与 Part IV)。被动行走机(McGeer 1990)则提醒我们:合适的机械结构本身就能在斜坡上不加控制地走起来。
7常见误区
它只是静态稳定的充分条件。走路的机器人大部分时间质心投影在多边形之外(双足行走时单脚的多边形根本放不下质心),能走起来靠的是动态稳定:用 ZMP 或捕获点这类包含速度的量判断。反过来也成立:质心在多边形里但速度很大,一样会冲出去。FIG 3 里质心经常飘到脚外,却不会倒,因为 \(\xi\) 被每一步控制住了。
四条假设:集中质量、恒高度、无质量腿、\(\dot H\approx0\),在真实机器人上都只是近似。腿重(占整机质量的 20% 以上并非罕见)而且摆得快时,摆动腿的惯性力会明显影响质心;快步行走和跑步需要大幅度的竖直运动,恒高度假设失效;全身(手臂、躯干)的俯仰、侧滚角动量变化 \(\dot H\) 会在 ZMP 公式里多出 \(\dot H/(mg)\) 一项;另外,摆动腿还会产生绕竖直轴的偏航角动量,只能靠脚底的摩擦力矩抵抗,人形机器人摆臂正是为了抵消这部分偏航角动量。LIPM 适合做规划的"骨架",之后要用全身模型去修正。
ZMP 在脚内只保证法向力没有"拉"地面,不保证脚不滑。湿滑地面、快速转向或急停时需要的水平力 \(|F_x|\le\mu F_z\) 先被突破,脚就滑了,捕获点要求的"快速迈一大步"同样需要摩擦。FIG 2 里水平加速度的上限 \(\mu(g+a_z)\) 对所有足式机器人成立,与控制器多聪明无关。
真实的 CoP 永远在支撑多边形内。由运动算出来的 ZMP 跑到外面,说明这个运动不能实现:实际的 CoP 会饱和在边上,缺失的力矩使躯干转动。它是一个"需要多少力矩"的度量,不是地面上真有这个压力点。也正因为如此,稳定性判据要用 ZMP 与边之间的距离(裕度)而不是"在不在里面"这个布尔值。
小跑时只有一条对角线的两只脚着地(FIG 5:多边形退化成线段,最好的裕度也是 0),\(\beta<0.5\) 时还有腾空相。它之所以不倒,是因为下一对对角脚在恰当的时刻接住了质心,是动态稳定。这也意味着急停是个问题:在小跑的中途突然冻结,机器人会绕那条对角线翻倒。真实控制器必须规划"怎么停",例如逐步过渡到步行或用捕获点式的落脚。
8小练习
9延伸阅读
- S. Kajita, F. Kanehiro, K. Kaneko, K. Yokoi & H. Hirukawa, The 3D Linear Inverted Pendulum Mode: A simple modeling for a biped walking pattern generation, IROS 2001 — LIPM 的经典出处
- S. Kajita, F. Kanehiro, K. Kaneko, K. Fujiwara, K. Harada, K. Yokoi & H. Hirukawa, Biped walking pattern generation by using preview control of zero-moment point, ICRA 2003 — ZMP 预观控制,ASIMO / HRP 时代的核心方法
- M. Vukobratović & B. Borovac, Zero-Moment Point — Thirty Five Years of its Life, Int. J. Humanoid Robotics 1(1), 2004 — ZMP 的定义、历史与争议
- J. Pratt, J. Carff, S. Drakunov & A. Goswami, Capture Point: A Step toward Humanoid Push Recovery, Humanoids 2006 — 捕获点与推力恢复
- J. Englsberger, C. Ott & A. Albu-Schäffer, Three-dimensional bipedal walking control based on divergent component of motion, IEEE Trans. Robotics 31(2), 2015 — DCM 在三维行走控制中的推广
- M. Raibert, Legged Robots That Balance, MIT Press, 1986 — 单腿跳跃机与"落脚点反馈"启发式
- P. M. Wensing, M. Posa, Y. Hu, A. Escande, N. Mansard & A. Del Prete, Optimization-Based Control for Dynamic Legged Robots, IEEE Trans. Robotics 40, 2024 (arXiv 2022) — 足式机器人的 MPC 与全身控制综述,Part IV 的预习材料
- E. R. Westervelt, J. W. Grizzle, C. Chevallereau, J. H. Choi & B. Morris, Feedback Control of Dynamic Bipedal Robot Locomotion, CRC Press, 2007 — 混合零动态与虚拟约束,另一条严格的双足控制路线
- T. McGeer, Passive Dynamic Walking, Int. J. Robotics Research 9(2), 1990 — 不用电机的行走
- S. Kajita et al., Introduction to Humanoid Robotics, Springer, 2014 — LIPM、ZMP 和人形机器人控制的系统教材