Part II · 第 9 章 机器人形态 · 9.2Part II · Ch. 9 Embodiments · 9.2

足式与人形机器人基础Legged & Humanoid Basics

腿能去轮子去不了的地方,代价是机器人没有了"固定的底座":躯干悬浮着,唯一能推它的外力是脚底的地面反力,而且脚只能推、不能拉,还要受摩擦锥的限制。这一节从支撑多边形讲起,看地面力如何成为驱动躯干的唯一通道,再用线性倒立摆、零力矩点(ZMP)和捕获点把"走路"理解成可控的、有节奏的摔倒,最后看四足的步态。走路的本质,是用脚去推一个你无法直接驱动的身体,同时不让它倒下。 Legs reach places wheels cannot, at a price: the robot loses its fixed base. The trunk floats, the only external force that can push it is the ground reaction at the feet, and feet can only push, never pull, within a friction cone. This lesson starts from the support polygon, shows how contact forces become the only channel to the trunk, then uses the linear inverted pendulum, the zero-moment point (ZMP) and the capture point to read walking as controlled, rhythmic falling, and finishes with quadruped gaits. Walking is pushing with your feet on a body you cannot drive directly, without letting it fall.

约 35 分钟~35 min 前置:2.5 常微分方程 · 2.4 泰勒展开 · 1.9 投影 · 7.2 构型空间 · 7.6 静力学与 wrench · 8.4 接触与摩擦Prereqs: 2.5 ODEs · 2.4 Taylor · 1.9 Projection · 7.2 Configuration Space · 7.6 Statics & Wrenches · 8.4 Contact & Friction 5 个交互5 interactives

    1为什么机器人需要它Why robots need this

    轮子需要一条路,腿只需要一个个落脚点:台阶、碎石、楼梯、灾后废墟,只有足式机器人进得去;人形机器人更是希望直接使用为人类设计的世界。但是腿把机械臂里没有的三个难题带了进来:

    • 身体是"浮动"的。机械臂的底座拧在桌上,关节一转末端就动。足式机器人的躯干(浮动基座)没有被任何东西固定,它的位姿属于 \(SE(3)\)(7.2 节),其中 6 个自由度没有电机:关节力矩只能通过脚底的接触力,间接地推动躯干。
    • 接触是间歇的、单向的。脚只能推地,不能拉地(法向力 \(\ge 0\));切向力还不能超过摩擦锥(8.4 节)。每迈一步,脚离地、落地,接触模式就切换一次。
    • 平衡不是目标,是约束。静止的机械臂不会倒;站着的人形机器人像竖在指尖的一支笔,没有控制就在零点几秒内倒下。

    这一节要建立一套最小的"足式直觉工具箱":支撑多边形(什么时候不用动也不会倒)、浮动基座上的力与力矩平衡(脚到底能给躯干什么)、线性倒立摆与 ZMP / 捕获点(怎样走、怎样被推了还不倒)、步态(四足怎样安排脚的节奏)。真实的足式控制器(Part IV 的 MPC 与全身控制,Part VI 的强化学习)都建立在这些概念之上。

    A wheel needs a road; a leg needs only a sequence of footholds: stairs, rubble, rocks, disaster sites are reachable only by legged robots, and humanoids would let robots use a world built for people. But legs bring three difficulties that a manipulator never had:

    • The body is "floating". An arm's base is bolted to the table, so turning a joint moves the tip. A legged robot's trunk (the floating base) is held by nothing; its pose lives in \(SE(3)\) (Lesson 7.2), and 6 of its degrees of freedom have no motor: joint torques can only move the trunk indirectly, through contact forces at the feet.
    • Contact is intermittent and one-sided. A foot can push on the ground but not pull (normal force \(\ge 0\)), and its tangential force must stay inside the friction cone (Lesson 8.4). Every step lifts a foot and puts it down, switching the contact mode.
    • Balance is a constraint, not a goal. A resting arm does not fall over; a standing humanoid is like a pencil balanced on a fingertip and topples within a fraction of a second without control.

    This lesson builds a minimal legged-locomotion toolbox: the support polygon (when does a robot not fall even if it does nothing?), force and moment balance on a floating base (what can the feet actually give the trunk?), the linear inverted pendulum with ZMP and the capture point (how to walk, and how to survive a push), and gaits (how four legs share the rhythm). Real legged controllers (MPC and whole-body control in Part IV, reinforcement learning in Part VI) are built on these ideas.

    2直觉:支撑多边形与"只能通过脚去推"Intuition: the support polygon, and "you can only push through your feet"

    静态稳定:质心要落在脚围成的区域里Static stability: keep the COM over the area the feet enclose

    把机器人摆在地上,所有脚底接触点的凸包叫支撑多边形。只要质心(COM)沿重力方向在地面上的投影落在支撑多边形内,机器人静止就不会倒;投影越过某条边,它就绕这条边翻倒。投影点到最近边的距离叫稳定裕度。四足站立时多边形很大;抬起一条腿,它变成三角形,质心必须先挪进三角形;双足时多边形只是两只脚和它们之间的区域。

    斜坡会"移动"投影点:质心高度为 \(h\)、坡度为 \(\alpha\) 时,重力方向的投影相对于"沿坡面法向"的投影向下坡方向偏移 \(h\tan\alpha\),所以重心越高,在斜坡上越容易翻。同时,沿坡面下滑的趋势 \(\tan\alpha\) 超过摩擦系数 \(\mu\) 时,脚会打滑,这时翻倒之前先滑倒(8.4 节)。

    Put the robot on the ground. The convex hull of all foot contact points is the support polygon. As long as the ground projection of the center of mass (COM) along gravity lies inside it, the robot stays up at rest; once the projection crosses an edge, the robot rotates about that edge and tips. The distance from the projection to the nearest edge is the stability margin. A standing quadruped has a large polygon; lifting a leg turns it into a triangle and the COM must first move into the triangle; for a biped the polygon is just the two feet and the strip between them.

    A slope shifts the projection: with the COM at height \(h\) over a slope of angle \(\alpha\), the projection along gravity is displaced downhill by \(h\tan\alpha\) relative to the projection along the surface normal, so the higher the COM, the sooner the robot tips on a slope. Meanwhile the downhill pull \(\tan\alpha\) exceeding the friction coefficient \(\mu\) makes the feet slide, so the robot slips before it tips (Lesson 8.4).

    FIG 1支撑多边形与稳定裕度(俯视图)Support polygon and stability margin (top view)
    俯视图,图中的平面就是地面(坡面),\(x\) 向前。拖动脚(圆圈)和质心手柄(琥珀色)。琥珀点是质心沿坡面法向的位置;紫点是沿重力方向的投影 \(\mathbf c-h\tan\alpha\,\hat{\mathbf u}\),稳定性看紫点。多边形为绿色表示稳定,红色表示紫点出界,最近的边(翻倒轴)加粗。\(\hat{\mathbf u}=(\cos\psi,\sin\psi)\) 是上坡方向。双足模式下每只脚是 22×10 cm 的矩形。 Top view; the plane is the ground (or slope) and \(x\) points forward. Drag the feet (circles) and the COM handle (amber). The amber dot is the COM along the surface normal; the purple dot is its projection along gravity, \(\mathbf c-h\tan\alpha\,\hat{\mathbf u}\), and stability is judged by the purple dot. The polygon is green when stable and red when the purple dot is outside, and the nearest edge (the tipping axis) is thickened. \(\hat{\mathbf u}=(\cos\psi,\sin\psi)\) is the uphill direction. In biped mode each foot is a 22×10 cm rectangle.
    试一试Try this
    • 平地上四足站立:把质心拖到支撑多边形外面(裕度 \(<-2\) cm)。哪条边是翻倒轴?Standing on four feet on flat ground, drag the COM outside the support polygon (margin \(<-2\) cm). Which edge is the tipping axis?
    • 选"抬左前"(或任何一条腿)。质心在中心时裕度是多少?把它挪进三角形,使裕度 \(>2\) cm。Select "lift LF" (or any leg). What is the margin with the COM at the center? Move it into the triangle until the margin is \(>2\) cm.
    • 四足着地,质心沿法向的位置在多边形里(裕度 \(>2\) cm),只靠加大坡度让紫点出界。再试试把质心高度降下来。On four feet with the amber COM inside the polygon (margin \(>2\) cm), push the purple dot out purely by increasing the slope. Then lower the COM height and try again.

    脚只能推,不能拉:地面反力是躯干唯一的"手"Feet can only push: ground reaction is the trunk's only "hand"

    支撑多边形只回答"静止时倒不倒"。要回答"能不能走起来、跑起来",必须问:脚能给躯干什么力?每只脚给出一个地面反力 \(\mathbf f_i\),它受两条约束:法向分量 \(f_z\ge0\)(单向),切向分量 \(|f_x|\le\mu f_z\)(摩擦锥,半角 \(\arctan\mu\),8.4 节)。把所有脚的力加起来,再加上重力,就是整个机器人的牛顿–欧拉方程(8.2 节):

    The support polygon only answers "does it fall when standing still?". To ask whether the robot can walk or run, we must ask what the feet can give the trunk. Each foot supplies a ground reaction force \(\mathbf f_i\) with two constraints: normal component \(f_z\ge0\) (one-sided) and tangential component \(|f_x|\le\mu f_z\) (the friction cone with half-angle \(\arctan\mu\), Lesson 8.4). Add up all the foot forces plus gravity and you have the Newton–Euler equations of the whole robot (Lesson 8.2):

    $$ m\,\ddot{\mathbf c} \;=\; \sum_i \mathbf f_i + m\mathbf g, \qquad \dot{\mathbf h}_G \;=\; \sum_i (\mathbf p_i - \mathbf c)\times \mathbf f_i . $$

    左边是整台机器人质心的加速度和绕质心的角动量变化率(所有关节力矩都是内力,在求和中抵消了,所以式子里没有 \(\boldsymbol\tau\))。右边只有脚上的力。这就是"躯干只能通过脚被推动"的数学形式。下图是矢状面(侧视图)里的两只脚:拖动脚尖的力手柄,力被自动投影到摩擦锥内(最近点投影,1.9 节)。紫色箭头是躯干受到的净力 \(m\ddot{\mathbf c}\),琥珀色弧线是绕质心的净力矩。想让机器人静止,力要满足 \(\sum f_z=mg\)、\(\sum f_x=0\) 和力矩为零。

    The left side is the acceleration of the whole robot's COM and the rate of change of its angular momentum about the COM (every joint torque is an internal force and cancels in the sum, so no \(\boldsymbol\tau\) appears). The right side contains only forces at the feet. That is the mathematical form of "the trunk can only be pushed through the feet". The figure shows two feet in the sagittal plane (a side view): drag the force handles at the foot tips and each force is automatically projected into the friction cone (nearest-point projection, Lesson 1.9). The purple arrow is the net force on the trunk, \(m\ddot{\mathbf c}\); the amber arc is the net moment about the COM. To stand still the forces must satisfy \(\sum f_z=mg\), \(\sum f_x=0\) and zero moment.

    FIG 2地面力、摩擦锥与躯干的净力和力矩Ground forces, friction cones and the net force and moment on the trunk
    力以体重 \(mg\) 为单位(0.7 m 长的箭头对应 1 个体重)。绿色箭头是地面反力,半透明扇形是摩擦锥(半角 \(\arctan\mu\))。拖动脚(地面上的圆圈)改变落脚点,拖动箭头尖端改变力。"求解"按钮用交替投影(在力平衡的仿射子空间与两个摩擦锥之间来回投影)找一组满足目标加速度的力,找不到就报告不可行。角加速度按等效回转半径 \(\rho=0.25\) m 计算:\(\alpha=M/(m\rho^2)\)。 Forces are in body weights \(mg\) (an arrow 0.7 m long ↔ 1 body weight). Green arrows are ground reactions and the translucent wedges are friction cones (half-angle \(\arctan\mu\)). Drag a foot (circle on the ground) to move the footfall, and an arrow tip to change its force. "Solve" uses alternating projections (back and forth between the affine subspace of force balance and the two friction cones) to find forces that produce the target acceleration, and reports infeasibility if none exist. Angular acceleration uses an effective radius of gyration \(\rho=0.25\) m: \(\alpha=M/(m\rho^2)\).
    • 让机器人静止:\(|a_x|,|a_z|<0.03\,g\) 且 \(|\alpha|<5\) rad/s²。可以手动拖,也可以按"求解"(目标加速度 0)。Make the robot stand still: \(|a_x|,|a_z|<0.03\,g\) and \(|\alpha|<5\) rad/s². Drag by hand, or press "Solve" with a target acceleration of 0.
    • 把目标前向加速度设为 \(0.4\,g\) 并求解成功。躯干为什么没有绕水平轴转起来?看 CoP 跑到了哪里:水平力在质心下方产生的力矩要由 CoP 后移来抵消,\(x_{\text{CoP}}=-h\,a_x/g\)。Set the target forward acceleration to \(0.4\,g\) and solve successfully. Why does the trunk not pitch? Look where the CoP goes: the moment of the horizontal force below the COM must be cancelled by moving the CoP backward, \(x_{\text{CoP}}=-h\,a_x/g\).
    • 把目标前向加速度设到比 \(\mu\) 大 0.05 以上并求解:为什么无解?(提示:摩擦锥是凸的,两个锥内的力之和仍在锥内。)再把质心高度升高,哪个限制先起作用?(提示:看 CoP 需要移到哪里。)Set the target forward acceleration more than 0.05 above \(\mu\) and solve: why is there no solution? (Hint: a friction cone is convex, so the sum of forces inside cones stays inside the cone.) Then raise the COM height: which limit bites first? (Hint: where must the CoP go?)
    核心洞见Key insight

    足式机器人的躯干不能被直接驱动:它的加速度由 \(\sum\mathbf f_i\) 和 \(\sum(\mathbf p_i-\mathbf c)\times\mathbf f_i\) 决定,而 \(\mathbf f_i\) 又被限制在摩擦锥里。因此质心水平加速度不可能超过 \(\mu(g+a_z)\),质心也只能在脚能"够到"的范围内被推动。整个足式运动控制,就是在这些约束下选择脚的位置、时刻和力。

    A legged robot's trunk cannot be driven directly: its acceleration is set by \(\sum\mathbf f_i\) and \(\sum(\mathbf p_i-\mathbf c)\times\mathbf f_i\), and each \(\mathbf f_i\) is confined to a friction cone. Hence the horizontal COM acceleration can never exceed \(\mu(g+a_z)\), and the COM can only be pushed within what the feet can reach. All of legged control is choosing where, when and how hard to push, under these constraints.

    3动手玩:把走路当作"有节奏地摔倒"Play: walking as rhythmic, controlled falling

    现在加上动力学。假设质心保持恒定高度 \(z_c\)、腿没有质量、不考虑绕质心的角动量变化,那么质心的水平运动满足一个线性方程,叫线性倒立摆模型(LIPM):

    Now add dynamics. Assume the COM keeps a constant height \(z_c\), the legs are massless, and the angular momentum about the COM does not change. Then the horizontal COM motion obeys a linear equation, the linear inverted pendulum model (LIPM):

    $$ \ddot x \;=\; \omega^2\,\big(x - \hl{zmp}{p}\big),\qquad \omega=\sqrt{g/z_c}. $$

    \(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\) 由期望速度和步时决定,见"再看数学")。拖动滑块改变质心高度、步时和期望速度。

    \(p\) is the support point under the foot (the ZMP, explained below). For a humanoid, \(z_c\approx0.85\) m, \(\omega\approx3.4\ \mathrm{s^{-1}}\) and the time constant \(1/\omega\approx0.3\) s: a COM displaced by \(x-p\) from the foot "flies away" exponentially with that time constant. Walking means switching the support point every step so that the COM is caught just as it arrives over the next foot. The figure runs an LIPM walker with that rule: at the end of each step the new foot goes to \(p_{\text{new}}=\hl{dcm}{\xi_{\text{end}}}-b\) (\(\xi=x+\dot x/\omega\) is the "capture point" below, and \(b\) depends on the desired speed and step time; see "The math"). Drag the sliders to change the COM height, step time and desired speed.

    FIG 3线性倒立摆行走与相图Linear inverted pendulum walking and its phase portrait
    侧视图(相机跟随质心)SIDE VIEW (camera follows the COM)
    相图:相对当前支撑脚的 (x−p, ẋ)PHASE PORTRAIT: (x−p, ẋ) relative to the stance foot
    琥珀色球是质心,粗灰线是支撑腿,绿色三角是 ZMP(= 支撑点 \(p\)),紫色菱形是捕获点 \(\xi\),青色虚圈是下一步落脚目标。相图中绿色虚线是稳定流形 \(\dot x=-\omega(x-p)\),红色虚线是不稳定流形 \(\dot x=+\omega(x-p)\),琥珀色双曲线是当前步的轨迹(\(E\) 为常数的曲线),暗淡的是前几步;换脚时 \(x-p\) 向左跳变一个步长。读数中"闭式 − RK4"是 \(x(t)\) 的解析解与数值积分之差。 The amber ball is the COM, the thick gray line the stance leg, the green triangle the ZMP (= support point \(p\)), the purple diamond the capture point \(\xi\), and the cyan dashed ring the next foothold. In the phase portrait the green dashed line is the stable manifold \(\dot x=-\omega(x-p)\), the red dashed line the unstable manifold \(\dot x=+\omega(x-p)\), the amber hyperbola the current step (a level set of \(E\)) and the faded arcs earlier steps; at each foot switch \(x-p\) jumps left by one step length. In the readout "closed form − RK4" is the difference between the analytic solution for \(x(t)\) and a numerical integration.
    • 把期望速度调到 \(\ge1.0\) m/s 并走满 3 步。读数里的步长 \(L=vT\) 变成多少?质心的相图轨道有什么变化?Raise the desired speed to \(\ge1.0\) m/s and let it take 3 steps. What does the step length \(L=vT\) become, and how does the phase orbit change?
    • 把期望速度调到 0,让行走器停下来(\(|\dot x|<0.03\) m/s 且在脚正上方)。它是怎么停的?看相图里的点沿哪条流形收敛。Set the desired speed to 0 and let the walker come to rest (\(|\dot x|<0.03\) m/s, directly above the foot). How does it stop? Watch which manifold the phase point converges along.
    核心洞见Key insight

    LIPM 只有一个不稳定模态:质心相对于脚的位置和速度,只有组合 \(\xi=x+\dot x/\omega\) 会指数发散,另一个组合 \(x-\dot x/\omega\) 自己收敛。所以走路只需要控制一个量 \(\xi\):每一步选好落脚点,让下一步开始时的 \(\xi\) 恰好是想要的值。其余的(位置、速度的另一个自由度)会自动衰减。

    The LIPM has exactly one unstable mode: of the position and velocity of the COM relative to the foot, only the combination \(\xi=x+\dot x/\omega\) diverges exponentially, while \(x-\dot x/\omega\) converges on its own. So walking only needs to control one quantity, \(\xi\): choose each foothold so that \(\xi\) at the start of the next step has the value you want. The rest decays automatically.

    4第二个视角:被推了怎么办?捕获点A second view: what if you are pushed? The capture point

    站着的机器人被突然推了一把,质心得到速度 \(\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)\),就一定倒。这就是人被推时会下意识迈出一步的原因:脚太小,踝策略的容量只有几厘米。

    A standing robot gets a sudden shove and the COM acquires velocity \(\dot x_0\). The capture point (Pratt et al. 2006; also the divergent component of motion, DCM) \(\xi=x+\dot x/\omega\) answers: "where must the foot land for the robot to come to rest exactly over it?" The answer is \(p=\xi\): since \(\dot\xi=\omega(\xi-p)\), a foot placed at \(\xi\) freezes \(\xi\), and \(x\) converges to \(\xi\) with time constant \(1/\omega\). But stepping takes time \(t_s\), during which \(\xi\) keeps growing as \(e^{\omega t_s}\), so the foot must actually land at \(\xi(t_s)=\xi_0e^{\omega t_s}\).

    The feet can only reach so far (leg length, joint limits), which gives a capture region: for a mild push, shifting the ZMP to the toe with ankle torque is enough (the "ankle strategy", \(\xi_0\) within the foot); a larger push needs a step (the "stepping strategy"); a still larger one puts \(\xi(t_s)\) out of reach and the robot must fall. This is why a person who is pushed steps without thinking: the foot is small, and the ankle strategy only has a few centimetres of capacity.

    FIG 4推力恢复与捕获点Push recovery and the capture point
    侧视图SIDE VIEW
    x(t)、ξ(t) 与落脚点 p(t)x(t), ξ(t) and the foothold p(t)
    \(z_c=0.85\) m,\(\omega=3.40\ \mathrm{s^{-1}}\)。"推"在 \(t=0\) 给质心一个速度增量 \(\Delta v\);脚在 \(t_s\) 时刻落在目标点(地面上的绿色手柄,可拖动)。地面上:绿色线段是踝策略的范围(脚的大小),青色线段是迈步能到的范围(\(\pm r\) 围绕落脚时刻的质心),紫色菱形是 \(\xi(t_s)\),绿色手柄和绿色短线是你选的落脚点(落地前为虚线)。右图:琥珀色是 \(x(t)\),紫色是 \(\xi(t)\),绿色阶梯线是支撑点 \(p(t)\)。 \(z_c=0.85\) m, \(\omega=3.40\ \mathrm{s^{-1}}\). The "push" adds a velocity \(\Delta v\) to the COM at \(t=0\); the foot lands at the target (the green handle on the ground, draggable) at time \(t_s\). On the ground: the green segment is the ankle-strategy range (the foot size), the cyan segment the stepping range (\(\pm r\) around the COM at touchdown), the purple diamond \(\xi(t_s)\), and the green handle with its green bar your chosen foothold (dashed until touchdown). Right panel: amber is \(x(t)\), purple \(\xi(t)\), the green staircase the support point \(p(t)\).
    • 先试直觉做法:按"落在质心正下方",然后"推"。机器人停得住吗?为什么 \(\xi\) 不等于脚的位置就停不住?First try the intuitive move: press "Under the COM", then "Push". Does the robot stop? Why does a foot at the wrong place fail to stop it?
    • 按"落在捕获点"再推:质心应当恰好停在脚的正上方。再把推力 \(\Delta v\) 加大,直到 \(\xi(t_s)\) 超出可达范围(红色)。Press "At the capture point" and push again: the COM should come to rest exactly over the foot. Then increase \(\Delta v\) until \(\xi(t_s)\) leaves the reachable range (turns red).
    同一件事的三个视角One idea, three views of falling

    时间视角:\(x(t)-p\) 是 \(e^{\omega t}\) 和 \(e^{-\omega t}\) 的组合,发散的那一项系数是 \(\tfrac12(\xi_0-p)\)。相平面视角(FIG 3):状态沿双曲线运动,稳定流形是唯一会走向脚下的路。捕获点视角(FIG 4):把发散的那个方向单独拿出来当作一个坐标 \(\xi\),脚放在 \(\xi\) 就关掉了发散。三者数学上完全等价,但第三个最适合设计控制器:只有一个量要管。

    Time view: \(x(t)-p\) is a mix of \(e^{\omega t}\) and \(e^{-\omega t}\), and the coefficient of the diverging term is \(\tfrac12(\xi_0-p)\). Phase-plane view (FIG 3): states move along hyperbolas, and the stable manifold is the only road toward the foot. Capture-point view (FIG 4): pull out the diverging direction as its own coordinate \(\xi\); a foot at \(\xi\) switches the divergence off. All three are mathematically equivalent, but the third is the best for designing a controller: only one quantity needs managing.

    5再看数学The math

    提示:把鼠标悬停在公式中带底色的符号(\(p\)、\(\xi\))上,FIG 3 中对应的元素会被高亮。Tip: hover the highlighted symbols (\(p\), \(\xi\)) in the formulas; the matching element in FIG 3 lights up.

    线性倒立摆的推导与假设Deriving the linear inverted pendulum and its assumptions

    取矢状面,\(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\)(逆时针为正):

    Work in the sagittal plane, \(x\) forward and \(z\) up. The whole robot has mass \(m\) and COM at \((x,z)\); the resultant ground reaction \(\mathbf F=(F_x,F_z)\) acts at one ground point \(p\) (the center of pressure, CoP). Newton–Euler gives \(F_x=m\ddot x\), \(F_z=m(\ddot z+g)\), and the moment of that resultant about the COM equals the rate of change of angular momentum \(\dot H\) (counter-clockwise positive):

    $$ (p-x)\,m(\ddot z+g) + z\,m\ddot x \;=\; \dot H \quad\Longrightarrow\quad \hl{zmp}{p} \;=\; x \;-\; \frac{z\,\ddot x}{\ddot z+g} \;+\; \frac{\dot H}{m(\ddot z+g)} . $$

    这就是 ZMP(零力矩点)的表达式:它是地面上那一点,在它上面,重力与惯性力的合力矩的水平分量为零。LIPM 做了四个假设:(1) 质量集中在质心;(2) 质心高度恒定,\(z=z_c\),\(\ddot z=0\);(3) 腿无质量(摆动腿不影响质心);(4) \(\dot H\approx0\)。代入即得

    This is the expression for the ZMP (zero-moment point): the ground point about which the horizontal component of the moment of gravity plus inertial forces vanishes. The LIPM makes four assumptions: (1) all mass sits at the COM; (2) constant COM height, \(z=z_c\), \(\ddot z=0\); (3) massless legs (the swing leg does not affect the COM); (4) \(\dot H\approx0\). Substituting gives

    $$ \begin{aligned} \ddot x &= \frac{g}{z_c}\,(x-p) = \omega^2(x-p),\\[2pt] x(t) &= p+(x_0-p)\cosh\omega t+\frac{\dot x_0}{\omega}\sinh\omega t,\\[2pt] E &= \tfrac12\dot x^2-\tfrac12\omega^2(x-p)^2 = \text{const}. \end{aligned} $$

    闭式解可以直接代回方程验证,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 的"恒高度"假设则不要求角度小,但要求腿能伸缩来保持高度。

    The closed form can be substituted back into the ODE to check, and FIG 3's readout compares it with an RK4 numerical integration (within one step they differ by less than \(10^{-10}\) m). \(E\) is the orbital energy: \(\dot E=\dot x\ddot x-\omega^2(x-p)\dot x=0\), so within one step the phase-plane path is a hyperbola. \(E>0\) means the COM will pass over the foot and keep going, \(E<0\) means it turns back before reaching it, and \(E=0\) is exactly the pair of manifolds. Two routes reach the same equation: for a rigid-leg pendulum of length \(\ell\), \(x=\ell\sin\theta\) and \(\ddot\theta=\tfrac g\ell\sin\theta\), and a small angle, \(\sin\theta\approx\theta\) (the linearization of Lesson 2.4), gives \(\omega=\sqrt{g/\ell}\); the "constant height" assumption of the LIPM does not need small angles but requires the leg to extend and retract to hold the height.

    ZMP、CoP 与摩擦锥的关系ZMP, CoP and how they relate to the friction cone

    平地上,各接触点的法向力 \(f_{z,i}\ge0\),压力中心是它们的加权平均:

    On flat ground, with contact normal forces \(f_{z,i}\ge0\), the center of pressure is their weighted average:

    $$ x_{\text{CoP}} = \frac{\sum_i x_i\,f_{z,i}}{\sum_i f_{z,i}} \in \operatorname{conv}\{x_i\}. $$

    凸组合必定落在接触点的凸包内,所以真实的 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 在脚内,不保证不打滑。

    A convex combination always lies in the convex hull of the contact points, so the real CoP can never leave the support polygon; on flat ground ZMP and CoP coincide. FIG 2's readout evaluates both \(\sum x_if_{z,i}/\sum f_{z,i}\) and the ZMP formula above (with \(\dot H\) taken as the moment of the foot forces about the COM): the two are algebraically equivalent, so their difference is round-off, a check that formula and code agree rather than an independent measurement. If a motion "needs" a ZMP outside the polygon, that point is only a fictitious ZMP: the real CoP sits on the edge, the leftover moment turns into angular acceleration about that edge, the foot starts to roll, and the robot starts to tip. The ZMP condition only encodes the one-sidedness of the normal force (\(f_z\ge0\)); limits on tangential force are a separate, independent condition, \(\|\mathbf f_t\|\le\mu f_z\), plus a friction limit on the moment about the vertical axis (yaw). A ZMP inside the foot does not guarantee that the foot does not slip.

    捕获点(DCM)与步长规划The capture point (DCM) and step planning

    令 \(\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\) 只是它的一个低通滤波后的跟随者。单支撑相内

    Let \(\xi=x+\dot x/\omega\). Then \(\dot\xi=\dot x+\ddot x/\omega=\dot x+\omega(x-p)=\omega\big(\hl{dcm}{\xi}-p\big)\), and also \(\dot x=-\omega(x-\xi)\). So \(\xi\) obeys its own first-order unstable ODE, and \(x\) is just a low-pass-filtered follower of \(\xi\). Within one single-support phase

    $$ \xi(t)=p+(\xi_0-p)\,e^{\omega t}. $$

    周期步态:要求每一步开始时相对新脚的状态相同,且每步前进 \(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 落脚规则是

    The periodic gait. Require every step to start from the same state relative to the new foot, with each step advancing \(L\) in time \(T\). Let the step start at \(x_0,\dot x_0\) (relative to the foot) and end at \(x_T,\dot x_T\). Periodicity demands \(x_T-L=x_0\) and \(\dot x_T=\dot x_0\), whose solution is \(x_0=-L/2\), \(\dot x_0=\tfrac{\omega L}{2}\coth\tfrac{\omega T}{2}\) (the simulator starts from exactly these values and both conditions hold to \(10^{-16}\)). The mean speed is \(v=L/T\) and the orbital energy \(E=\tfrac12\omega^2(L/2)^2/\sinh^2(\omega T/2)\). The capture point relative to the new foot at the start of each step is \(b=\xi_{0}=\tfrac L2(\coth\tfrac{\omega T}{2}-1)\), so the DCM foot-placement rule is

    $$ p_{k+1} \;=\; \xi_{\text{end},k} - b,\qquad \xi_{\text{end},k}=p_k+(\xi_{0,k}-p_k)\,e^{\omega T}. $$

    这一步把下一步开始时的 \(\xi\) 精确设成目标值(对不稳定模态是"一步到位"的),稳定模态每步以因子 \(e^{-\omega T}\approx0.2\) 衰减,所以 FIG 3 改变速度后两三步就进入新的周期步态。期望速度为 0 时 \(b=0\),规则变成 \(p=\xi\),正是捕获点。

    This sets \(\xi\) at the start of the next step exactly to the target (a "dead-beat" move for the unstable mode), and the stable mode shrinks by \(e^{-\omega T}\approx0.2\) per step, which is why FIG 3 settles into a new periodic gait within two or three steps of a speed change. For zero desired speed \(b=0\) and the rule becomes \(p=\xi\), the capture point.

    浮动基座的动力学,为什么前 6 行没有驱动Floating-base dynamics: why the first six rows are unactuated

    7.2 节:浮动基座机器人的构型是 \(q=({}^{W}T_{B},\boldsymbol\theta)\in SE(3)\times\mathbb R^n\)(速度 \(\dot q\) 取 \(6+n\) 维:基座 twist 与关节速度)。8.3 节的运动方程加上接触力,写成

    Lesson 7.2: a floating-base robot's configuration is \(q=({}^{W}T_{B},\boldsymbol\theta)\in SE(3)\times\mathbb R^n\) (with generalized velocity of dimension \(6+n\): the base twist and the joint rates). The equations of motion of Lesson 8.3 plus contact forces read

    $$ M(q)\,\dot{\mathbf v}+h(q,\mathbf v)=S^{\!\top}\boldsymbol\tau+\sum_{i}J_{c,i}(q)^{\top}\mathbf f_i,\qquad S=\begin{bmatrix}0_{n\times6}&I_n\end{bmatrix}. $$

    \(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 节)。

    The first six components of \(S^\top\boldsymbol\tau\) are identically zero: motors only act on joints. The first six rows (the base directions) read \(M_{bb}\dot{\mathbf v}_b+M_{b\theta}\ddot{\boldsymbol\theta}+h_b=\sum_iJ_{c,i,b}^{\top}\mathbf f_i\): the base acceleration can change only through inertial coupling from moving the joints and through contact forces. The contact forces themselves are determined jointly by constraints such as \(J_c\dot{\mathbf v}+\dot J_c\mathbf v=0\) (no foot slip) and the joint torques (Lesson 8.4). Summing the first six rows as a whole-body force and moment (all internal joint forces cancel) gives \(\sum_i\mathbf f_i+m\mathbf g=m\ddot{\mathbf c}\) and \(\dot{\mathbf h}_G=\sum_i(\mathbf p_i-\mathbf c)\times\mathbf f_i\) (plus contact torques at the feet): the centroidal dynamics. The net wrench (Lesson 7.6) the ground can produce forms a convex cone \(\{\sum_iG_i\mathbf f_i:\mathbf f_i\in\mathcal F_i\}\), and legged MPC and whole-body control choose the \(\mathbf f_i\) inside it (Part IV, expressible as QPs, Lesson 6.8).

    Raibert 启发式、SLIP 与能量Raibert's heuristic, SLIP and energy

    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)则靠斜坡上的重力势能补回。

    Raibert's (1986) one-legged hopper balanced its speed with a plain rule: place the foot ahead of the "neutral point" \(\dot x\,T_s/2\), plus a speed-feedback term, \(x_{\text{foot}}=\dot x\,\tfrac{T_s}{2}+k(\dot x-\dot x_{\text{des}})\), with \(T_s\) the stance time. It is a close cousin of the DCM placement rule. Replace the leg by a spring and you get the running model SLIP (spring-loaded inverted pendulum): the COM bounces on the spring during stance and flies ballistically during flight. LIPM stance does no work (\(E\) is constant); real robots lose energy at foot impact and put it back by pushing off, and passive-dynamic walkers (McGeer 1990) get it back from gravity on a slope.

    6机器人中的它:四足步态与真实系统In robotics: quadruped gaits and real systems

    四足动物(和四足机器人)按固定的节奏轮流抬腿,这个节奏叫步态。每条腿在一个周期里有一段支撑相(脚在地上,占周期的比例叫占空比 \(\beta\))和一段摆动相,四条腿的周期之间错开一定的相位。下图左上是步态图(Hildebrand 图):每行一条腿,实心是支撑,空白是摆动;左下画出每个时刻支撑多边形能给出的最大静态稳定裕度(多边形内最大内切圆的半径);右侧是俯视动画:实心圆是支撑脚,空心圆是摆动脚,紫环是理想的静态质心位置(质心在身体里,所以机器人必须在迈步之前先晃动身体,把质心挪过去)。

    Quadrupeds (animal or robot) lift their legs in a fixed rhythm called a gait. In each cycle every leg has a stance phase (foot on the ground; its fraction of the cycle is the duty factor \(\beta\)) and a swing phase, and the four legs' cycles are offset by phases. Top left is the gait diagram (a Hildebrand diagram): one row per leg, filled for stance and blank for swing. Below it is the largest static stability margin the support polygon can offer at each instant (the radius of its largest inscribed circle). On the right is a top-view animation: filled circles are stance feet, hollow circles swing feet, and the purple ring is the ideal static COM position (the COM lives in the body, so the robot must sway its body to bring the COM there before stepping).

    FIG 5四足步态:占空比、相位与稳定性Quadruped gaits: duty factor, phase and stability
    步态图(两个周期,实心 = 支撑)GAIT DIAGRAM (two cycles, filled = stance)
    最大静态裕度 r (cm)BEST STATIC MARGIN r (cm)
    俯视图(相机固定在躯干上)TOP VIEW (camera fixed to the trunk)
    四只脚用红(左前 LF)、绿(右前 RF)、蓝(左后 LH)、紫(右后 RH)区分。相位是脚落地时刻在周期中的位置(相对 LF,各步态的数值为示意值,真实步态随速度连续变化)。左下图里红色背景表示此刻着地的脚少于 3 条,没有二维的支撑多边形。躯干速度 \(v=S f/\beta\),其中支撑行程 \(S=0.3\) m 固定(脚在支撑相内相对躯干扫过的距离;一个周期的步幅是 \(v/f=S/\beta\)),髋高取 \(\ell=0.5\) m,弗劳德数 \(\mathrm{Fr}=v^2/(g\ell)\)。 Feet are colored red (left front LF), green (right front RF), blue (left hind LH) and purple (right hind RH). The phase is the position in the cycle at which the foot touches down (relative to LF; the values per gait are illustrative, as real gaits change continuously with speed). A red background in the lower-left plot marks instants with fewer than 3 feet down, when there is no 2D support polygon. The trunk speed is \(v=S f/\beta\) with fixed stance stroke \(S=0.3\) m (how far a foot sweeps relative to the trunk during stance; the stride per cycle is \(v/f=S/\beta\)) and hip height \(\ell=0.5\) m, and the Froude number is \(\mathrm{Fr}=v^2/(g\ell)\).
    • 选"步行",把占空比 \(\beta\) 从 0.8 往下调:低于多少时,周期里开始出现只有 2 只脚着地的瞬间?为什么恰好是这个数?(提示:4 只脚的相位等间隔 1/4。)Select "Walk" and lower the duty factor \(\beta\) from 0.8: below what value do instants with only 2 feet down appear? Why exactly that number? (Hint: the four phases are evenly spaced by 1/4.)
    • 选"小跑":\(\beta=0.5\) 时任何时刻都恰有 2 只脚(一条对角线)着地,裕度为 0。把 \(\beta\) 调到 0.5 以下,会出现什么新阶段?Select "Trot": at \(\beta=0.5\) exactly 2 feet (one diagonal) are down at every instant and the margin is 0. Lower \(\beta\) below 0.5: what new phase appears?
    真实系统里In real systems

    四足: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)则提醒我们:合适的机械结构本身就能在斜坡上不加控制地走起来。

    Quadrupeds: Boston Dynamics Spot, ANYbotics ANYmal, the Unitree Go/B series, MIT Mini Cheetah. The classical route is "MPC + whole-body control": predict with centroidal dynamics (contact forces with friction cones), then let a whole-body controller turn desired foot forces into joint torques (the convex MPC of MIT Cheetah 3, Di Carlo et al. 2018). More recently, blind quadrupeds have largely switched to reinforcement learning (Hwangbo et al. 2019; Lee et al. 2020): a policy trained in simulation outputs joint targets and is transferred to the real robot (sim-to-real, Part VI). Humanoids: Honda's ASIMO and the HRP series from AIST both walked on ZMP-based control, with HRP using preview control (Kajita et al. 2003), the hallmark of the 2000s; Boston Dynamics' Atlas used optimization-based control and has recently moved to an electric version; Agility Robotics' Cassie / Digit (compliant legs, often RL controllers), Unitree H1 / G1 and Tesla Optimus are on the same road. Actuators: high-performance legs usually use quasi-direct-drive (low gear ratio, high-torque motors), giving back-drivable legs that are "transparent" to external forces, so contact forces can be estimated and controlled through motor current (Lesson 9.4). State estimation: the trunk pose cannot be measured directly and is fused from an IMU and leg odometry (Kalman filtering, Lesson 4.8 and Part IV). Passive-dynamic walkers (McGeer 1990) remind us that a suitable mechanism can walk down a slope with no control at all.

    7常见误区Common pitfalls

    误区 1:把"质心投影在支撑多边形内"当成稳定的全部Pitfall 1: treating "COM projection inside the support polygon" as all of stability

    它只是静态稳定的充分条件。走路的机器人大部分时间质心投影在多边形之外(双足行走时单脚的多边形根本放不下质心),能走起来靠的是动态稳定:用 ZMP 或捕获点这类包含速度的量判断。反过来也成立:质心在多边形里但速度很大,一样会冲出去。FIG 3 里质心经常飘到脚外,却不会倒,因为 \(\xi\) 被每一步控制住了。

    It is only a sufficient condition for static stability. A walking robot spends most of its time with the COM projection outside the polygon (during single support of a biped the foot polygon cannot even hold the COM); it stays up through dynamic stability, judged with velocity-aware quantities such as the ZMP or the capture point. The converse also holds: a COM inside the polygon but moving fast will still run out. In FIG 3 the COM often drifts beyond the foot yet the robot never falls, because \(\xi\) is regulated at every step.

    误区 2:到处套用 LIPMPitfall 2: applying the LIPM everywhere

    四条假设:集中质量、恒高度、无质量腿、\(\dot H\approx0\),在真实机器人上都只是近似。腿重(占整机质量的 20% 以上并非罕见)而且摆得快时,摆动腿的惯性力会明显影响质心;快步行走和跑步需要大幅度的竖直运动,恒高度假设失效;全身(手臂、躯干)的俯仰、侧滚角动量变化 \(\dot H\) 会在 ZMP 公式里多出 \(\dot H/(mg)\) 一项;另外,摆动腿还会产生绕竖直轴的偏航角动量,只能靠脚底的摩擦力矩抵抗,人形机器人摆臂正是为了抵消这部分偏航角动量。LIPM 适合做规划的"骨架",之后要用全身模型去修正。

    Its four assumptions (point mass, constant height, massless legs, \(\dot H\approx0\)) are only approximations on real robots. When the legs are heavy (over 20% of the total mass is not unusual) and swing fast, their inertial forces visibly disturb the COM; fast walking and running need large vertical motion, which breaks the constant-height assumption; pitch and roll angular momentum change \(\dot H\) from the trunk and arms adds a term \(\dot H/(mg)\) to the ZMP formula; separately, the swinging legs create yaw angular momentum that only the feet's friction torque can resist, and humanoids swing their arms to cancel that yaw angular momentum. The LIPM is a good planning "skeleton"; a whole-body model must correct it afterwards.

    误区 3:忘记摩擦Pitfall 3: forgetting friction

    ZMP 在脚内只保证法向力没有"拉"地面,不保证脚不滑。湿滑地面、快速转向或急停时需要的水平力 \(|F_x|\le\mu F_z\) 先被突破,脚就滑了,捕获点要求的"快速迈一大步"同样需要摩擦。FIG 2 里水平加速度的上限 \(\mu(g+a_z)\) 对所有足式机器人成立,与控制器多聪明无关。

    A ZMP inside the foot only ensures the ground is not being "pulled"; it does not prevent slipping. On wet ground, in sharp turns or in hard stops, the needed horizontal force breaches \(|F_x|\le\mu F_z\) first and the foot slides; the "quick long step" demanded by capture-point recovery needs friction too. The horizontal acceleration cap \(\mu(g+a_z)\) seen in FIG 2 applies to every legged robot, however clever its controller.

    误区 4:把"ZMP 在多边形之外"当成现实中的翻倒点Pitfall 4: reading "ZMP outside the polygon" as a real tipping point

    真实的 CoP 永远在支撑多边形内。由运动算出来的 ZMP 跑到外面,说明这个运动不能实现:实际的 CoP 会饱和在边上,缺失的力矩使躯干转动。它是一个"需要多少力矩"的度量,不是地面上真有这个压力点。也正因为如此,稳定性判据要用 ZMP 与边之间的距离(裕度)而不是"在不在里面"这个布尔值。

    The real CoP always lies inside the support polygon. A ZMP computed from a motion that wanders outside means the motion cannot be realized: the actual CoP saturates on the edge and the missing moment spins the trunk. It measures "how much moment is missing", not a real pressure point on the ground. This is also why stability criteria use the distance between the ZMP and the edge (the margin) rather than the Boolean "inside or not".

    误区 5:小跑是静态稳定的Pitfall 5: believing a trot is statically stable

    小跑时只有一条对角线的两只脚着地(FIG 5:多边形退化成线段,最好的裕度也是 0),\(\beta<0.5\) 时还有腾空相。它之所以不倒,是因为下一对对角脚在恰当的时刻接住了质心,是动态稳定。这也意味着急停是个问题:在小跑的中途突然冻结,机器人会绕那条对角线翻倒。真实控制器必须规划"怎么停",例如逐步过渡到步行或用捕获点式的落脚。

    In a trot only one diagonal pair of feet is down (FIG 5: the polygon degenerates to a segment and the best margin is 0), and for \(\beta<0.5\) there is a flight phase. It stays up because the next diagonal pair catches the COM at the right moment, which is dynamic stability. That makes stopping a real problem: freeze a trot mid-stride and the robot tips about the diagonal. Real controllers have to plan how to stop, for example by transitioning to a walk or using capture-point foot placement.

    8小练习Check yourself

    1. 质心高度 \(z_c=0.9\) m 的人形机器人,LIPM 的 \(\omega=\sqrt{g/z_c}\) 约为(\(g=9.81\ \mathrm{m/s^2}\))?1. For a humanoid with COM height \(z_c=0.9\) m, the LIPM's \(\omega=\sqrt{g/z_c}\) is about (\(g=9.81\ \mathrm{m/s^2}\))?
    \(\omega=\sqrt{9.81/0.9}=\sqrt{10.9}\approx3.30\ \mathrm{s^{-1}}\),时间常数 \(1/\omega\approx0.30\) s(所以选项 0.30 是时间常数,不是 \(\omega\))。质心越高,\(\omega\) 越小,摔得越慢,这就是高个子更容易控制平衡的原因。\(\omega=\sqrt{9.81/0.9}=\sqrt{10.9}\approx3.30\ \mathrm{s^{-1}}\), with time constant \(1/\omega\approx0.30\) s (so the 0.30 option is the time constant, not \(\omega\)). The higher the COM, the smaller \(\omega\) and the slower the fall, which is why a tall body is easier to balance.
    2. 同样 \(z_c=0.9\) m 的机器人站在脚上方 \(x=p\),被推了一下,得到速度 \(\dot x=0.5\) m/s。捕获点 \(\xi\) 距离脚大约多远?2. The same \(z_c=0.9\) m robot stands directly above its foot, \(x=p\), and is pushed so that \(\dot x=0.5\) m/s. How far from the foot is the capture point \(\xi\)?
    \(\xi-p=(x-p)+\dot x/\omega=0+0.5/3.30\approx0.15\) m。如果脚能瞬间放到那里,机器人会恰好停在脚上方。迈步需要时间 \(t_s\) 时,\(\xi\) 还要乘上 \(e^{\omega t_s}\):\(t_s=0.3\) s 时放大约 2.7 倍,应落在约 0.41 m 处。\(\xi-p=(x-p)+\dot x/\omega=0+0.5/3.30\approx0.15\) m. If the foot could be placed there instantly, the robot would stop exactly over it. When stepping takes \(t_s\), \(\xi\) is also multiplied by \(e^{\omega t_s}\): about 2.7× for \(t_s=0.3\) s, so the foot should land near 0.41 m.
    3. 两只脚站在平地上,摩擦系数 \(\mu=0.5\)。在竖直方向不加速(\(a_z=0\))时,质心水平加速度的最大值是?3. A robot stands on flat ground with \(\mu=0.5\). With no vertical acceleration (\(a_z=0\)), what is the maximum horizontal COM acceleration?
    每只脚 \(|f_x|\le\mu f_z\),相加得 \(|\sum f_x|\le\mu\sum f_z=\mu m(g+a_z)\),所以 \(|a_x|\le\mu g=4.9\ \mathrm{m/s^2}\),与质量无关(质量在两边抵消)。把 \(a_z\) 调大(蹬地起跳时)这个上限还会变高。Each foot has \(|f_x|\le\mu f_z\); summing, \(|\sum f_x|\le\mu\sum f_z=\mu m(g+a_z)\), so \(|a_x|\le\mu g=4.9\ \mathrm{m/s^2}\), independent of the mass (it cancels on both sides). Increasing \(a_z\) (pushing off the ground) raises this cap.
    4. 某个步态规划算出的 ZMP 在支撑脚的脚尖外 5 cm。真实机器人上会发生什么?4. A gait planner computes a ZMP 5 cm beyond the toe of the support foot. What happens on the real robot?
    真实压力中心是法向力的加权平均,不可能在脚外。需要的 ZMP 在外面,意味着给定的 \(\ddot x\) 在不转动的条件下无法实现;多出的力矩 \(\dot H\neq0\) 使机器人绕脚尖前倾。(选项 D 方向也不对:ZMP 在前面表示机器人在向前倾,需要更大的前向力矩。)The real center of pressure is a weighted average of normal forces and cannot be outside the foot. A required ZMP outside means the given \(\ddot x\) cannot be realized without rotation; the extra moment \(\dot H\neq0\) pitches the robot forward about the toe. (Option D has the direction wrong too: a ZMP ahead of the foot means the robot is pitching forward.)
    5. 一个"侧序步行",四只脚的相位等间隔 1/4。为了任何时刻至少有 3 只脚着地,占空比 \(\beta\) 至少要多大?5. A "lateral-sequence walk" has four footfall phases evenly spaced by 1/4. For at least 3 feet to be on the ground at every instant, what must the duty factor \(\beta\) be at least?
    四只脚的支撑相各长 \(\beta\),起点等间隔 1/4。任一时刻着地的脚数为 \(\lfloor4\beta\rfloor\) 或 \(\lceil4\beta\rceil\),所以 \(\beta\ge3/4\) 才能始终有 3 只。小于 3/4 就会出现只有 2 只脚(对角线)的瞬间,必须靠动态稳定。FIG 5 的任务正是验证这一点。Each of the four stance phases lasts \(\beta\) and starts at evenly spaced instants 1/4 apart. At any instant the number of feet down is \(\lfloor4\beta\rfloor\) or \(\lceil4\beta\rceil\), so \(\beta\ge3/4\) is needed to always have 3. Below 3/4, moments with only 2 feet (a diagonal) appear and the gait must rely on dynamic stability. The task in FIG 5 checks exactly this.

    9延伸阅读Further reading

    • 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 的经典出处The classic source of the 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 时代的核心方法ZMP preview control, the core method of the ASIMO / HRP era
    • M. Vukobratović & B. Borovac, Zero-Moment Point — Thirty Five Years of its Life, Int. J. Humanoid Robotics 1(1), 2004 — ZMP 的定义、历史与争议The definition, history and controversies of the ZMP
    • J. Pratt, J. Carff, S. Drakunov & A. Goswami, Capture Point: A Step toward Humanoid Push Recovery, Humanoids 2006 — 捕获点与推力恢复The capture point and push recovery
    • 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 在三维行走控制中的推广The DCM carried over to 3D walking control
    • M. Raibert, Legged Robots That Balance, MIT Press, 1986 — 单腿跳跃机与"落脚点反馈"启发式Hopping machines and the foot-placement heuristic
    • 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 的预习材料A survey of MPC and whole-body control for legged robots; preview for 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 — 混合零动态与虚拟约束,另一条严格的双足控制路线Hybrid zero dynamics and virtual constraints, the other rigorous biped-control route
    • T. McGeer, Passive Dynamic Walking, Int. J. Robotics Research 9(2), 1990 — 不用电机的行走Walking without motors
    • S. Kajita et al., Introduction to Humanoid Robotics, Springer, 2014 — LIPM、ZMP 和人形机器人控制的系统教材A systematic textbook on the LIPM, ZMP and humanoid control