一步一步学习S-MSCKF(一)连续时间IMU误差状态运动模型

1 IMU真实状态运动模型

状态向量:

\(x_{I}=\left[{{_{G}^{I}{q(t)}}^{T},{b_{g}(t)}^{T},{^{G}v_{I}(t)}^{T},{b_{a}(t)}^{T},{^{G}p_{I}(t)}^{T}},{{_{C}^{I}q(t)}^{T}},{{^{I}p(t)_{C}}^{T}}\right]^{T}\)

四元数\({_{G}^{I}{q(t)}}\)代表惯性系到IMU坐标系的旋转,\({^{G}v_{I}(t)}\)和\({^{G}p_{I}(t)}\)代表IMU坐标系在惯性系中的速度和位置,\({b_{g}(t)}\)和\({b_{a}(t)}\)表示在IMU坐标系中测量值角速度与线加速度的biases,\({_{C}^{I}q(t)}\)和\({^{I}p(t)_{C}}\)表示相机坐标系和IMU坐标系的相对位置,其中相机坐标系取左相机坐标系。

数量关系:

\(_{G}^{I}{\dot q(t)}=\frac{1}{2}\Omega(w(t))_{G}^{I}q(t)\)

\(\dot b_{g}(t)=n_{wg}(t)\)

\(^{G}\dot v_{I}(t)={^{G}a_{I}(t)}\)

\(\dot b_{a}(t)=n_{wa}(t)\)

\(^{G}\dot p_{I}(t)={^{G}v_{I}(t)}\)

\({_{C}^{I}{\dot q(t)}}=0_{4\times1}\)

\({^{I}{\dot p}(t)_{C}}=0_{3\times1}\)

以上\(w(t)=[w_{x}(t),w_{y}(t),w_{z}(t)]^{T}\)是IMU角速度在IMU系中的坐标。

IMU的观测值为:

\(w_{m}=w+C(_{G}^{I}q)w_{G}+b_{g}+n_{g}\)

\(a_{m}=C(_{G}^{I}q)\left(^{G}a_{I}-{^{G}g}+2[w_{G}\times]{^{G}v_{I}}+{[w_{G}\times]}^{2}{(^{G}p_{I})}\right)+b_{a}+n_{a}\)

其中\(w_{G}\)为地球的自转速度在G系的坐标,在某些VIO实现中,会将地球自转的影响忽略不计,比如S-MSCKF,以后的推导中也会不计地球自转影响。

将地球自转忽略:

\(w_{m}=w+b_{g}+n_{g}\)

\(a_{m}=C(_{G}^{I}q)\left(^{G}a_{I}-{^{G}g}\right)+b_{a}+n_{a}\)

2 IMU估计状态运动模型

状态向量:

\(\hat x_{I} =\left[{{_{G}^{I}{\hat q}}^{T},{\hat b_{g}}^{T},{^{G}\hat v_{I}}^{T},{\hat b_{a}}^{T},{^{G}\hat p_{I}}^{T}},{_{C}^{I}\hat q}^{T},{^{I}{\hat p}_{C}}^{T}\right]^{T}\)

数量关系:

\(_{G}^{I}{\dot{\hat q}}=\frac{1}{2}\Omega(\hat w)_{G}^{I}\hat q\)

\(\dot {\hat b}_{g}(t)=0_{3\times1}\)

\(^{G}\dot {\hat v}_{I}=C(_{G}^{I}\hat q)^{T}{\hat a}+{^{G}g}\)

\(\dot {\hat b}_{a}=0_{3\times1}\)

\(^{G}\dot {\hat p}_{I}={^{G}{\hat v}_{I}}\)

\({_{C}^{I}\hat q}=0_{4\times1}\)

\({^{I}{\hat p}_{C}}^{T}=0_{3\times1}\)

其中:

\(\hat w = w_{m}-{\hat b}_{g}\)

