2020-10-13 四元数用法(不讲原理,只讲计算规则)

本文不讲四元数的定义,直接讲操作实例和代码。

对象:刚体姿态

坐标系定义

  1. 本体坐标系 B B B
  2. 参考坐标系 R R R
  3. 惯性坐标系 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 RB的四元数(也就是 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=[q0qv]表示 I → R I \rightarrow R IR的四元数(也就是 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]表示 I → B I \rightarrow B IB的四元数(也就是 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ˉ=[q0qv]

四元数乘法(从左向右):

I → B I \rightarrow B IB的四元数】 = 【 I → R I \rightarrow R IR的四元数】 ⊗ \otimes R → B R \rightarrow B RB的四元数】
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=qq=[q0q0qvqvq0qv+q0qv+qv×qv]

R → B R \rightarrow B RB的四元数】 = 【 R → I R \rightarrow I RI的四元数】 ⊗ \otimes I → B I \rightarrow B IB的四元数】
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=[q0q0+qvqvq0qvq0qvqv×qv]

相应四元数旋转矩阵(从右向左):

I → B I \rightarrow B IB的旋转矩阵】 = 【 R → B R \rightarrow B RB的旋转矩阵】 × \times × I → R I \rightarrow R IR的旋转矩阵】
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)=(q02qvTqv)I+2qvqvT2q0[qv×]=2(q02+q12)12(q1q2q0q3)2(q1q3+q0q2)2(q1q2+q0q3)2(q02+q22)12(q2q3q0q1)2(q1q3q0q2)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)=I2q0[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×]=0q3q2q30q1q2q10

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

四元数的一些性质:

  1. 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] qvqvTqvTqvI=[qv×][qv×]

  2. 旋转矩阵 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}} 2q0212q0(q021)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}} 2q021+2q0(q021)21,和 1 1 1.

  3. 对于 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} qvqvTqv×qv×=I

  4. [ 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] [q0qv]表示同样的姿态, [ − 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] [q0qv]表示同样的姿态。

  5. 四元数的代数性质 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(qbqc)=qcT(qbqa)=qbT(qaqc)
    在这里插入图片描述
    Vec ( b ∗ ⊗ a ) = − Vec ( a ∗ ⊗ b ) \text{Vec}(\mathbf{b}^{*} \otimes \mathbf{a})=-\text{Vec}(\mathbf{a}^{*} \otimes \mathbf{b}) Vec(ba)=Vec(ab)

  6.  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 xR3,AR3×3, and RSO (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)(AAT)]=xT(AAT)(x)A+AT(x)=[(tr(A)I3A)x]R(x)RT=(Rx)

∧ ^{\wedge} 也就是上面的叉乘算子, ∨ ^{\vee} 是其逆算子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DR-ZF-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值