欧拉角旋转矩阵及四元数

Posted 大作家佚名

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了欧拉角旋转矩阵及四元数相关的知识,希望对你有一定的参考价值。

1. 简介

旋转表征方法有三种:欧拉角、旋转矩阵和四元数。三者都可以互相转换,本文里对三者定义以及转换进行说明,不涉及缩放问题,因此旋转矩阵都是 3 × 3 3\\times3 3×3大小。内容中符号采用了两种表述方式,阅读时注意转换。

2. 欧拉角

2.1 欧拉角定义

欧拉角是表征刚体旋转的一种方法之一,由莱昂哈德·欧拉 引入的三个角度,用于描述刚体相对于固定坐标系的方向。在摄影测量、空间科学或其它技术领域,一般用一组(三个)欧拉角描述两个空间坐标之间的旋转变换关系。

刚体在三维空间的一次旋转可以由绕 X \\mathrmX X 轴旋转的角度、绕 Y \\mathrmY Y 轴旋转的角度、绕 Z \\mathrmZ Z 轴旋转的角度来表征, 这三个角度分别是横滚角(roll, 符号 φ \\varphi φ )、俯仰角(pitch, 符号 θ \\theta θ )、航向角(yaw, 符号 ψ \\psi ψ ),或者用符号 α \\alpha α β \\beta β γ \\gamma γ分别表示绕XYZ轴(横滚、俯仰和航向)旋转的角度。 三个角的正负号可由右手定则表示。

2.2 右手系和左手系


左图和右图分别是左手系和右手系。
对于右手坐标,右拇指沿 z 轴指向正方向,食指指向x 轴,中指指向y轴。
对于左手坐标,左拇指沿 z 轴指向正方向,食指指向x 轴,中指指向y轴。

2.3 转换流程

刚体的取向可以用三个基本旋转矩阵来决定。换句话说,任何关于刚体旋转的旋转矩阵是由三个基本旋转矩阵复合而成的 。 由坐标系 S a S_a Sa S b S_b Sb 的变换可通过以下三次连续的转动实现:

Step1:坐标系 O − x a y a z a O-x_a y_a z_a Oxayaza z a z_a za 轴逆时针转过角 ψ \\psi ψ, 称为 O − x ′ y ′ z a O-x^\\prime y^\\prime z_a Oxyza;
Step2:坐标系 O − x ′ y ′ z a O-x^\\prime y^\\prime z_a Oxyza y ′ y' y 轴逆时针转过角 θ \\theta θ, 称为 O − x b y ′ z ′ ′ O-x_b y^\\prime z'' Oxbyz′′;
Step3: 坐标系 O − x b y ′ z ′ ′ O-x_b y^\\prime z^\\prime \\prime Oxbyz′′ x b x_b xb 轴逆时针转过角 φ \\varphi φ, 称为 O − x b y b z b O-x_b y_b z_b Oxbybzb

上述旋转角 φ , θ , ψ \\varphi, \\theta, \\psi φ,θ,ψ 就是一组欧拉角, 它们完全决定 S a S_a Sa S b S_b Sb 之间的相对姿态, 其中转动过程可用符号表示:
S a ⟶ R z ( ψ ) ∘ ⟶ R y ( θ ) ∘ ⟶ R x ( φ ) S b S_a \\stackrelR_z(\\psi)\\longrightarrow \\circ \\stackrelR_y(\\theta)\\longrightarrow \\circ \\stackrelR_x(\\varphi)\\longrightarrow S_b SaRz(ψ)Ry(θ)Rx(φ)Sb

经过三次变换,得到:

[ x b y b z b ] = R x ( φ ) R y ( θ ) R z ( ψ ) [ x a y a z a ] \\left[\\beginarrayl x_b \\\\ y_b \\\\ z_b \\endarray\\right]=R_x(\\varphi) R_y(\\theta) R_z(\\psi)\\left[\\beginarrayl x_a \\\\ y_a \\\\ z_a \\endarray\\right] xbybzb =Rx(φ)Ry(θ)Rz(ψ) xayaza

所以由 S a S_a Sa S b S_b Sb 的坐标变换矩阵为:

R = R x ( φ ) R y ( θ ) R z ( ψ ) R=R_x(\\varphi) R_y(\\theta) R_z(\\psi) R=Rx(φ)Ry(θ)Rz(ψ)

一般来说, 三维空间的坐标变换可以由三次基元变换矩阵相乘得到。当欧拉角的定义与上述顺序和旋转方向不一致时,仍可按照上述原则处理。使用欧拉角时,我们必须明确表示出夹角的顺序。这三个旋转是依次施加的,顺序不同,产生的结果也不同。因此,使用欧拉角前,必须先做好明确的定义。

旋转顺序: 在经典力学里,时常用yxz顺序来设定欧拉角;照着第二个转动轴的轴名,简称为x顺序。还有一种顺序,xyz顺序,常用在航空航天工程中

任何方向都可以通过从已知的标准方向开始组成三个元素旋转来实现。等价地,任何旋转矩阵R都可以分解为三个元素旋转矩阵的乘积。例如:
R = R x ( α ) R y ( β ) R z ( γ ) \\displaystyle R=R_x(\\alpha )R_y(\\beta )R_z(\\gamma ) R=RxαRyβRzγ
或者
R = R x ( φ ) R y ( θ ) R z ( ψ )

以上是关于欧拉角旋转矩阵及四元数的主要内容,如果未能解决你的问题,请参考以下文章

欧拉角与四元数互转,及四元数slerp球面线性插值算法

python 欧拉角,旋转矩阵,四元数之间转换

3D计算机图形学变换矩阵欧拉角四元数

欧拉角四元数和矩阵的对比(转)

3D计算机图形学变换矩阵欧拉角四元数

Unity编程四元数(Quaternion)与欧拉角