本文不讲四元数的定义,直接讲操作实例和代码。
对象:刚体姿态
坐标系定义:
- 本体坐标系 B B B,
- 参考坐标系 R R R,
- 惯性坐标系 I I I
涉及四元数定义:
q
=
[
q
0
q
v
]
\boldsymbol q = \left[\begin{array}{l} q_0\\ \boldsymbol q_v \end{array}\right]
q=[q0qv]表示
R
→
B
R \rightarrow B
R→B的四元数(也就是
B
B
B 相对于
R
R
R),
q
′
=
[
q
0
′
q
v
′
]
\boldsymbol q'= \left[\begin{array}{l} q'_0\\ \boldsymbol q'_v \end{array}\right]
q′=[q0′qv′]表示
I
→
R
I \rightarrow R
I→R的四元数(也就是
R
R
R 相对于
I
I
I),
q
′
′
=
[
q
0
′
′
q
v
′
′
]
\boldsymbol q''= \left[\begin{array}{l} q''_0\\ \boldsymbol q''_v \end{array}\right]
q′′=[q0′′qv′′]表示
I
→
B
I \rightarrow B
I→B的四元数(也就是
B
B
B 相对于
I
I
I)。
定义:
q
\boldsymbol q
q 的逆表示为
q
ˉ
=
[
q
0
−
q
v
]
\bar \boldsymbol q = \left[\begin{array}{r} q_0\\ -\boldsymbol q_v \end{array}\right]
qˉ=[q0−qv]
四元数乘法(从左向右):
【
I
→
B
I \rightarrow B
I→B的四元数】 = 【
I
→
R
I \rightarrow R
I→R的四元数】
⊗
\otimes
⊗ 【
R
→
B
R \rightarrow B
R→B的四元数】
q
′
′
=
q
′
⊗
q
=
[
q
0
′
∗
q
0
−
q
v
′
⋅
q
v
q
0
′
∗
q
v
+
q
0
∗
q
v
′
+
q
v
′
×
q
v
]
\boldsymbol q''=\boldsymbol q' \otimes \boldsymbol q = \left[\begin{array}{l} q'_0*q_0- \boldsymbol q'_v \cdot \boldsymbol q_v\\ q'_0*\boldsymbol q_v+q_0*\boldsymbol q'_v+\boldsymbol q'_v \times \boldsymbol q_v \end{array}\right]
q′′=q′⊗q=[q0′∗q0−qv′⋅qvq0′∗qv+q0∗qv′+qv′×qv]
【
R
→
B
R \rightarrow B
R→B的四元数】 = 【
R
→
I
R \rightarrow I
R→I的四元数】
⊗
\otimes
⊗ 【
I
→
B
I \rightarrow B
I→B的四元数】
q
=
q
ˉ
′
⊗
q
′
′
=
[
q
0
′
∗
q
0
′
′
+
q
v
′
⋅
q
v
′
′
q
0
′
∗
q
v
′
′
−
q
0
′
′
∗
q
v
′
−
q
v
′
×
q
v
′
′
]
\boldsymbol q=\bar \boldsymbol q' \otimes \boldsymbol q'' = \left[\begin{array}{l} q'_0*q''_0+ \boldsymbol q'_v \cdot \boldsymbol q''_v\\ q'_0*\boldsymbol q''_v - q''_0*\boldsymbol q'_v-\boldsymbol q'_v \times \boldsymbol q''_v \end{array}\right]
q=qˉ′⊗q′′=[q0′∗q0′′+qv′⋅qv′′q0′∗qv′′−q0′′∗qv′−qv′×qv′′]
相应四元数旋转矩阵(从右向左):
【
I
→
B
I \rightarrow B
I→B的旋转矩阵】 = 【
R
→
B
R \rightarrow B
R→B的旋转矩阵】
×
\times
× 【
I
→
R
I \rightarrow R
I→R的旋转矩阵】
A
(
q
′
′
)
=
A
(
q
)
A
(
q
′
)
\boldsymbol{A}(\boldsymbol q'')=\boldsymbol{A}(\boldsymbol q)\boldsymbol{A}(\boldsymbol q')
A(q′′)=A(q)A(q′)
其中
A
(
q
)
=
(
q
0
2
−
q
v
T
q
v
)
I
+
2
q
v
q
v
T
−
2
q
0
[
q
v
×
]
=
[
2
(
q
0
2
+
q
1
2
)
−
1
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
)
2
(
q
0
2
+
q
2
2
)
−
1
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
)
2
(
q
0
2
+
q
3
2
)
−
1
]
\begin{array}{l} \boldsymbol{A}(\boldsymbol{q})=\left(q_{0}^{2}-\boldsymbol{q}_{v}^{\mathrm{T}}\boldsymbol{q}_{v} \right) \boldsymbol{I}+2 \boldsymbol{q}_{v} \boldsymbol{q}_{v}^{\mathrm{T}}-2 q_{0}\left[\boldsymbol{q}_{v} \times\right] \\ ={\left[\begin{array}{lll} 2\left(q_{0}^{2}+q_{1}^{2}\right)-1 & 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) & 2\left(q_{0}^{2}+q_{2}^{2}\right)-1 & 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) & 2\left(q_{0}^{2}+q_{3}^{2}\right)-1 \end{array}\right]} \end{array}
A(q)=(q02−qvTqv)I+2qvqvT−2q0[qv×]=⎣⎡2(q02+q12)−12(q1q2−q0q3)2(q1q3+q0q2)2(q1q2+q0q3)2(q02+q22)−12(q2q3−q0q1)2(q1q3−q0q2)2(q2q3+q0q1)2(q02+q32)−1⎦⎤
或者
A
(
q
)
=
I
−
2
q
0
[
q
v
×
]
+
2
[
q
v
×
]
[
q
v
×
]
\boldsymbol{A}(\boldsymbol{q})=\boldsymbol{I}-2q_{0}\left[\boldsymbol{q}_{v} \times\right] +2\left[\boldsymbol{q}_{v} \times\right] \left[\boldsymbol{q}_{v} \times\right]
A(q)=I−2q0[qv×]+2[qv×][qv×]
和
[
q
v
×
]
=
[
0
−
q
3
q
2
q
3
0
−
q
1
−
q
2
q
1
0
]
\begin{array}{r} {\left[\boldsymbol{q}_{v} \times\right]=\left[\begin{array}{ccc} 0 & -q_{3} & q_{2} \\ q_{3} & 0 & -q_{1} \\ -q_{2} & q_{1} & 0 \end{array}\right]} \end{array}
[qv×]=⎣⎡0q3−q2−q30q1q2−q10⎦⎤
Matlab代码
function L = TransMatrix(quat)
quat_0=quat(1);quat_1=quat(2);quat_2=quat(3);quat_3=quat(4);
L = [2*(quat_0^2+quat_1^2)-1 2*(quat_1*quat_2+quat_0*quat_3) 2*(quat_1*quat_3-quat_0*quat_2); ...
2*(quat_1*quat_2-quat_0*quat_3) 2*(quat_0^2+quat_2^2)-1 2*(quat_2*quat_3+quat_0*quat_1); ...
2*(quat_1*quat_3+quat_0*quat_2) 2*(quat_2*quat_3-quat_0*quat_1) 2*(quat_0^2+quat_3^2)-1];
end
四元数的一些性质:
-
q v q v T − q v T q v I = [ q v × ] [ q v × ] \boldsymbol{q}_{v} \boldsymbol{q}_{v}^{\mathrm{T}}- \boldsymbol{q}_{v}^{\mathrm{T}}\boldsymbol{q}_{v}\boldsymbol{I}= \left[\boldsymbol{q}_{v} \times\right]\left[\boldsymbol{q}_{v} \times\right] qvqvT−qvTqvI=[qv×][qv×]
-
旋转矩阵 A ( q ) \boldsymbol{A}(\boldsymbol{q}) A(q)的特征值是: 2 q 0 2 − 1 − 2 q 0 ( q 0 2 − 1 ) 1 2 2 q_0^2-1-2q_0\left(q_0^2-1\right)^{\frac{1}{2}} 2q02−1−2q0(q02−1)21, 2 q 0 2 − 1 + 2 q 0 ( q 0 2 − 1 ) 1 2 2 q_0^2-1+2q_0\left(q_0^2-1\right)^{\frac{1}{2}} 2q02−1+2q0(q02−1)21,和 1 1 1.
-
对于 q = [ q 0 q v ] \boldsymbol q = \left[\begin{array}{l} q_0\\ \boldsymbol q_v \end{array}\right] q=[q0qv],当 q 0 = 0 q_0=0 q0=0时,则有 q v T q v = 1 \boldsymbol q^T_v\boldsymbol q_v=1 qvTqv=1,也可以推出 q v q v T − q v × q v × = I \boldsymbol q_v\boldsymbol q^T_v-\boldsymbol q^{\times}_v\boldsymbol q^{\times}_v=\boldsymbol{I} qvqvT−qv×qv×=I
-
[ q 0 q v ] \left[\begin{array}{r} q_0\\ \boldsymbol q_v \end{array}\right] [q0qv]和 [ − q 0 − q v ] \left[\begin{array}{r} -q_0\\ -\boldsymbol q_v \end{array}\right] [−q0−qv]表示同样的姿态, [ − q 0 q v ] \left[\begin{array}{r} -q_0\\ \boldsymbol q_v \end{array}\right] [−q0qv]和 [ q 0 − q v ] \left[\begin{array}{r} q_0\\ -\boldsymbol q_v \end{array}\right] [q0−qv]表示同样的姿态。
-
四元数的代数性质: q a T ( q b ⊗ q c ) = q c T ( q b ∗ ⊗ q a ) = q b T ( q a ⊗ q c ∗ ) \boldsymbol q^T_a(\boldsymbol q_b \otimes \boldsymbol q_c)=\boldsymbol q^T_c(\boldsymbol q^*_b \otimes \boldsymbol q_a)=\boldsymbol q^T_b(\boldsymbol q_a \otimes \boldsymbol q^*_c) qaT(qb⊗qc)=qcT(qb∗⊗qa)=qbT(qa⊗qc∗)
Vec ( b ∗ ⊗ a ) = − Vec ( a ∗ ⊗ b ) \text{Vec}(\mathbf{b}^{*} \otimes \mathbf{a})=-\text{Vec}(\mathbf{a}^{*} \otimes \mathbf{b}) Vec(b∗⊗a)=−Vec(a∗⊗b) -
for any x ∈ R 3 , A ∈ R 3 × 3 , and R ∈ S O (3) \text { for any } \boldsymbol{x} \in \mathbf{R}^{3}, \boldsymbol{A} \in \mathbf{R}^{3 \times 3} \text {, and } \boldsymbol{R} \in \mathrm{SO} \text { (3) } for any x∈R3,A∈R3×3, and R∈SO (3)
tr ( A ( x ) ∧ ) = 1 2 tr [ ( x ) ∧ ( A − A T ) ] = − x T ( A − A T ) ∨ ( x ) ∧ A + A T ( x ) ∧ = [ ( tr ( A ) I 3 − A ) x ] ∧ R ( x ) ∧ R T = ( R x ) ∧ \begin{aligned} &\operatorname{tr}\left(\boldsymbol{A}(\boldsymbol{x})^{\wedge}\right)=\frac{1}{2} \operatorname{tr}\left[(\boldsymbol{x})^{\wedge}\left(\boldsymbol{A}-\boldsymbol{A}^{\mathrm{T}}\right)\right]=-\boldsymbol{x}^{\mathrm{T}}\left(\boldsymbol{A}-\boldsymbol{A}^{\mathrm{T}}\right)^{\vee} \\ &(\boldsymbol{x})^{\wedge} \boldsymbol{A}+\boldsymbol{A}^{\mathrm{T}}(\boldsymbol{x})^{\wedge}=\left[\left(\operatorname{tr}(\boldsymbol{A}) \boldsymbol{I}_{3}-\boldsymbol{A}\right) \boldsymbol{x}\right]^{\wedge} \\ &\boldsymbol{R}(\boldsymbol{x})^{\wedge} \boldsymbol{R}^{\mathrm{T}}=(\boldsymbol{R} \boldsymbol{x})^{\wedge} \end{aligned} tr(A(x)∧)=21tr[(x)∧(A−AT)]=−xT(A−AT)∨(x)∧A+AT(x)∧=[(tr(A)I3−A)x]∧R(x)∧RT=(Rx)∧
∧ ^{\wedge} ∧也就是上面的叉乘算子, ∨ ^{\vee} ∨是其逆算子