欧拉角
定义

它由三个角度组成,分别是绕固定的坐标轴(通常是X轴、Y轴和Z轴)旋转的角度。具体来说,欧拉角通常包括以下三个角度:
- 滚转角(Roll):绕Z轴旋转的角度。
- 俯仰角(Pitch):绕Y轴旋转的角度。
- 偏航角(Yaw):绕X轴旋转的角度。
缺点
旋转的顺序会影响到旋转的结果,且有万向节死锁的问题;
万向节
绕xxx轴旋转90°

绕yyy轴旋转90°

现在zzz轴和旋转之前的xxx轴的重合,我们再去绕着zzz轴旋转,会发现无法绕着zzz轴旋转,而是绕着xxx轴,由此我们就丢弃了一个自由度

那造成这样的原因是什么呢?
在很多年以前,欧拉就证明了,3D 空间中的任意一个旋转都可以拆分成为沿着物体自身三个正交坐标轴的旋转.
E(yaw,pitch,roll)=Rz(yaw)Ry(roll)Rx(pitch)E(yaw,pitch,roll)=R_z(yaw)R_y(roll)R_x(pitch)E(yaw,pitch,roll)=Rz(yaw)Ry(roll)Rx(pitch)
其中,
Rx(θ)=[1000cos(θ)−sin(θ)0sin(θ)cos(θ)]Ry(θ)=[cos(θ)0sin(θ)010−sin(θ)0cos(θ)]Rz(θ)=[cos(θ)−sin(θ)0sin(θ)cos(θ)0001]\begin{gathered}
R_{x}(\theta) =\begin{bmatrix}1&0&0\\0&\cos(\theta)&-\sin(\theta)\\0&\sin(\theta)&\cos(\theta)\end{bmatrix} \\
R_{y}(\theta) =\begin{bmatrix}\cos(\theta)&0&\sin(\theta)\\0&1&0\\-\sin(\theta)&0&\cos(\theta)\end{bmatrix} \\
R_{z}(\theta) =\begin{bmatrix}\cos(\theta)&-\sin(\theta)&0\\[0.3em]\sin(\theta)&\cos(\theta)&0\\[0.3em]0&0&1\end{bmatrix}
\end{gathered}Rx(θ)=1000cos(θ)sin(θ)0−sin(θ)cos(θ)Ry(θ)=cos(θ)0−sin(θ)010sin(θ)0cos(θ)Rz(θ)=cos(θ)sin(θ)0−sin(θ)cos(θ)0001
我们可以固定一个旋转的顺序:
E(yaw, pitch, roll)=Rz(yaw)Ry(roll)Rx(pitch)E(\text{yaw, pitch, roll})=R_z(\text{yaw})R_y(\text{roll})R_x(\text{pitch})E(yaw, pitch, roll)=Rz(yaw)Ry(roll)Rx(pitch)
我们按照这个顺序对三个轴进行旋转,在某些特殊情况下,其中的某两个旋转变换可能变换的是同一个轴,这样就导致丧失了一个自由度,从而导致了万向节死结的产生。
假设按照x−y−zx-y-zx−y−z的顺序旋转。其中xxx轴任意旋转,沿yyy轴旋转π/2\pi/2π/2,最后沿着zzz旋转任意角度,大致的过程如下:


这样我们将zzz轴变换到原来xxx轴的方向,所以,最后zzz轴的旋转与xxx轴的旋转其实操纵的是同一个轴(外部的旋转轴),三次旋转仅仅覆盖了两个外部轴的旋转,就导致了万向节死结的现象。
用公式去表达这个过程的话:
E(α,π2,β)=Rz(β)Ry(π2)Rx(α)=[0cos(β)⋅sin(α)−cos(α)⋅sin(β)sin(α)⋅sin(β)+cos(α)⋅cos(β)0sin(α)⋅sin(β)+cos(α)⋅cos(β)cos(α)⋅sin(β)−cos(β)⋅sin(α)−100]=[0sin(α−β)cos(α−β)0cos(α−β)−sin(α−β)−100]=Ry(π2)Rx(α−β)\begin{aligned}
E(\alpha,\frac{\pi}{2},\beta)& =R_{z}(\beta)R_{y}(\frac{\pi}{2})R_{x}(\alpha) \\
&=\begin{bmatrix}0&\cos(\beta)\cdot\sin(\alpha)-\cos(\alpha)\cdot\sin(\beta)&\sin(\alpha)\cdot\sin(\beta)+\cos(\alpha)\cdot\cos(\beta)\\0&\sin(\alpha)\cdot\sin(\beta)+\cos(\alpha)\cdot\cos(\beta)&\cos(\alpha)\cdot\sin(\beta)-\cos(\beta)\cdot\sin(\alpha)\\-1&0&0\end{bmatrix} \\
&=\begin{bmatrix}0&\sin(\alpha-\beta)&\cos(\alpha-\beta)\\0&\cos(\alpha-\beta)&-\sin(\alpha-\beta)\\-1&0&0\end{bmatrix} \\
&=R_y(\frac{\pi}{2})R_x(\alpha-\beta)
\end{aligned}E(α,2π,β)=Rz(β)Ry(2π)Rx(α)=00−1cos(β)⋅sin(α)−cos(α)⋅sin(β)sin(α)⋅sin(β)+cos(α)⋅cos(β)0sin(α)⋅sin(β)+cos(α)⋅cos(β)cos(α)⋅sin(β)−cos(β)⋅sin(α)0=00−1sin(α−β)cos(α−β)0cos(α−β)−sin(α−β)0=Ry(2π)Rx(α−β)

2万+

被折叠的 条评论
为什么被折叠?