\(\hat a= a_{m}-{\hat b}_{a}\)

\(\Omega(\hat w)=
\left(\begin{matrix}
-[\hat w_{\times}] & {\hat w} \-{\hat w}^{T} & 0
\end{matrix}\right)\)

3 IMU误差状态运动模型

定义IMU误差状态:

将上述真实状态与估计状态做“差”:

\(\tilde x = x-{\hat x}\)

其中四元数做差和普通的减法不一样,这里引入了误差四元数\(\delta q\)来表示旋转误差:

\(q={\delta q} \bigotimes {\hat q}\)

\({\delta q}\simeq [\frac{1}{2}{\delta\theta}^{T},1]^{T}\)

所以可以用三维向量\(\delta\theta\)来表示旋转误差,从而定义IMU误差状态向量为:

\(\tilde x_{I} =\left[{{_{G}^{I}{\tilde\theta}^{T}},{\tilde b_{g}}^{T},{^{G}\tilde v_{I}}^{T},{\tilde b_{a}}^{T},{^{G}\tilde p_{I}}^{T}},{_{C}^{I}{\tilde\theta}^{T}},{^{I}{\tilde p}_{C}}^{T}\right]^{T}\)

连续误差状态运动方程:

\({\dot {\tilde x}}_{I}=F{\tilde x_{I}}+G{n}_{I}\)

其中\(n_{I}^{T}=\left({n_{g}^{T}},{n_{wg}^{T}},{n_{a}^{T}},{n_{wa}^{T}}\right)^{T}\)。向量\(n_{g}\)和\(n_{a}\)代表陀螺仪与加速度计的测量噪声(高斯),\(n_{wg}\)和\(n_{wa}\)是陀螺仪与加速度计biases的随机游走速率。

4 推导F与G

4.1 求\(\delta\theta\)

对\(_{G}^{I}q=\delta q \bigotimes{_{I}^{G}\hat q}\)左右两边同时求导得到:

\(_{G}^{I}\dot q=\dot {\delta q} \bigotimes {_{G}^{I}\hat q} + \delta q \bigotimes {_{G}^{I}\dot {\hat q}}\)

\(\frac{1}{2}\left[\begin{matrix}
w \0
\end{matrix}\right] \bigotimes {_{G}^{I}q}=
\dot {\delta q} \bigotimes {_{G}^{I}{\hat q}}+
\delta q \bigotimes \frac{1}{2}\left[\begin{matrix}
{\hat w} \0
\end{matrix}\right] \bigotimes {_{G}^{I}{\hat q}}\)

两边同时乘以\({_{G}^{I}{\hat q}}^{-1}\)得到:

\(\frac{1}{2}\left[\begin{matrix}
w \0
\end{matrix}\right] \bigotimes {\delta q}=
\dot {\delta q}+
\frac{1}{2}\delta q \bigotimes \left[\begin{matrix}
{\hat w} \0
\end{matrix}\right]\)

整理得:

\(\left[\begin{matrix}
{\dot {\delta\theta}} \{\dot {2}}
\end{matrix}\right]=
\left[\begin{matrix}
w \0
\end{matrix}\right] \bigotimes \delta q-
\delta q \bigotimes\left[\begin{matrix}
{\hat w} \0
\end{matrix}\right]\)

由\(w_{m}=w+b_{g}+n_{g}\)和\(\hat w =w_{m}-{\hat b}_{g}\)可以求出\(w\):

\(w=\hat w + {\hat b}_{g}-b_{g}-n_{g}=\hat w - {\tilde b}_{g}-n_{g}\)

带入\(w\)得到:

\(\left[\begin{matrix}
{\dot {\delta\theta}} \{0}
\end{matrix}\right]=
\left[\begin{matrix}
{\hat w - {\tilde b}_{g}-n_{g}} \0
\end{matrix}\right] \bigotimes \delta q-
\delta q \bigotimes\left[\begin{matrix}
{\hat w} \0
\end{matrix}\right]\)

