3. 欧拉角与RPY角:三种基本旋转顺序,以及在实际机器人中的用法

说到旋转,很多刚入行的朋友容易绕晕。我当年第一次调六轴机器人时,对着示教器上的角度值愣了半天——明明只转了30度,怎么三个轴的数据全变了?

其实,这背后就是欧拉角在作怪。说白了,欧拉角就是用三个角度来描述刚体在空间中的姿态。但关键问题是:旋转顺序不同,结果天差地别。

3.1 欧拉角的基本概念

欧拉角的核心思想是:将一次复杂的空间旋转,拆解成绕三个坐标轴的三次连续旋转。每次旋转都绕当前坐标系的一个轴进行。

我习惯把欧拉角理解成「拆解动作」——就像你要把一个大箱子搬上货架,先转身、再弯腰、最后抬手,每一步都是独立的旋转。

核心要点:欧拉角不是三个独立的角度,而是一组有顺序的旋转指令。顺序变了,最终姿态就变了。

3.2 三种基本旋转顺序

工程中最常用的欧拉角顺序有三种。我按实际应用频率来排:

顺序名称 旋转轴顺序 常见应用
ZYX(RPY角) 先绕Z轴 → 再绕Y轴 → 最后绕X轴 工业机器人、移动机器人、无人机
ZYZ 先绕Z轴 → 再绕Y轴 → 最后绕Z轴 经典欧拉角、理论分析、部分协作机器人
XYZ(固定角) 先绕X轴 → 再绕Y轴 → 最后绕Z轴 视觉标定、相机外参、仿真软件

你可能会问:为什么会有这么多顺序?嗯,这跟每个领域的「习惯」有关。机器人领域用ZYX最多,因为它最直观——先转航向,再调俯仰,最后修正横滚。

3.3 RPY角:机器人领域的主力

RPY角其实就是ZYX顺序的欧拉角。名字来源于航海术语:

  • Roll(横滚):绕X轴旋转,像飞机侧倾
  • Pitch(俯仰):绕Y轴旋转,像飞机抬头低头
  • Yaw(偏航):绕Z轴旋转,像飞机转向

我在调试AGV小车时,经常用RPY角来描述车体的姿态。举个例子:

// 一个典型的RPY角表示
// Yaw = 45°(车头朝东北)
// Pitch = 10°(车头略微上仰)
// Roll = -5°(车身左侧略低)

// 对应的旋转矩阵(ZYX顺序)
R = Rz(45°) * Ry(10°) * Rx(-5°)

我的经验:在示教器上看到的「姿态数据」,绝大多数都是RPY角。如果你发现某个轴的角度突然跳变,先检查是不是遇到了万向锁——这是欧拉角的通病。

3.4 万向锁:绕不开的坑

说到万向锁,我当年第一次遇到时差点把示教器摔了。明明只转了90度,结果两个轴「锁死」了,第三个轴怎么动都没反应。

万向锁发生在中间轴旋转±90°时。以ZYX顺序为例:

  • 当Pitch = ±90°时,Roll和Yaw的旋转轴重合
  • 此时系统丢失了一个自由度
  • 表现为:两个角度无法独立控制

避坑指南:我曾经在写轨迹规划算法时,没处理万向锁,结果机器人末端在奇异点附近疯狂抖动。后来加了个判断:当Pitch接近±90°时,切换到四元数插值,问题就解决了。

3.5 实际机器人中的用法

不同品牌的机器人,对欧拉角的处理方式不太一样。我整理了一份对照表:

机器人品牌 默认顺序 示教器显示 备注
ABB ZYX(RPY) Rx, Ry, Rz 角度范围±180°
KUKA ZYX(RPY) A, B, C A=Yaw, B=Pitch, C=Roll
Fanuc ZYX(RPY) W, P, R W=Yaw, P=Pitch, R=Roll
Universal Robots ZYX(RPY) Rx, Ry, Rz 支持四元数切换

你看,虽然名字不同,但底层都是ZYX顺序。所以只要掌握了RPY角,换任何品牌的机器人,你都能快速上手。

3.6 欧拉角 vs 四元数:什么时候用哪个?

这个问题我经常被问到。我的建议很简单:

  • 人机交互时用欧拉角:示教、调试、显示姿态数据,欧拉角最直观
  • 内部计算时用四元数:插值、滤波、控制算法,四元数更稳定

说白了,欧拉角是给人看的,四元数是给机器算的。我在写运动学库时,通常会在接口层用欧拉角,内部全部转成四元数处理。

转换示例(ZYX顺序 → 四元数):

// 给定RPY角:yaw, pitch, roll
// 转换为四元数 q = [w, x, y, z]

cy = cos(yaw * 0.5)
sy = sin(yaw * 0.5)
cp = cos(pitch * 0.5)
sp = sin(pitch * 0.5)
cr = cos(roll * 0.5)
sr = sin(roll * 0.5)

w = cy * cp * cr + sy * sp * sr
x = cy * cp * sr - sy * sp * cr
y = sy * cp * sr + cy * sp * cr
z = sy * cp * cr - cy * sp * sr

3.7 知识结构图

下面这张图总结了欧拉角与RPY角的核心逻辑:

欧拉角与RPY角知识结构图 欧拉角与RPY角知识结构 欧拉角 ZYX(RPY角) ZYZ(经典欧拉角) XYZ(固定角) Roll(横滚) Pitch(俯仰) Yaw(偏航) 万向锁 Pitch=±90°时发生 实际应用 示教/调试/显示 核心原则:人机交互用欧拉角,内部计算用四元数 ZYX顺序是工业机器人事实标准

3.8 总结与建议

聊了这么多,我最后给你三条实用建议:

  1. 先确认顺序:拿到任何机器人或传感器数据,第一件事就是确认它的欧拉角顺序。我见过太多因为顺序搞错导致姿态解算失败的案例。
  2. 避开万向锁:如果你的应用场景涉及大角度俯仰(比如无人机倒飞),别用欧拉角做插值,改用四元数。
  3. 统一标准:团队协作时,强制规定使用ZYX顺序。我在带项目时,所有接口文档里都会注明「姿态数据采用ZYX(RPY)顺序」。

一个小技巧:调试时如果发现机器人姿态异常,先打印出四元数看看。如果四元数的w分量接近0,说明接近万向锁区域了。这时候手动转一下中间轴,让Pitch远离±90°,问题通常就解决了。