# 从“把杯子放进水槽”到一串关节角：机器人把一句话拆成三层

任务层定顺序、运动层定轨迹、控制层定力矩，以及一句话最常在哪一层断掉

> 任务与运动规划 · 大模型与机器人 · 运动控制 · VLA 模型 · 约 6 分钟 · 10 月 22 日

## 本篇要点

1. 一句长指令要经过三层：任务层定步骤顺序，运动层定轨迹和抓放位置，控制层定力矩；三层的时间尺度相差几个数量级，这是分层存在的重要原因。
2. 任务层用“前提条件与效果”把世界压成离散事实，只判断逻辑上说不说得通；大模型擅长这一层的分解，但必须与“此刻能不能做成”的可行性打分结合，并每执行一步就重新规划。
3. 运动层靠构型空间把“摆姿态”变成“高维空间里连一条不穿障碍的线”，主流做法是采样找可行路径而非最优路径。
4. 夹在两层之间的“抓哪一侧、放哪儿、什么朝向”是连续参数，决定通用性能走多远，也是 TAMP 综述指出的最吃紧处。
5. 四个断点：任务计划在几何上不可行、连续参数选错、状态估计错误、端到端模型缺少中间纠错机会；分层的价值是在层与层之间留出验证与回头重规划的接口。

---

“把桌上的杯子放进水槽。”人做这件事不用想：走过去、伸手、抓住、转身、松手。同一句话交给机器人，会变成三个性质不同的问题：先做什么后做什么、手怎么在空间里挪过去、每个关节每一毫秒出多大力。

这篇把这三层摊开，看清每一层输入什么、输出什么，以及一句话最常在哪一层断掉。

## 全貌：三个问题，三种时间尺度

第二段按顺序、几何、力学展开：任务层的输出是一串离散步骤（走到桌边 → 抓住杯子 → 走到水槽 → 松手）；运动层把其中一步展开成一条连续轨迹，即每个时刻手腕在哪、朝哪个方向；控制层把轨迹上的每个点变成关节力矩。

三层的时间尺度差了几个数量级：任务层可能几十秒才决策一次，运动层算一条轨迹要几百毫秒到几秒，控制层每秒要更新几百到上千次。让每秒要出上千次结果的模块等上层慢慢想，是不可能的。分层先是被这个差别逼出来的。

```mermaid
flowchart LR
  A["一句指令：把杯子放进水槽"] --> B["任务层：定步骤顺序"]
  B --> C["运动层：定轨迹与抓放位置"]
  C --> D["控制层：定力矩与电流"]
  D --> E["关节真的动起来"]
  E --> F["传感器看到的新状态"]
  F --> B
```

## 任务层：世界被压成一张清单

任务层只认几个离散事实：杯子在桌上、手是空的。每个动作用两句话描述——**前提条件**和**效果**：抓杯子要求“手是空的”且“杯子可及”，效果是“手上有杯子”。规划于是变成搜索：找一串动作，让每个动作轮到它时前提刚好成立。

这样做的好处，是连续的物理世界被压成有限个状态，搜索有现成算法可用。代价是这一层不知道距离，不知道碰撞，不知道杯子有多重——它只判断逻辑上说不说得通。

大模型常被放在这一层，因为它确实会拆步骤：倒水之前要先拿杯子。但它不知道杯子还在不在桌上、手是不是空的、那个位置够不够得着。SayCan 的办法是把两件事相乘：语言模型给每个技能一个“这对完成指令有多大用”的分，价值函数给一个“此刻能做成的概率”，相乘后选最高的执行；执行完一个技能，再问一次 [1]。

