Skip to content

필사 모드: 人形机器人全身控制 — 双腿行走,双手操作

中文
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.

引言

人形机器人是一个由来已久的梦想 —— 一台像人一样用双腿站立行走、用双手抓取和操作物体、直接使用人类空间与工具的机器。过去几年里,这个梦想正一点点走出实验室的演示,走向真实的作业现场。

但"用双腿行走"这句话并不像听起来那么简单。人在行走的每一瞬间其实都在跌倒,只是下意识地用下一只脚不断接住那次跌倒。对机器人来说,这是一个高维控制问题:需要实时协调数十个关节,管理接触地面的脚掌上的力分布,同时还要兼顾上身姿态与手臂的动作。

本文把人形机器人控制大致分成两条主线来讲。一条是双足行走(bipedal locomotion)控制,另一条是把全身关节统一到一个目标下协同运动的全身控制(whole-body control)。在此基础上,我们会继续讲这两者如何与操作(manipulation)整合,以及最近的学习式方法和基础模型趋势正在改变什么。

为了准确起见,先做一点说明:机器人厂商公布的具体规格或性能数值,会因发布时间与硬件代次而有很大差异,所以本文以广为人知的概念和公开的方法论为主,对具体数值会谨慎地做一般化处理。

问题的地形:为什么双足行走很难

轮式机器人很稳定。它的支撑多边形(support polygon)很宽,静止不动时也不会倾倒。双足机器人则不同。

  • 支撑面狭窄:单脚站立的瞬间,支撑区域就缩小成一只脚掌。
  • 本质不稳定:人体近似于立在脚踝上方的倒立摆(inverted pendulum),放任不管就会倒下。
  • 接触不连续:每一步脚都会接触地面又离开,接触状态时时刻刻在变化。
  • 高维度:全身型人形机器人的关节自由度通常多达数十个。

用来理解这一地形的常见简化模型是线性倒立摆模型(Linear Inverted Pendulum Model, LIPM)。它把上身质量看作一个点(重心, CoM),并把其下方近似为一根无质量的杆连到地面,构成一个摆。

        (CoM)  ● ── 重心
               │   倒立摆:试图向上站立,
               │   但放任不管就会倒下
     ──────────┴────────── 地面
              脚(ZMP)

有了这一简化,在处理复杂的全身动力学之前,我们就可以先回答"重心应该放在哪里才不会倒"这个问题。

ZMP:不倒下的基准点

双足行走控制中最古老也最重要的概念之一是 ZMP(Zero Moment Point,零力矩点)。

ZMP 是地面上使地面反作用力所产生的力矩为零的那一点。直观地说,它相当于脚掌压向地面的压力"中心"。核心规则是这样的:

只要 ZMP 停留在支撑区域(脚掌,或双脚共同构成的多边形)之内,脚就能保持稳定接触,不会离地或翻转。

也就是说,在规划行走时,只要设计重心轨迹使每一瞬间的 ZMP 都不越出支撑多边形,就能产生"动态稳定"的步态。

   支撑多边形(双脚)                       单脚支撑阶段
   ┌───────────────┐                    ┌────────┐
   │   ● ZMP       │  稳定               │        │  ● ZMP 一旦
   │  (在内部)      │                    │   ●────┼──▶ 越界就不稳定
   └───────────────┘                    └────────┘

传统的基于 ZMP 的步态生成器大体遵循以下流程:

  1. 确定落脚点(footstep)的先后顺序。
  2. 在每个落脚位置确定允许的 ZMP 轨迹。
  3. 反解出满足该 ZMP 的重心(CoM)轨迹。
  4. 用逆运动学求解满足重心轨迹与脚部轨迹的关节角度。

这种方式可预测、稳定,但由于强烈依赖预先设定的轨迹,在崎岖地形或意外扰动面前相对脆弱。

步态的解剖:行走周期

