JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

有意识地向前倾倒:零力矩点、倒立摆模型与会飞或会潜的机器人

行走人形机器人背后的平衡数学——零力矩点与倒立摆技巧——以及对完全离开地面的机器人的一次巡礼。

行走是一场你不断接住的跌倒

把你下一步的动作放慢来看。你抬起一只脚,身体向前倾,有那么一瞬间你是真的在跌倒——直到摆动的脚落地把你接住。然后你再来一次。这正是双足行走里藏着的秘密:它不是一连串稳定姿势,而是一次次受控的跌倒,每次都恰好被地面接住。一个想在每一瞬间都安全的机器人,会让质心始终压在双脚上方、缓缓挪动,就像幼儿扶着家具走路。那叫静态稳定。而流畅、接近人类节奏的行走依靠的则是动态稳定——机器人有意地短暂失衡,再通过运动把自己救回来。

如果机器人一直处于半跌倒状态,它的控制器怎么知道下一步是会救它,还是会让它摔个四脚朝天?它需要一个单一、可测量的量,告诉它「你还在安全范围之内」。这个量就落在地面上、脚的下方——它正是本篇的核心。

零力矩点:地板上的一个点

想象一下所有压在机器人脚上的力——它的重量、摆动肢体的推拉、身体的动量——然后问:地面上是否存在某一个点,让所有想让脚翻转的倾覆力矩刚好彼此抵消?确实存在,它叫做零力矩点(ZMP)。在这个点上,地面只需要笔直向上托住,没有多余的、想把脚翻到边缘上的扭矩。

整个判据用一句话就能说清:只要零力矩点保持在支撑多边形之内——也就是脚底、或双脚之间那块地面——脚就会平贴地面,机器人不会倾倒。一旦零力矩点跑到脚的边缘,脚就开始翻滚,跌倒随之开始。于是行走控制器的任务变得近乎一目了然:调动腿和躯干,让零力矩点在每一刻都稳稳留在脚印之内。

在实际中,机器人不必去猜零力矩点在哪。脚掌里的压力传感器,或脚踝处的力/力矩传感器,直接测量地面反作用力,躯干里的惯性测量单元(IMU)则报告身体如何倾斜与加速。控制器据此每秒多次算出实时的零力矩点,并微调动作让它保持居中。

倒立摆:把难的部分扔掉

知道零力矩点规则是一回事,规划出一整段遵守这条规则的步态又是另一回事。人形机器人有几十个关节,每个都有自己的质量和运动——要实时求解完整动力学非常残酷。于是工程师用一个漂亮的简化来「作弊」:假装整个机器人就是一根无重量杆子顶端平衡着的一个重物,杆子底端钉在地面上。这就是倒立摆模型。想想在手掌上立一把扫帚:扫帚就是机器人的整个身体,你的手掌就是它的脚。

为什么这是一笔划算的交换?因为这个摆抓住了平衡中唯一要紧的东西——质心如何在脚上方摆动——同时丢掉了每条肢体的繁琐细节。常见的一种版本让质心保持在恒定高度,这使方程变成线性的,快到足以在机器人迈步途中就解出来。控制器规划每一步落在哪里、身体在步与步之间该如何摆动,从而让零力矩点沿着脚印画出一条安全的路径。

stance foot pinned to ground
         o   <- center of mass (one lumped weight)
        /
       /     tip angle theta
      /
   __/__   <- foot; ZMP must stay within this patch

rule of thumb (linear inverted pendulum):
  accel_of_CoM  ~  (g / height) * horizontal_offset_of_CoM
  -> lean a little forward  -> you start to fall forward
  -> plant the next foot ahead -> you catch the fall
身体被简化为脚上方一根杆子顶端的重物:前倾以跌倒,向前迈步以接住。

离开地面:会飞和会潜的机器人

并非每个机器人都是站在重力上与之对抗的。无人飞行器靠把空气往下推来托住自己。最为人熟知的设计是四旋翼:四个固定的螺旋桨,没有可倾转的桨叶,没有舵面。它完全靠改变每个旋翼的转速来操纵。四个都转快一点,它就爬升;让一侧的两个转慢,它就向那一侧滚转。偏航是巧妙之处:相邻旋翼旋转方向相反,它们的反扭矩平时相互抵消,于是让朝一个方向旋转的那一对加速、另一对减速,就留下一个净反扭矩,把整架机器转起来。和行走的人形机器人一样,四旋翼本质上是不稳定的——放任不管它就会翻滚——所以靠一个惯性测量单元和快速的反馈控制每秒数百次地纠正它的姿态。

现在反过来——向下,进入水中。自主水下航行器(AUV)面对的是同一个问题的颠倒版本。水会以浮力把它顶回去,因此 AUV 可以把自身配平、近乎失重地悬停,再用螺旋桨向前滑行,或用小推进器转向。有些滑翔器几乎完全不用马达:它们略微改变浮力以下沉和上浮,再用机翼把这种竖直运动转化为向前的行进,从而能在海洋里漫游数月之久。陆地上那套关于脚和支撑多边形的规则,在这里根本不适用。

每一种运动模式下的同一个问题

退一步看,整座运动方式的「动物园」就坍缩成一个问题:我该如何推挤这个世界,才能去到我想去的地方?轮子靠摩擦推挤路面。腿式运动中的腿以一次次离散的蹬地推挤地面,而零力矩点告诉它每一次蹬地能否让它保持直立。旋翼推挤空气。推进器推挤水。介质在变,安全稳定的判据也在变——这里是支撑多边形,那里是姿态控制,水下则是浮力配平——但底层的交易始终如一:用力去换取运动。

这也正是为什么同一套工具箱在本主线中反复出现。估计你的状态,决定支撑力该作用在何处,再命令执行器把它实现——无论这个「实现」指的是让零力矩点保持在人形机器人脚下,还是让四旋翼在阵风中保持水平。掌握了这个循环,你就能把任何机器人——行走的、飞行的还是潜水的——都读作同一个优雅想法的变体。