VINS中的重力-尺度-速度初始化(2)

细化重力

\(\quad\)上一篇文章中得到的 \(g\) 一般是存在误差的。因为在实际应用中,当地的重力向量的模一般是已知固定大小的(所以只有两个自由度未知),而我们在前面求解时并没有利用这个条件,因此最后计算出来的重力向量很难刚好满足这个条件。于是,在vins的初始化中,还会对得到的重力向量进行修正。

\(\quad\)首先,作者对重力向量进行参数化:

\[\hat{g}=\|g\| \overline{\hat{g}}+w_{1} b_{1}+w_{2} b_{2}=\|g\| \overline{\hat{g}}+\vec{b}^{3 \times 2} w^{2 \times 1}
\]

其中,\(\overline{\hat{g}}\)是上一步中估计得到的重力向量方向的单位向量,\(b_1\)与\(b_2\)是另外两个单位向量,是\(\overline{\hat{g}}\)切平面上的两个互相垂直的单位向量,获得方式如下:


此时我们可以从上面的式子知道,原本三维的优化变量 \(g^{c 0}\) 已经可以使用两维的 \(w^{2 \times 1}\) 替代。参考上一节的推导,待优化变量变成了

\[\left[\begin{array}{c}
v_{b_{k}}^{b_{k}} \\
v_{b_{k+1}}^{b_{k+1}} \\
w^{2 \times 1} \\
s
\end{array}\right]
\]

最后得到的观测方程也变为了

\[\left[\begin{array}{cccc}
-I \Delta t_{k} & 0 & \frac{1}{2} R_{c_{0}}^{b_{k}} \Delta t_{k}^{2} \vec{b} & R_{c_{0}}^{b_{k}}\left(p_{c_{k+1}}^{c_{0}}-p_{c_{k}}^{c_{0}}\right) \\
-I & R_{c_{0}}^{b_{k}} R_{b_{k+1}}^{c_{0}} & R_{c_{0}}^{b_{k}} \Delta t_{k} \vec{b} & 0
\end{array}\right]\left[\begin{array}{c}
v_{b_{k}}^{b_{k}} \\
v_{b_{k+1}}^{b_{k+1}} \\
w \\
s
\end{array}\right]=\left[\begin{array}{c}
\alpha_{b_{k+1}}^{b_{k}}+R_{c_{0}}^{b_{k}} R_{b_{k+1}}^{c_{0}} p_{c}^{b}-p_{c}^{b}-\frac{1}{2} R_{c_{0}}^{b_{c}} \Delta t_{k}^{2}\|g\| \hat{\hat{g}} \\
\beta_{b_{k+1}}^{b_{k}}-R_{c_{0}}^{b_{k}} \Delta t_{k}\|g\| \hat{g}
\end{array}\right]
\]

基于新得到的观测方程(可以使用LDLT分解求解),我们可以通过重力约束不断地对初始化结果进行修正,迭代对其 进行求解(vins中迭代了4次),最后得到一个修正后的初始化结果。

与世界坐标系对齐

这一步一般是最后一步,一般世界坐标系选择的是东北天坐标系。则这个对齐操作就是得到将重力向量旋转到Z轴上的旋转矩阵,这个旋转矩阵就是将原本坐标变换到世界坐标系(东北天坐标系)的变换矩阵。

找到这个变换矩阵后,接下来就是使用这个变换矩阵将位姿,速度等状态信息都变换到世界坐标系下。

加速度计bias

通过上面的阅读,我们会发现在vins的初始化中并没有对加速度计的bias进行估计,感觉对于超定的方程,多计算一个加速度计的bias好像也不是什么难事,,而且建模应该会更准确。在这个初始化工作的论文中其实有解释原因:

  1. 通过仿真实验证明,如果运动不剧烈,加速度计的bias很难被观测出来;
  2. 忽略加速计的bias对估计其他初始值的影响不大;
  3. 加速度计的bias是可以通过之后的VIO紧耦合优化,慢慢估计出来的;

参考资料