细看一步的过程,脚接触地面的支撑期(stance phase)与脚悬空的摆动期(swing phase)交替出现。行走与奔跑的决定性区别也正在于此。

  • 行走:始终至少有一只脚接触地面,还存在一段短暂的双脚支撑(double support)阶段。
  • 奔跑:会出现双脚同时离地的腾空阶段(flight phase),落地瞬间的冲击管理变得远为重要。
   行走的一个周期(以右脚为基准)
   ┌────────────┬──────────┬────────────┬──────────┐
   │  右脚       │  双脚     │  右脚       │  双脚     │
   │  支撑期     │  支撑     │  摆动期     │  支撑     │
   │ (贴地)      │          │ (悬空)      │          │
   └────────────┴──────────┴────────────┴──────────┘
     承受力量     重心转移   向前伸出     落地·交替

双脚支撑阶段虽短,却极其重要。这一瞬间必须把重心转移到下一只支撑脚,ZMP 也必须平滑过渡。这个转换一旦出错,步态就会变得断续或失去平衡。步态生成器相当大一部分工作,就是让这个转换变得平滑。

硬件:是什么驱动机器人

在讨论控制之前,需要先说说真正执行这些指令的硬件。再好的策略,如果身体无法实现,也毫无意义。

组成部分作用关键考量
执行器驱动关节的"肌肉"扭矩、速度、反向驱动性
减速器放大电机力矩效率、齿隙、刚度
惯性传感器(IMU)测量躯干姿态与角速度漂移、噪声
关节编码器各关节的角度与速度分辨率、延迟
力/扭矩传感器测量脚/手的接触力精度、耐用性

其中反向驱动性(back-drivability)尤为重要——它指的是从外部推动关节时,关节让步的顺畅程度。减速比很高的传统关节力气大,但也刚硬,无法吸收意外冲击,只会原样传递。相反,具备适当反向驱动性的关节能吸收冲击,让力控制(force control)更加平滑,在人身边也更安全。这正是近来动态型人形机器人纷纷采用有利于力控制的执行器的原因。

控制的层级与时间尺度

前面看到的各个环节,实际上运行在不同的时间尺度上。把它们整理成一张图,就能看出整套系统是如何咬合的。

   慢 ◀──────────────────────────────────────────▶ 快

   任务规划        步态/落脚点规划     全身控制(WBC)     底层电机控制
   (数 Hz 以下)     (数~数十 Hz)       (数百 Hz)        (数 kHz)
      │                 │                   │                 │
   "做什么"         "脚放在哪里"        "全身怎么动"       "关节电流"
      │                 │                   │                 │
      └────────▶────────┴────────▶──────────┴────────▶────────┘
                     目标由上层传向下层
                     状态由下层反馈向上层

这种分层结构之所以重要,是因为每一层都以适合自己的速度只解决适合自己的问题。慢速的规划层不需要以 kHz 运行,快速的电机控制也不必了解整个任务。这种关注点分离(separation of concerns)的设计,与软件工程中的分层思想如出一辙。

MPC:一边预判一边行走

在 ZMP 思路上更进一步的是模型预测控制(Model Predictive Control, MPC)。MPC 在每个控制周期都重复以下步骤:

  1. 观测当前状态。
  2. 利用动力学模型预测未来一段固定区间(预测视界, horizon)内的运动。
  3. 在该区间内通过优化求解使代价(偏离平衡、能耗、偏离目标等)最小的控制输入序列。
  4. 只实际执行其中第一步,下一周期再从头重复。
  当前状态 ─┐
     ┌──────────────────────────────┐
     │  在预测视界上优化未来轨迹        │
     │  t ── t+1 ── t+2 ── ... ── t+N │
     └───────────────┬──────────────┘
                     │ 只执行第一个输入
              把指令下发给机器人
                     ▼  (下一周期再次观测 → 重新优化)
                  循环 (receding horizon)

MPC 的优势在于"能提前看"。眼下看似有点吃亏的选择,可能对几步之后的平衡更有利;一旦有扰动进来,下一周期就能立刻更新计划。在简化的刚体模型(例如单刚体动力学, SRBD)上直接优化接触力的 MPC,被广泛用于动态行走、奔跑、上台阶等动作。

代价是计算量。预测视界越长、模型越精细,实时(数百 Hz 到数 kHz)优化的负担就越重。因此实务中通常会适当简化模型,把高速的底层控制与低速的规划分成不同层级。

