跳转至

前置 3 · 让机器人动起来、抓住东西

第三章是给从 ML 这一边过来的读者补控制和抓取基础。控制是机器人世界里最不像 ML 的那一块:它实时、连续、跟物理硬耦合,调起来跟训模型完全是两种节奏。先有体感再去读 VLA 那一线 paper 会顺很多。


控制是什么:每秒一千次的反馈循环

ML 人写一个推理脚本,输入 → 模型 → 输出,跑完就完。机器人控制不是这样。控制是一个永远在跑的循环

while 机器人开着:
    读传感器 (编码器、IMU、力)
    算误差 (实际 vs 期望)
    根据误差出控制量 (电流、力矩)
    打到电机
    等下一周期 (typical 1ms)

这个循环跑得越快越稳,机器人的动态性能越好。工业级伺服一般 1kHz(每毫秒一次)。家用人形受限于电池和算力,关节级伺服 1-4kHz,更高层规划 100Hz,更上一层任务规划 1-10Hz。

频率分层是机器人控制的灵魂。低层快、高层慢,每一层只解自己时间尺度的问题。机器人的思维结构跟 LLM 完全反过来:LLM 一次思考几秒钟出一段话,机器人是一秒钟做一千次微小决策。

ML 类比:实时控制循环 ≈ 一个永远不停的 forward pass,每个 forward 必须在 1ms 内完成,不允许 GC 卡顿,不允许 cache miss 大波动。这是为什么机器人控制至今几乎从不在 Python 里跑,全部 C++ 实时线程或更底层。


PID:最古老但仍最常用的控制器

PID (Proportional-Integral-Derivative) 是控制论第一节课的内容,也是工业上 80% 的真实控制器还在用的形式。

设你想让一个关节从当前角度 q 转到目标角度 q*,定义误差 e = q* - q。PID 给出控制量 u(送给电机的指令):

u = Kp * e + Ki * ∫e dt + Kd * de/dt
  • P (proportional):误差越大,使劲越大。直观,但纯 P 控制会震荡。
  • I (integral):累积过去的误差,消除稳态偏差(系统稳定后还差一点点的"那一点")。
  • D (derivative):根据误差变化率提前减速,抑制超调和震荡。

调三个增益 (Kp, Ki, Kd) 是个手工活儿。Ziegler-Nichols 给了一套规则,但工业上多数靠工程师试。PID 调得好的人在工厂里仍然是抢手货

PD 是 PID 去掉 I。机械臂位置控制经常用 PD(电机摩擦小,I 不那么必要),力控经常用 PI(要消除稳态力误差)。

ML 类比:PID ≈ 一个手工调过的、状态量是误差和误差累积的、单步执行的控制策略。一个神经网络当然可以学到它的行为,但学一个 PD 一致性 = 一段轨迹永远稳定收敛 = 这件事是非平凡的。很多 VLA 跑出来的轨迹之所以"有点抖"、"在终点附近犹豫",本质上是它没学到 PID 那种简洁的反馈律


阻抗控制:把机械臂当弹簧+阻尼器

阻抗控制 (impedance control) 是机器人和环境接触时用的核心控制律。

直觉是这样:你不想让机械臂"硬",因为硬的机械臂撞到东西会损坏物体或者关节。你想让它"软",像一根带阻尼的弹簧。给定期望位置 x*、当前位置 x、当前速度 v,阻抗控制把机械臂的动力学整成:

F = K * (x* - x) - D * v
  • K 是刚度(弹簧硬度)。K 大 = 抗外力强、跟踪准,K 小 = 软、安全。
  • D 是阻尼系数。D 大 = 不容易震荡,D 小 = 响应快。

这个公式让末端表现得像一个二阶机械系统:弹簧拉它去 x,阻尼防止它震荡。外力推它,它会让一让,松开手它弹回来*。

阻抗控制要工作,硬件上必须真的能感受到力。要么有 link-side 关节力矩传感器(KUKA LBR iiwa, Franka Panda),要么有末端 F/T sensor。没有这些传感器的机器人做"impedance control"基本上是装的:靠电机电流反推力矩,误差 30-50%,碰人时反应慢半拍。

阻抗的对偶叫 admittance control(导纳控制),公式反过来:测力,输出位置/速度。两者哪个用看场景,KUKA 这种 link-torque 平台天然适合阻抗,工业插销装配机器人天然适合导纳。

VLA 跟阻抗控制的关系:当前 VLA 的输出层都是位置或末端位姿,下游接一个 impedance controller 把它变成实际电机指令。这一层是绝大多数 VLA paper 不写但每家公司都在用的真东西。


力控 vs 位控

控制目标只有两类:

位控 (position control):让关节或末端去到指定位置。工业搬运、精确装配、画线这类任务。 力控 (force control):让关节或末端施加指定力。打磨、抛光、按压这类任务。

