← 返回知识体系
03 几何基础 3D 视觉 SLAM 机器人

Rotation & Orientation Representations

旋转与
姿态表示

旋转只有 3 个自由度,却可以写成 3、4、6 或 9 个数。真正的几何对象是 SO(3) 中的旋转;欧拉角、四元数和矩阵只是坐标表,不同表示会把奇异性、约束和歧义放在不同位置。

Geometric Object

先把旋转看成坐标轴之间的关系

在本站的列向量约定下,R 的三列分别是旋转后物体系 x、y、z 轴在参考系中的坐标。旋转保持长度、夹角和手性,不包含平移、缩放或反射。

ORIENTATION

朝向是一个状态

物体坐标轴相对参考坐标轴怎样排列,描述的是 orientation。它总是相对于某个 frame 而言。

ROTATION

旋转是一个映射

R 把向量或一组基轴旋到新方向。两个朝向之间的相对旋转由矩阵复合与求逆得到。

REPRESENTATION

表示是一套数字编码

矩阵、欧拉角、rotvec、四元数或 6D 向量只是在存储与计算层面对同一几何对象的编码。

Special orthogonal group
SO(3)={R∈R3×3∣RTR=I, det⁡(R)=+1}\mathrm{SO}(3)=\left\{\mathbf R\in\mathbb R^{3\times3}\mid \mathbf R^{\mathsf T}\mathbf R=\mathbf I,\ \det(\mathbf R)=+1\right\}
正交性保证列向量两两垂直且长度为 1;det = +1 排除镜像反射。SO(3) 是一个三维流形,但不是普通的 R³ 向量空间。

Column interpretation

R = [ r1   r2   r3 ]

r1

物体系 +x 轴在参考系中的方向

r2

物体系 +y 轴在参考系中的方向

r3

物体系 +z 轴在参考系中的方向,且 r₃ = r₁ × r₂

Representation Atlas

同一个 R,为什么需要这么多种写法

没有一种表示在可读性、无约束、全局连续、唯一性、复合效率和网络回归上同时最优。正确做法不是寻找“唯一标准”,而是为接口选择合适表示,并在边界处显式转换。

3×3 MATRIX

旋转矩阵

几何计算的共同语言。可直接旋转向量、复合姿态,列向量就是旋转后的基轴。

9 numbers · 6 constraints
3 ANGLES

Euler / Tait–Bryan

把旋转拆成三次有顺序的轴旋转。适合人机界面,却会出现多解与万向节锁。

order + frame + unit
AXIS × ANGLE

轴角 / 旋转向量

绕单位轴 u 旋转 θ。rotvec 将两者压成 θu,也是 OpenCV rvec 的语义。

r = θu ∈ R³
UNIT 4-VECTOR

四元数

单位四元数位于 S³,可高效复合与 SLERP;但 q 与 −q 映射到同一个旋转。

xyzw ≠ wxyz
NEURAL EMBEDDING

6D 连续表示

预测旋转矩阵的前两列,经 Gram–Schmidt 得到合法 R,常用于深度网络回归。

a₁, a₂ → b₁, b₂, b₃
LOCAL COORDINATES

so(3) / 李代数

在当前旋转附近用 3D 切向量做小增量,再通过 exp 映回 SO(3),适合优化和滤波。

R ← Exp(δφ) R
表示存储形状唯一性奇异/连续性优势主要陷阱
旋转矩阵3×3 · 9 数矩阵本身唯一无参数奇异直接复合、变换向量、几何语义清楚有 6 个约束;网络裸回归后必须投影回 SO(3)
Euler / RPY3 数不唯一有万向节锁便于人读、界面控制和机械关节语义必须保存轴顺序、内禀/外禀、角度单位与范围
轴角 / rotvec轴 3 + 角 1 / 3 数存在周期与边界等价零角轴任意;π 附近不连续Rodrigues、PnP、局部优化与李代数更新常用rotvec 的模长是角度,不是三个欧拉角
单位四元数4 数 + 单位约束q 与 −q 等价无万向节锁复合高效、插值方便、机器人与 SLAM 常用xyzw / wxyz 顺序和双覆盖必须处理
6D 连续表示2×3 · 6 数解码后唯一预测列共线时退化对神经网络回归友好,避免低维全局不连续6 是嵌入维数,不是额外自由度;需 Gram–Schmidt
9D + SVD3×3 · 9 数投影后唯一奇异值退化时不稳定输出简单,可用 SVD / polar 投影到 SO(3)必须修正 det = −1 的反射情况

