无论是在VINS-MONO,还是在OKVIS等众多VIO论文,四元数函数项中都出现了一个Ω矩阵……这Ω矩阵有啥用途?
四元数乘法
首先来看一下四元数的乘法:
对两个四元数q和p:
q=w1+x1i+y1j+z1kp=w2+x2i+y2j+z2k
他们的乘法可以写成:
qp=+(x1∗w2+w1∗x2+z1∗y2−z1∗y2)i+(y1∗w2+w1∗y2+z1∗x2−x1∗z2)j+(z1∗w2+w1∗z2+x1∗y2−x2∗y1)k+(w1∗w2−x1∗x2−y1∗y2−z1∗z2)
当四元数实部为0,即:
q=0+x1i+y1j+z1kp=0+x2i+y2j+z2k
他们的乘法可以写成:
q×p=+(z1∗y2−z1∗y2)i+(z1∗x2−x1∗z2)j+(x1∗y2−x2∗y1)k+(−x1∗x2−y1∗y2−z1∗z2)
四元数的时间导数
再看一下四元数的时间导数:
dtdq(t)=t→0limδtq(t+δt)−q(t)=t→0limδtδq⊗q(t)−q(t)=t→0limδt(δq−1)⊗q(t)=t→0limδt[02jθ]⊗q(t)=21[0ω]⊗q
实际上就是把三维角速度用四元数的方式表示,Ω与四元数相乘,实际上就是四元数之间的乘法。
VINS-MONO里的相关公式
看下VINS-MONO里面和四元数相关的函数:
qbk+1w=qbkw⊗∫t∈[tk,tk+1]21Ω(ω^t−bwt−nw)qtbkdt
Ω(ω)=[−⌊ω⌋×−ωTω0],⌊ω⌋×=⎣⎡0ωz−ωy−ωz0ωxωy−ωx0⎦⎤
把Ω完整地写出来之后:
Ω(ω)=⎣⎢⎢⎡0−ωzωy−ωxωz0−ωx−ωy−ωyωx0−ωzωxωyωz0⎦⎥⎥⎤
我们发现Ω和形式为
[kx,ky,kz,0]的四元数相乘:
Ω(ω)=⎣⎢⎢⎡ωz∗ky−ωy∗kz−ωz∗kx+ωx∗kzωy∗kx−ωx∗ky−ωx∗kx−ωy∗ky−ωz∗kz⎦⎥⎥⎤
这是不是和四元数乘法很像?于是我们就知道Ω和四元数乘法其实就是一样的东西。
21[0ω]⊗q=21Ω(ω)q
用四元数表示的角速度与
bk时刻的四元数相乘,表示当前时刻各个方向的角速度,然后在
k到
k+1间隔求积分,得到
k+1时刻相对于
k时刻的旋转。
参考:
https://www.cnblogs.com/youzx/p/6387740.html
https://mp.weixin.qq.com/s/FDMDleH8wszsD9HkBXwAnQ