混合的叫 hybrid position/force control:在某些方向位控,某些方向力控。比如擦桌子:垂直方向力控(保证压力),水平方向位控(沿轨迹走)。

阻抗/导纳控制是位控和力控之间的连续插值。K 无穷大就是纯位控,K = 0 就是纯力控。

跟 VLA 的接口问题:当前 VLA 几乎全部输出位置类指令,原因是 teleop 数据收的也是位置。要训一个直接输出力的 VLA 在数据上很难凑齐:人类操作员遥控时也是按位置思考,不是按力。这是触觉/力觉数据稀缺这件事的另一面。


轨迹:从 spline 到 DMP

机器人怎么表示"从 A 走到 B 的一条具体路径"?

直线插值。最朴素:在关节空间或笛卡尔空间从起点到终点匀速插值。简单,但加速度不连续,机器人会"顿一下"。

多项式 / spline。三次或五次多项式让位置、速度、加速度都连续。是工业机械臂最常用的轨迹表示。MoveIt 和大部分商用控制器内部都在用这个。

B-spline / NURBS。控制点 + 基函数,平滑性好,常见于 CNC 加工和 3D 打印。

Dynamic Movement Primitives (DMP)。Stefan Schaal 那一派 2002 年开始推的:一个轨迹由一个吸引子动力系统加一个学得到的 forcing term 组成。优点是能从一次示范学一段轨迹然后泛化到不同起点和终点。这是 imitation learning 的早期主流,2010 年代被 deep learning 那一波部分取代。

神经网络轨迹。Diffusion Policy、π0 这一波直接让网络生成一段连续动作。本质是把"轨迹应该长什么样"完全交给数据驱动。

ML 类比:轨迹 ≈ 一个时间序列的输出。spline / DMP 是手工设计的归纳偏置,神经网络轨迹是数据驱动。这个谱跟 NLP 里"模板生成 → seq2seq → 大语言模型"的演进是一样的。


抓取:把"那个东西拿起来"翻译成关节角

抓取是机器人 manipulation 这一行的祖传难题。第 4 章会用整章解构它的现状,这里只立基本词汇。

抓取问题的输入:场景中一个目标物体(可能是给定的,可能要 detection 找出来)。 抓取问题的输出:一组关节命令,让夹爪在合适的姿态、合适的位置闭合,把物体带起来。

中间需要确定的几样东西:

抓取位姿 (grasp pose)。夹爪在什么姿态下闭合。最常用的表示是 6-DoF:(x, y, z, roll, pitch, yaw),告诉你夹爪中心的位置和朝向。两指夹爪还要再加一个夹爪开度 (gripper width)。

抓取类型

  • 平行夹 (parallel-jaw / two-finger)。最常见。两个平行的指头从两侧合拢。受限于物体形状。
  • 吸盘 (suction)。靠真空吸住一个平面。Amazon 仓库里几百万件每天靠吸盘搬。要求物体表面够光滑、够气密。
  • 多指 (multi-finger)。3-5 指。能做复杂的握持,但贵、易坏、控制难。第 4、11 章详谈。
  • 软夹爪 (soft gripper)。硅胶气动,能抓鸡蛋、草莓。代价是力的精度低。

抓取规划的核心定理:force closure 和 form closure

  • 力闭合 (force closure):在足够的摩擦下,夹爪能抵抗物体上任何方向的外力。等价说法:摩擦锥的并集覆盖整个力空间。一只手抓水杯就是这种。
  • 形闭合 (form closure):靠夹爪几何就锁住物体,不依赖摩擦。两指夹爪夹一根带把手的螺丝刀,从把手上方夹住把手,就是形闭合。

工业上大多数 grasp planner 算的就是"找一对接触点,让两指夹爪在这对点上闭合时是 force closure"。这是 Dex-Net、GG-CNN、6-DoF GraspNet 这一系工作的数学骨架。

Antipodal grasp 是 force closure 在两指夹爪上的简化形式:两指连线穿过物体重心,每只指头的接触法线指向对方,闭合时摩擦锥能抵消所有外力。这个简化让搜索空间从无限维降到几个参数。


抓取的难在哪:第 4 章的开场题

bin picking 大致解了,家庭抓取没解。这件事第 4 章会展开论证。这里先给四条直觉:

第一,物体多样性。仓库 SKU 有限,家里物体无限。一个外卖塑料袋、一个用过的口罩、一只装了两口酒的红酒杯,每一件的力学行为都跟训练集里相差很远。

第二,接触动力学。bin picking 多数是刚体,刚体接触有干净的数学模型。家里一半物体不是刚体:水会晃出来,薯片袋会被捏破,巧克力会化在手指上。这些都不是 grasp planner 能在 force closure 公式里写进去的。