Interactive Lab

让各种表示指向同一个旋转

第一视图把本站的 yaw–pitch–roll 同步转换为矩阵、四元数、轴角、rotvec 和 6D 表示;第二视图把目标中心射线与物体自身姿态拆开,解释 allocentric / egocentric 和 in-plane / out-of-plane。

Interactive · SO(3)

旋转表示与视点分解实验室

同一个物理旋转,可以有多种数字表达;切换视图还能观察 egocentric、allocentric 与平面内外旋转的关系。
右手系 列向量 R = RzRyRx
ref Yref Zref x y z 旋转改变朝向,不改变长度与夹角 彩色实线:物体系 · 半透明线:参考系
+X +Y +Z 固定观察视角 · 非透视投影

9 numbers · 6 constraints

旋转矩阵 R

SO(3)
[
0.0000.0000.0000.0000.0000.0000.0000.0000.000
]
det(R)
+1.000000
‖RᵀR−I‖F
0.00e+0
距 I 的测地角
0.00°

4 numbers · unit sphere

单位四元数

q ≡ −q

本站显示顺序:[x, y, z, w](scalar-last)

scalar-first:

Axis × angle

轴角与旋转向量

Rodrigues
单位轴 u
角度 θ
旋转向量 θu

Learning-friendly embedding

6D 连续表示

Gram–Schmidt
R 的前两列

网络预测两条 3D 向量,再正交化恢复旋转矩阵;输出维数不是旋转自由度。

Euler Angles

说“欧拉角”远远不够

三个角只有连同轴顺序、参考轴是否随物体运动、旋转作用方向和角度单位一起给出,才构成可复现的定义。Roll/Pitch/Yaw 只是常见语义名称,不会自动消除这些差异。

Site convention

本站以矩阵公式作为最终定义

  • 右手系、主动旋转、列向量
  • roll = α 绕 x,pitch = β 绕 y,yaw = γ 绕 z
  • R = Rz(γ) Ry(β) Rx(α)
  • 界面显示度,计算内部使用弧度
Yaw–Pitch–Roll matrix
R=Rz(γ)Ry(β)Rx(α)\mathbf R=\mathbf R_z(\gamma)\mathbf R_y(\beta)\mathbf R_x(\alpha)
该乘积可解释为固定轴先 x、再 y、再 z 的主动旋转;等价地也可描述为随动轴按相反叙述顺序旋转。库函数对大小写和序列名称的定义不同,因此以实际公式和测试向量为准。
01

Extrinsic · 固定轴

轴留在参考系中

每次都绕原始世界轴旋转。若动作顺序是 x → y → z,列向量最终得到 Rz Ry Rx。
02

Intrinsic · 随动轴

轴跟着物体移动

每一步绕更新后的局部轴。它与反序的固定轴旋转等价,但语言描述很容易写反。
03

Euler vs. Tait–Bryan

轴是否重复

ZXZ、ZYZ 等首尾轴重复的是 proper Euler;XYZ、ZYX 等三轴不同的是 Tait–Bryan,RPY 通常属于后者。
Gimbal lock at pitch = +90°
Rz(γ)Ry ⁣(π2)Rx(α)=Rz(γ−α)Ry ⁣(π2)\mathbf R_z(\gamma)\mathbf R_y\!\left(\frac{\pi}{2}\right)\mathbf R_x(\alpha)=\mathbf R_z(\gamma-\alpha)\mathbf R_y\!\left(\frac{\pi}{2}\right)
姿态只依赖 γ−α:yaw 与 roll 不再能被独立辨识。旋转本身仍然完全合法;失效的是这一组欧拉坐标的局部参数化。

