机器人学-坐标系与位姿变换
📝 机器人学基础:坐标系与姿态变换学习笔记
第一部分:坐标系的构建 (Construction of Frames)
两个基本坐标系
- {W}\{W\}{W} 世界坐标系 (World Frame):
- 角色:绝对基准,不动的参考系(如:房间角落、地面)。
- 视角:“上帝视角” / “定轴”。
- {B}\{B\}{B} 物体坐标系 (Body Frame):
- 角色:固连在物体上,随物体运动。
- 设定规则:
- 原点 (Origin):通常设在物体的质心 (CoM)。
- 轴向 (Basis):依据物体几何形状或功能设定(如 X轴指机头,Z轴指天)。
向量的两种身份
- 位置向量 (Position Vector):描述“在哪儿”。即 {B}\{B\}{B} 的原点在 {W}\{W\}{W} 中的坐标(平移量)。
- 基向量 (Frame Basis):描述“朝哪儿”。即 {B}\{B\}{B} 的三个轴在 {W}\{W\}{W} 中的投影(旋转量/姿态)。
1. 世界坐标系 {W}\{W\}{W} 的构建标准
世界坐标系是静止不动的,但在不同行业有不同的“行规”:
- 方案 A:ENU (East-North-Up) —— 机器人/ROS/地面车辆标准
- 原点:地图的某个固定点(如实验室门口)。
- XXX 轴:指向正东。
- YYY 轴:指向正北。
- ZZZ 轴:指向天空(重力反方向)。
- 方案 B:NED (North-East-Down) —— 航空航天/无人机/潜艇标准
- 原点:起飞点。
- XXX 轴:指向正北。
- YYY 轴:指向正东。
- ZZZ 轴:指向地心(重力方向)。
- 注意:因为Z轴向下,所以高度增加时,Z值是变负的。
2. 物体坐标系 {B}\{B\}{B} 的构建步骤
当你拿到一个刚体(比如无人机),你需要按以下步骤“画”出坐标系:
- 定原点 (Origin):
- 找到物体的质心 (Center of Mass)。
- 数学定义:rcm=∑miri∑mi\mathbf{r}_{cm} = \frac{\sum m_i \mathbf{r}_i}{\sum m_i}rcm=∑mi∑miri
- 定 XBX_BXB 轴 (Forward):
- 通常定义为物体的运动前方。
- 定 ZBZ_BZB 轴 (Vertical):
- 通常定义为物体的上方(如果是ENU系)或下方(如果是NED系)。
- 定 YBY_BYB 轴 (Lateral):
- 必须通过右手定则由 XXX 和 ZZZ 确定:Y^B=Z^B×X^B\hat{Y}_B = \hat{Z}_B \times \hat{X}_BY^B=Z^B×X^B (叉乘)。
第二部分:旋转矩阵 (Rotation Matrix) —— 数学核心
旋转矩阵 RRR 是一个 3×33 \times 33×3 的矩阵,它是描述姿态的最底层数据。
1. 矩阵的几何定义
假设 {B}\{B\}{B} 系的三个基向量(单位向量)分别是 u^,v^,w^\hat{u}, \hat{v}, \hat{w}u^,v^,w^。
旋转矩阵 ARB{}^A R_BARB 的每一列,实际上就是 {B}\{B\}{B} 的基向量在 {A}\{A\}{A} 中的投影。
ARB=[∣∣∣u^in Av^in Aw^in A∣∣∣]=[r11r12r13r21r22r23r31r32r33] {}^A R_B = \begin{bmatrix} | & | & | \\ \hat{u}_{\text{in } A} & \hat{v}_{\text{in } A} & \hat{w}_{\text{in } A} \\ | & | & | \end{bmatrix} = \begin{bmatrix} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{bmatrix} ARB= ∣u^in A∣∣v^in A∣∣w^in A∣ = r11r21r31r12r22r32r13r23r33
- 第一列:{B}\{B\}{B} 的 X轴 在 {A}\{A\}{A} 看来指向哪里。
- 第二列:{B}\{B\}{B} 的 Y轴 在 {A}\{A\}{A} 看来指向哪里。
- 第三列:{B}\{B\}{B} 的 Z轴 在 {A}\{A\}{A} 看来指向哪里。
2. 核心性质
- 正交性:RT=R−1R^T = R^{-1}RT=R−1。
- 这意味着:矩阵的逆(反向旋转)等于矩阵的转置。这是计算效率极高的原因。
- 行列式:det(R)=+1\det(R) = +1det(R)=+1。
- 如果 det(R)=−1\det(R) = -1det(R)=−1,那不是旋转,那是镜像(物体被翻转了里外),物理上不可能发生。
3. 基础旋转公式(右手定则)
- 绕 X 轴旋转 ϕ\phiϕ (Roll):
Rx(ϕ)=[1000cosϕ−sinϕ0sinϕcosϕ]R_x(\phi) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi & \cos\phi \end{bmatrix}Rx(ϕ)= 1000cosϕsinϕ0−sinϕcosϕ - 绕 Y 轴旋转 θ\thetaθ (Pitch):
Ry(θ)=[cosθ0sinθ010−sinθ0cosθ]R_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix}Ry(θ)= cosθ0−sinθ010sinθ0cosθ - 绕 Z 轴旋转 ψ\psiψ (Yaw):
Rz(ψ)=[cosψ−sinψ0sinψcosψ0001]R_z(\psi) = \begin{bmatrix} \cos\psi & -\sin\psi & 0 \\ \sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix}Rz(ψ)= cosψsinψ0−sinψcosψ0001
🎓 无人机雷达坐标变换计算实例
这是一个经典的刚体变换 (Rigid Body Transformation) 案例。
1. 场景参数定义 (The Setup)
首先,将物理世界的描述转化为数学变量。
A. 坐标系定义
- {W}\{W\}{W} 世界坐标系:房间(不动)。
- {B}\{B\}{B} 机体坐标系:无人机(随动)。
B. 已知条件
-
平移量 (Translation):
无人机({B}\{B\}{B} 原点)在 {W}\{W\}{W} 中的位置。
WPBorg=[10105] {}^W P_{B_{org}} = \begin{bmatrix} 10 \\ 10 \\ 5 \end{bmatrix} WPBorg= 10105 -
旋转量 (Rotation):
无人机绕 Z轴 旋转了 90∘90^\circ90∘(向左转)。- Roll (ϕ\phiϕ) = 0∘0^\circ0∘
- Pitch (θ\thetaθ) = 0∘0^\circ0∘
- Yaw (ψ\psiψ) = 90∘90^\circ90∘
-
局部观测点 (Local Point):
雷达在 {B}\{B\}{B} 中检测到的障碍物坐标。
BP=[230] {}^B P = \begin{bmatrix} 2 \\ 3 \\ 0 \end{bmatrix} BP= 230
(注:这里假设 X=2, Y=3, Z=0)
2. 核心公式 (The Formula)
我们的目标是求障碍物在世界坐标系中的位置 WP{}^W PWP:
WP=WRB⋅BP⏟步骤1:先旋转+WPBorg⏟步骤2:再平移 {}^W P = \underbrace{{}^W R_B \cdot {}^B P}_{\text{步骤1:先旋转}} + \underbrace{{}^W P_{B_{org}}}_{\text{步骤2:再平移}} WP=步骤1:先旋转 WRB⋅BP+步骤2:再平移 WPBorg
3. 详细计算流程 (Step-by-Step)
步骤 1:构建旋转矩阵
描述“绕Z轴旋转90度”的矩阵。公式如下:
Rz(ψ)=[cosψ−sinψ0sinψcosψ0001] R_z(\psi) = \begin{bmatrix} \cos\psi & -\sin\psi & 0 \\ \sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(ψ)= cosψsinψ0−sinψcosψ0001
代入 ψ=90∘\psi = 90^\circψ=90∘:
- cos(90∘)=0\cos(90^\circ) = 0cos(90∘)=0
- sin(90∘)=1\sin(90^\circ) = 1sin(90∘)=1
得到具体的数字矩阵:
WRB=[0−10100001] {}^W R_B = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} WRB=
010−100001
**💡 **:
- 第1列 (0,1,0)(0, 1, 0)(0,1,0):代表机体的旧X轴,现在指向了世界的Y轴方向。
- 第2列 (−1,0,0)(-1, 0, 0)(−1,0,0):代表机体的旧Y轴,现在指向了世界的负X轴方向。
步骤 2:执行矩阵向量乘法 (Rotation)
这是最关键的一步。将旋转矩阵与局部点坐标相乘。
旋转后向量=[0−10100001]⋅[230] \text{旋转后向量} = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} 2 \\ 3 \\ 0 \end{bmatrix} 旋转后向量= 010−100001 ⋅ 230
运算细节(行 × 列):
-
计算新的 X 分量 (xnewx_{new}xnew):
取矩阵第1行,点乘向量。
(0×2)+(−1×3)+(0×0)=0−3+0=−3 (0 \times 2) + (-1 \times 3) + (0 \times 0) = 0 - 3 + 0 = \mathbf{-3} (0×2)+(−1×3)+(0×0)=0−3+0=−3 -
计算新的 Y 分量 (ynewy_{new}ynew):
取矩阵第2行,点乘向量。
(1×2)+(0×3)+(0×0)=2+0+0=2 (1 \times 2) + (0 \times 3) + (0 \times 0) = 2 + 0 + 0 = \mathbf{2} (1×2)+(0×3)+(0×0)=2+0+0=2 -
计算新的 Z 分量 (znewz_{new}znew):
取矩阵第3行,点乘向量。
(0×2)+(0×3)+(1×0)=0+0+0=0 (0 \times 2) + (0 \times 3) + (1 \times 0) = 0 + 0 + 0 = \mathbf{0} (0×2)+(0×3)+(1×0)=0+0+0=0
步骤 2 的中间结果:
相对位移向量现在变成了 [−320]\begin{bmatrix} -3 \\ 2 \\ 0 \end{bmatrix}
−320
。
步骤 3:执行向量加法 (Translation)
最后,将旋转后的相对位移,加上无人机的绝对位置。
WP=[−320]⏟旋转后的相对位移+[10105]⏟无人机在房间的位置 {}^W P = \underbrace{\begin{bmatrix} -3 \\ 2 \\ 0 \end{bmatrix}}_{\text{旋转后的相对位移}} + \underbrace{\begin{bmatrix} 10 \\ 10 \\ 5 \end{bmatrix}}_{\text{无人机在房间的位置}} WP=旋转后的相对位移 −320 +无人机在房间的位置 10105
逐分量相加:
- 最终 X:−3+10=7-3 + 10 = \mathbf{7}−3+10=7
- 最终 Y:2+10=122 + 10 = \mathbf{12}2+10=12
- 最终 Z:0+5=50 + 5 = \mathbf{5}0+5=5
4. 最终结果与物理验证
障碍物绝对坐标=(7,12,5) \text{障碍物绝对坐标} = (7, 12, 5) 障碍物绝对坐标=(7,12,5)
🔍 结果是合理的
在脑海中模拟一下:
- 位置:无人机在 (10,10)(10, 10)(10,10)。
- 姿态:无人机向左转了90度(机头朝北/Y轴)。
- 障碍物:在无人机的“机身X轴方向”2米,“机身Y轴方向”3米。
- 因为转了90度,无人机的“机身X轴”现在指向世界的Y轴。
- 无人机的“机身Y轴”现在指向世界的负X轴。
- 推导:
- 原来的 x=2x=2x=2 (前/右) 变成了对世界Y轴的贡献 →\rightarrow→ YYY 增加了 2 (变为12)。
- 原来的 y=3y=3y=3 (左/前) 变成了对世界X轴的负向贡献 →\rightarrow→ XXX 减少了 3 (变为7)。
第三部分:欧拉角 (Euler Angles) —— 详细推导
采用 Z-Y-X (Yaw-Pitch-Roll) 顺序。
1. 旋转合成公式
旋转矩阵 WRB{}^W R_BWRB 是通过三次连续旋转相乘得到的。因为是动轴 (Intrinsic) 旋转,乘法顺序是 R=Z⋅Y⋅XR = Z \cdot Y \cdot XR=Z⋅Y⋅X:
RZYX=Rz(ψ)⋅Ry(θ)⋅Rx(ϕ) R_{ZYX} = R_z(\psi) \cdot R_y(\theta) \cdot R_x(\phi) RZYX=Rz(ψ)⋅Ry(θ)⋅Rx(ϕ)
2. 展开后的完整矩阵
需要写入代码的公式:
R=[cψcθcψsθsϕ−sψcϕcψsθcϕ+sψsϕsψcθsψsθsϕ+cψcϕsψsθcϕ−cψsϕ−sθcθsϕcθcϕ] R = \begin{bmatrix} c\psi c\theta & c\psi s\theta s\phi - s\psi c\phi & c\psi s\theta c\phi + s\psi s\phi \\ s\psi c\theta & s\psi s\theta s\phi + c\psi c\phi & s\psi s\theta c\phi - c\psi s\phi \\ -s\theta & c\theta s\phi & c\theta c\phi \end{bmatrix} R=
cψcθsψcθ−sθcψsθsϕ−sψcϕsψsθsϕ+cψcϕcθsϕcψsθcϕ+sψsϕsψsθcϕ−cψsϕcθcϕ
(简写:c=cos,s=sinc = \cos, s = \sinc=cos,s=sin)
3. “万向节死锁”数学解释
请看矩阵的 R31R_{31}R31 元素:−sin(θ)-sin(\theta)−sin(θ)。
如果 Pitch θ=90∘\theta = 90^\circθ=90∘,那么 cos(θ)=0cos(\theta) = 0cos(θ)=0。
此时矩阵会退化,你会发现 Yaw (ψ\psiψ) 和 Roll (ϕ\phiϕ) 的项混在了一起,无法区分。数学上称为秩亏 (Rank Deficiency)。
第四部分:四元数 (Quaternion) —— 底层原理
四元数是超复数 (Hyper-complex number)。
1. 定义
q=w+xi+yj+zkq = w + xi + yj + zkq=w+xi+yj+zk
或者写成向量形式:
q=[w,v]=[w,(x,y,z)]q = [w, \mathbf{v}] = [w, (x, y, z)]q=[w,v]=[w,(x,y,z)]
其中 i,j,ki, j, ki,j,k 遵循哈密顿规则:i2=j2=k2=ijk=−1i^2 = j^2 = k^2 = ijk = -1i2=j2=k2=ijk=−1。
2. 物理意义:轴-角 (Axis-Angle)
这是理解四元数的唯一途径。
假设旋转轴是单位向量 n=(nx,ny,nz)\mathbf{n} = (n_x, n_y, n_z)n=(nx,ny,nz),旋转角度是 θ\thetaθ。
{w=cos(θ2)x=nx⋅sin(θ2)y=ny⋅sin(θ2)z=nz⋅sin(θ2) \begin{cases} w = \cos(\frac{\theta}{2}) \\ x = n_x \cdot \sin(\frac{\theta}{2}) \\ y = n_y \cdot \sin(\frac{\theta}{2}) \\ z = n_z \cdot \sin(\frac{\theta}{2}) \end{cases} ⎩ ⎨ ⎧w=cos(2θ)x=nx⋅sin(2θ)y=ny⋅sin(2θ)z=nz⋅sin(2θ)
3. 模长约束
用于表示旋转的四元数必须是单位四元数:
∣∣q∣∣=w2+x2+y2+z2=1||q|| = \sqrt{w^2 + x^2 + y^2 + z^2} = 1∣∣q∣∣=w2+x2+y2+z2=1
4. 四元数乘法(汉密尔顿积)
如果物体先做姿态 q1q_1q1,再做姿态 q2q_2q2,总姿态 qtotalq_{total}qtotal 为:
qtotal=q2⊗q1q_{total} = q_2 \otimes q_1qtotal=q2⊗q1
(注意:这里通常也是左乘逻辑,取决于库的定义,但标准数学定义是 q2q1q_2 q_1q2q1)
公式非常复杂(通常由计算机完成):
[w2x2y2z2]⊗[w1x1y1z1]=[w1w2−x1x2−y1y2−z1z2w1x2+x1w2+y1z2−z1y2w1y2−x1z2+y1w2+z1x2w1z2+x1y2−y1x2+z1w2] \begin{bmatrix} w_2 \\ x_2 \\ y_2 \\ z_2 \end{bmatrix} \otimes \begin{bmatrix} w_1 \\ x_1 \\ y_1 \\ z_1 \end{bmatrix} = \begin{bmatrix} w_1 w_2 - x_1 x_2 - y_1 y_2 - z_1 z_2 \\ w_1 x_2 + x_1 w_2 + y_1 z_2 - z_1 y_2 \\ w_1 y_2 - x_1 z_2 + y_1 w_2 + z_1 x_2 \\ w_1 z_2 + x_1 y_2 - y_1 x_2 + z_1 w_2 \end{bmatrix}
w2x2y2z2
⊗
w1x1y1z1
=
w1w2−x1x2−y1y2−z1z2w1x2+x1w2+y1z2−z1y2w1y2−x1z2+y1w2+z1x2w1z2+x1y2−y1x2+z1w2
3. 姿态表示法“三巨头”
| 名称 | 特点 | 优缺点 | 适用场景 |
|---|---|---|---|
| 旋转矩阵 (Rotation Matrix) | 3×33\times33×3 矩阵 (9个数) | ✅ 显卡计算快 ❌ 数据冗余 |
底层计算、坐标变换公式 |
| 欧拉角 (Euler Angles) | 3个角 (Yaw, Pitch, Roll) | ✅ 直观,人类易懂 ❌ 万向节死锁 (Gimbal Lock) |
人机交互、数据显示 |
| 四元数 (Quaternion) | 4个数 (w,x,y,z)(w, x, y, z)(w,x,y,z) | ✅ 无死锁、插值丝滑 (SLERP) ❌ 极其不直观 |
内部物理引擎、姿态控制 |
四元数的直觉理解
- 轴-角 (Axis-Angle) 原理:空间中任意旋转,都可以看作是绕着一根特定的“魔法牙签”(轴 n⃗\vec{n}n)转了特定的角度 θ\thetaθ。
4. 关键疑问与误区澄清
**Q1: “Inverse is identical to X-Y-Z Fixed angle” **
- 误区:以为旋转顺序不重要。
- 正解:这是指**“动轴”与“定轴”的数学等价性**。
- 动轴 Z-Y-X(第一人称,绕物体轴转)
- 等价于 ⟺\Longleftrightarrow⟺
- 定轴 X-Y-Z(第三人称,绕世界轴转,顺序倒过来)。
Q2: 为什么需要区分动轴和定轴?
- 动轴 (Body):服务于控制与感知(飞行员视角:“抬头”、“左滚”)。
- 定轴 (World):服务于导航与规划(GPS视角:“向北”、“向东”)。
- 例子:
- 开车:你的左手边是动轴(随车动),地图上的东方是定轴(不动)。
- 看手机:手机屏幕朝向是你定义的动轴,不管你躺着还是坐着看,屏幕相对手机不变。
第五部分:齐次变换矩阵 (Homogeneous Transformation Matrix)
齐次变换矩阵将旋转和平移合并为一个 4×44 \times 44×4 矩阵,便于计算机处理。
如果把上面的例子-无人机雷达坐标变换计算实例 作为具体案例,齐次变换矩阵表示如下:
WTB=[WRBWPBorg01]=[0−10101001000150001] {}^W T_B = \begin{bmatrix} {}^W R_B & {}^W P_{B_{org}} \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} 0 & -1 & 0 & 10 \\ 1 & 0 & 0 & 10 \\ 0 & 0 & 1 & 5 \\ 0 & 0 & 0 & 1 \end{bmatrix} WTB=[WRB0WPBorg1]=
0100−10000010101051
具体计算步骤为:
WPhomogeneous=WTB⋅BPhomogeneous {}^W P_{homogeneous} = {}^W T_B \cdot {}^B P_{homogeneous} WPhomogeneous=WTB⋅BPhomogeneous
其中:
BPhomogeneous=[2301] {}^B P_{homogeneous} = \begin{bmatrix} 2 \\ 3 \\ 0 \\ 1 \end{bmatrix} BPhomogeneous=
2301
计算结果与之前的步骤一致,得到障碍物在世界坐标系中的位置:
WP=[7125] {}^W P = \begin{bmatrix}7 \\ 12 \\ 5 \end{bmatrix} WP=
7125
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)