全身控制:让全身服务于同一个目标

到目前为止,我们主要关注的是"重心与脚"。但人形机器人要同时使用双臂、躯干乃至颈部在内的数十个关节。一边走路一边搬东西、推门,或是在快要摔倒的瞬间伸出手臂撑住——这些光靠双腿是做不到的。

全身控制(Whole-Body Control, WBC)把所有这些关节纳入同一个优化问题。它在满足物理约束(关节限位、接触力、摩擦)保持平衡的同时,计算关节扭矩或加速度,以同时满足多个目标(task)。

           ┌────────── 上层规划(慢) ──────────┐
           │  落脚点规划 · 步态模式 · 目标姿态    │
           └────────────────────┬─────────────┘
                                │ 传递目标(task)
           ┌────────── 全身控制(WBC) ──────────┐
           │  多目标优先级:                       │
           │   1) 平衡(维持重心/ZMP) ← 最高优先级  │
           │   2) 脚/手轨迹跟踪                    │
           │   3) 姿态·视线等附加目标               │
           │  约束:关节限位 · 接触摩擦 · 扭矩限位   │
           └────────────────────┬─────────────┘
                                │ 关节扭矩/加速度
           ┌────────── 底层驱动(快) ───────────┐
           │  各关节电机电流/扭矩控制(高频)        │
           └───────────────────────────────────┘

WBC 的核心思想是优先级。像维持平衡这种绝不能妥协的目标放在最上层,而追踪手部轨迹这类目标则置于其下。只要让下层目标只在不损害上层目标的范围(零空间, null space)内追求,就能在伸手够物时避免摔倒。

实现上通常采用带约束的优化(例如二次规划, QP)形式。一份高度简化的概念性伪代码如下:

# 概念性的全身控制 QP(简化伪代码)
# 变量:关节加速度 qdd,接触力 f
# 目标:最小化多个 task 的误差;约束是物理规律和限位

minimize   sum_i  w_i * || J_i @ qdd + dJ_i @ qd - a_desired_i ||^2
subject to
    M @ qdd + h == S.T @ tau + Jc.T @ f      # 全身动力学方程
    friction_cone(f)                         # 接触摩擦锥约束
    tau_min <= tau <= tau_max                # 扭矩限位
    qdd within joint_limits                  # 关节限位

这里的每个 J_i 是对应某个目标(重心、脚、手等)的雅可比矩阵,w_i 是优先级权重。实际中有时会用严格的层级(hierarchical QP)代替权重。重要的是这样一种视角:在物理规律之内协调多个目标,让全身一起动起来。

平衡与跌倒恢复

无论走得多好,被推、打滑、踩空的时刻总会到来。平衡恢复策略大体上和人一样分为三个阶段。

策略说明人的例子
脚踝策略用脚踝扭矩微调重心用脚踝撑住小幅晃动
髋部策略弯曲上身以快速转移重心被大力推动时弯腰保持平衡
迈步策略重新迈出一步以转移支撑面被用力推时迈出一步

扰动小时用脚踝应对,扰动大时用髋部,再大时就要迈步。在迈步策略中尤其重要的概念是捕获点(capture point),也叫运动的发散分量(divergent component of motion)。粗略地说,它是实时计算出的"如果现在把脚迈到这里,重心就会停在其正上方"的那个点,用来决定下一步落脚的位置。

即便如此,也总有摔倒的时候。近来关于管理跌倒本身的研究也很活跃——在跌倒不可避免时采取能减轻冲击的姿势,并通过学习掌握从躺倒状态重新站起来(get-up)的动作。保护昂贵的硬件,以及在摔倒后仍能自行恢复的能力,对实际部署非常重要。

基于学习的运动控制:RL 的崛起

传统的基于模型的控制(ZMP、MPC、WBC)显式地处理物理规律,因而可解释、也稳定。但当模型不够准确、或地形不可预测时,就会遇到瓶颈。正是在这一点上,强化学习(Reinforcement Learning, RL)驱动的运动控制受到了关注。

