无人机常用坐标系、旋转矩阵、欧拉角、四元数以及相互转换关系
- 一、坐标系
- 1. 地心惯性坐标系 O X i Y i Z i OX_iY_iZ_i OXiYiZi ( i (i (i系)
- 2. 地球坐标系 O X e Y e Z e OX_eY_eZ_e OXeYeZe( e e e系)
- 3. 地理坐标系 O X g Y g Z g OX_gY_gZ_g OXgYgZg( g g g系)
- 4. 载体坐标系 O X b Y b Z b OX_bY_bZ_b OXbYbZb( b b b系)
- 5. 平台坐标系 O X p Y p Z p OX_pY_pZ_p OXpYpZp( p p p系)
- 6. 导航坐标系 O X n Y n Z n OX_nY_nZ_n OXnYnZn( n n n系)
- 7. 计算坐标系 O X c Y c Z c OX_cY_cZ_c OXcYcZc( c c c系)
- 二、无人机常用坐标系
- 三、 姿态角/轴向/范围
- 四、姿态解算
- 五、方向余玄阵
- 六、欧拉角
- 七、四元数
- 八、四元数与欧拉角相互转化
一、坐标系
1. 地心惯性坐标系 O X i Y i Z i OX_iY_iZ_i OXiYiZi ( i (i (i系)
该坐标系是惯性组件测量的基准。该系各轴确定方法如下 : : : 地球的中心O为i系的原点,该系的基面为赤道面。 X i Xi Xi轴在地球赤道平面内并指向春分点,设地球自转轴为 Z i Zi Zi轴,向北为正。由右手坐标系获得 Y i Yi Yi,这三者组合 O X i Y i Z i OXiYiZi OXiYiZi称为地心惯性坐标系。研究中通常假定它为一个理想坐标系,即认为它是时不变的,是相对惯性空间无任何运动的,且在该系经典力学可全部被应用;
2. 地球坐标系 O X e Y e Z e OX_eY_eZ_e OXeYeZe( e e e系)
地球的中心 O O O为 e e e系的原点,固联于地球,设地球自转轴为 Z i Z_i Zi轴,向北为正。 X e X_e Xe由位于赤道平面内且通过零子午线。由右手坐标系获得 Y i Y_i Yi这三者组合 O X e Y e Z e OX_eY_eZ_e OXeYeZe即为地球坐标系;
3. 地理坐标系 O X g Y g Z g OX_gY_gZ_g OXgYgZg( g g g系)
载体重心为其原点。 N N N轴( X g X_g Xg)指向北; E E E轴( Y g Y_g Yg)指向东;D轴( Z g Z_g Zg)指向地表。此时的地理坐标系称为北东地坐标系(ONED)。在有些研究中,东北天(OENU)坐标系被采用, Z g Z_g Zg轴指向天顶;
4. 载体坐标系 O X b Y b Z b OX_bY_bZ_b OXbYbZb( b b b系)
该系为右手坐标系,其原点位于载体的重心,且固连在载体上,各轴配置如下:
X
b
X_b
Xb轴沿载体纵轴指向前,
Y
b
Y_b
Yb轴沿载体横轴指向右;
Z
b
Z_b
Zb轴沿载体的竖轴指向下,并垂直于
O
X
b
Y
b
OX_bY_b
OXbYb 轴;
5. 平台坐标系 O X p Y p Z p OX_pY_pZ_p OXpYpZp( p p p系)
固连于物理(对平台式)或数学平台(对SINS)的右手直角坐标系;
6. 导航坐标系 O X n Y n Z n OX_nY_nZ_n OXnYnZn( n n n系)
该系常用于求解导航参数,根据平台不同有两种配置方式:
1)平台式惯导系统
导航坐标系常取理想的平台坐标系。
2)SINS系统
导航参数可在非载体坐标系上求解,例如可将加速度信号分解到特定的坐标系上以降低计算难度,而常用的导航坐标系之一是地理坐标系;
7. 计算坐标系 O X c Y c Z c OX_cY_cZ_c OXcYcZc( c c c系)
该系是一种虚拟坐标系,用于研究惯导系统,是以计算所得的经纬度为原点 O O O建立起来的地理坐标系,它与载体实际位置 O O O点上建立的地理坐标系 O X g Y g Z g OX_gY_gZ_g OXgYgZg不一致。两个坐标系之间的夹角为惯导系统的定位误差。为方便研究,定义重角: O X p Y p Z p OX_pY_pZ_p OXpYpZp系相对于 O X c Y c Z c OX_cY_cZ_c OXcYcZc系的夹角;平台的姿态角: O X p Y p Z p OX_pY_pZ_p OXpYpZp系相对于 O X g Y g Z g OX_gY_gZ_g OXgYgZg系的夹角。
二、无人机常用坐标系
1. 导航坐标系( n n n系)
常用的导航坐标系有北东地和东北天两种。
两种坐标系的指向分别定义如下:
1.1 北东地坐标系
X轴:指北;
Y轴:指东;
Z轴:指地。
1. 2 东北天坐标系
X轴:指东;
Y轴:指北;
Z轴:指天。
2. 载体坐标系( b b b系)
与导航坐标系类似,常用的载体坐标系也有如下两种:
2.1 前右下坐标系—对应北东地导航坐标系
X轴:指向载体前进方向;
Y轴:指向载体右侧;
Z轴:指向下。
2.2 右前上坐标系—对应东北天导航坐标系
X轴:指向载体右侧;
Y轴:指向载体前进方向;
Z轴:指向上。
三、 姿态角/轴向/范围
从导航坐标系经过3次旋转,得到载体坐标系,3次旋转的角度为姿态角。
1.姿态角
- 航向角: 也叫做方位角,偏航角, yaw, azimuth, heading. 希腊字母表示: ψ \psi ψ(读作psi)
- 俯仰角:也叫做pitch, elevation. 希腊字母表示: θ \theta θ(读作theta)
- 横滚角: 也叫做roll, 希腊字母表示 ϕ \phi ϕ(读作phi)
姿态角 | 符号 | 读法 |
---|---|---|
航向角 | ψ \psi ψ | psi |
俯仰角 | θ \theta θ | theta |
横滚角 | ϕ \phi ϕ | phi |
2. 姿态角范围
(1) 俯仰角(-90 ~ 90deg);
(2) 横滚角(-180 ~ 180deg);
(3) 航向角(-180 ~ 180deg,可转换为0~360deg);
满足右手定则
3. 姿态角对应轴向
(1) 北东地坐标系
X轴:横滚角;Y轴:俯仰角;Z轴:航向角。
(2) 东北天坐标系
X轴:俯仰角;Y轴:横滚角;Z轴:航向角。
四、姿态解算
1. 坐标变换
以导航坐标系与载体坐标系之间的姿态旋转矩阵为例。所谓的姿态解算,就是求出当前的机体坐标系b(载体坐标系) 相对于地理坐标系n(导航坐标系) 的变化。由于n系和b 系均为直角坐标系,各轴之间始终保持直角,所以可将坐标系理解成刚体,当只研究两个坐标系间的角位置关系时,可理解成刚体的定点转动。而刚体定点转动这个变化可以通过一个变换矩阵来表示,这个矩阵包含了刚体的所有姿态信息。
右手系
[
a
−
c
c
a
]
(1)
\left[ \begin{matrix} a & -c \\ c & a \end{matrix} \right]\tag{1}
[ac−ca](1)
左手系
[
a
c
−
c
a
]
(2)
\left[ \begin{matrix} a & c \\ -c & a \end{matrix} \right]\tag{2}
[a−cca](2)
1.1 旋转方式
以z轴旋转为例:旋转方式由两种坐标系的旋转和向量的旋转
a. 坐标系的旋转

如上图所示, P P P 点不变,坐标系 O − X Y Z O-XYZ O−XYZ 旋转 α \alpha α,得到新的坐标系 O − X ′ Y ′ Z ′ O-X^{'}Y^{'}Z^{'} O−X′Y′Z′ ,在新坐标系下, P P P点的坐标变为 P ′ P^{'} P′,则有:
P = R z ( α ) P ′ P=R_z(\alpha)P^{'} P=Rz(α)P′
b. 向量的旋转

如上图所示,坐标系 O − X Y Z O-XYZ O−XYZ不变, P ′ P^{'} P′点旋转 α \alpha α ,得到新的点 P P P ,则有:
P = R z ( α ) P ′ P=R_z(\alpha)P^{'} P=Rz(α)P′
2. 左乘右乘
本身矩阵就是为了表示旋转而生的,三个轴的旋转也就是将三个旋转矩阵相乘即可。我们首先给出绕 x , y \mathrm{x}, \mathrm{y} x,y, z轴各自旋转的旋转矩阵表示:
R x ( θ ) = [ 1 0 0 0 cos θ − sin θ 0 sin θ cos θ ] \boldsymbol{R}_{x}(\theta)=\left[\begin{array}{ccc}1 & 0 & 0 \\ 0 & \cos \theta & -\sin \theta \\ 0 & \sin \theta & \cos \theta\end{array}\right] Rx(θ)=⎣⎡1000cosθsinθ0−sinθcosθ⎦⎤
R y ( γ ) = [ cos γ 0 sin γ 0 1 0 − sin γ 0 cos γ ] \boldsymbol{R}_{y}(\gamma)=\left[\begin{array}{ccc}\cos \gamma & 0 & \sin \gamma \\ 0 & 1 & 0 \\ -\sin \gamma & 0 & \cos \gamma\end{array}\right] Ry(γ)=⎣⎡cosγ0−sinγ010sinγ0cosγ⎦⎤
R
z
(
α
)
=
[
cos
α
−
sin
α
0
sin
α
cos
α
0
0
0
1
]
\boldsymbol{R}_{z}(\alpha)=\left[\begin{array}{ccc}\cos \alpha & -\sin \alpha & 0 \\ \sin \alpha & \cos \alpha & 0 \\ 0 & 0 & 1\end{array}\right]
Rz(α)=⎣⎡cosαsinα0−sinαcosα0001⎦⎤
其中,旋转角的正方向符合右手螺旋定则。
内旋和外旋
每次旋转是绕固定轴(一个固定参考系,比如世界坐标系)旋转,称为外旋。每次旋转是绕自身旋转之后的轴旋转,称为内旋。下图说明了内旋和外旋的区别。
此处注意乘法规则, 我们前面得到的矩阵是外旋矩阵, 外旋是左乘,这里的左乘, 并不是算数中的左乘, 很多认错认为
Y
−
X
−
Z
\mathrm{Y}-\mathrm{X}-\mathrm{Z}
Y−X−Z 的左乘,就应该是
R
Y
×
R
X
×
R
Z
R_{Y} \times R_{X} \times R_{Z}
RY×RX×RZ, 这是错误的, 根据外旋 的规则, 应该是
R
Z
×
R
X
×
R
Y
R_{Z} \times R_{X} \times R_{Y}
RZ×RX×RY, 不明白? 比如说我有一个向量
P
(
X
,
Y
,
Z
)
:
\mathrm{P}(\mathrm{X}, \mathrm{Y}, \mathrm{Z}):
P(X,Y,Z):
1、先绕
Y
Y
Y 旋转我们得到新坐标
P
(
X
1
,
Y
1
,
Z
1
)
P(X 1, Y 1, Z 1)
P(X1,Y1,Z1) 左乘指的是如下左乘:
[
X
1
Y
1
Z
1
]
=
R
Y
×
[
X
Y
Z
]
\left[\begin{array}{l} X_{1} \\ Y_{1} \\ Z_{1} \end{array}\right]=R_{Y} \times\left[\begin{array}{l} X \\ Y \\ Z \end{array}\right]
⎣⎡X1Y1Z1⎦⎤=RY×⎣⎡XYZ⎦⎤
2、先绕
X
X
X 旋转我们得到新坐标 P(X2,Y2,Z2)
[
X
2
Y
2
Z
2
]
=
R
X
×
[
X
1
Y
1
Z
1
]
\left[\begin{array}{l} X_{2} \\ Y_{2} \\ Z_{2} \end{array}\right]=R_{X} \times\left[\begin{array}{l} X_{1} \\ Y_{1} \\ Z_{1} \end{array}\right]
⎣⎡X2Y2Z2⎦⎤=RX×⎣⎡X1Y1Z1⎦⎤
3、先绕
Z
Z
Z 旋转我们得到新坐标 P(X3,Y3,Z3)
[
X
3
Y
3
Z
3
]
=
R
Z
×
[
X
2
Y
2
Z
2
]
\left[\begin{array}{l} X_{3} \\ Y_{3} \\ Z_{3} \end{array}\right]=R_{Z} \times\left[\begin{array}{l} X_{2} \\ Y_{2} \\ Z_{2} \end{array}\right]
⎣⎡X3Y3Z3⎦⎤=RZ×⎣⎡X2Y2Z2⎦⎤
4、把公式展开
[
X
3
Y
3
Z
3
]
=
R
Z
×
(
R
X
×
(
R
Y
×
[
X
Y
Z
]
)
)
=
R
Z
×
R
X
×
R
Y
×
[
X
Y
Z
]
\left[\begin{array}{l} X_{3} \\ Y_{3} \\ Z_{3} \end{array}\right]=R_{Z} \times\left(R_{X} \times\left(R_{Y} \times\left[\begin{array}{c} X \\ Y \\ Z \end{array}\right]\right)\right)=R_{Z} \times R_{X} \times R_{Y} \times\left[\begin{array}{l} X \\ Y \\ Z \end{array}\right]
⎣⎡X3Y3Z3⎦⎤=RZ×⎝⎛RX×⎝⎛RY×⎣⎡XYZ⎦⎤⎠⎞⎠⎞=RZ×RX×RY×⎣⎡XYZ⎦⎤
姿态角 | 符号 | 读法 | 坐标轴 |
---|---|---|---|
航向角 | ψ \psi ψ | psi | z |
俯仰角 | θ \theta θ | theta | y |
横滚角 | ϕ \phi ϕ | phi | x |
按照内旋方式,
Z
−
Y
−
X
Z-Y-X
Z−Y−X旋转顺序 ( 指先绕自身轴Z,再绕自身轴Y,最后绕自身轴X ),可得旋转矩阵 ( 内旋是右乘 ):
R
1
=
R
321
=
R
z
(
ψ
)
∗
R
y
(
θ
)
∗
R
x
(
ϕ
)
R 1= R_{321}=R_{z}(\psi) * R_{y}(\theta) * R_{x}(\phi)
R1=R321=Rz(ψ)∗Ry(θ)∗Rx(ϕ)
按照外旋方式,
X
−
Y
−
Z
X-Y -Z
X−Y−Z旋转顺序
(
(
( 指先绕固定轴
X
X
X, 再绕固定轴Y,最后绕固定轴Z ) , 可得旋转矩阵 (外旋是左乘 ) :
R
2
=
R
123
=
R
z
(
ψ
)
∗
R
y
(
θ
)
∗
R
x
(
ϕ
)
R 2=R_{123}=R_{z}(\psi) * R_{y}(\theta) * R_{x}(\phi)
R2=R123=Rz(ψ)∗Ry(θ)∗Rx(ϕ)
故R1=R2,具体不在此证明,记住即可。这个结论说明ZYX顺序的内旋等价于XYZ顺序的外旋。
五、方向余玄阵
方向余弦表示一个向量的方向(姿态)我们可以用他在参考坐标系(地理坐标系)各个轴向的夹角的余弦来表示(及在各个轴的投影)。类似的 一个坐标系 可以看成是3个向量组成,所以三个向量分别在坐标轴上的投影可以用来表示一个坐标系与参考坐标系的关系。这总共9个方向余弦组成了一个三阶矩阵。
设方向余弦阵为北东地坐标系到载体坐标系的转换矩阵
C
n
b
C_n^b
Cnb其
运动方程为:
C
˙
n
b
=
−
ω
C
n
b
\begin{array}{c} \dot{C}_{n}^{b} = -\omega {C}_{n}^{b} \end{array}
C˙nb=−ωCnb
式中,
ω
=
[
p
q
r
]
T
\omega=[p q r]^T
ω=[pqr]T为载体相对北东地坐标系的旋转角速度。方向余弦阵是一个
正交矩阵,其逆等于其转置,即
C
n
b
−
{C_n^b}^-
Cnb−=
C
n
b
T
{C_n^b}^T
CnbT
1. 优缺点
1.1 优点
- 旋转轴可以是任意向量;
1.2 缺点
- 旋转其实只需要知道一个向量+一个角度,一共4个值的信息,但矩阵法却使用了16个元素;
- 做乘法操作时也会增加计算量,造成了空间和时间上的一些浪费;
六、欧拉角
1. 旋转顺序
三维空间中刚体(或者坐标系) 定点转动需要三个自由度,最简单的就是欧拉角表示。但是由于旋转顺序问题,欧拉角表示不唯一。根据坐标系绕其轴的旋转顺序不同,存在12种定义方式。 常用的顺序有2种:国内一般用312旋转顺序(先转Z,然后X, 最后Y);国外一般用321顺序(旋转Z,然后Y,最后X)。
常用坐标
- ENU-右前上(载体坐标系)
右前上坐标系下,Z对应偏航,Y对应横滚,X对应俯仰。所以在常用的姿态旋转顺序(Yaw-Pitch-Roll)中,对应的旋转方式为312(Z-X-Y)。
举例说明
参考系(导航系):(ENU)东北天
载体系(机体系):(XYZ)右前上
旋转顺序:Z-X-Y(312)
姿态顺序:(Yaw-Pitch-Roll)偏航
ψ
\psi
ψ-俯仰
θ
\theta
θ-横滚
ϕ
\phi
ϕ
旋转轴:内旋
姿态角 | 符号 | 读法 | 坐标轴 |
---|---|---|---|
航向角Yaw | ψ \psi ψ | psi | z |
俯仰角Pitch | θ \theta θ | theta | x |
横滚角Roll | ϕ \phi ϕ | phi | y |
R b n = R Z X Y = [ cosYaw* cosRoll − sinYaw ∗ sinRoll ∗ sinPitch -cosPitch ∗ sinYaw cosYaw ∗ sinRoll + cosRoll ∗ sinYaw ∗ sinPitch cosRoll ∗ sinYaw + cosYaw ∗ sinRoll ∗ sinPitch cosYaw ∗ cosPitch sinYaw ∗ sinRoll − cosYaw ∗ cosRoll ∗ sinPitch − cosPitch ∗ sinRoll sinPitch cosRoll ∗ cosPitch ] = [ cos ψ cos ϕ − sin ψ sin ϕ sin θ -cos θ sin ψ cos ψ sin ϕ + cos ϕ sin ψ sin θ cos ϕ sin ψ + cos ψ sin ϕ sin θ cos ψ cos θ sin ψ sin ϕ − cos ψ cos ϕ sin θ − cos θ sin ϕ sin θ cos ϕ cos θ ] \begin{array}{l} R_{b}^{n}=R_{Z X Y}\\ =\left[\begin{array}{ccc} \text { cosYaw* cosRoll }-\text { sinYaw } * \text { sinRoll } * \text { sinPitch } & \text { -cosPitch } * \text { sinYaw } & \text { cosYaw } * \text { sinRoll }+\text { cosRoll } * \text { sinYaw } * \text { sinPitch } \\ \text { cosRoll } * \text { sinYaw }+\text { cosYaw } * \text { sinRoll } * \text { sinPitch } & \text { cosYaw } * \text { cosPitch } & \text { sinYaw } * \text { sinRoll }-\text { cosYaw } * \text { cosRoll } * \text { sinPitch } \\ -\text { cosPitch } * \text { sinRoll } & \text { sinPitch } & \text { cosRoll } * \text { cosPitch } \end{array}\right]\\ =\left[\begin{array}{ccc} \text { cos$\psi$cos$\phi$ }-\text { sin$\psi$ } \text { sin$\phi$ } \text { sin $\theta$ } & \text { -cos $\theta$ } \text { sin$\psi$ } & \text { cos$\psi$ } \text { sin$\phi$}+\text { cos$\phi$ } \text { sin$\psi$ } \text { sin $\theta$ } \\ \text { cos$\phi$ } \text { sin$\psi$ }+\text { cos$\psi$ } \text { sin$\phi$ } \text { sin $\theta$ } & \text { cos$\psi$ } \text { cos $\theta$ } & \text { sin$\psi$ } \text { sin$\phi$ }-\text { cos$\psi$ } \text { cos$\phi$ } \text { sin $\theta$ } \\ -\text { cos $\theta$ } \text { sin$\phi$ } & \text { sin $\theta$ } & \text { cos$\phi$} \text { cos $\theta$ } \end{array}\right] \end{array} Rbn=RZXY=⎣⎡ cosYaw* cosRoll − sinYaw ∗ sinRoll ∗ sinPitch cosRoll ∗ sinYaw + cosYaw ∗ sinRoll ∗ sinPitch − cosPitch ∗ sinRoll -cosPitch ∗ sinYaw cosYaw ∗ cosPitch sinPitch cosYaw ∗ sinRoll + cosRoll ∗ sinYaw ∗ sinPitch sinYaw ∗ sinRoll − cosYaw ∗ cosRoll ∗ sinPitch cosRoll ∗ cosPitch ⎦⎤=⎣⎡ cosψcosϕ − sinψ sinϕ sin θ cosϕ sinψ + cosψ sinϕ sin θ − cos θ sinϕ -cos θ sinψ cosψ cos θ sin θ cosψ sinϕ+ cosϕ sinψ sin θ sinψ sinϕ − cosψ cosϕ sin θ cosϕ cos θ ⎦⎤
- NED-前右下(载体坐标系)
前右下坐标系下,Z对应偏航,Y对应俯仰,X对应横滚。所以在常用的姿态旋转顺序(Yaw-Pitch-Roll)中,对应的旋转方式为321(Z-Y-X)。
按内旋方式 ( 绕固定轴)的旋转矩阵为:
R
321
=
R
1
=
R
z
(
γ
)
∗
R
y
(
β
)
∗
R
x
(
α
)
R_{321}=R 1=R_{z}(\gamma) * R_{y}(\beta) * R_{x}(\alpha)
R321=R1=Rz(γ)∗Ry(β)∗Rx(α)
按外旋方式 ( 绕固定轴)的旋转矩阵为:
R
321
=
R
2
=
R
x
(
γ
)
∗
R
y
(
β
)
∗
R
z
(
α
)
R_{321}=R 2=R_{x}(\gamma) * R_{y}(\beta) * R_{z}(\alpha)
R321=R2=Rx(γ)∗Ry(β)∗Rz(α)
姿态角方向都遵循右手定则。
注意:旋转矩阵和坐标系无关,所以NED下的ZYX和ENU下的ZYX是一样的,唯一不同的就是,姿态的命名和正负方向不一样了,绕X轴变成了横滚,绕Y轴变成了俯仰,Z轴还是偏航。
2. 优缺点
2.1 优点
-
很容易理解,形象直观;
-
表示更方便,只需要3个值(分别对应x、y、z轴的旋转角度);但按我的理解,它还是转换到了3个3*3的矩阵做变换,效率不如四元数;
2.2 缺点
-
旋转的次序无法确定
之前提到过这种方法是要按照一个固定的坐标轴的顺序旋转的,因此不同的顺序会造成不同的结果; -
万向节锁
会造成万向节锁(Gimbal Lock)的现象。这种现象的发生就是由于上述固定坐标轴旋转顺序造成的。理论上,欧拉旋转可以靠这种顺序让一个物体指到任何一个想要的方向,但如果在旋转中不幸让某些坐标轴重合了就会发生万向节锁,这时就会丢失一个方向上的旋转能力,也就是说在这种状态下我们无论怎么旋转(当然还是要原先的顺序)都不可能得到某些想要的旋转效果,除非我们打破原先的旋转顺序或者同时旋转3个坐标轴。 -
不易在任意方向的旋转轴插值
由于万向节锁的存在,欧拉旋转无法实现球面平滑插值;
七、四元数
1. 什么是四元数
四元数是一个比较抽象的概念,他是站在四维空间的角度看待三维的旋转变化,比较难以理解。你可以简单的理解为,三维空间中的三轴旋转等价于绕某一个轴进行一个角度的旋转。
顾名思义, 四元数就是包含四个元的一种数, 它可表示为
Q
=
q
0
+
q
v
=
q
0
+
q
1
i
+
q
2
j
+
q
3
k
\boldsymbol{Q}=q_{0}+\boldsymbol{q}_{v}=q_{0}+q_{1} \boldsymbol{i}+q_{2} \boldsymbol{j}+q_{3} \boldsymbol{k}
Q=q0+qv=q0+q1i+q2j+q3k
其中,
q
0
,
q
1
,
q
2
q_{0}, q_{1}, q_{2}
q0,q1,q2 和
q
3
q_{3}
q3 都是实数,
q
0
q_{0}
q0 称为实部,
q
v
=
q
1
i
+
q
2
j
+
q
3
k
\boldsymbol{q}_{v}=q_{1} \boldsymbol{i}+q_{2} \boldsymbol{j}+q_{3} \boldsymbol{k}
qv=q1i+q2j+q3k 称为虚部。四元数可以看作是复数概念的扩充,有时也称其为超复数,当
q
2
=
q
3
=
0
q_{2}=q_{3}=0
q2=q3=0 时四元数即退化为复数。四元数的虚数单位
i
,
j
,
k
i, j, k
i,j,k 之间满足如下乘法运算规则:
i
∘
i
=
j
∘
j
=
k
∘
k
=
−
1
i
∘
j
=
k
,
j
∘
k
=
i
,
k
∘
i
=
j
,
j
∘
i
=
−
k
,
k
∘
j
=
−
i
,
i
∘
k
=
−
j
}
\left.\begin{array}{l} i \circ i=j \circ j=k \circ k=-1 \\ i \circ j=k, \quad j \circ k=i, \quad k \circ i=j, \quad j \circ i=-k, \quad k \circ j=-i, \quad i \circ k=-j \end{array}\right\}
i∘i=j∘j=k∘k=−1i∘j=k,j∘k=i,k∘i=j,j∘i=−k,k∘j=−i,i∘k=−j}
即
i
2
=
j
2
=
k
2
=
i
j
k
=
−
1
(哈密顿公式
)
\left.\boldsymbol{i}^{2}=\boldsymbol{j}^{2}=\boldsymbol{k}^{2}=i j \boldsymbol{k}=-1 \quad \text { (哈密顿公式 }\right)
i2=j2=k2=ijk=−1 (哈密顿公式 )
其中,运算符“
∘
\circ
∘ ”表示四元数的乘法运算,在不引起歧义的情况下可写成“・”符号或直接省 略。上式中第一行运算规则与复数中虚数的运算规则完全相同; 第二行运算规则与三维空间中坐标轴单位矢量的叉乘运算规则相同。四元数可以看作是四维空间中的一种数,但 因其虚部单位矢量的叉乘运算特点, 也可将四元数的虚数部分
q
v
=
q
1
i
+
q
2
j
+
q
3
k
\boldsymbol{q}_{v}=q_{1} \boldsymbol{i}+q_{2} \boldsymbol{j}+q_{3} \boldsymbol{k}
qv=q1i+q2j+q3k 看成是在三 维空间中的映象 (image), 反之,一个三维矢量可以看作是一个零标量四元数。
2. 旋转矩阵
由方向余弦阵式作恒等变形, 可得
C
b
i
=
I
+
sin
ϕ
(
u
×
)
+
(
1
−
cos
ϕ
)
(
u
×
)
2
=
I
+
2
sin
ϕ
2
cos
ϕ
2
(
u
×
)
+
2
sin
2
ϕ
2
(
u
×
)
2
=
I
+
2
cos
ϕ
2
(
sin
ϕ
2
u
×
)
+
2
(
sin
ϕ
2
u
×
)
2
\begin{gathered} \boldsymbol{C}_{b}^{i}=\boldsymbol{I}+\sin \phi(\boldsymbol{u} \times)+(1-\cos \phi)(\boldsymbol{u} \times)^{2}=\boldsymbol{I}+2 \sin \frac{\phi}{2} \cos \frac{\phi}{2}(\boldsymbol{u} \times)+2 \sin ^{2} \frac{\phi}{2}(\boldsymbol{u} \times)^{2}= \\ \boldsymbol{I}+2 \cos \frac{\phi}{2}\left(\sin \frac{\phi}{2} \boldsymbol{u} \times\right)+2\left(\sin \frac{\phi}{2} \boldsymbol{u} \times\right)^{2} \end{gathered}
Cbi=I+sinϕ(u×)+(1−cosϕ)(u×)2=I+2sin2ϕcos2ϕ(u×)+2sin22ϕ(u×)2=I+2cos2ϕ(sin2ϕu×)+2(sin2ϕu×)2
将上式的实部
cos
ϕ
2
=
q
0
\cos \frac{\phi}{2}=q_{0}
cos2ϕ=q0 和虚部
u
sin
ϕ
2
=
q
v
u \sin \frac{\phi}{2}=\boldsymbol{q}_{v}
usin2ϕ=qv 代入 可得
C
b
i
=
I
+
2
q
0
(
q
v
×
)
+
2
(
q
v
×
)
2
=
I
+
2
q
0
[
0
−
q
3
q
2
q
3
0
−
q
1
−
q
2
q
1
0
]
+
2
[
0
−
q
3
q
2
q
3
0
−
q
1
−
q
2
q
1
0
]
2
=
[
1
−
2
(
q
2
2
+
q
3
2
)
2
(
q
1
q
2
−
q
0
q
3
)
2
(
q
1
q
3
+
q
0
q
2
)
2
(
q
1
q
2
+
q
0
q
3
)
1
−
2
(
q
1
2
+
q
3
2
)
2
(
q
2
q
3
−
q
0
q
1
)
2
(
q
1
q
3
−
q
0
q
2
)
2
(
q
2
q
3
+
q
0
q
1
)
1
−
2
(
q
1
2
+
q
2
2
)
]
=
[
q
0
2
+
q
1
2
−
q
2
2
−
q
3
2
2
(
q
1
q
2
−
q
0
q
3
)
2
(
q
1
q
3
+
q
0
q
2
)
2
(
q
1
q
2
+
q
0
q
3
)
q
0
2
−
q
1
2
+
q
2
2
−
q
3
2
2
(
q
2
q
3
−
q
0
q
1
)
2
(
q
1
q
3
−
q
0
q
2
)
2
(
q
2
q
3
+
q
0
q
1
)
q
0
2
−
q
1
2
−
q
2
2
+
q
3
2
]
\begin{aligned} &\boldsymbol{C}_{b}^{i}=\boldsymbol{I}+2 q_{0}\left(\boldsymbol{q}_{v} \times\right)+2\left(\boldsymbol{q}_{v} \times\right)^{2}=\boldsymbol{I}+2 q_{0}\left[\begin{array}{ccc} 0 & -q_{3} & q_{2} \\ q_{3} & 0 & -q_{1} \\ -q_{2} & q_{1} & 0 \end{array}\right]+2\left[\begin{array}{ccc} 0 & -q_{3} & q_{2} \\ q_{3} & 0 & -q_{1} \\ -q_{2} & q_{1} & 0 \end{array}\right]^{2}= \\ &{\left[\begin{array}{lll} 1-2\left(q_{2}^{2}+q_{3}^{2}\right) & 2\left(q_{1} q_{2}-q_{0} q_{3}\right) & 2\left(q_{1} q_{3}+q_{0} q_{2}\right) \\ 2\left(q_{1} q_{2}+q_{0} q_{3}\right) & 1-2\left(q_{1}^{2}+q_{3}^{2}\right) & 2\left(q_{2} q_{3}-q_{0} q_{1}\right) \\ 2\left(q_{1} q_{3}-q_{0} q_{2}\right) & 2\left(q_{2} q_{3}+q_{0} q_{1}\right) & 1-2\left(q_{1}^{2}+q_{2}^{2}\right) \end{array}\right]=} \\ &{\left[\begin{array}{ccc} q_{0}^{2}+q_{1}^{2}-q_{2}^{2}-q_{3}^{2} & 2\left(q_{1} q_{2}-q_{0} q_{3}\right) & 2\left(q_{1} q_{3}+q_{0} q_{2}\right) \\ 2\left(q_{1} q_{2}+q_{0} q_{3}\right) & q_{0}^{2}-q_{1}^{2}+q_{2}^{2}-q_{3}^{2} & 2\left(q_{2} q_{3}-q_{0} q_{1}\right) \\ 2\left(q_{1} q_{3}-q_{0} q_{2}\right) & 2\left(q_{2} q_{3}+q_{0} q_{1}\right) & q_{0}^{2}-q_{1}^{2}-q_{2}^{2}+q_{3}^{2} \end{array}\right]} \end{aligned}
Cbi=I+2q0(qv×)+2(qv×)2=I+2q0⎣⎡0q3−q2−q30q1q2−q10⎦⎤+2⎣⎡0q3−q2−q30q1q2−q10⎦⎤2=⎣⎡1−2(q22+q32)2(q1q2+q0q3)2(q1q3−q0q2)2(q1q2−q0q3)1−2(q12+q32)2(q2q3+q0q1)2(q1q3+q0q2)2(q2q3−q0q1)1−2(q12+q22)⎦⎤=⎣⎡q02+q12−q22−q322(q1q2+q0q3)2(q1q3−q0q2)2(q1q2−q0q3)q02−q12+q22−q322(q2q3+q0q1)2(q1q3+q0q2)2(q2q3−q0q1)q02−q12−q22+q32⎦⎤
上式建立了单位四元数与方向余弦阵之间的关系,并且表明了单位四元数三角表示法式 的几何意义。
3. 优缺点
3.1 优点
- 可以避免万向节锁现象;
- 只需要一个4维的四元数就可以执行绕任意过原点的向量的旋转,方便快捷,在某些实现下比旋转矩阵效率更高;
- 可以提供平滑插值;
3.2 缺点
- 比欧拉旋转稍微复杂了一点点,因为多了一个维度;
- 理解更困难,不直观;
4. 四元数可视化
八、四元数与欧拉角相互转化
1. 四元数转欧拉角
坐标系与旋转顺序为:NED_ZYX
根据矩阵对应得到 :
[
Roll
Pitch
Yaw
]
=
[
arctan
C
32
C
33
−
arcsin
C
31
arctan
C
21
C
11
]
=
[
arctan
2
(
q
2
q
3
+
q
0
q
1
)
q
0
2
−
q
1
2
−
q
2
2
+
q
3
2
−
arcsin
(
2
(
q
1
q
3
−
q
0
q
2
)
)
arctan
2
(
q
1
q
2
+
q
0
q
3
)
q
0
2
+
q
1
2
−
q
2
2
−
q
3
2
]
\left[\begin{array}{c} \text { Roll } \\ \text { Pitch } \\ \text { Yaw } \end{array}\right]=\left[\begin{array}{c} \arctan \frac{C 32}{C 33} \\ -\arcsin {C 31} \\ \arctan \frac{C 21}{C 11} \end{array}\right]=\left[\begin{array}{c} \arctan \frac{2\left(q_{2} q_{3}+q_{0} q_{1}\right)}{q_{0}^{2}-q_{1}^{2}-q_{2}^{2}+q_{3}^{2}} \\ -\arcsin \left(2\left(q_{1} q_{3}-q_{0} q_{2}\right)\right) \\ \arctan \frac{2\left(q_{1} q_{2}+q_{0} q_{3}\right)}{q_{0}^{2}+q_{1}^{2}-q_{2}^{2}-q_{3}^{2}} \end{array}\right]
⎣⎡ Roll Pitch Yaw ⎦⎤=⎣⎡arctanC33C32−arcsinC31arctanC11C21⎦⎤=⎣⎢⎡arctanq02−q12−q22+q322(q2q3+q0q1)−arcsin(2(q1q3−q0q2))arctanq02+q12−q22−q322(q1q2+q0q3)⎦⎥⎤
坐标系与旋转顺序为:ENU_ZXY
[
Roll
Pitch
Yaw
]
=
[
arctan
−
C
31
C
33
arcsin
C
32
arctan
−
C
12
C
22
]
=
[
arctan
−
2
(
q
1
q
3
−
q
0
q
2
)
q
0
2
−
q
1
2
−
q
2
2
+
q
3
2
arcsin
(
2
(
q
2
q
3
+
q
0
q
1
)
)
arctan
−
2
(
q
1
q
2
−
q
0
q
3
)
q
0
2
−
q
1
2
+
q
2
2
−
q
3
2
]
\left[\begin{array}{c} \text { Roll } \\ \text { Pitch } \\ \text { Yaw } \end{array}\right]=\left[\begin{array}{c} \arctan \frac{-C 31}{C 33} \\ \arcsin C 32 \\ \arctan \frac{-C 12}{C 22} \end{array}\right]=\left[\begin{array}{c} \arctan \frac{-2\left(q_{1} q_{3}-q_{0} q_{2}\right)}{q_{0}^{2}-q_{1}^{2}-q_{2}^{2}+q_{3}^{2}} \\ \arcsin \left(2\left(q_{2} q_{3}+q_{0} q_{1}\right)\right) \\ \arctan \frac{-2\left(q_{1} q_{2}-q_{0} q_{3}\right)}{q_{0}^{2}-q_{1}^{2}+q_{2}^{2}-q_{3}^{2}} \end{array}\right]
⎣⎡ Roll Pitch Yaw ⎦⎤=⎣⎡arctanC33−C31arcsinC32arctanC22−C12⎦⎤=⎣⎢⎡arctanq02−q12−q22+q32−2(q1q3−q0q2)arcsin(2(q2q3+q0q1))arctanq02−q12+q22−q32−2(q1q2−q0q3)⎦⎥⎤
2. 欧拉角转四元数
坐标系与旋转顺序为:NED_ZYX
q
x
=
[
cos
Roll
2
,
sin
Roll
2
,
0
,
0
]
q
y
=
[
cos
Pitch
2
,
0
,
sin
Pitch
2
,
0
]
q
z
=
[
cos
Y
a
w
2
,
0
,
0
,
sin
Y
a
w
2
]
q
=
q
z
×
q
y
×
q
x
\begin{gathered} q_{x}=\left[\cos \frac{\text { Roll }}{2}, \sin \frac{\text { Roll }}{2}, 0,0\right] \\ q_{y}=\left[\cos \frac{\text { Pitch }}{2}, 0, \sin \frac{\text { Pitch }}{2}, 0\right] \\ q_{z}=\left[\cos \frac{Y a w}{2}, 0,0, \sin \frac{Y a w}{2}\right] \\ q=q_{z} \times q_{y} \times q_{x} \end{gathered}
qx=[cos2 Roll ,sin2 Roll ,0,0]qy=[cos2 Pitch ,0,sin2 Pitch ,0]qz=[cos2Yaw,0,0,sin2Yaw]q=qz×qy×qx
注意 : 这里的乘法不是普通的乘法规则,需要遵守四元数乘法规则,不同旋转顺序得到的结果也不一 样,这一点和矩阵乘法相似,最后得到四元数方程为:
欧拉角转四元数:
q
=
[
q
1
q
2
q
3
q
4
]
=
[
cos
(
Roll
2
)
cos
(
Pitch
2
)
cos
(
Yaw
2
)
+
sin
(
Roll
2
)
sin
(
Pitch
2
)
sin
(
Yaw
2
)
sin
(
Roll
2
)
cos
(
Pitch
2
)
cos
(
Yaw
2
)
−
cos
(
Roll
2
)
sin
(
Pitch
2
)
sin
(
Yaw
2
)
cos
(
Roll
2
)
sin
(
Pitch
2
)
cos
(
Yaw
2
)
+
sin
(
Roll
2
)
cos
(
Pitch
2
)
sin
(
Yaw
2
)
cos
(
Roll
2
)
cos
(
Pitch
2
)
sin
(
Yaw
2
)
−
sin
(
Roll
2
)
sin
(
Pitch
2
)
cos
(
Yaw
2
)
]
q=\left[\begin{array}{l} q_{1} \\ q_{2} \\ q_{3} \\ q_{4} \end{array}\right]=\left[\begin{array}{l} \cos \left(\frac{\text { Roll }}{2}\right) \cos \left(\frac{\text { Pitch }}{2}\right) \cos \left(\frac{\text { Yaw }}{2}\right)+\sin \left(\frac{\text { Roll }}{2}\right) \sin \left(\frac{\text { Pitch }}{2}\right) \sin \left(\frac{\text { Yaw }}{2}\right) \\ \sin \left(\frac{\text { Roll }}{2}\right) \cos \left(\frac{\text { Pitch }}{2}\right) \cos \left(\frac{\text { Yaw }}{2}\right)-\cos \left(\frac{\text { Roll }}{2}\right) \sin \left(\frac{\text { Pitch }}{2}\right) \sin \left(\frac{\text { Yaw }}{2}\right) \\ \cos \left(\frac{\text { Roll }}{2}\right) \sin \left(\frac{\text { Pitch }}{2}\right) \cos \left(\frac{\text { Yaw }}{2}\right)+\sin \left(\frac{\text { Roll }}{2}\right) \cos \left(\frac{\text { Pitch }}{2}\right) \sin \left(\frac{\text { Yaw }}{2}\right) \\ \cos \left(\frac{\text { Roll }}{2}\right) \cos \left(\frac{\text { Pitch }}{2}\right) \sin \left(\frac{\text { Yaw }}{2}\right)-\sin \left(\frac{\text { Roll }}{2}\right) \sin \left(\frac{\text { Pitch }}{2}\right)\cos \left(\frac{\text { Yaw }}{2}\right)\\ \end{array}\right]
q=⎣⎢⎢⎡q1q2q3q4⎦⎥⎥⎤=⎣⎢⎢⎡cos(2 Roll )cos(2 Pitch )cos(2 Yaw )+sin(2 Roll )sin(2 Pitch )sin(2 Yaw )sin(2 Roll )cos(2 Pitch )cos(2 Yaw )−cos(2 Roll )sin(2 Pitch )sin(2 Yaw )cos(2 Roll )sin(2 Pitch )cos(2 Yaw )+sin(2 Roll )cos(2 Pitch )sin(2 Yaw )cos(2 Roll )cos(2 Pitch )sin(2 Yaw )−sin(2 Roll )sin(2 Pitch )cos(2 Yaw )⎦⎥⎥⎤
坐标系与旋转顺序为:ENU_ZXY
z
−
x
−
y
z-x-y
z−x−y 旋转:
q
x
=
[
cos
Pitch
2
,
sin
Pitch
2
,
0
,
0
]
q
y
=
[
cos
Roll
2
,
0
,
sin
Roll
2
,
0
]
q
z
=
[
cos
Y
a
w
2
,
0
,
0
,
sin
Y
a
w
2
]
q
=
q
z
×
q
x
×
q
y
\begin{aligned} q_{x}=\left[\cos \frac{\text { Pitch }}{2}, \sin \frac{\text { Pitch }}{2}, 0,0\right] \\ q_{y}=\left[\cos \frac{\text { Roll }}{2}, 0, \sin \frac{\text { Roll }}{2}, 0\right] \\ q_{z}=\left[\cos \frac{Y a w}{2}, 0,0, \sin \frac{Y a w}{2}\right] \\ q=q_{z} \times q_{x} \times q_{y} \end{aligned}
qx=[cos2 Pitch ,sin2 Pitch ,0,0]qy=[cos2 Roll ,0,sin2 Roll ,0]qz=[cos2Yaw,0,0,sin2Yaw]q=qz×qx×qy
注意这里的乘法不是普通的乘法规则,需遵守四元数乘法规则,不同旋转顺序得到的结果也不 一样,这一点和矩阵乘法相似,最后得到四元数方程为:
q
=
[
q
1
q
2
q
3
q
4
]
=
[
cos
(
pitch
2
)
cos
(
roll
2
)
cos
(
yaw
2
)
−
sin
(
pitch
2
)
sin
(
roll
2
)
sin
(
yaw
2
)
cos
(
roll
2
)
cos
(
yaw
2
)
sin
(
pitch
2
)
−
cos
(
pitch
2
)
sin
(
roll
2
)
sin
(
yaw
2
)
cos
(
pitch
2
)
cos
(
yaw
2
)
sin
(
roll
2
)
+
cos
(
roll
2
)
sin
(
pitch
2
)
sin
(
yaw
2
)
cos
(
pitch
2
)
cos
(
roll
2
)
sin
(
yaw
2
)
+
cos
(
yaw
2
)
sin
(
pitch
2
)
sin
(
r
o
l
l
2
}
]
q=\left[\begin{array}{l} q_{1} \\ q_{2} \\ q_{3} \\ q_{4} \end{array}\right]=\left[\begin{array}{l} \cos \left(\frac{\text { pitch }}{2}\right) \cos \left(\frac{\text { roll }}{2}\right) \cos \left(\frac{\text { yaw }}{2}\right)-\sin \left(\frac{\text { pitch }}{2}\right) \sin \left(\frac{\text { roll }}{2}\right) \sin \left(\frac{\text { yaw }}{2}\right) \\ \cos \left(\frac{\text { roll }}{2}\right) \cos \left(\frac{\text { yaw }}{2}\right) \sin \left(\frac{\text { pitch }}{2}\right)-\cos \left(\frac{\text { pitch }}{2}\right) \sin \left(\frac{\text { roll }}{2}\right) \sin \left(\frac{\text { yaw }}{2}\right) \\ \cos \left(\frac{\text { pitch }}{2}\right) \cos \left(\frac{\text { yaw }}{2}\right) \sin \left(\frac{\text { roll }}{2}\right)+\cos \left(\frac{\text { roll }}{2}\right) \sin \left(\frac{\text { pitch }}{2}\right) \sin \left(\frac{\text { yaw }}{2}\right) \\ \cos \left(\frac{\text { pitch }}{2}\right) \cos \left(\frac{\text { roll }}{2}\right) \sin \left(\frac{\text { yaw }}{2}\right)+\cos \left(\frac{\text { yaw }}{2}\right) \sin \left(\frac{\text { pitch }}{2}\right) \sin \left(\frac{r o l l}{2}\right\} \end{array}\right]
q=⎣⎢⎢⎡q1q2q3q4⎦⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡cos(2 pitch )cos(2 roll )cos(2 yaw )−sin(2 pitch )sin(2 roll )sin(2 yaw )cos(2 roll )cos(2 yaw )sin(2 pitch )−cos(2 pitch )sin(2 roll )sin(2 yaw )cos(2 pitch )cos(2 yaw )sin(2 roll )+cos(2 roll )sin(2 pitch )sin(2 yaw )cos(2 pitch )cos(2 roll )sin(2 yaw )+cos(2 yaw )sin(2 pitch )sin(2roll}⎦⎥⎥⎥⎥⎥⎥⎤