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. Java 世界的法外狂徒:反射

    概述 反射(Reflection)机制是指在运行时动态地获取类的信息以及操作类的成员(字段.方法.构造函数等)的能力.通过反射,我们可以在编译时期未知具体类型的情况下,通过运行时的动态查找和调用. 虽 ...

  2. 最详细的Git命令大全

    Git常用命令及方法大全 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) R ...

  3. 使用 StarCoder 创建一个编程助手

    如果你是一个软件开发者,你可能已经使用过 ChatGPT 或 GitHub 的 Copilot 去解决一些写代码过程中遇到的问题,比如将代码从一种语言翻译到另一种语言,或者通过自然语言,诸如" ...

  4. .net 搜索联想词

    思路: 1.ajax请求后台方法获取数据. 2.通过jquery将请求到的数据显示在页面上. 前台 <div class="sc_con" id="bbsearch ...

  5. 【Python&RS】遥感影像的像素坐标转地理坐标(仿射变换)

    ​         GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用抽象数据模型来表达所支持的各种文件格式 ...

  6. Oracle rac环境的数据库导入操作记录

    搞某一大项目的性能测试,将Oracle数据库dmp文件(211G)导入性能测试环境. 因为Oracle部署方式为rac,数据存储到共享磁盘.但由于对rac了解不足,这个过程中犯了两个错误: ① 表空间 ...

  7. 尚医通day01-【项目环境搭建和医院设置详细步骤】(内附源码)

    第01章-项目介绍 1.课程介绍 项目名称:尚医通预约挂号统一平台 项目原型:https://www.114yygh.com 北京市预约挂号统一平台 项目技术栈:前后端分离 后端技术:SpringBo ...

  8. youtobe深度学习推荐系统-学习笔记

    简介 前言 本文是Deep Neural Networks for YouTube Recommendations 论文的学习笔记.淘宝的召回模型曾经使用过这篇论文里面的方案,后续淘宝召回模型升级到了 ...

  9. Open AI ChatGPT Prompt 学习之基础篇

    碎碎念 2023 年,最火的可能就是 openAI 了,其组织代表的产品 chatGTP,相信大家已经有所耳闻.不少同学已经开始着手使用,并截图晒出 ChatGPT 是多么得智能与神奇.而有的同学在使 ...

  10. 实时光线追踪(3)Ray Casting

    目录 硬件光追(Hardware Ray Tracing) 加速结构(Acceleration Structure,AS) AS 策略 Ray Tracing Pipeline Ray Generat ...