三维空间中,绕着X轴,Y轴,Z轴的旋转可以使用4*4的矩阵表示,而根据左右手坐标系的不同,又可分为左手坐标系下的三维旋转矩阵和右手坐标系下的三维旋转矩阵。矩阵采用列主序。

1 左手坐标系下的旋转矩阵

左手坐标系下,正旋转是绕旋转轴顺时针旋转,可以理解为从旋转轴的正方向看向原点的顺时针方向。

设旋转角为θ角,

1.1 绕X轴顺时针旋转θ角的旋转矩阵

R_x(\theta)=\begin{bmatrix}1&0&0&0\\0&\cos\theta&-\sin\theta&0\\0&\sin\theta&\cos\theta&0\\0&0&0&1\end{bmatrix}

1.2 绕Y轴顺时针旋转θ角的旋转矩阵

R_y(\theta)=\begin{bmatrix}\cos\theta&0&\sin\theta&0\\0&1&0&0\\-\sin\theta&0&\cos\theta&0\\0&0&0&1\end{bmatrix}

1.3 绕Z轴顺时针旋转θ角的旋转矩阵

R_z(\theta)=\begin{bmatrix}\cos\theta&-\sin\theta&0&0\\\sin\theta&\cos\theta&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix}

1.4 旋转矩阵组合

我们可以以上述三个绕轴旋转矩阵为基础,使用矩阵乘法组成不同旋转顺序的旋转矩阵,比如:

R_{x}(\gamma ) R_{y}(\beta ) R_{z}(\alpha )

其中\alpha\beta\gamma 分辨代表yaw、pitch、roll欧拉角。

  • pitch:抬头
  • yaw:向右偏
  • roll:向右翻滚

类似的,公式:

R_{z}(\gamma ) R_{x}(\beta ) R_{y}(\alpha )

代表欧拉角为\alpha\beta\gamma,变换顺序为y-x-z的旋转变换

另外,假设当前为顺时针的左手坐标系,绕x轴旋转\phi 角,绕y轴旋转\theta 角,绕z轴旋转\psi 角,且按x-y-z的顺序进行旋转,那么最后的旋转矩阵为:

R_{z}(\psi)R_{y}(\theta )R_{x}(\phi) = \\
\begin{bmatrix}
\cos \theta \cos \psi & -\cos \phi\sin \psi+\sin\phi\sin\theta\cos\psi & \sin \phi\sin\psi + \cos\phi\sin\theta\cos\psi \\
\cos\theta\sin \psi & \cos\phi\cos\psi+\sin\phi\sin \theta \sin \psi & -\sin\phi\cos\psi+\cos\phi\sin\theta\sin\psi \\
-\sin\theta & \sin\phi\cos\theta & \cos\phi\cos \theta
\end{bmatrix}

2 右手坐标系下的旋转矩阵

右手坐标系下,正旋转是绕旋转轴逆时针旋转,可以理解为从旋转轴的正方向看向原点的逆时针方向。

设旋转角为θ角,因为左右手坐标系的不同,导致在两个坐标系中旋转的正方向相反,白话文就是在左手坐标系中旋转了θ角,就相当于在右手坐标系中旋转了-θ角。
所以在第1节以在左手坐标系中顺时针旋转为正方向的情况下,顺时针旋转θ角为正方向,那么在右手坐标系中逆时针旋转θ角需要将第1节中左手坐标系的旋转矩阵中的角度改为-θ角。
那么将上述绕X,Y,Z轴的旋转中的θ角全部改为−θ角,则:

2.1 绕X轴顺时针旋转θ角的旋转矩阵

以第一节中绕x轴的旋转矩阵为基础,将θ修改为-θ,则:

R_x(\theta)=\begin{bmatrix}1&0&0&0\\0&\cos(-\theta)&-\sin(-\theta)&0\\0&\sin(-\theta)&\cos(-\theta)&0\\0&0&0&1\end{bmatrix}

则根据三角函数计算公式可推导出:

R_x(\theta)=\begin{bmatrix}1&0&0&0\\0&\cos\theta&\sin\theta&0\\0&-\sin\theta&\cos\theta&0\\0&0&0&1\end{bmatrix}

2.2 绕Y轴顺时针旋转θ角的旋转矩阵

以第一节中绕y轴的旋转矩阵为基础,将θ修改为-θ,则:

R_y(\theta)=\begin{bmatrix}\cos(-\theta)&0&\sin(-\theta)&0\\0&1&0&0\\-\sin(-\theta)&0&\cos(-\theta)&0\\0&0&0&1\end{bmatrix}

则根据三角函数计算公式可推导出:

R_y(\theta)=\begin{bmatrix}\cos\theta&0&-\sin\theta&0\\0&1&0&0\\\sin\theta&0&\cos\theta&0\\0&0&0&1\end{bmatrix}

2.3 绕Z轴顺时针旋转θ角的旋转矩阵

以第一节中绕z轴的旋转矩阵为基础,将θ修改为-θ,则:

R_z(\theta)=\begin{bmatrix}\cos(-\theta)&-\sin(-\theta)&0&0\\\sin(-\theta)&\cos(-\theta)&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix}

则根据三角函数计算公式可推导出:

R_z(\theta)=\begin{bmatrix}\cos\theta&\sin\theta&0&0\\-\sin\theta&\cos\theta&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix}

参考链接