Axis–Angle & Quaternion

没有万向节锁,不等于没有边界

轴角在 θ = 0 时轴任意,在 θ = π 附近存在符号边界;四元数位于四维单位球面,q 与 −q 是同一个旋转。轨迹插值前通常要先把相邻四元数调整到同一半球。

Rodrigues formula
R=exp⁡([ϕ]×)=I+sin⁡θθ[ϕ]×+1−cos⁡θθ2[ϕ]×2,ϕ=θu\mathbf R=\exp([\boldsymbol\phi]_\times)=\mathbf I+\frac{\sin\theta}{\theta}[\boldsymbol\phi]_\times+\frac{1-\cos\theta}{\theta^2}[\boldsymbol\phi]_\times^2,\quad \boldsymbol\phi=\theta\mathbf u
[·]× 是叉乘矩阵。θ 很小时应使用稳定的级数或库函数,避免直接除以接近 0 的数。
ORDER

先查 xyzw / wxyz

SciPy 默认 scalar-last;许多机器人库和论文使用 scalar-first。形状都是 4,静默错序最危险。

NORM

始终保持单位长度

网络输出或数值积分后要归一化;零向量不能直接归一化为合法四元数。

DOUBLE COVER

q 与 −q 必须视为等价

损失可取 min(‖q̂−q‖, ‖q̂+q‖),轨迹则按相邻点积决定是否翻号。

SLERP

插值走球面短弧

线性插值后归一化并不等价于恒定角速度;大角度插值优先使用 SLERP。

View-Space Decomposition

Egocentric、Allocentric 与平面内外旋转

这些词讨论的是相机观察方式与姿态分解,不是 intrinsic/extrinsic Euler angle 的同义词。它们常用于裁剪后的物体姿态学习、模板视点采样和类别级旋转估计。

EGOCENTRIC

相对真实相机坐标系的旋转

它是最终 object → camera 位姿中的 R。即使物体保持相似的局部外观,从图像中心移动到边缘时,指向物体中心的射线变化也会反映到 egocentric 数值中。

ALLOCENTRIC

把观察射线归一到虚拟中心视点

先想象一台虚拟相机沿物体中心射线观察,再把该射线拉回主光轴。这样能减弱目标图像位置与旋转标签之间的耦合,适合 RoI/crop 特征学习。

IN-PLANE

绕观察射线的旋转

主要表现为物体轮廓在图像平面内转动。物体靠近主点时,常近似为绕相机 z 轴旋转;严格说旋转轴是相机到物体中心的射线。

OUT-OF-PLANE

改变观察方向与可见表面

倾斜或绕物体转向会带来遮挡、透视缩短和新表面。模板方法通常在视点球面上采样它,再额外采样平面内角度。

One common allocentric lifting convention
Rego=RrayRallo,Rray: [0,0,1]T↦[x,y,z]Tx2+y2+z2\mathbf R_{\mathrm{ego}}=\mathbf R_{\mathrm{ray}}\mathbf R_{\mathrm{allo}},\qquad \mathbf R_{\mathrm{ray}}:\ [0,0,1]^{\mathsf T}\mapsto \frac{[x,y,z]^{\mathsf T}}{\sqrt{x^2+y^2+z^2}}
这是本站交互采用的定义:Rray 是把相机主光轴最小旋转到目标中心射线的旋转。不同论文可能采用逆变换或不同乘法侧,复现时必须看代码。

Learning & Optimization

网络输出可以在 Rⁿ,损失与评测必须回到旋转几何

神经网络需要易回归的无约束向量,优化器需要稳定的局部增量,系统接口需要高效复合,最终评测还要处理对称等价。表示选择应围绕这一整条链路,而不是只看输出维数。