\(\left[\begin{matrix}
{\dot {\delta\theta}} \{0}
\end{matrix}\right]=
\left[\begin{matrix}
{\hat w} \0
\end{matrix}\right] \bigotimes \delta q-
\delta q \bigotimes\left[\begin{matrix}
{\hat w} \0
\end{matrix}\right]-
\left[\begin{matrix}
{{\tilde b}_{g}+n_{g}} \0
\end{matrix}\right] \bigotimes \delta q\)

利用四元数乘法的性质得到:

\(\left[\begin{matrix}
{\dot {\delta\theta}} \{0}
\end{matrix}\right]=
\left[\begin{matrix}
-[{\hat w}_{\times}] & {\hat w} \-{\hat w}^{T} & 0
\end{matrix}\right] \delta q-
\left[\begin{matrix}
[{\hat w}_{\times}] & {\hat w} \-{\hat w}^{T} & 0
\end{matrix}\right]\delta q-
\left[\begin{matrix}
-[{(\tilde b_{g}+n_{g})}_{\times}] & {(\tilde b_{g}+n_{g})} \-{(\tilde b_{g}+n_{g})}^{T} & 0
\end{matrix}\right] \left[\begin{matrix}
{\frac{1}{2}\delta\theta} \{1}
\end{matrix}\right]\)

忽略掉极小量相乘的项得:

\(\left[\begin{matrix}
{\dot {\delta\theta}} \{0}
\end{matrix}\right]=
\left[\begin{matrix}
-2[{\hat w}_{\times}] & 0 \0 & 0
\end{matrix}\right] \left[\begin{matrix}
{\frac{1}{2}\delta\theta} \{1}
\end{matrix}\right]-
\left[\begin{matrix}
{\tilde b_{g}+n_{g}} \{0}
\end{matrix}\right]\)

\({\dot {\delta\theta}}=-[{\hat w}_{\times}]\delta\theta -\tilde b_{g} -n_{g}\)

4.2 求\(\dot{\tilde b}_{g}\)

\(\dot{\tilde b}_{g}=\dot b_{g}-\dot{\hat b}_{g}=n_{wg}\)

4.3 求\(^{G}\dot {\tilde v}_{I}\)

\(^{G}\dot {\tilde v}_{I}={^{G}\dot v_{I}-^{G}\dot {\hat v}_{I}}\)

\(^{G}\dot v_{I}={^{G}a_{I}}={C(_{G}^{I}q)}^{T}\left(a_{m}-b_{a}-n_{a}\right)+{^{G}g}\)

\(^{G}\dot {\hat v}_{I}=C(_{G}^{I}\hat q)^{T}{\hat a}+{^{G}g}\)

\(^{G}\dot {\tilde v}_{I}={C(_{G}^{I}q)}^{T}\left(a_{m}-b_{a}-n_{a}\right)+{^{G}g}-C(_{G}^{I}\hat q)^{T}{\hat a}-{^{G}g}\)

\(={C(_{G}^{I}{\hat q})}^{T}\left(I+[\delta\theta_{\times}]\right)\left(a_{m}-b_{a}-n_{a}\right)-C(_{G}^{I}\hat q)^{T}{\hat a}\)

由\(\hat a=a_{m}-\hat b_{a}\)得:

\(={C(_{G}^{I}{\hat q})}^{T}\left(I+[\delta\theta_{\times}]\right)\left(\hat a-\tilde b_{a}-n_{a}\right)-C(_{G}^{I}\hat q)^{T}{\hat a}\)

省略掉高次项\([\delta\theta_{\times}]\left(-\tilde b_{a}-n_{a}\right)\)得到:

\(={C(_{G}^{I}{\hat q})}^{T}\left([\delta\theta_{\times}]\hat a -\tilde b_{a}-n_{a}\right)\)