思路很简单:在仿真中给机器人"向前走得好就有奖励,摔倒就扣分",通过无数次试错训练出一个行走策略(policy)。这个策略通常是一个神经网络,输入观测(关节角度与速度、躯干姿态、指令速度等),输出关节目标(扭矩或目标角度)。

  ┌─────────────────── 仿真训练循环 ───────────────────┐
  │                                                     │
  │   观测 s_t ──▶ [策略网络] ──▶ 动作 a_t                │
  │      ▲                              │                │
  │      │                              ▼                │
  │   仿真器(数千个并行环境) ◀── 施加关节目标              │
  │      │                              │                │
  │      └──── 奖励 r_t(前进·稳定·能耗) ◀──────────────────┘
  │                                                     │
  │   通过数十亿步的试错更新策略                           │
  └─────────────────────────────────────────────────────┘

RL 运动控制的优势在于对崎岖地形与扰动的强健性。在仿真中让策略随机经历各种地形与干扰,策略就会自行学到那些没有预先编写过的恢复动作。能在台阶、碎石路、湿滑地面上不摔倒行走的四足与双足策略,很多正是这样训练出来的。

奖励设计是一门艺术

RL 的成败在相当大程度上取决于奖励函数的设计。要把"走得好就给奖励"这一句话落实成真正的公式,需要谨慎地组合多个项。概念上大致是把下面这些项加在一起:

   总奖励 =
       + 前进速度跟踪    (越接近指令速度 +)
       + 存活            (不摔倒、活着就 +)
       - 能量消耗         (关节扭矩越大 -)
       - 躯干晃动         (姿态倾斜越大 -)
       - 脚部打滑         (接触中打滑就 -)
       - 逼近关节限位      (贴近限位就 -)

这里各项的权重决定了策略的性格。把能耗项权重调高,会得到节省体力的策略;把速度项权重调高,则会得到激进冒进的策略。权重设得不对,机器人可能学会"钻奖励空子"的意外行为(reward hacking)。比如只加大前进奖励,机器人可能学会一种无视平衡、几乎是往前扑倒着前进的奇怪步态。所以奖励设计既是科学,也是经验积累出的技艺。

课程学习

一开始就给台阶或碎石路,策略什么也学不到,只会不断摔倒。因此要用课程(curriculum):一开始给一个在平地上慢慢走的简单任务,等策略开始成功之后,再逐步提高地形的粗糙度与指令速度。就像人也是从蹒跚学步开始,机器人也需要循序渐进地提升难度才能学好。

评估:如何衡量"做得好"

要公平比较"这台机器人走得好",就需要指标。常用的有以下几种:

  • 成功率:在设定任务(例如爬 10 级台阶)中,多少次尝试成功了多少次。
  • 抗扰动能力:从侧面能承受多大力度的推动而不摔倒。
  • 移动效率(CoT, cost of transport):走过单位距离所消耗的能量,越低越高效。
  • 速度与地形范围:能以多快的速度、应对多丰富的地形。

问题在于,测量这些指标的实验环境因研究而异,导致不同论文之间的数字很难直接比较。缺乏标准化的评估协议,是这一领域长期存在的老问题。正因为一段演示视频就很容易让人喊出"我们是最强的",可复现、公平的评估反而变得愈发重要。

Sim2Real:从仿真到实机

RL 面对的决定性难关是仿真与现实之间的差距(sim-to-real gap)。仿真器的物理并不完美,真实电机存在延迟、摩擦与齿隙,传感器也有噪声。在仿真中表现完美的策略,到了实机上摔倒的情况并不少见。

用来缩小这一差距的核心技术是域随机化(domain randomization)。训练过程中随机扰动物理参数(质量、摩擦、电机刚度、延迟等),让策略不会对某个特定数值过拟合,而是在较宽的范围内都能工作。无论现实取到什么样的值,只要落在训练分布之内,策略就会把它当作"曾经经历过的情形之一"来处理。

  仿真(单一的完美物理)                    现实(不确定的单一物理)
        ●  ← 只针对这一点优化                     ?  ← 在这里有失败风险

  应用域随机化之后:
    ● ● ● ● ● ●  ← 在广泛分布的多种物理参数上训练
        └──────────▶  只要现实(?)落在这个分布之内,就能稳健运行