VINS中的重力-尺度-速度初始化(2)的更多相关文章

  1. VI ORB-SLAM初始化与VINS初始化对比(将vi orb-slam初始化方法移植到vins中)

    初始化时需要求出的变量:相机和imu外参r t.重力g.尺度s.陀螺仪和加速度计偏置ba bg. 下面对两种算法初始化的详细步骤进行对比: 求陀螺仪偏置bg 求解公式相同,求解方法不同.公式如下,VI ...

  2. SpringMVC的Controller中使用线程安全的初始化

    因为SpringMVC的Controller默认是单例, 在这种情况下, Controller中使用的私有变量必须也是单例, 例如各种service, 否则会有多线程访问数据互相修改的问题. 对于需要 ...

  3. Struts2中实现Web项目的初始化工作

    Struts2中实现Web项目的初始化工作 注:通常web系统在启动时需要做一些初始化的工作,比如初始化系统全局变量,加载自定义配置文件,启动定时任务等.  一.在Struts中实现系统的初始化工作 ...

  4. [百度空间] [转] 在 Visual C++ 中控制全局对象的初始化顺序

    from: http://blog.csdn.net/classfactory/archive/2004/08/07/68202.aspx 在 C++ 中,同一个翻译单位(.cpp文件)里的全局对象的 ...

  5. java中哪些数值不能被初始化

    main方法中的变量不能被初始化 final修饰的变量不能被初始化·

  6. 如何设置vim中tab键缩进---配置初始化设置

    转载自:http://blog.51cto.com/xuding/1725376:加了一些补充说明 问题: Linux系统下,Tab键默认为8个字符,需呀将其修改为4个字符的方式使用 步骤: 1.在用 ...

  7. linux内核中网络文件系统的注册初始化

    针对内核3.9 系统开启时,会使用init/main.c,然后再里面调用kernel_init(),在里面会再调用do_basic_setup(),调用do_initcalls(),调用do_one_ ...

  8. 从以下哪一个选项中可以获得Servlet的初始化参数。

    从以下哪一个选项中可以获得Servlet的初始化参数. A.Servlet B.ServletContext C.ServletConfig D.GenericServlet 解答:C servlet ...

  9. C++ 类中的static成员的初始化和特点

    C++ 类中的static成员的初始化和特点 #include <iostream> using namespace std; class Test { public: Test() : ...

  10. 记一次uboot中gunzip解压速度慢的问题排查

    背景 在项目中需要用到解压功能,之前还记录了下,将uboot解压代码移植到另外的bootloader中时,碰到的效率问题.最终查明是cache的配置导致的. https://www.cnblogs.c ...

随机推荐

  1. 解决git 本地代码与远程仓库冲突问题

    在使用协同开发难免会出现同时修改某个文件导致代码冲突的问题 * branch master -> FETCH_HEAD error: Your local changes to the foll ...

  2. SQL基础知识扫盲

    @ 目录 SQL & 数据库基础知识扫盲 SQL是什么? 数据库是什么? 挺身入局,实践出真知 DBMS初体验 MySQL:初体验 Oracle:初体验 PostgreSQL:初体验 Demo ...

  3. element-ui中Select 选择器异步加载下一页

    场景 当我们使用 Select 选择器存放大量数据的时候. 会发现存在这么2个问题. 1.接口响应时间较长.(因为数据量较多,一次查询的所有)甚至有可能超时. 2.前端下拉框滑动卡顿. 这个时候们如何 ...

  4. ChatGPT小型平替之ChatGLM-6B本地化部署、接入本地知识库体验

    本文期望通过本地化部署一个基于LLM模型的应用,能让大家对构建一个完整的应用有一个基本认知.包括基本的软硬环境依赖.底层的LLM模型.中间的基础框架及最上层的展示组件,最终能达到在本地零编码体验的目的 ...

  5. 在线免费ChatGPT,官方api

    作为一款强大的语言模型,ChatGPT在自然语言处理领域享有较高声誉.现在,您可以在我们的在线平台上免费体验ChatGPT的功能了! 经过不断地优化和改进,我们的在线聊天机器人已经能够针对各种话题展示 ...

  6. Kubernetes(k8s)控制器(五):有状态应用StatefulSet

    目录 一.系统环境 二.前言 三.StatefulSet简介 四.有状态应用和无状态应用区别 五.StatefulSet 5.1 创建StatefulSet 5.2 scale扩展副本数 5.3 创建 ...

  7. 使用Stable Diffusion生成艺术二维码

    在数字艺术的世界中,二维码已经从单纯的信息承载工具转变为可以展示艺术表达的媒介.这是通过使用Stable Diffusion的技术实现的,它可以将任何二维码转化为独特的艺术作品.接下来,我们将一步步教 ...

  8. Sentieon安装时 jemalloc error 解决办法

    背景 Sentieon建议使用jemalloc来改善Sentieon应用程序中的内存管理和整体性能,尤其是Sentieon bwa-mem.有时在安装运行过程中会出现报错: ERROR: ld.so: ...

  9. 2023年最具威胁的25种安全漏洞(CWE TOP 25)

    摘要: CWE Top 25 是通过分析美国国家漏洞数据库(NVD)中的公共漏洞数据来计算的,以获取前两个日历年 CWE 弱点的根本原因映射. 本文分享自华为云社区<2023年最具威胁的25种安 ...

  10. 高效运营新纪元:智能化华为云Astro低代码重塑组装式交付

    摘要:程序员不再需要盲目编码,填补单调乏味的任务空白,他们可以专注于设计和创新:企业不必困惑于复杂的开发过程,可以更好地满足客户需求以及业务策略迭代. 本文分享自华为云社区<高效运营新纪元:智能 ...