澳五机器人 Robotics——从笛卡尔坐标到齐次变换,一次理清位置、姿态与位姿
---
Robotics——从笛卡尔坐标到齐次变换,一次理清位置、姿态与位姿
2026 年 9 月 22 日
机器人学里最容易被低估的一章,就是位置与姿态描述。很多人觉得这不过是坐标变换,结果真到了标定相机、调试六轴臂的时候,才发现坑全埋在这里。[citation:63.41]
位置好办,三个数一说清楚;姿态两个字,背后是旋转矩阵、欧拉角、四元数、齐次变换一整套体系。
---
一、为什么这是绕不开的第一道坎
一个抓取任务背后至少叠了三层描述:[citation:63.41]
杯子的位置:相对机器人基座的坐标,比如 (0.35, 0.12, 0.08)
杯子的姿态:正着放还是躺倒,手柄朝哪边
机械爪的位姿:爪子要到杯子正上方,开口方向要匹配
这三层必须统一在同一个描述体系里,才能算出关节该怎么动。
---
二、位置、姿态、位姿
位置(Position)
位置永远相对于某个坐标系。 说"一个物体在 (1, 2, 3)"——不补上"在哪个坐标系下",这句话不完整。[citation:63.41]
在机器人中通常有这些固定角色:
世界坐标系 (World) → 机器人基座 (Base) → 末端工具 (Tool) → 工件 (Work Object)
位置用 3×1 向量表示:
$$^A\mathbf{p} = \begin{bmatrix} px \ py \ p_z \end{bmatrix}$$
左上标 A 表示这是在坐标系 {A} 中的描述。
姿态(Orientation)
姿态描述的是"一个坐标系相对另一个坐标系怎么转"。没有唯一表示法,有三套主流工具:[citation:63.41][citation:63.12]
| 工具 | 层 | 优点 | 缺点 |
|:----|:--:|:----|:----|
| 旋转矩阵 | 计算层 | 矩阵乘法天然支持级联复合 | 冗余(9个数表示3自由度),需正交约束 |
| 欧拉角 | 人机交互层 | 人最容易理解(先绕Z再绕Y) | 万向锁,插值可能扭曲 |
| 四元数 | 数值层 | 无万向锁,插值平滑,数值稳定 | 可读性差 |
旋转矩阵 $R$ 是一个 3×3 矩阵,由被描述坐标系 {B} 的三个单位向量在参考系 {A} 中的投影组成:
$$^ABR = \begin{bmatrix} ^A\mathbf{x}B & ^A\mathbf{y}B & ^A\mathbf{z}B \end{bmatrix}$$
位姿(Pose)
位姿 = 位置 + 姿态。一般写作 ${B} = { ^ABR, ^A\mathbf{p}B }$。[citation:63.16][citation:63.14]
---
三、齐次变换:把旋转和平移装进一个矩阵
旋转矩阵 $R$ 和位置向量 $\mathbf{p}$ 分开使用时,一次完整的坐标变换需要两步操作:
^A\mathbf{p} = ^ABR \cdot ^B\mathbf{p} + ^A\mathbf{p}B
在机器人学中,这种复合变换会频繁嵌套,"乘加乘加"的写法既不优雅也容易出错。齐次变换矩阵 把旋转和平并统一到一个 4×4 矩阵中:[citation:63.12][citation:63.14]
$$^ABT = \begin{bmatrix} ^ABR & ^A\mathbf{p}_B \ 0 & 1 \end{bmatrix} = \begin{bmatrix}
r{11} & r{12} & r{13} & px \
r{21} & r{22} & r{23} & py \
r{31} & r{32} & r{33} & pz \
0 & 0 & 0 & 1
\end{bmatrix}$$
这样坐标变换就统一成了矩阵乘法:
$$^A\mathbf{p} = ^A_BT \cdot ^B\mathbf{p}$$
齐次变换的级联——正运动学的核心
机械臂的正运动学,本质就是一连串齐次变换矩阵的连乘:[citation:63.10][citation:63.12]
$$^0nT = ^01T \cdot ^12T \cdot ^23T \cdots ^{n-1}_nT$$
每一段变换 $^{i-1}_iT$ 描述一个关节或连杆的位移,连乘的结果就是末端执行器相对基座的完整位姿。
---
四、实用建议
三层表示要自由切换
| 场景 | 用哪一层 | 原因 |
|:----|:--------:|------|
| 示教器/UI 配置 | 欧拉角 | 人最易理解 |
| 姿态复合运算 | 旋转矩阵/齐次变换 | 乘法天然支持级联 |
| 插值/优化/SLAM | 四元数 | 平滑、稳定、无万向锁 |
千万别锁死在某一层里——想对欧拉角做平滑插值,正确做法是先转四元数插完,再转回欧拉角发给执行器。[citation:63.41]
踩坑清单
| 坑 | 后果 | 解法 |
|:--|:----|:-----|
| 欧拉角插值 | 机械臂中途扭成麻花 | 转四元数再插值 |
| 旋转矩阵手性搞反 | 机械臂往反方向动 | 检查坐标系是左手还是右手系 |
| 四元数没归一化 | 累计误差越来越大 | 每次运算后归一化 |
| 忘了左上标 | 不知道位置相对于谁 | 写代码时明确标注参考系 |
| 欧拉角万向锁 | 丢失一个旋转自由度 | 改用四元数或旋转矩阵 |
---
五、一句话总结
位置靠三个数,姿态背后是一整套体系。 旋转矩阵负责级联计算,欧拉角负责与人交互,四元数负责平滑插值——三者用齐次变换矩阵统一成 4×4 的形式,使得多级坐标变换能通过矩阵连乘一步到位。理解这套描述体系,是进入机器人运动学的语言关。[citation:63.12][citation:63.41]