除此之外,用实测数据校准仿真器的系统辨识、在实机上用少量数据做微调的方法,以及主要用身体本身可以直接获取的量(本体感觉, proprioception)来构成观测、从而降低对传感器依赖的设计,也会一起被用到。

行走与操作的整合:Loco-Manipulation

光走得好还不够。真正的工作是"走过去,抓起某样东西,再放到别的地方"。把移动(locomotion)与操作(manipulation)放在一起处理的问题,被称为 Loco-Manipulation

这两者会相互干扰:单手拿起一件重物会让重心偏移、破坏平衡;为了推门而倾斜身体,则会改变脚部的力分布。因此,构建良好的系统会把手臂的操作目标与双腿的平衡目标放在同一个全身控制器中一起求解。

   ┌── 操作目标 ──┐        ┌── 移动/平衡目标 ──┐
   │ 手的位置·力量 │        │ 重心 · 落脚点       │
   └──────┬───────┘        └─────────┬─────────┘
          │                          │
          └───────────┬──────────────┘
              在 WBC 中一起优化
        "边搬边走"·"边推边撑住"融合成一个动作

学习到的策略分层:走向行为基础模型

近来的趋势是把控制堆叠成层级。底层是行走、平衡这类快速而强健的低层策略(大多用 RL 训练),上层则是决定"该做什么"的更慢的高层策略。

在这一上层,近来受到关注的概念是行为基础模型(behavior foundation model)趋势——试图用从多种任务和多种本体(embodiment)收集来的大规模数据训练出一个大策略,广泛覆盖多种行为。尤其在机器人领域,把视觉、语言、动作放在一起处理的 VLA(Vision-Language-Action) 模型正在快速发展。

  • RT-2(Google DeepMind,arXiv 2307.15818):在机器人数据上对视觉-语言模型(VLM)做微调,使其把动作输出为离散化(discretized action)token 的一种方法。
  • OpenVLA(arXiv 2406.09246):一个规模约 7B 的开源 VLA 模型,用约 97 万条真实机器人示范数据训练而成,结合了 DINOv2、SigLIP 视觉编码器与 Llama 2 语言模型。
  • π0(Physical Intelligence):基于流匹配/扩散(flow matching / diffusion)、生成连续高频动作的一类策略。
  • GR00T N1(NVIDIA):号称结合了负责快速反应的 System 1(扩散系列)与负责规划的 System 2 的双系统结构。
  • Helix(Figure AI):作为面向人形机器人的通用化 VLA 趋势的一个例子被提及。

当这样的上层模型把"把红色杯子拿起来放进抽屉"这样的目标拆解为手与脚的目标时,下层的运动控制与 WBC 策略负责把这个目标在物理上实现出来——这样的分工就自然而然地出现了。不过这一领域变化非常快,具体的性能与结构可能因发布时间和代次而有所不同。

实机人形机器人

以事实为依据,仅在概念层面点到几个广为人知的例子。由于具体规格会因代次和发布时间而有很大差异,这里只提及方向。

机器人开发方已知特点(概念层面)
AtlasBoston Dynamics以动态全身动作与移动演示广为人知
FigureFigure AI面向商用作业的人形机器人,常与 VLA 趋势一并提及
Unitree 人形机器人Unitree Robotics被认为是相对易于获取的双足平台
DigitAgility Robotics作为面向物流与仓储作业的人形机器人被介绍

各家公司的最新型号、准确的关节数量、速度、可搬运重量等,最好以官方资料为准进行确认。

陷阱与局限

  • 过度信任仿真:仿真中的成功并不保证实机上的成功,sim2real 差距依然是一堵不小的墙。
  • 安全:只要沉重的机器人在人身边运动,就必须以针对跌倒、碰撞、误动作的安全设计为前提。
  • 能耗与续航:用双腿站立并运动本身能耗就很大,电池续航是实用性上的一大制约。
  • 泛化的错觉:演示视频往往是针对特定条件优化过的,向陌生环境与陌生物体的泛化是另一个困难的问题。
  • 评估的困难:能公平比较"走得好""操作得好"的标准指标,仍在成熟过程中。
  • 硬件可靠性:让数十个高输出执行器长期、反复地承受负荷,是与软件同样困难的工程问题。

