欧拉角、四元数、万向节死锁的理解

目录

欧拉角:

万向节死锁:

四元数:

总结:


欧拉角:

想象你手里拿着一个玩具飞机,你想让它旋转到某个方向。你可以通过三个步骤来描述这个旋转:

  1. 偏航角(Yaw):让飞机左右转,就像你转动方向盘一样。

  2. 俯仰角(Pitch):让飞机上下点头,就像你抬头或低头一样。

  3. 滚转角(Roll):让飞机侧翻,就像你侧身一样。

这三个角度(偏航、俯仰、滚转)就是欧拉角,它们可以描述飞机在三维空间中的旋转。

万向节死锁:

现在想象你在旋转飞机时,先让它上下点头(俯仰角)到90度,也就是飞机完全垂直向上。这时候,你再想让它左右转(偏航角)或侧翻(滚转角),你会发现这两个动作变得几乎一样,因为飞机已经垂直了。这就好像你失去了一个旋转的自由度,飞机被“锁住”了,这就是万向节死锁。

四元数:

为了避免万向节死锁,我们可以用另一种方式来描述旋转,这就是四元数。四元数可以看作是一个更高级的数学工具,它用一个四维的向量来描述旋转,而不是三个角度。使用四元数,无论飞机怎么旋转,都不会出现自由度丢失的情况,因为它用一种更平滑的方式来处理旋转。

总结:

  • 欧拉角:用三个角度描述旋转,简单直观,但可能会出现万向节死锁。

  • 万向节死锁:在某些旋转情况下,欧拉角会失去一个自由度,导致旋转受限。

  • 四元数:用四维向量描述旋转,避免了万向节死锁,适合复杂的旋转操作。

### 关于万向节死锁的直观理解 万向节死锁(Gimbal Lock),是一种在三维空间中使用欧拉角描述旋转时可能出现的现象。当两个旋转轴对齐时,就会丢失一个自由度,从而使得某些姿态无法通过常规方式达到。 #### 图解说明 考虑三个相互垂直的旋转轴 X, Y, Z,在特定情况下,如果中间轴(假设为Y轴)旋转到 ±90 度的位置,则新形成的 Y' 轴将会与 Z 轴完全重合[^3]。此时: - 初始状态下,三个轴各自独立; - 当 θ=±π/2 时,新的 Y' 轴与 Z 轴对齐,导致原本用于表示不同方向的角度参数变得冗余——即滚转角 \( \phi \) 和偏航角 \( \psi \) 的变化不再能被区分开来; 这种现象可以通过下图更清晰地展示出来: ![gimbal_lock](https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Gimbal_Lock_on_a_gyroscope.gif/800px-Gimbal_Lock_on_a_gyroscope.gif) 在这个动画里可以看到,随着第二个环形结构绕着它的中心轴转动至极限角度 (接近直立),第三个环就失去了相对于第一个环的有效运动范围,这就是所谓的“锁定”。 #### 示例代码模拟 为了更好地理解和验证这一概念,可以编写一段简单的 Python 程序来模拟这种情况下的变换矩阵计算过程: ```python import numpy as np def rotation_matrix(roll, pitch, yaw): Rx = np.array([[1, 0, 0], [0, np.cos(roll), -np.sin(roll)], [0, np.sin(roll), np.cos(roll)]]) Ry = np.array([[np.cos(pitch), 0, np.sin(pitch)], [0, 1, 0], [-np.sin(pitch), 0, np.cos(pitch)]]) Rz = np.array([[np.cos(yaw), -np.sin(yaw), 0], [np.sin(yaw), np.cos(yaw), 0], [0, 0, 1]]) return Rz @ Ry @ Rx # 测试 gimbal lock 发生的情况 pitch_angle = np.pi / 2 # 设置俯仰角为 π/2 或者 -π/2 来触发 gimbal lock R = rotation_matrix(np.radians(45), pitch_angle, np.radians(-45)) print(R) ``` 上述代码定义了一个函数 `rotation_matrix` ,它接受三个输入参数分别对应于围绕固定坐标系XYZ轴的旋转变换量,并返回相应的复合旋转矩阵。特别注意的是,当设置 `pitch_angle=np.pi/2` 或 `-np.pi/2` 时,会发生万向节死锁情况,这将影响最终得到的姿态转换结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值