# 关节角还是末端位置：机器人的动作写在哪套坐标里

从关节空间与任务空间的分界出发，讲清正逆运动学为什么一个唯一、一个多解，以及 VLA 输出的 7 维动作到底指什么

> 逆运动学 · VLA 模型 · 机器人运动学 · 约 6 分钟 · 10 月 22 日

## 本篇要点

1. 关节空间用每个关节的角度描述姿势，任务空间用末端的 6 维位姿（3 个位置量加 3 个朝向量）描述任务；前者与具体机器绑定，后者与任务绑定。
2. 正运动学由关节角算末端位姿，结果唯一；逆运动学由末端位姿反解关节角，可能多解、无解，或在奇异位形附近变得难以稳定求解。
3. 同一个末端位置有多种摆法，根源是自由度多于任务约束：两连杆臂只约束位置时就有“肘上”“肘下”两组解，而两者的末端朝向并不相同。
4. 冗余臂一旦有解就有无穷多解，多出来的自由度用来避障、避开关节限位和奇异位形，所以多解是可以利用的余量，并非缺陷。
5. “末端能到达”不等于“动作能执行”：整条轨迹上每一点都要有合法的关节解。
6. OpenVLA 的 7 维动作是末端位置增量、姿态增量和夹爪开合，属于任务空间的相对表示；逆解由机器人侧环境完成，模型本身不检查限位、奇异与碰撞。
7. 动作增量在哪个方向、用什么角度表示由数据集约定决定，这是与视觉泛化并列的另一个跨机器人迁移障碍。

---

上一篇讲 VLA 时，留下了一个没拆开的细节：OpenVLA 每次输出“7 个数”，说这 7 个数就是机器人的动作。这 7 个数是关节角度吗？不是。要弄清它是什么，得先弄清机器人用两套坐标描述同一个动作。

## 一个动作，两套坐标

设想一台桌面机械臂要把杯子端起来。控制器真正能直接指挥的，是让每个关节转到多少度：典型机械臂有 6 个或 7 个旋转关节，每个关节的角度是一个数，合起来的一组数完全确定了机械臂此刻的姿势。把这组数当作坐标，所有可能的取值构成一个空间，叫作**关节空间**（也叫构型空间）。机器人有多少个能独立驱动的量，就有多少个**自由度**；对串联旋转关节的机械臂来说，关节数就等于自由度数。

人通常不这样描述动作。我们说的是“手往前伸 5 厘米”“手腕转 15 度”“夹爪闭合”。这里描述的是末端执行器在空间里的状态：位置 3 个量（上下、左右、前后），朝向 3 个量，合起来叫**位姿**，共 6 维。用这种方式描述任务的空间，叫**任务空间**，也叫笛卡尔空间。

两者的分界在这里：关节空间是机器人自己的语言，跟它有几个关节、每个连杆多长绑定在一起；任务空间是任务的语言，只关心手要摆到哪儿。同一个动作，在两套坐标里写出来完全不同。

## 正运动学：从关节到末端，答案唯一

反过来看这个方向——已知每个关节的角度，求末端在哪里——这件事有确定的答案。算法就是从基座出发，把每个关节的旋转和这段连杆的长度依次算进去，一路加到末端，就是一串坐标变换。这叫**正运动学**。

它之所以唯一，是因为输入的信息完整：每个关节转到多少都给了，机械结构又固定，末端的位置和朝向自然只剩一种可能。

## 逆运动学：从末端回到关节，答案不止一个

反过来就麻烦：想让末端到达某个位姿，问每个关节该转多少。这叫**逆运动学**，是整个动作链条里最容易出岔子的地方。

先看最简单的例子。平面上一根两关节机械臂，两段连杆长度都是 1 米，想把手放到 $(1,1)$。距离是 $\sqrt{2}\approx1.41$ 米，小于最多能伸出的 2 米，够得着。用余弦定理：

$$\cos\theta_2=\frac{x^2+y^2-l_1^2-l_2^2}{2l_1l_2}=\frac{2-1-1}{2}=0$$

$\theta_2$ 可以是 $+90^\circ$，也可以是 $-90^\circ$：

- $\theta_2=+90^\circ$，$\theta_1=0^\circ$：第一段连杆水平向右伸，第二段竖直向上折，末端落在 $(1,1)$；
- $\theta_2=-90^\circ$，$\theta_1=90^\circ$：第一段竖直向上，第二段水平向右折，末端也落在 $(1,1)$。

两种摆法差别很大，末端却到同一个点，也就是“肘部朝上”和“肘部朝下”。这里有个容易忽略的细节：两个解的末端**朝向**也不同（一个朝上，一个朝右）。任务只说“手到这个点”，两个解都能用；如果要求端着杯子倒水，朝向是硬约束，两者就不再等价。**同一个位置会有多种摆法，前提是你约束的东西比机器人能动的量少。**

