把 9 量的姿态矩阵压缩成 3 个角度,就得到两种最常用的欧拉角:机器人学惯用的 ZYZ 与航空航海惯用的 RPY。本节还收录了课堂的编外数值分析——为什么反解一律用 Atan2(录播 0:11:00–0:15:36)。全节对应录播 0:05:30–0:21:53。
图解读图:ZYZ 是「先绕 z 转 α,再绕新 y 转 β,最后绕新 z 转 γ」的内旋序列。三个环分别代表三次旋转;当 β=0 或 π 时,第一、第三环的轴重合,两个角只剩一个独立效果——这就是万向节锁。
旋转矩阵的 9 个元素受 6 个正交性约束,因此3 个参数就足以描述姿态(9 个量、6 个约束、3 个独立参数):一般地,SO(m) 的最简表示需要 m(m−1)/2 个参数,m=3 时恰为 3。于是把姿态写成三个角的集合 ϕ=[φ ϑ ψ]T,由 3 个绕坐标轴的基本旋转依次合成。问题在于:三个轴共有 27 种排列组合,其中只有 12 种可行(机制见下框)。
为什么砍掉 15 种(录播 0:07:57–0:08:28)
若序列中出现「连续绕同一轴」的情况,例如 XXX 或 ZXX 里的相邻同轴段,那么两次绕同轴的旋转可以合并成一次——三个角实际只贡献了两个独立的转动方向,任意的终态姿态就「转不出来」了。反过来说,只有 12 种「相邻不同轴」的组合能覆盖 SO(3) 的每一个姿态;每一组三个角就叫一组欧拉角,欧拉角不唯一(12 种选法),本节只取课程与原书主推的两种。
ZYZ 序列(原书图 2.8)的每一步都绕当前轴旋转,因此按 原理 2.3.A 依次右乘:
- 绕参考系 z 轴转 φ:Rz(φ);
- 绕新 y′ 轴转 ϑ:Ry′(ϑ);
- 绕新 z′′ 轴转 ψ:Rz′′(ψ)。
三步过程中坐标架如何演化,看下图(灰虚 = 上一步的旧架):每转一次,「当前轴」就换到刚转出来的新架上——这正是「右乘」的几何本体。
ZYZ 三步的坐标架演化(本教程绘,示例取 φ=40°,ϑ=55°,ψ=30°):轴随转动而变——第 2 步绕的是第 1 步转出来的 y′,第 3 步绕的是前两步转出来的 z′′;这与 RPY 的「三副固定架」(见下文左 / 右乘对偶图)形成对照。第三步之后 z 与 z′′ 的夹角恰为 ϑ——ϑ=0 即两轴共线,φ 与 ψ 的贡献合并、表示奇异(定理 2.4.B)。
R(ϕ)=Rz(φ)Ry′(ϑ)Rz′′(ψ)=cφcϑcψ−sφsψsφcϑcψ+cφsψ−sϑcψ−cφcϑsψ−sφcψ−sφcϑsψ+cφcψsϑsψcφsϑsφsϑcϑ
(原书式 2.18)。正解就是代入三个角、算出矩阵的 9 个量——录播 0:10:20 老师演示:「给你 (40°,20°,⋅) 的 ZYZ 角,代进这个矩阵就能算出旋转矩阵」。这条正向通道正是后续逆运动学的基础。
反解(见下一小节)需要从三角函数值还原角度。最省事的选择似乎是 cϑ=r33⇒ϑ=arccosr33(录播 0:11:22–0:11:56 老师先给出这条「简单做法」),但他随后当场否决:
原理 2.4.A · 反三角函数选用准则(课堂补充整理)
不用 arccos/arcsin,原因有两个:
- 不唯一:arccos 只在 [0,π] 取值,无法覆盖 (−π,π] 内的完整角度;
- 精度不均匀:对 y=f(x) 有增量公式 Δy≈f′(x)Δx,可见反解误差不仅取决于输入误差 Δx,还要被 f′(x) 放大。而
(arccosx)′=−1−x21∈(−∞,−1],x∈(−1,1),
在 x→±1(即角度接近 0 或 π)处导数无界,微小输入误差被无限放大;相比之下
(arctanx)′=1+x21∈(0,1],x∈(−∞,∞),
导数处处有界且不超过 1,因此输入误差不会被放大。结论:从保证精度看,用反正切(反余切)类比用反正弦(反余弦)类更好。
把原理 2.4.A 的两条理由画成曲线,就是下面这张图:横轴是反解时要「读数」的那个量 x(这里即 r33=cϑ),纵轴是输入误差被放大的倍数 ∣f′(x)∣——红曲线在 x→±1 处冲天,绿曲线则处处不超过 1。
反解误差放大率的几何(本教程绘):对 y=f(x) 有 Δy≈f′(x)Δx——arccos 的导数在 x→±1(即 ϑ→0,π)处无界,输入端一点噪声输出端就爆炸;arctan 的导数处处 ≤1。这也是数值实验里 ∣sinϑ∣≤10−2 的组别偏差放大 105 倍的根源(见 作业二 易错点)。
最后一步补齐「唯一性」:改用双变量反正切
φ=Atan2(y,x),
它计算 y/x 的反正切,但用 x,y 各自的符号判定象限,从而在 (−π,π] 内唯一确定角度(MATLAB / Python 的 atan2 即返回该区间)。录播 0:15:11 老师提醒:MATLAB 等工具里这个函数就是 atan2,后续章节「求角度更多用到它」——它是全书反解角度的标准动作。
已知 R=[rij]3×3,与式 2.18 对比即可反求 (φ,ϑ,ψ)。策略是挑出能暴露单个角度的元素(录播 0:15:55–0:17:44 老师现场带推导:「这前四个太长不好求,比较好求的就是第三列这一排」):
求解分三步走:① 第三列的 [1,3]、[2,3] 只含 φ,ϑ(r23=sφsϑ, r13=cφsϑ),由此定出 φ;② 用平方和消去 φ,再配合 [3,3]=cϑ 定出 ϑ(取 sϑ>0 即 ϑ∈(0,π));③ 最后用 [3,1]、[3,2] 定出 ψ。以下设 sϑ=0(即 r13,r23 不全为零;sϑ=0 的退化情形见下方定理 2.4.B)。第一支解为(原书式 2.19)
φ=Atan2(r23,r13),ϑ=Atan2(r132+r232, r33),ψ=Atan2(r32,−r31);
若在 (−π,0) 中选 ϑ,则得到效果相同的第二支(原书式 2.20)
φ=Atan2(−r23,−r13),ϑ=Atan2(−r132+r232, r33),ψ=Atan2(−r32,r31).
定理 2.4.B · ZYZ 的表示奇点
当 sϑ=0(即 ϑ=0 或 π)时,式 2.19–2.20 发生退化:两次绕 z 类轴的旋转实际上绕平行轴进行、效果合并,于是只能确定 φ±ψ 的和或差,无法把二者分离(原书;习题 2.2、本编习题 B3)。这种退化在后续章节里就是欧拉角表示奇点。
同一个乘积 Rz(φ)Ry(ϑ)Rx(ψ) 有两种读法(本教程绘):「按 XYZ 顺序绕固定轴转」与「按 ZYX 顺序绕当前轴转」等价——这就是左乘 / 右乘对偶。上排 ZYZ 的坐标架每转一次就换一副轴(高亮轴依次为 z、y′、z′′),新因子追加在右;下排 RPY 的三副坐标架完全相同(高亮轴依次为 z、y、x,都取自初始系),新因子前插在左。记不清方向时把序列复述成中文即可判断:「在转完的基础上再绕它的 y′ 转」= 右乘。
正解、逆解与奇点,可以在这个操作台里一次拖个明白(下图):滑杆做正解(三步当前轴转动,坐标架实时演化),读数区做逆解(从第三列用式 2.19 反解 φ′、ψ′——正常位形下应与滑杆一致);把 ϑ 拖到 0 或 180°,就能看到 定理 2.4.B 的奇点如何发生。
ZYZ 欧拉角操作台(本教程绘):滑杆是正解(式 2.18 的三次右乘,坐标架逐步演化),读数区是逆解(式 2.19:第三列暴露 φ 与 ϑ,第三行暴露 ψ)——正常位形下反解角应与滑杆一致,这本身就是「正逆互检」。ϑ 拖到 0 或 180° 即 定理 2.4.B 的表示奇点:z0 与 z′′ 共线,第三列失去信息,φ 与 ψ 只剩和 / 差可定。
航空航海领域描述飞行器姿态,习惯用 ZYX 角,也就是滚转(roll)—俯仰(pitch)—偏航(yaw)角。三个角 ϕ=[φ ϑ ψ]T 相对固定于飞行器质心的参考系定义(原书图 2.9):绕固定 z 轴转 φ(偏航)、绕固定 y 轴转 ϑ(俯仰)、绕固定 x 轴转 ψ(滚转)。全程绕固定轴,因此按 原理 2.3.B 左乘:
R(ϕ)=Rz(φ)Ry(ϑ)Rx(ψ)=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ψ
(原书式 2.21;英文原版与课件此页角名均标反,见勘误 E2.1)。
译注 · 两条等价说法(原书脚注)
「按 XYZ 顺序绕固定坐标系轴的旋转序列」与「按 ZYX 顺序绕当前坐标系轴的旋转序列」等价——左乘 / 右乘对偶(原理 2.3.A、原理 2.3.B)的直接推论。
逆解与 ZYZ 同法(原书式 2.22–2.23):ϑ∈(−π/2,π/2) 时
φ=Atan2(r21,r11),ϑ=Atan2(−r31,r112+r212),ψ=Atan2(r32,r33);
(ϑ 一式中 r112+r212 与原书 (2.22) 的 r322+r332 数值相同——二者都等于 ∣cϑ∣,本式改用第一、二行元素,便于与 φ 的宗量保持同源。)ϑ∈(π/2,3π/2) 时取等价的第二支(各宗量整体变号)。cϑ=0 时同样退化:只能确定 φ 与 ψ 的和或差——这就是 RPY 的表示奇点。
例 2.4.C · 无人机姿态控制的日常视角(新增)
录播 0:18:52–0:21:53:无人机动力学模型里用的正是这个矩阵(「你后面如果做无人机控制,动力学模型里就有这个矩阵」);但 RPY 在俯仰角 ±90° 处会碰上奇点,卫星等需要全姿态机动的平台因此改用四元数(录播 0:21:26,见下框;例 2.4.C)。
课程预告 · 单位四元数(原书 §2.6,课程略)
单位四元数 Q={η,ϵ} 用 4 个参数(满足 1 个模长约束)表示姿态:η=cos(ϑ/2)、ϵ=sin(ϑ/2)r。半角打包使角和轴的 (ϑ,r)∼(−ϑ,−r) 不唯一性消失,逆解也无 sϑ=0 型奇点;逆与乘法有简洁的代数规则(原书式 2.36–2.37)。课程只点到「卫星姿态用四元数」这一应用背景,公式不考;需要时可按本框线索自查原书。
动手实验 · ZYZ 与 RPY 是同一件事的两种读法
下面这个操作台把 2.4.2–2.4.5 的两套公式并排放在一起:拖动 φ、ϑ、ψ,先按当前约定合成 R,再把同一个 R 交给另一种约定的逆解公式反算角度。换约定不改变姿态,只改变「是哪三个角」;两套角在各自的奇点附近还会互相失效——这正是 定理 2.4.B 与 RPY 万向节锁定。
默写点 · 合上书再写(主动回忆)
不看正文与速查卡,先写出下面几条,再展开核对。写不出来,就说明这一节还没「拿走」。
- 默写 ZYZ 逆解的第一支三式(用 rij 与 Atan2)。
- 为什么反解不用 arccos?说出两个理由。
- ZYZ 与 RPY 的奇点各在什么条件?
核对
φ=Atan2(r23,r13)、ϑ=Atan2(r132+r232,r33)、ψ=Atan2(r32,−r31)。第二支三个宗量整体变号。
① 不唯一:arccos 值域只有 [0,π];② 精度不均匀:(arccosx)′=−1/1−x2 在 x→±1 处无界,微小输入误差被无限放大;而 (arctanx)′=1/(1+x2)≤1 处处有界。
ZYZ 在 sϑ=0(ϑ=0,π);RPY 在 cϑ=0(俯仰 ±90°)。
- 一条主线:9 量 6 约束 → 3 参数 → 27 组合砍到 12 → ZYZ(右乘)/ RPY(左乘)→ 正解代入、逆解挑元素 +
Atan2 → 奇点 sϑ=0 / cϑ=0。
- 口诀:逆解「挑只含单角的元素,先 φ 后 ϑ 再 ψ」;
Atan2 在 (−π,π] 唯一化角度。
常见错误清单 · 自查四条
- 用 arccos 反解角度——精度在 x→±1 处崩溃且不唯一(原理 2.4.A);凡反解一律
Atan2;
- 忘记 ZYZ / RPY 各有两支解——式 2.19/2.20、2.22/2.23 效果等价但角度值不同,编程时须固定取值区间;
- 把 RPY 的「滚转」配给绕 z 的角——滚转(roll)绕纵轴 x,偏航(yaw)绕竖轴 z(英文原书与课件此页标签均反,勘误 E2.1);
- 在 sϑ=0 附近强行分离 φ,ψ——数据上表现为两个角剧烈跳变,这是表示奇点,不是物理抖动。