第三,姿态约束。bin picking 怎么抓都行,下一步是丢进盒子。家里很多物体有"必须这样抓"的方向:刀握刀柄、热咖啡握把手、刚出锅的鸡腿不抓断骨那一头。这些是 task-conditioned grasping 的范畴,远超 force closure。

第四,触觉信号缺失。视觉只能看到表面,告诉你不了"这一袋东西多重"、"这个豆腐多软"、"我刚才抓的时候是不是已经在滑了"。第 4 章会展开为什么触觉是最关键也最缺数据的一层。

ML 类比:抓取像一个 multi-modal、long-tail、physics-grounded 的预测任务。它的难度不在"模型不够大",是物理世界本身的分布外比互联网图文严重得多。


移动机器人的控制:导航栈

机器人会走路或会走轮子时,控制问题升一维。

轮式底盘。控制相对简单。差速底盘(左右两轮独立驱动)的运动学是个二维非完整约束系统(不能横移)。麦克纳姆轮 (Mecanum) 加四轮特殊滚子可以原地横移和旋转,全方向移动,但效率低、磨损快。阿克曼底盘(汽车那种)转弯半径有最小限制。

腿式机器人。控制阶跃式难起来。每一步要做:摆动腿规划、支撑腿力分配、躯干姿态控制、ZMP 约束(保证重心在支撑面里)、足底接触相位切换。30 年的研究让这件事在四足上接近"产品化"(Boston Dynamics Spot、ANYmal、Unitree Go2 都到了"插电就能用"),但双足仍然是研究前沿。Honda ASIMO、Boston Dynamics Atlas、Tesla Optimus 这一线推了几十年,到 2025 年才有几款双足能在不平地形上稳定走 30 分钟以上。

导航栈 (navigation stack)。让机器人从 A 走到 B 这件事在工业上有标准化的实现。ROS Nav2 是事实标准,里面包括:global planner(全局路径规划,A* / Dijkstra)、local planner(局部规划,DWB / TEB / MPPI)、costmap(代价地图叠加静态和动态障碍)、recovery behaviors(卡住时的恢复策略)。第 5 章会详谈。

MPC (Model Predictive Control)。这一波在双足和四足里很热。MPC 的思路是:在每个控制周期内,根据当前状态预测未来一小段时间内系统的演化,求解一个最优控制问题,执行第一步,下个周期再来一次。在腿式机器人上 MPC 算的频率通常 50-200Hz,每一步规划 200-1000ms 的未来。Boston Dynamics、ETH ANYmal、MIT Cheetah 那条线都重度依赖 MPC。

ML 类比:MPC 跟 receding horizon 是同一个心智模型。VLA 输出 action chunk + 只执行前几步 + 重新预测,这件事直接借了 MPC 的思想。


几个该有的直觉

把这一章压成几句 takeaway:

  • 机器人控制是个永不停止的实时反馈循环。1kHz 是工业级关节伺服的常见频率,30Hz 是 VLA 当前甜点。频率高低决定能做什么任务。
  • PID/PD 是工业上至今 80% 的控制律。VLA 的精细度在很多任务上还学不到 PID 那种简洁。
  • 阻抗控制让机器人变软。但要工作必须有真力传感器。
  • 抓取是 multi-modal long-tail 物理任务。bin picking 解了,家庭没解。
  • MPC ↔ receding horizon ↔ action chunk 是一回事的不同时代说法。
  • 腿式机器人控制比轮式难一阶。双足比四足再难一阶。这件事跟 DoF 多无关,跟支撑面约束有关。

练习

找一个 PID 在线模拟器(网上很多 Java applet 风格的),手动调 Kp、Ki、Kd 让一个一阶系统稳定收敛到目标值。亲手把 D 调过头让系统震荡起来,亲手把 I 调过头让系统超调,对这三个增益的物理意义建立体感。比读完 Åström 那本书再去调实机省半年。

读 Franka Emika Panda 的 user manual 里关于 Cartesian impedance 的章节。Panda 是这一档机器人里 impedance control 实现得最干净的,他们的 manual 也写得最清楚。读一份真实工业机器人的 manual,比读十篇 paper 让你对控制的工程现实更接近

找一段 Boston Dynamics Atlas 跑酷的视频(2023-2024 年那几段)。看一遍,再看一遍它每次起跳前躯干和腿的协调。然后想一件事:这里面 99% 的算法是经典控制 + MPC,没有 LLM、没有 diffusion、没有 VLA。具身这一行最炫的视觉效果至今多数还来自经典栈,不要被 demo 视频里"机器人很聪明"的印象骗到。

比较 Universal Robots UR5e 和 Franka Panda 的 spec sheet。两台都是协作机械臂,但定位不同。把 payload、reach、repeatability、compliance type、价格列出来看。这件事比"哪个跑得快"更影响公司选型决定

下一章:第 1 章 端到端与分层