\(=-{C(_{G}^{I}{\hat q})}^{T}[\hat a_{\times}]\delta\theta-{C(_{G}^{I}{\hat q})}^{T}\tilde b_{a}-{C(_{G}^{I}{\hat q})}^{T}n_{a}\)

4.4 求\(\dot {\tilde b}_{a}\)

\(\dot {\tilde b}_{a}=\dot b_{a}-\dot {\hat b}_{a}=n_{wa}\)

4.5 求\(^{G}\dot {\tilde p}_{I}\)

\(^{G}\dot {\tilde p}_{I}={^{G}p_{I}}-{^{G}\dot {\hat p}_{I}}\)

\(={^{G}v_{I}}-{^{G}{\hat v}_{I}}={^{G}{\tilde v}_{I}}\)

4.6求\(_{C}^{I}\tilde \theta\)和\(^{I} \tilde p_{C}\)

\(_{C}^{I}\tilde \theta\)和\(^{I} \tilde p_{C}\)是相机与IMU的相对位置,所以有:

\(_{C}^{I}\tilde \theta=0_{3\times 1}\)

\(^{I} \tilde p_{C}=0_{3\times 1}\)

4.7 写成矩阵形式

\[\dot {\tilde x}_{I}=\left[\begin{matrix}
-[\hat w_{\times}] & -I_{3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3}\0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} \-C\left({_{G}^{I}\hat q}\right)^{T}[\hat a_{\times}] & 0_{3 \times 3} & 0_{3 \times 3} & -C\left(^{I}_{G}\hat q\right)^{T} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} \\ 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} \0_{3 \times 3} & 0_{3 \times 3} & I_{3\times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} \0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} \0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3}
\end{matrix}\right]{\tilde x_{I}}+
\left[\begin{matrix}
-I_{3\times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} \0_{3 \times 3} & I_{3\times 3} & 0_{3 \times 3} & 0_{3 \times 3} \0_{3 \times 3} & 0_{3 \times 3} & -C\left(^{I}_{G}\hat q\right)^{T} & 0_{3 \times 3} \0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} \0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & I_{3\times 3} \0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} \0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3} & 0_{3 \times 3}
\end{matrix}\right]{n_{I}}\]

参考资料

(1) A Multi-State Constraint Kalman Filter for Vision-aided Inertial Navigation

(2) Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight

(3) Indirect Kalman Filter for 3D Attitude Estimation

原文地址:https://www.cnblogs.com/liuzhenbo/p/12536671.html

时间: 2024-11-08 15:18:21

一步一步学习S-MSCKF(一)连续时间IMU误差状态运动模型的相关文章

一步一步学习Vue(十一)

