1. 四元数介绍
此处链接讲述了四元数的概念和旋转相关的知识。
2. 验证四元数旋转某个点后,结果是一个虚四元数(实部为零)。
即证明:
p’
=
qp
q
−
1
\textbf{p'}=\textbf{q}\textbf{p}\textbf{q}^{-1}
p’=qpq−1的实部为0,其中
p
\textbf{p}
p为用纯四元数表达描述的三维空间点,
p
=
[
0
,
x
,
y
,
z
]
\textbf{p}=[0,x,y,z]
p=[0,x,y,z],
q
\textbf{q}
q为表示对应旋转的四元数。(由于使用的四元数一般为单位四元数,所以四元数的逆就是其共轭:
q
−
1
=
q
∗
/
∣
∣
q
∣
∣
2
q^{-1}=q^{*}/||q||^{2}
q−1=q∗/∣∣q∣∣2)
2.1.此处链接是证明过程。
2.2. 在第1节链接的微信公众号中最后一个部分也证明了这个结果,方法更简单。
2.3. 《Indirect Kalman Filter for 3D Attitude Estimation》文中1.4节也有证明过程。
2.3. 两个四元数乘积的模即为模的乘积,这保证了单位四元数相乘以后仍是单位四元数:
∥
q
a
q
b
∥
=
∥
q
a
∥
∥
q
b
∥
\parallel{q_aq_b}\parallel=\parallel{q_a}\parallel\parallel{q_b}\parallel
∥qaqb∥=∥qa∥∥qb∥
3. 四元数q变换为旋转矩阵R
四元数记为:
q
=
q
0
+
q
1
i
+
q
2
j
+
q
3
k
q=q_0+q_1i+q_2j+q_3k
q=q0+q1i+q2j+q3k
根据四元数的表示形式,有两种表示方法:Hamilton(右手系)和JPL(左手系);
3.1. 由于哈密顿发明了四元数,Hamilton表示的四元数更常用,所以这里先介绍Hamilton形式下的变换:Hamilton满足:
i
j
=
k
,
i
j
k
=
−
1
ij=k, ijk=-1
ij=k,ijk=−1
变换为旋转矩阵R,有:
R
H
a
m
=
[
1
−
2
q
2
2
−
2
q
3
2
2
q
1
q
2
−
2
q
0
q
3
2
q
1
q
3
+
2
q
0
q
2
2
q
1
q
2
+
2
q
0
q
3
1
−
2
q
1
2
−
2
q
3
2
2
q
2
q
3
−
2
q
0
q
1
2
q
1
q
3
−
2
q
0
q
2
2
q
2
q
3
+
2
q
0
q
1
1
−
2
q
1
2
−
2
q
2
2
]
\bf{R}_{Ham}= \it{}\begin{bmatrix} 1−2q^2_2−2q_3^2 & 2q_1q_2−2q_0q_3 & 2q_1q_3+2q_0q_2 \\ 2q_1q_2+2q_0q_3 & 1−2q^2_1−2q^2_3 & 2q_2q_3−2q_0q_1 \\ 2q_1q_3−2q_0q_2 & 2q_2q_3+2q_0q_1 & 1−2q^2_1−2q^2_2 \end{bmatrix}
RHam=⎣⎡1−2q22−2q322q1q2+2q0q32q1q3−2q0q22q1q2−2q0q31−2q12−2q322q2q3+2q0q12q1q3+2q0q22q2q3−2q0q11−2q12−2q22⎦⎤
3.2. 接着介绍JPL形式下的变换:JPL满足:
i
j
=
−
k
,
i
j
k
=
1
ij=-k, ijk=1
ij=−k,ijk=1
变换为旋转矩阵R,有:
R
J
P
L
=
[
1
−
2
q
2
2
−
2
q
3
2
2
q
1
q
2
+
2
q
0
q
3
2
q
1
q
3
−
2
q
0
q
2
2
q
1
q
2
−
2
q
0
q
3
1
−
2
q
1
2
−
2
q
3
2
2
q
2
q
3
+
2
q
0
q
1
2
q
1
q
3
+
2
q
0
q
2
2
q
2
q
3
−
2
q
0
q
1
1
−
2
q
1
2
−
2
q
2
2
]
\bf{R}_{JPL}= \it{}\begin{bmatrix} 1−2q^2_2−2q_3^2 & 2q_1q_2+2q_0q_3 & 2q_1q_3−2q_0q_2 \\ 2q_1q_2−2q_0q_3 & 1−2q^2_1−2q^2_3 & 2q_2q_3+2q_0q_1 \\ 2q_1q_3+2q_0q_2 & 2q_2q_3−2q_0q_1 & 1−2q^2_1−2q^2_2 \end{bmatrix}
RJPL=⎣⎡1−2q22−2q322q1q2−2q0q32q1q3+2q0q22q1q2+2q0q31−2q12−2q322q2q3−2q0q12q1q3−2q0q22q2q3+2q0q11−2q12−2q22⎦⎤
可以发现: JPL形式四元数得到的旋转矩阵 和 Hamilton形式四元数得到的旋转矩阵是转置关系:
R
J
P
L
=
(
R
H
a
m
)
T
\bf{R}_{JPL}=(\bf{R}_{Ham})^T
RJPL=(RHam)T
4. 使用情况
4.1. Hamilton形式
Joan Sol`a大神写的ESKF文档《Quaternion kinematics for the error-state Kalman filter》使用的是Hamilton形式;
Eigen, Ceres, MATLAB, ROS, 具体说明查看参考资料[6]
VINS-Mono使用的是Hamilton形式 (VINS-Mono论文里说明使用的是Hamilton形式, 参考资料2说vins使用的是JPL, 应该是错误的)
4.2. JPL形式
MSCKF开源代码中(它的推导是按照MARS实验室的文档来);
MARS实验室介绍四元数的PDF文档《Indirect Kalman Filter for 3D Attitude Estimation》;
4.3. 两种形式的区别
5. 各种旋转表示之间的关系[图来自参考资料4]
5.1. 深入理解旋转矩阵和平移向量的本质.
6. 参考资料
[1] 四元数的表示形式Hamilton & JPL定义
[2] 四元数的表示形式Hamilton & JPL定义及影响
[3] Quaternion kinematics for the error-state Kalman filter
[4] 《视觉SLAM十四讲 第二版》笔记及课后习题(第三讲)
[5] 深入理解旋转矩阵和平移向量的本质.
[6] 四元数的两种 notation:Hamilton 和 JPL
7. 四元数(Hamilton)
7.1. 四元数小量的更新方式,
Δ
ϕ
L
\Delta \phi_{\mathcal{L}}
ΔϕL指的是小量, 也就是很短时间内转过的角度:
q
←
q
⊗
[
1
,
1
2
Δ
ϕ
L
]
T
\mathbf{q} \leftarrow \mathbf{q} \otimes\left[1, \frac{1}{2} \Delta\boldsymbol{\phi}_{\mathcal{L}} \right]^{\mathrm{T}}
q←q⊗[1,21ΔϕL]T
7.2. 四元数的导数,
ω
\boldsymbol{\omega}
ω指的是角速度: