当前位置: 首页 > news >正文

[转]为什么Roll、Pitch、Yaw的定义如此混乱?本文来讲透欧拉角的本质

核心思想:为什么会这么乱?

首先要明确一个核心思想:欧拉角本身没有一个全球统一的标准。它不是一个单一的定义,而是一套“描述方法”。一套完整的欧拉角定义,必须包含以下三个要素,你遇到的所有混淆都源于这三者的不同组合:

  1. 旋转顺序 (Rotation Order):三个旋转是按X、Y、Z的什么顺序进行的?(例如 ZYX、XYZ、ZYZ 等)
  2. 内旋/外旋 (Intrinsic/Extrinsic Rotation):旋转的参考坐标系是固定的还是跟随物体一起动的?
  3. 坐标轴约定 (Axis Convention):哪个轴对应哪个姿态?(例如,X轴是Roll滚转,还是Z轴是Yaw偏航?)

当你看到一份资料说“Roll是绕Z轴”,另一份说“Roll是绕X轴”时,不要怀疑人生。它们很可能只是采用了不同的坐标轴约定和旋转顺序。因此,学习欧拉角的关键不是去记死一个“唯一正确”的组合,而是学会如何识别和理解当前使用的是哪一套规则。


第一部分:两大核心概念——旋转顺序与内外旋

我们先抛开Roll, Pitch, Yaw这些名字,只关注最本质的旋转。

1. 旋转顺序 (Rotation Order)

一个物体在三维空间的姿态,可以通过三次独立的旋转来获得。但这三次旋转的顺序至关重要,不同的顺序会导致完全不同的最终姿态。

一共有12种可能的旋转顺序,分为两大类:

  • 泰特-布莱恩角 (Tait-Bryan angles):按三个不同的轴旋转,例如 XYZ, XZY, YXZ, YZX, ZXY, ZYX。这是在航空、航天、机器人和3D游戏中最常见的。
  • 经典欧拉角 (Proper Euler angles):按 同一个轴开始和结束 的顺序旋转,例如 ZXZ, ZYZ, XYX, XZX, YXY, YZY。这在物理学和一些数学领域更常见。

对于初学者,你遇到的95%以上的情况都是泰特-布莱恩角 (ZYX, XYZ等)。

【关键点】:顺序 ZYX 意味着先绕Z轴旋转,然后绕Y轴旋转,最后绕X轴旋转。顺序不同,结果天差地别。

2. 内旋 (Intrinsic) 与 外旋 (Extrinsic)

这是另一个关键的混淆点,但理解了之后会豁然开朗。

  • 外旋 (Extrinsic Rotation / Fixed-axis Rotation)
    • 定义:三次旋转都是围绕固定的世界坐标系(World Coordinate System)的轴进行的。
    • 比喻:想象你在一个房间里,房间的角落是固定的X, Y, Z轴。你要旋转一个你手里的模型。
      • 1.先让模型围绕房间的Z轴转30度。
      • 2.然后,让模型继续围绕房间的Y轴转40度。
      • 3.最后,让模型继续围绕房间的X轴转50度。
      • 整个过程中,参考的坐标轴始终是房间的固定坐标轴,没有变过。
  • 内旋 (Intrinsic Rotation / Body-axis Rotation)
    • 定义:第一次旋转围绕世界坐标系的轴,但第二次旋转是围绕物体自身已经旋转过后的新坐标系的轴,第三次同理。
    • 比喻:想象你是一名飞行员坐在飞机里。
      • Yaw (偏航):你让飞机围绕它自身的垂直轴Z' (穿过驾驶舱的轴) 转30度。现在飞机的朝向变了。
      • Pitch (俯仰):你让飞机围绕它新的机翼轴Y' (穿过左右机翼的轴) 向上飞40度。
      • Roll (滚转):你让飞机围绕它最新的机头轴X' (从机尾指向机头的轴) 滚转50度。
      • 每一次旋转的参考轴都是飞机当前姿态下的自身坐标轴。

内外旋的“神奇”等价关系

这是一个非常重要的结论,可以帮你简化很多问题:

顺序为 A-B-C 的内旋,其最终结果与顺序为 C-B-A 的外旋完全相同。

举个例子:

XYZ 顺序的内旋 = ZYX 顺序的外旋