控制范式比较

把目前看到的几种方法一并整理,各自的定位就更清楚了。

方法核心思想优点缺点
基于 ZMP让 ZMP 维持在支撑面内可预测、稳定偏向轨迹跟踪,对扰动较脆弱
MPC在预测视界上做优化能提前看、动态性强计算负担大
WBC多目标优先级优化整合操作与平衡依赖模型精度
RL 运动控制通过试错学习策略对地形与扰动强健sim2real、难以解释
VLA/基础模型从大规模数据中泛化语言指令、覆盖面广数据、安全、评估方面的挑战

重要的是,这些方法与其说是相互竞争,不如说各自承担着层级中不同的层。构建良好的系统会把基础模型放在上层、MPC/WBC 放在中层、学习出的低层策略放在底层,组合使用多种方法。与其寻找"一颗银弹",在实战中更重要的是为每一层配置合适工具的工程判断力。

遥操作与数据采集

基于学习的操作与行走,其瓶颈归根到底是数据。教会人形机器人一项新工作,最直接的方法之一,就是由人远程操纵机器人做出示范。

   人类操作员 ──▶ [遥操作设备]
                       │  (动作映射)
                   人形机器人 ──▶ 执行实际动作
              (把观测·动作对记录为数据)
              用模仿学习训练策略 ──▶ 此后自主执行

遥操作有多种方式:可以用动作捕捉把人手臂的动作映射到机器人手臂上,也可以用 VR 手柄指示手部的目标位置。无论哪种方式,目标都是"把人的意图转移到机器人的身体上,并把这个过程记录成数据"。这样收集来的示范,之后会成为模仿学习或基础模型训练的燃料。

不过遥操作也有难处。当人和机器人的身体不同(手臂长度、关节布局)时,动作无法原样转移;一旦存在延迟,操控手感也会变差。即便如此,作为来自真实机器人的数据,它填补了仅靠仿真难以填补的空白。

未来方向

人形机器人控制正处在多股趋势同时汇聚的节点上。

  • 基于模型的方法与学习的融合:试图把 ZMP/MPC 的稳定性与 RL 的强健性结合起来的混合方法正在增多——底层用学习、上层规划用基于模型的方法,这样的分工。
  • 操作与行走整合的深化:把 Loco-Manipulation 用单一策略处理的尝试仍在继续。
  • 基础模型自下而上的渗透:VLA 与行为基础模型正逐步取代上层规划层,用语言下达指令的交互方式正变得越来越自然。
  • 硬件的成熟:有利于力控制、耐用的执行器,轻质材料,以及续航更长的电池,是实用性的关键。

这些趋势最终会在哪里交汇,目前仍是开放的问题。可以确定的是,没有哪一项单一技术能独自完成人形机器人这件事——物理、学习、硬件、安全必须一同成熟。

有一点值得特别强调:华丽的演示视频,与每天可靠完成作业的实用性之间,仍然存在很大的距离。在特定条件下优化出的一次成功,与在陌生环境中反复取得成功的可靠性,是完全不同量级的难题。冷静地正视这段距离,是准确理解这项技术的出发点。

结语

人形机器人控制,是物理与学习相遇的地方。ZMP、MPC、全身控制这类基于模型的方法显式地处理物理规律,赋予系统稳定性与可解释性;强化学习与 sim2real 则为应对崎岖的现实增添了强健性。而在这之上,VLA 与行为基础模型的趋势,正试图更广泛地覆盖"该做什么"这个问题。

在同一具身体里,同时完成双腿行走与双手操作——这一整合,正是当下这一领域最炽热的前线。路还很长,但机器人像人一样走进人类空间、在其中工作的未来,正一点点从演示视频走向真实的作业。

参考资料

현재 단락 (1/229)

人形机器人是一个由来已久的梦想 —— 一台像人一样用双腿站立行走、用双手抓取和操作物体、直接使用人类空间与工具的机器。过去几年里,这个梦想正一点点走出实验室的演示,走向真实的作业现场。

작성 글자: 0원문 글자: 10,594작성 단락: 0/229