这条规律可以写成一句判断（自由度 $n$ 个、任务约束 $m$ 个）：$n<m$ 无解；$n=m$ 一般有有限个解；$n>m$ 一旦有解，就有无穷多个解。

真实的机械臂常落在第三种：常见的 Franka Panda 有 7 个关节，末端位姿只有 6 维约束，多出来的那一个自由度叫**冗余**。它的直观表现是自运动——末端位姿锁住不动，整条手臂还能微微摆动。

另有两种坏情况。一是无解：目标超出工作空间，怎么摆都够不着。二是**奇异位形**：某些姿势下，末端往某个方向挪一点点，关节却要转动极大角度才能跟上，甚至转不过来。

## 多解是余量，不是缺陷

既然要给控制器一个确定指令，为什么不规定“永远选第一个解”？因为多出来的选择权正是机器人灵活的地方：同一个末端位姿下，可以挑不撞障碍物、离关节转动限位更远、离奇异位形更远、或者更省力的那一组。这也是为什么流水线上 6 轴臂够用，而在狭窄柜子里取东西往往要靠 7 轴的那一个冗余自由度。

多解还解释了另一个常见误判：**末端能到达某一点，不等于这个动作能执行。** 如果要求手沿一条直线推过去，这条直线上每一点都必须存在满足关节限位、远离奇异的解，中间有一段过不去，整条动作就得改。所以真实系统执行前，常要把末端轨迹换算到关节空间逐点检查——逆运动学在工程上比正运动学麻烦得多，原因就在这里。

## 回到 VLA：那 7 个数写在哪套坐标里

现在可以回答开头的问题。

OpenVLA 输出的 7 维动作是：3 个末端位置增量、3 个末端姿态增量，加上 1 个夹爪开合（+1 表示张开，0 表示闭合）[2][3]。它说的是任务空间的语言，而且是“相对现在再挪多少”，既不是关节角，也不是一个绝对的终点。

从这 7 个数到关节角，中间这一步不由模型做：机器人侧的环境把增量加到当前末端位姿上，再交给逆运动学求解器算出各个关节的角度 [3]。

这样设计有两个实在的好处。一是跨平台可比：不同机械臂关节数不同，6 个和 7 个的动作维度对不上，没法混在同一份数据里训练；而“末端位姿增量加夹爪”对谁都一样。二是底层已有成熟解法：逆解、关节限位、速度限制、平滑插值都是控制器一直在处理的事，不必让大模型重学一遍。模型每几百毫秒给出一个新的小增量，关节级的高频跟踪交给底层，所以它输出频率低不等于机器人动得慢。

代价也很清楚。模型对**可执行性**没有感觉：它不检查关节限位，不知道此刻是否接近奇异位形，也不做碰撞检测，这些只能从数据里隐式学到一点。另外，增量的含义由数据集约定：BridgeData V2 里 dX 是末端前后方向、dZ 是上下方向，DROID 里姿态增量用欧拉角表示 [3]。换个数据集、换台机器人，同一个数值可能代表不同方向的运动——这是与视觉泛化并列的另一半迁移难题。

## 一句话收束

任务空间写“要什么”，关节空间写“怎么做”：正运动学把后者翻成前者，答案唯一；逆运动学把前者翻回后者，可能多解、可能无解，还可能在某些位形上突然变难。VLA 在任务空间里给出增量，把逆解留给底层控制器——这既是它能用一套模型管多种机器人的原因，也是它管不到关节限位、奇异和碰撞的原因。

## 术语表

- 关节空间（构型空间）：把每个关节的角度当成一组坐标，一个点就对应机器人一个确定的姿势。
- 任务空间：用末端的位置和朝向描述“手要摆到哪儿”，与具体机器有几个关节无关。
- 位姿：末端在空间中的状态，位置 3 个量加朝向 3 个量，共 6 维。
- 自由度与冗余：能独立驱动的量的个数；超过任务所需的那部分叫冗余，对应“末端不动、手臂还能摆”的自运动。
- 正运动学：已知关节角度算末端位姿，靠一串坐标变换完成，答案唯一。
- 逆运动学：已知末端位姿反解关节角度，会多解、无解，或接近奇异时求解困难。
- 奇异位形：某些姿势下末端微小移动需要关节大幅转动，能到达却难以平稳执行。

## 来源

1. [Kris Hauser《Robotic Systems》逆运动学一章 — 任务空间、冗余与解个数规则、奇异位形的定义](https://motion.cs.illinois.edu/RoboticSystems/InverseKinematics.html)
2. [OpenVLA: An Open-Source Vision-Language-Action Model — 模型输出 7 维机器人控制动作](https://arxiv.org/html/2406.09246)
3. [OpenVLA 作者对动作空间含义的说明 — 末端位置与姿态增量、夹爪开合、坐标约定随数据集而定，逆解由机器人侧环境完成](https://github.com/openvla/openvla/issues/3)

---

原文：https://pangzhengboyin.com/articles/joint-space-vs-task-space-inverse-kinematics-a0af582a

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