📝 机器人学基础:坐标系与姿态变换学习笔记

第一部分:坐标系的构建 (Construction of Frames)

两个基本坐标系

  • {W}\{W\}{W} 世界坐标系 (World Frame)
    • 角色:绝对基准,不动的参考系(如:房间角落、地面)。
    • 视角:“上帝视角” / “定轴”。
  • {B}\{B\}{B} 物体坐标系 (Body Frame)
    • 角色:固连在物体上,随物体运动。
    • 设定规则
      • 原点 (Origin):通常设在物体的质心 (CoM)
      • 轴向 (Basis):依据物体几何形状或功能设定(如 X轴指机头,Z轴指天)。

向量的两种身份

  1. 位置向量 (Position Vector):描述“在哪儿”。即 {B}\{B\}{B} 的原点在 {W}\{W\}{W} 中的坐标(平移量)。
  2. 基向量 (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} 的构建步骤

当你拿到一个刚体(比如无人机),你需要按以下步骤“画”出坐标系:

  1. 定原点 (Origin)
    • 找到物体的质心 (Center of Mass)
    • 数学定义rcm=∑miri∑mi\mathbf{r}_{cm} = \frac{\sum m_i \mathbf{r}_i}{\sum m_i}rcm=mimiri
  2. XBX_BXB 轴 (Forward)
    • 通常定义为物体的运动前方
  3. ZBZ_BZB 轴 (Vertical)
    • 通常定义为物体的上方(如果是ENU系)或下方(如果是NED系)。
  4. YBY_BYB 轴 (Lateral)
    • 必须通过右手定则由 XXXZZZ 确定: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 Av^in Aw^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. 核心性质

  1. 正交性RT=R−1R^T = R^{-1}RT=R1
    • 这意味着:矩阵的逆(反向旋转)等于矩阵的转置。这是计算效率极高的原因。
  2. 行列式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ϕ0sinϕ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θ0sinθ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ψ0sinψcosψ0001

🎓 无人机雷达坐标变换计算实例

这是一个经典的刚体变换 (Rigid Body Transformation) 案例。


1. 场景参数定义 (The Setup)

首先,将物理世界的描述转化为数学变量。

A. 坐标系定义

  • {W}\{W\}{W} 世界坐标系:房间(不动)。
  • {B}\{B\}{B} 机体坐标系:无人机(随动)。

B. 已知条件

  1. 平移量 (Translation)
    无人机({B}\{B\}{B} 原点)在 {W}\{W\}{W} 中的位置。
    WPBorg=[10105] {}^W P_{B_{org}} = \begin{bmatrix} 10 \\ 10 \\ 5 \end{bmatrix} WPBorg= 10105

  2. 旋转量 (Rotation)
    无人机绕 Z轴 旋转了 90∘90^\circ90(向左转)。

    • Roll (ϕ\phiϕ) = 0∘0^\circ0
    • Pitch (θ\thetaθ) = 0∘0^\circ0
    • Yaw (ψ\psiψ) = 90∘90^\circ90
  3. 局部观测点 (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:先旋转 WRBBP+步骤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ψ0sinψ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= 010100001

**💡 **:

  • 第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} 旋转后向量= 010100001 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)=03+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
  • 最终 Y2+10=122 + 10 = \mathbf{12}2+10=12
  • 最终 Z0+5=50 + 5 = \mathbf{5}0+5=5

4. 最终结果与物理验证

障碍物绝对坐标=(7,12,5) \text{障碍物绝对坐标} = (7, 12, 5) 障碍物绝对坐标=(7,12,5)

🔍 结果是合理的

在脑海中模拟一下:

  1. 位置:无人机在 (10,10)(10, 10)(10,10)
  2. 姿态:无人机向转了90度(机头朝北/Y轴)。
  3. 障碍物:在无人机的“机身X轴方向”2米,“机身Y轴方向”3米。
    • 因为转了90度,无人机的“机身X轴”现在指向世界的Y轴
    • 无人机的“机身Y轴”现在指向世界的负X轴
  4. 推导
    • 原来的 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=ZYX

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=sin⁡c = \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=nxsin(2θ)y=nysin(2θ)z=nzsin(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=q2q1
(注意:这里通常也是左乘逻辑,取决于库的定义,但标准数学定义是 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 = w1w2x1x2y1y2z1z2w1x2+x1w2+y1z2z1y2w1y2x1z2+y1w2+z1x2w1z2+x1y2y1x2+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]= 010010000010101051
具体计算步骤为:
WPhomogeneous=WTB⋅BPhomogeneous {}^W P_{homogeneous} = {}^W T_B \cdot {}^B P_{homogeneous} WPhomogeneous=WTBBPhomogeneous
其中:
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

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