本篇继续学习vuex,还是以实例为主:我们以一步一步学Vue(四)中讲述的例子为基础,对其改造,基于vuex重构一遍,这是原始的代码: todolist.js ; (function () { var list = []; var Todo = (function () { var id = 1; return function (title, desc) { this.title = title; this.desc = desc; this.id = id++; } })(); /** *

一步一步跟我学习lucene(19)---lucene增量更新和NRT(near-real-time)Query近实时查询

这两天加班,不能兼顾博客的更新,请大家见谅. 有时候我们创建完索引之后,数据源可能有更新的内容,而我们又想像数据库那样能直接体现在查询中,这里就是我们所说的增量索引.对于这样的需求我们怎么来实现呢?lucene内部是没有提供这种增量索引的实现的: 这里我们一般可能会想到,将之前的索引全部删除,然后进行索引的重建.对于这种做法,如果数据源的条数不是特别大的情况下倒还可以,如果数据源的条数特别大的话,势必会造成查询数据耗时,同时索引的构建也是比较耗时的,几相叠加,势必可能造成查询的时候数据缺失的情况

一步一步跟我学习lucene(9)---lucene搜索之拼写检查和相似度查询提示(spellcheck)

suggest应用场景 用户的输入行为是不确定的,而我们在写程序的时候总是想让用户按照指定的内容或指定格式的内容进行搜索,这里就要进行人工干预用户输入的搜索条件了:我们在用百度谷歌等搜索引擎的时候经常会看到按键放下的时候直接会提示用户是否想搜索某些相关的内容,恰好lucene在开发的时候想到了这一点,lucene提供的suggest包正是用来解决上述问题的. suggest包联想词相关介绍 suggest包提供了lucene的自动补全或者拼写检查的支持: 拼写检查相关的类在org.apache.

一步一步学习IdentityServer3 (1)

学习之初: IdentityServer3我自己最开始了解到的就是做一个SSO单点登录,后面发现还有单独的认证服务功能,其实它还可以做APIs的访问控制,资源授权,另外还可以为提供第三方登录,其他的自由定制目前也在学习中. 网络飞速发展的今天,庞大的数据,庞大的用户,庞大的业务,都需要登录的支撑,登录授权完全看作一个单独的一门技术,Web端需要登录,App端需要登录,Api需要授权访问等等,除此以外大型业务系统,子系统之间其实也需要这样一个登陆授权,所以,登录不再是单一的一个功能点了,简单的查询

一步一步学习SignalR进行实时通信_8_案例2

原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建立DrawingHub 页面 javascript 实现效果 结束语 参考文献 前言 这讲分析一个案例,在一个画板上画画实时在其他客户端上显示. 配置Hub 在Startup中进行配置: public void Configuration(IAppBuilder app) { app.MapSign

一步一步跟我学习lucene(13)---lucene搜索之自定义排序的实现原理和编写自己的自定义排序工具

自定义排序说明 我们在做lucene搜索的时候,可能会需要排序功能,虽然lucene内置了多种类型的排序,但是如果在需要先进行某些值的运算然后在排序的时候就有点显得无能为力了: 要做自定义查询,我们就要研究lucene已经实现的排序功能,lucene的所有排序都是要继承FieldComparator,然后重写内部实现,这里以IntComparator为例子来查看其实现: IntComparator相关实现 其类的声明为 public static class IntComparator exte

【转】朱兆祺带你一步一步学习嵌入式(连载)

原文网址:http://bbs.elecfans.com/jishu_357014_2_1.html#comment_top  从最初涉及嵌入式Linux开始到现在,深深的知道嵌入式的每一步学习都是举步维艰.从去年11月份开始,我就着手整理各种学习资料,希望推动嵌入式学习的前进贡献自己微不足道的一份力量.从去年到现在,将C语言的学习经验整理成<攻破C语言笔试与机试陷阱及难点>(现在仍在更新),这份资料已经在电子发烧友论坛的单片机论坛连载(http://bbs.elecfans.com/jish

一步一步学习数据结构(三)栈的顺序存储结构实现代码

//栈这种逻辑结构的实现与一般线性表的实现类似,有两种存储方式:顺序存储和链式存储 //先学习顺序存储 //1. #include<stdio.h> #include<stdlib.h> #define null NULL #define SIZE 100 typedef int dataType ; typedef struct { dataType data[SIZE]; int top; }cStack,*cStackPointer; //初始化栈空间 void initSt

值得我们深入研究和学习:从零开始一步一步搭建坚不可摧的Web系统主流架构

本文标签: Web系统主流架构 搭建Web系统架构 缓存服务器 数据库架构   技术型初创公司  互联网杂谈 主题简介: 1.网站系统架构当前现状 2.Web系统主流架构解析 3.互联网技术团队初期组建经验分享 本文主要结合我之前在海尔电商平台和现在公司的一些实际架构经验,综合实际情况和个人的理解,跟大家分享一下搭建Web系统的一些常用的技术架构和应用技巧. 首先要跟大家探讨一个问题,就是当前传统IT企业或是传统企业的IT系统目前的系统架构是怎样的呢? 就我所经历的NEC软件.海尔集团.青岛航空