这个结论意味着,12种内旋和12种外旋其实只产生了12种独特的最终结果。当你看到一个系统定义为 ZYX 外旋时,你就知道它等价于 XYZ 内旋。


第二部分:姿态命名——Roll, Pitch, Yaw

现在我们可以来谈谈你最困惑的命名问题了。Roll (滚转), Pitch (俯仰), Yaw (偏航) 只是为了方便理解,给三次旋转起的名字。这些名字通常遵循一种航空航天领域的坐标轴约定。

最常见的约定 (右手坐标系):航天飞机模型(机器人学)

  • X轴: 指向物体的前方(例如飞机的机头)。
  • Y轴: 指向物体的左方或右方(例如飞机的左翼)。
  • Z轴: 指向物体的上方(例如飞机的机舱顶部)。

在这种约定下,旋转和名字的对应关系是:

  • Roll (滚转): 绕 X轴 (前后轴) 的旋转。想象飞机在空中做滚筒动作。
  • Pitch (俯仰): 绕 Y轴 (左右轴) 的旋转。想象飞机抬头或低头。
  • Yaw (偏航): 绕 Z轴 (上下轴) 的旋转。想象飞机在水平面上转弯,像摇头一样。

1

另一种常见约定:相机模型(图形学/slam)

    • X轴: 指向相机/物体的左右方向。
    • Y轴: 指向相机/物体的上下方向。
    • Z轴: 指向相机/物体的光轴方向。

2

相机/slam/图形学场景下的坐标系定义

3

面部位姿常见的欧拉角定义

    • 【解惑时刻】 现在你能理解为什么会看到 Z对应roll 的情况了吗? 那是因为在那个系统里,坐标轴约定不同!比如,一个系统可能定义:

      • Z轴: 指向前方
      • X轴: 指向右方
      • Y轴: 指向下方

      在这种约定下,Roll(绕前方轴的旋转)自然就变成了绕 Z 轴的旋转了。

      所以,你遇到的“Z对应roll”或者“X对应roll”的分歧,本质上是 不同软件/引擎/教材中对物体自身坐标系的定义不同 导致的。


      第三部分:如何系统性地学习和使用?

      入门三步走:

      (1)忘记Roll/Pitch/Yaw,先关注本质:拿到一个欧拉角 (α, β, γ),你首先要问的不是哪个是Roll,而是:

        • 旋转顺序是什么? (e.g., ZYX)
        • 是内旋还是外旋? (e.g., Extrinsic)

      (2)结合顺序和内外旋,理解旋转过程:

        • 如果它是 ZYX 外旋,那么你知道它的过程是:先绕世界Z轴转 α,再绕世界Y轴转 β,最后绕世界X轴转 γ
        • 如果它是 XYZ 内旋,那么你知道它的过程是:先绕自身X轴转 α,再绕旋转后的自身Y'轴转 β,最后绕再次旋转后的自身Z''轴转 γ
        • 并且,你知道这两种方式得到的最终姿态是一样的!

      (3)最后再套上名称:当前后、左右、上下的轴确定后,再把 RollPitchYaw 这些名字对应到相应的轴上。在最常见的 ZYX 外旋(等价于 XYZ 内旋)中,人们习惯把:

        • 绕X的旋转叫 Roll
        • 绕Y的旋转叫 Pitch
        • 绕Z的旋转叫 Yaw 所以 (Roll, Pitch, Yaw) 就对应了 (γ, β, α) 的旋转角度。

      重要的补充:万向节死锁 (Gimbal Lock)

      这是欧拉角最著名的缺陷。在某些特定姿态下,三个旋转轴中的两个会重合,导致丢失一个旋转自由度。

      • 经典例子:在 ZYX 顺序下,当第二次旋转(绕Y轴的Pitch)为 pm90 度时,第一次旋转的Z轴和第三次旋转的X轴就会重合(或者说指向相反方向)。
      • 后果:此时,你再去调整Roll和Yaw,会发现它们的效果是相同的,都是让物体绕着同一个轴旋转。你就无法做出某些独立的姿态调整了。
      • 解决方案:在需要进行复杂或连续旋转的领域(如游戏开发、动画、机器人),人们通常会使用四元数 (Quaternions) 或 旋转矩阵 (Rotation Matrices) 来表示和计算旋转,以避免万向节死锁。欧拉角更多用于人机交互界面(因为它直观)或者作为最终结果的呈现。

      总结与快速入门建议

      1. 放下执念:不要试图寻找一个“唯一正确”的欧拉角标准,它不存在。
      2. 抓住核心:任何欧拉角系统都由 旋转顺序 和 内外旋 定义。这是它的“说明书”。
      3. 分清主次:Roll/Pitch/Yaw 只是基于 坐标轴约定 的别名,是方便理解的“外套”。
      4. 学会转换:记住 XYZ 内旋 等价于 ZYX 外旋 这条黄金法则,能帮你理解不同系统。
      5. 知其局限:了解万向节死锁的存在,明白为什么在高级应用中大家更偏爱四元数。

      当你遇到一个新的环境(比如Unity, Unreal, Blender, a robotics library)时,你要做的第一件事就是去查它的文档,搞清楚它的欧拉角系统是哪种组合,例如:

      • Unity: 使用 Z-X-Y 顺序的内旋。
      • Unreal Engine: 使用 Z-Y-X 顺序的内旋 (Roll, Pitch, Yaw 分别对应 Y, X, Z)。

      搞清楚这套规则后,你就能在这个环境中自如地使用欧拉角了。希望这个系统性的讲解能帮你扫清迷雾,快速入门!