![SayCan 的结构：语言模型给技能的“有用程度”打分，价值函数给“此刻做成的概率”打分，相乘选出下一步，然后循环](https://say-can.github.io/img/saycan.png)

在 101 个真实厨房任务上，这个系统选对技能序列的比例是 84%，真正做完的是 74%；加入可行性打分后，误差大约减半 [1]。比数字更要紧的是结构：**每执行一步就重新规划一次**，而不是算完一整条计划再一口气执行。上层因此随时有机会发现前提已经不成立。

## 运动层：位姿变成高维空间里的一个点

一台七轴机械臂，每个关节角是一个数，七个角合起来决定一个完整姿态。把七个角当成七个坐标轴，就得到七维的**构型空间**：手臂的每一种姿态是里面一个点，“从当前位置挪到杯壁”变成“在两个点之间连一条线”，“会不会撞到桌沿”变成“这条线会不会穿过被占掉的那块区域”。[上一篇](https://pangzhengboyin.com/articles/joint-space-vs-task-space-inverse-kinematics-a0af582a)里的末端位姿，在这一层就是“先换成构型空间里的坐标，再连线”。

找这条线的主流做法是**采样**：随机在空间里撒点、从起点往外长出一棵树、碰上目标就停。它赌的是“存在一条可行路径”比“找到最短的那条”容易得多，而机器人通常只需要前者。

这一层还要定两个**连续参数**：抓杯子的哪一侧、放在水槽的哪里、什么朝向。它们既不是离散步骤，也不是关节角，而是夹在两层中间的数。TAMP（任务与运动规划）的综述指出，通用性最吃紧的地方恰恰是这类“怎么抓、放哪儿”的实数参数 [2]。

## 控制层：轨迹只是期望，不是结果

轨迹说“0.7 秒时手腕应该到 (x, y, z)”，控制器面对的是重力、变了的惯量、摩擦和间隙。它的活是算力矩，并按测到的偏差不断修正。只做位置控制时，它会假定没人挡我，一碰到意料之外的接触就一路使劲往里顶；需要接触的任务（拧、插、擦）得改成控制力，这一层留到下一篇专门讲。控制层也会失败：要求关节在 0.1 秒内转过 90 度，电机给不出那么大扭矩。

## 接口最容易断的三处

**第一处：任务计划在几何上做不到。** 水槽前面被椅子挡着，或者手从任何角度都伸不进杯子和墙之间那条缝。分开求解时，任务层以为最优的顺序，运动层直接返回无解，只能回头换顺序——这正是 TAMP 要反复迭代的原因 [2][3]。

**第二处：中间那两个连续参数选错。** 抓点选在杯口，力封闭没问题，能提起来，但往水槽里倒的时候手腕就转不动了；放的位置离槽壁太近，松手瞬间就碰翻。[力封闭](https://pangzhengboyin.com/articles/why-grasping-needs-force-closure-a6130817)那条界线在这里显出后果：它只回答“抓得住”，不回答“抓得对不对下一步”。

**第三处：状态估计错了。** 每一层都以为任务在按计划推进，实际上杯子已经滑了、门根本没开。这一种最隐蔽，因为没有任何一层天然负责发现“计划的前提已经不成立”。

端到端 VLA 的选择正好相反：把三层压进一个网络，接口问题直接消失，也不用再写前提条件。代价是误差失去了中间被纠正的机会，而且现有 VLA 的训练和评测主要还集中在短时序任务上，多步串联与子任务依赖仍是明确的短板 [4]。这也解释了为什么能真干活的系统大多保留分层——分层不是为了架构好看，而是为了在层与层之间留出纠错的接口。

## 一句话收束

一句“把杯子放进水槽”，先被拆成一串离散步骤（管顺序），每一步再展开成一条不撞东西的轨迹（管几何，顺带定了抓哪儿、放哪儿），轨迹最后换成每毫秒的力矩（管力学）。最容易断的地方不在某一层内部，而在层与层之间：符号说“放进水槽”，几何可能说“伸不进去”。所以可靠性不来自某一层多聪明，而来自层与层之间有没有验证和回头的通道。

## 术语表

- 任务与运动规划（TAMP）：把“先做什么”的离散搜索和“怎么挪过去”的连续几何求解放在一起反复迭代，而不是各算各的。
- 前提条件与效果：描述一个动作在什么状态下能用、用完之后世界变成什么样；任务层靠这两句话把连续世界压成有限个状态。
- 构型空间：把每个关节角当一个坐标轴撑出的高维空间，手臂的每种姿态是里面一个点，避障变成“线不能穿过某块区域”。
- 采样式运动规划：随机在构型空间撒点、从起点往外长树，找到一条可行路径就停，不追求最短最优。
- 连续参数：不属于离散步骤、也不属于关节角的中间量，比如抓哪一侧、放在哪、朝哪个方向；TAMP 里最难也最影响成败的部分。
- 可行性打分（affordance）：估计某个技能在当前状态下能成功的概率，用来把语言模型“说得通”的计划约束到“做得到”的动作上。

## 来源

1. [Do As I Can, Not As I Say (SayCan) — 语言模型打分与价值函数可行性接地，101 个真实厨房任务上规划 84%、执行 74%](https://arxiv.org/abs/2204.01691)
2. [Integrated Task and Motion Planning (Annual Review of Control, Robotics, and Autonomous Systems) — TAMP 问题定义与连续参数层的作用](https://www.annualreviews.org/content/journals/10.1146/annurev-control-091420-084139)
3. [Recent Trends in Task and Motion Planning for Robotics: A Survey — 任务层与运动层分离求解的代价与几何可行性检查](https://dl.acm.org/doi/full/10.1145/3583136)
4. [Long-VLA — 现有 VLA 框架主要处理短时序任务，多步串联与子任务依赖仍是短板](https://proceedings.mlr.press/v305/fan25a.html)

---

原文：https://pangzhengboyin.com/articles/task-motion-control-three-layers-e3f4e06d

> **庞征博引** · 想学的，慢慢都会
>
> 庞征博引是把想学的东西写成连载的 AI 学习工具。说出想学什么，它会先了解你的基础，再把主题写成一篇篇 5–10 分钟能读完的文章；边读边问，接下来学什么跟着你走。这篇就是这样写出来的。
>
> 开始你自己的连载 → https://pangzhengboyin.com