6D decode by Gram–Schmidt
b1=a1∥a1∥,b2=a2−(b1Ta2)b1∥a2−(b1Ta2)b1∥,b3=b1×b2\mathbf b_1=\frac{\mathbf a_1}{\|\mathbf a_1\|},\quad \mathbf b_2=\frac{\mathbf a_2-(\mathbf b_1^{\mathsf T}\mathbf a_2)\mathbf b_1}{\|\mathbf a_2-(\mathbf b_1^{\mathsf T}\mathbf a_2)\mathbf b_1\|},\quad \mathbf b_3=\mathbf b_1\times\mathbf b_2
R = [b₁ b₂ b₃]。若 a₁ 接近 0 或 a₂ 与 a₁ 近乎共线,分母会很小;实现中仍需 epsilon 与异常检查。
Geodesic rotation error
dSO(3)(R^,R)=cos⁡−1 ⁣(clamp⁡ ⁣(tr⁡(R^TR)−12,−1,1))d_{\mathrm{SO}(3)}(\hat{\mathbf R},\mathbf R)=\cos^{-1}\!\left(\operatorname{clamp}\!\left(\frac{\operatorname{tr}(\hat{\mathbf R}^{\mathsf T}\mathbf R)-1}{2},-1,1\right)\right)
结果是两个旋转之间最短相对转角,范围 [0, π]。clamp 用于抵抗浮点误差;它比直接相减欧拉角更符合几何。
01

网络输出

6D / quat / 9D
→
02

合法化

normalize / GS / SVD
→
03

几何损失

geodesic / point loss
→
04

对称约简

min over equivalence
→
05

下游使用

projection / control

9D 投影到 SO(3)

SVD 时别忘了修正反射

M = UΣVᵀ
R = U diag(1, 1, det(UVᵀ)) Vᵀ
直接使用 UVᵀ 可能得到 det = −1 的镜像矩阵。

对称物体的旋转误差

标签不是唯一真值

dsym(R̂, R) = minS∈G d(R̂, RS)离散或连续对称需要通过等价旋转集合 G 进入损失与评测。

Across Domains

同一个旋转,在不同任务中怎样出现

POSE

6D 物体位姿估计

网络可回归 6D 表示、四元数或 rotvec,但最终几何求解、投影和评测通常都回到旋转矩阵。对称物体需要比较等价旋转集合。

SLAM

视觉 SLAM 与状态估计

优化器常在 SO(3) 的局部切空间中更新旋转,状态存储则常用四元数。不要把四元数四个分量当成独立欧氏变量直接相加。

ROBOT

机器人与标定

控制界面喜欢 RPY,运动学链喜欢旋转矩阵/齐次变换,插值和消息格式常用四元数。接口交界处最容易出现顺序和 frame 错误。

GRASP

机器人抓取

抓取姿态不仅有物体朝向,还包含接近轴、闭合轴与绕接近轴的 roll;夹爪对称会让多个旋转对应同一个可执行抓取。

Debug Protocol

旋转错了,先用可证伪的测试

最有效的排错方式不是随机转几下看起来像不像,而是选择单位旋转、单轴 90°、接近 π、万向节锁和 q/−q 等专门暴露约定错误的测试。

  1. 01

    单位旋转测试

    所有表示都应恢复 I;四元数应为 [0,0,0,±1],rotvec 应为 0。

  2. 02

    单轴 +90° 测试

    例如 Rz(+90°)[1,0,0]ᵀ 必须得到 [0,1,0]ᵀ。它能快速暴露左右手、主动/被动和转置错误。

  3. 03

    检查 SO(3) 不变量

    验证 RᵀR≈I、det(R)≈+1;若 det≈−1,通常混入了反射或 SVD 修正遗漏。

  4. 04

    做往返转换

    Euler→R→quat→R 比较矩阵或测地角,不要要求最后欧拉角数值逐分量完全相同。

  5. 05

    专门覆盖边界

    测试 pitch=±90°、θ≈π、q 与 −q、角度跨 ±180° 以及 6D 两列近共线。

  6. 06

    最后投影模型坐标轴

    把物体系 xyz、CAD 轮廓和不对称特征投到图像,确认数值约定与视觉结果一致。

约定、公式与论文来源展开查看官方文档和原始论文

Next topic · 04

相机模型与成像几何

下一步将从 3D 相机坐标到 2D 像素,系统讲解内外参、透视投影、畸变、深度反投影与 RGB-D 对齐。
返回地图查看位置