VIO中的角速度和四元数


无论是在VINS-MONO,还是在OKVIS等众多VIO论文,四元数函数项中都出现了一个Ω矩阵……这Ω矩阵有啥用途?

四元数乘法

首先来看一下四元数的乘法:
对两个四元数q和p:
q = w 1 + x 1 i + y 1 j + z 1 k p = w 2 + x 2 i + y 2 j + z 2 k \begin{array}{l} {q=w_{1}+x_{1} i+y_{1} j+z_{1} k} \\ {p=w_{2}+x_{2} i+y_{2} j+z_{2} k} \end{array}
他们的乘法可以写成:
q p = + ( x 1 w 2 + w 1 x 2 + z 1 y 2 z 1 y 2 ) i + ( y 1 w 2 + w 1 y 2 + z 1 x 2 x 1 z 2 ) j + ( z 1 w 2 + w 1 z 2 + x 1 y 2 x 2 y 1 ) k + ( w 1 w 2 x 1 x 2 y 1 y 2 z 1 z 2 ) \begin{aligned} q p= +\left(x_{1} * w_{2}+w_{1} * x_{2}+z_{1} * y_{2}-z_{1} * y_{2}\right) i\\ +\left(y_{1} * w_{2}+w_{1} * y_{2}+z_{1} * x_{2}-x_{1} * z_{2}\right) j\\ +\left(z_{1} * w_{2}+w_{1} * z_{2}+x_{1} * y_{2}-x_{2} * y_{1}\right) k\\ +\left(w_{1} * w_{2}-x_{1} * x_{2}-y_{1} * y_{2}-z_{1} * z_{2}\right)\\ \end{aligned}

当四元数实部为0,即:
q = 0 + x 1 i + y 1 j + z 1 k p = 0 + x 2 i + y 2 j + z 2 k \begin{array}{l} {q=0+x_{1} i+y_{1} j+z_{1} k} \\ {p=0+x_{2} i+y_{2} j+z_{2} k} \end{array}
他们的乘法可以写成:
q × p = + ( z 1 y 2 z 1 y 2 ) i + ( z 1 x 2 x 1 z 2 ) j + ( x 1 y 2 x 2 y 1 ) k + ( x 1 x 2 y 1 y 2 z 1 z 2 ) \begin{aligned} q ×p= +\left(z_{1} * y_{2}-z_{1} * y_{2}\right) i\\ +\left(z_{1} * x_{2}-x_{1} * z_{2}\right) j\\ +\left(x_{1} * y_{2}-x_{2} * y_{1}\right) k\\ +\left(-x_{1} * x_{2}-y_{1} * y_{2}-z_{1} * z_{2}\right)\\ \end{aligned}

四元数的时间导数

再看一下四元数的时间导数:
d q ( t ) d t = lim t 0 q ( t + δ t ) q ( t ) δ t = lim t 0 δ q q ( t ) q ( t ) δ t = lim t 0 ( δ q 1 ) q ( t ) δ t = lim t 0 [ 0 j θ 2 ] q ( t ) δ t = 1 2 [ 0 ω ] q \begin{aligned} \frac{d \mathbf{q}(t)}{d t} &=\lim _{t \rightarrow 0} \frac{\mathbf{q}(t+\delta t)-\mathbf{q}(t)}{\delta t} \\ &=\lim _{t \rightarrow 0} \frac{\delta \mathbf{q} \otimes \mathbf{q}(t)-\mathbf{q}(t)}{\delta t} \\ &=\lim _{t \rightarrow 0} \frac{(\delta \mathbf{q}-1) \otimes \mathbf{q}(t)}{\delta t}\\ &=\lim _{t \rightarrow 0} \frac{\left[\begin{array}{l} {0} \\ {\frac{j \theta}{2}} \end{array}\right] \otimes \mathbf{q}(t)}{\delta t}=\frac{1}{2}\left[\begin{array}{l} {0} \\ {\omega} \end{array}\right] \otimes \mathbf{q} \end{aligned}

实际上就是把三维角速度用四元数的方式表示,Ω与四元数相乘,实际上就是四元数之间的乘法。

VINS-MONO里的相关公式

看下VINS-MONO里面和四元数相关的函数:
q b k + 1 w = q b k w t [ t k , t k + 1 ] 1 2 Ω ( ω ^ t b w t n w ) q t b k d t \mathbf{q}_{b_{k+1}}^{w}=\mathbf{q}_{b_{k}}^{w} \otimes \int_{t \in\left[t_{k}, t_{k+1}\right]} \frac{1}{2} \mathbf{\Omega}\left(\hat{\omega}_{t}-\mathbf{b}_{w_{t}}-\mathbf{n}_{w}\right) \mathbf{q}_{t}^{b_{k}} d t

Ω ( ω ) = [ ω × ω ω T 0 ] , ω × = [ 0 ω z ω y ω z 0 ω x ω y ω x 0 ] \boldsymbol{\Omega}(\boldsymbol{\omega})=\left[\begin{array}{cc} {-\lfloor\boldsymbol{\omega}\rfloor_{\times}} & {\boldsymbol{\omega}} \\ {-\boldsymbol{\omega}^{T}} & {0} \end{array}\right],\lfloor\boldsymbol{\omega}\rfloor_{\times}=\left[\begin{array}{ccc} {0} & {-\omega_{z}} & {\omega_{y}} \\ {\omega_{z}} & {0} & {-\omega_{x}} \\ {-\omega_{y}} & {\omega_{x}} & {0} \end{array}\right]

把Ω完整地写出来之后:
Ω ( ω ) = [ 0 ω z ω y ω x ω z 0 ω x ω y ω y ω x 0 ω z ω x ω y ω z 0 ] \Omega(\omega)=\left[\begin{array}{cccc} {0} & {\omega_{z}} & {-\omega_{y}} &{\omega_x}\\ {-\omega_{z}} & {0} & {\omega_{x}} &{\omega_y}\\ {\omega_{y}} & {-\omega_{x}} & {0} &{\omega_z} \\ {{-\omega_x}} & {-\omega_{y}} &{-\omega_{z}} &0 \end{array}\right]

我们发现Ω和形式为 [ k x , k y , k z , 0 ] [ k_x,k_y,k_z,0] 的四元数相乘:
Ω ( ω ) = [ ω z k y ω y k z ω z k x + ω x k z ω y k x ω x k y ω x k x ω y k y ω z k z ] \Omega(\omega)=\left[\begin{array}{cccc} {\omega_{z}}*k_y - {\omega_{y}}*k_z \\ {-\omega_{z}*k_x} + {\omega_{x}}*k_z \\ {\omega_{y}*k_x - \omega_{x}*k_y} \\ {-\omega_{x}*k_x} -{\omega_{y}*k_y}-{\omega_{z}*k_z} \end{array}\right]

这是不是和四元数乘法很像?于是我们就知道Ω和四元数乘法其实就是一样的东西

1 2 [ 0 ω ] q = 1 2 Ω ( ω ) q \frac{1}{2}\left[\begin{array}{l} {0} \\ {\omega} \end{array}\right] \otimes \mathbf{q} = \frac{1}{2}\Omega(\omega)q
用四元数表示的角速度与 b k b_k 时刻的四元数相乘,表示当前时刻各个方向的角速度,然后在 k k k + 1 k+1 间隔求积分,得到 k + 1 k+1 时刻相对于 k k 时刻的旋转。

参考:
https://www.cnblogs.com/youzx/p/6387740.html
https://mp.weixin.qq.com/s/FDMDleH8wszsD9HkBXwAnQ

发布了29 篇原创文章 · 获赞 44 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/Hanghang_/article/details/104269297