原文链接:https://zhuanlan.zhihu.com/p/1940774727674238008

http://www.jsqmd.com/news/572353/

相关文章:

  • PPTist:颠覆传统演示文稿创作的4个创新突破
  • YOLOv5+Swin-Tiny实战:在自定义数据集上提升小目标检测精度的完整流程
  • 逆向实战:从CE到x64dbg破解塔防游戏金币机制
  • 短剧付费 + 广告双模式系统:卡点解锁、激励视频、会员体系全实现
  • AI应用架构师如何用机器学习优化企业数据治理体系中的数据质量?
  • OpenWrt Samba共享安全升级:告别无密码访问,手把手教你配置用户认证
  • Python MCP服务模板横向评测报告(2024权威版):响应延迟差47倍、热重载失败率高达63%的真相曝光
  • 3个核心优势:JiYuTrainer极域电子教室控制解除工具
  • 人类飞行权益保护协会
  • OpenCV轮廓匹配避坑指南:用cv2.matchShapes做形状识别,为什么你的结果总不准?
  • MATLAB处理车载CAN数据(BLF):从原始报文到信号曲线的保姆级脚本解读
  • 如何快速部署企业级钉钉智能助手:OpenClaw-Channel-DingTalk完整实战指南
  • QGIS空间分析进阶:融合多源数据与加权叠加的社区便利店精准选址策略
  • 无损视频剪辑革命:LosslessCut如何重新定义音视频处理效率
  • 2026年格行随身WiFi3.0代理模式深度解析:零加盟费四重收益,普通人月入5万+的真实创业指南 - 格行官方招商总部
  • Kazumi开源工具技术架构深度解析:基于Flutter的跨平台动漫内容聚合方案
  • intv_ai_mk11开源可部署:支持国产化环境适配(麒麟OS+昇腾NPU推理扩展预留)
  • 从开发到加固:Android JNI动态注册的完整流程与Frida自检指南
  • RIFE帧插值算法深度解析:如何在Video2X中实现从24FPS到120FPS的无损流畅转换
  • 突破GEE算法限制:手把手教你将scikit-learn模型(如随机森林、XGBoost)‘偷渡’到Google Earth Engine进行遥感分析
  • 如何用Python脚本实现大麦网自动抢票?5步提升成功率90%
  • WindowResizer终极指南:高效解决Windows窗口尺寸限制的专业方案
  • Linux---USB_OTG设备连接超时(-110错误)排查指南
  • 从芯片包到破解:Keil MDK5完整安装与配置实战(附最新支持包离线导入方法)
  • 从入门到精通:通义灵码实战编码效率提升全解析
  • 从收音机到B超:深入浅出聊聊‘正交解调’这个通信老兵的医疗成像之旅
  • IO-Link实战:ISDU参数读写全流程解析(附报文抓包示例)
  • HunyuanVideo-Foley开源模型演进:从v1到Foley专项优化的技术路径
  • 计算机毕业设计:汽车市场销量口碑分析可视化平台 Django框架 Scrapy爬虫 可视化 数据分析 大数据 大模型 机器学习(建议收藏)✅
  • Pixel Aurora Engine行业应用:复古风品牌营销内容AI生成工作流