本文面向:
只有简单线性代数基础(矩阵乘法、逆矩阵),
但想真正理解「位姿变换 / delta_pose 从何而来」的读者。
1. 问题从哪里来?
在机械臂、具身智能中,我们经常遇到这样的问题:
已知末端在两个时刻的绝对位姿
[
T_1,\; T_2
]如何计算末端从 (T_1) 运动到 (T_2) 的 delta_pose?
你可能见过一个“标准答案”:
[
\boxed{
T_{\Delta} = T_1^{-1} T_2
}
]
但问题是:
- 这是定义吗?
- 为什么可以这样乘?
- 它和“坐标系”“点的位置”有什么关系?
这篇文章就来把这件事从地基开始讲清楚。
2. 什么是“位姿”?先别急着上公式
先不用矩阵,先说人话。
一个刚体(比如机械臂末端)的位姿,只包含两件事:
- 它的原点在哪里?(平移)
- 它的坐标轴朝哪?(旋转)
3. 一个关键直觉:点的位置 = 原点 + 方向
设:
- 世界坐标系:(W)
- 末端坐标系:(E)
- 某个物理点:(P)
已知:
- 末端原点在世界中的位置:
[
p_E^W
] - 点 (P) 在末端坐标系下的坐标:
[
p^E
] - 末端坐标系相对于世界的旋转:
[
R_E^W
]
那么,点在世界坐标系中的位置一定是:
[
\boxed{
p^W = p_E^W + R_E^W \, p^E
}
]
这不是公式技巧,而是几何事实:
先走到末端原点
再沿着末端坐标轴的方向走到点 P
但方向要先旋转到世界系
4. 齐次矩阵不是魔法,只是“打包”
上面的式子有个问题:
每次都要写
[
p^W = R p^E + t
]
很麻烦,而且不好连着算。
解决办法:加一个 1
把点写成齐次坐标:
[
\bar p^E =
\begin{bmatrix}
p^E \
1
\end{bmatrix}
]
把旋转 + 平移打包成一个矩阵:
[
{}^{W}T_E =
\begin{bmatrix}
R_E^W & p_E^W \
0 & 1
\end{bmatrix}
]
算一下矩阵乘法:
[
{}^{W}T_E \bar p^E
=
\begin{bmatrix}
R_E^W p^E + p_E^W \
1
\end{bmatrix}
]
第一行正好就是上面的几何公式。
所以:
[
\boxed{
\bar p^W = {}^{W}T_E \, \bar p^E
}
]
这不是新物理定律
只是把「旋转 + 平移」写成了一次矩阵乘法
5. 为什么逆矩阵代表“反向变换”?
如果:
[
\bar p^W = T \bar p^E
]
那根据线性代数最基本的事实:
[
\bar p^E = T^{-1} \bar p^W
]
没有新含义,只是:
正向变换 → 逆矩阵
世界系 → 末端系
6. delta_pose 到底在算什么?
现在进入正题。
已知两个时刻末端的绝对位姿(都在世界系):
[
T1 = {}^{W}T{E1}, \quad
T_2 = {}^{W}T{E_2}
]
我们想要的 delta_pose 是:
在 (E_1) 坐标系中看,(E_2) 在哪里?
即:
[
T\Delta = {}^{E_1}T{E_2}
]
7. 用“同一个点”推导 delta_pose
取一个物理点 (P),它在 (E_2) 坐标系中的坐标是 (\bar p^{E_2})。
第一步:从 (E_2) 到世界
[
\bar p^W = T_2 \bar p^{E_2}
]
第二步:从世界到 (E_1)
[
\bar p^{E_1} = T_1^{-1} \bar p^W
]
合在一起:
[
\bar p^{E_1} = T_1^{-1} T_2 \bar p^{E_2}
]
而 delta_pose 的定义正是:
[
\bar p^{E1} = T\Delta \bar p^{E_2}
]
于是只能是:
[
\boxed{
T_\Delta = T_1^{-1} T_2
}
]
8. 用 2D 平面做一个具体例子(非常重要)
设定
- 2D 平面
- 末端在时刻 1:
- 位置:(1, 0)
- 朝向:90°(y 轴向上)
- 时刻 2:
- 位置:(1, 1)
- 朝向:90°
问题
在世界系看:
- 位移是:(0, 1)
但在末端系看呢?
由于末端坐标轴已经转了 90°:
- 世界 y 方向 = 末端 x 方向
👉 所以 delta_pose 在末端系中是:
[
\Delta p = (1, 0)
]
这正是公式中:
[
\Delta p = R_1^T (p_2 - p_1)
]
在干的事。
9. 常见误区(非常容易踩)
❌ 直接用:
[
p_2 - p_1
]
这只是在世界系下的差值,
而控制、学习需要的是:
末端自己“感觉”到的运动
10. 总结一句话(可以背下来)
delta_pose 不是两个位姿的“差”
它是:
先从世界回到 t1 的末端,再走到 t2 的末端
数学上就是:
[
\boxed{
T_\Delta = T_1^{-1} T_2
}
]
11. 写在最后
齐次变换矩阵不是玄学,也不是死记硬背的公式。
它只是把一句非常朴素的话:
“先旋转,再平移”
用线性代数统一、优雅地表达了出来。
如果你能理解这一点,
后面的 IK、控制、模仿学习、diffusion policy,
都会顺很多。
如果你之后想继续往下,我很推荐的顺序是:
- 2D → 3D 的完全类比
- 为什么学习算法一定喜欢用 delta_pose
- delta_pose 和 twist / se(3) 的关系(不硬上李代数版)
哪一篇你想先写?我可以继续帮你整理。