关于DSO直接法与IMU预积分联合VIO/SLAM一些思路

2023-05-16

本文不适合初学者;干货多没写具体方法,目前还在数论分解和思考中,估计得2个月后完成。

必要性:

1.常规VIO系统如VINS-MONO建立的地图质量太差,稀疏且不便认知

2.假设并入D相机,无论紧耦合还是松耦合,工作量依旧巨大(进行中)

3.自家硬件与光学相机在光学侧的调整能力越来越强,如光圈的控制,曝光时间的控制,全局快门等变化

4.DSO等直接法在纯视觉侧建图优势很大

5.DSO等直接法仍然没有解决视觉导航的各种问题(无纹理等blabla见前文),需要耦合IMU预积分并入,并辅助以对应手段解决极端场景。

6.如果想用纯视觉DSO得到更鲁棒的位置姿态与建图,只能依赖硬件,如下图(来自港科大的新成果)所示的使用360度鱼眼相机,但这一方面提升了成本,一方面对后端算力平台的要求更高了。

 

DSO的作者很厉害,无论是数论还是代码本身都很强,但缺点就是导致了DSO本身的代码虽然精简,但是并不容易理解,先说一下对DSO关键点的理解

DSO- D:直接 S:稀疏 O:里程计,看着有点矛盾,但是实现很好。

1. DSO是前后端的联合优化,本身连初始化都是个优化,导致初始化很困难,不带旋转画矩形,再互走几个对角线比较容易完成初始化,上来就不适合机器人场景。。。必须优化。

2. 初始化如果失败(RMSE双倍于前帧),采用了一个策略模拟27个旋转平移,实际代码里是26个,xyz各有正负零3个状态,还有一个全零状态未在代码体现,共27个。

3. Host frame和Target frame分离设定,每一个激活点对应3个残差进行处理,分别各自对应2个关键帧与点本身的逆深度。在整个滑动窗口SWF的7个关键帧中进行优化。

4.Frame Hession/ Point Hession/ Point Frame Residual三个状态实例和EF后端的类互相持有指针,在整个里程计中不断传递优化及更新返回。(这设计很高效,但是也导致了改动的难度很大。)这一点是DSO能够有更加理想建图效果的核心之一。

5.有3个最关键的Jacobian,分别是图像梯度(或位姿),逆深度,光度误差(相机内参),对应到3个残差进入Jacobian矩阵Jk联合优化。

6.Outlier处理使用了Huber norm,使用LM法优化时,逆深度光度误差都是平滑函数,仅迭代一次,针对图像梯度(黑白)的优化采用了关键权重Wp并持续迭代,导致对图像梯度优化的依赖很高。这3个优化都是针对同一个状态的线性化点,是FEJ的标准体现。

7.建图方面,使用了中心点与7邻域(非标准8邻域,图到处有不画了)的设计,每次逆深度投影都涉及8个点;(1)设定了2000个激活点的阈值(点有4种状态:Active/Marginalization /Candidate/Outlier),对应32x32的块并分解为dxd(动态自适应),不断地通过策略调整。(2)Tracking方面用的标准极线搜索,Depth只给初值后续不断迭代优化,2帧间4层LK法进行tracking。(3)持续激活Candidate点至Active,维护了一整个调度空间保持图像中特征点均匀,激活策略很巧妙,这部分代码一般不涉及修改不描述了。这一点是DSO能够有更加理想建图效果的核心之二

8. Marginalization策略,这个很正规了,保留最新2帧+视差判断法+设定个欧式距离判定条件筛>7的帧,不赘述。

DSO与IMU预积分联合SLAM思路:

我们组一直在VINS-MONO上拓展,首先考虑的就是将DSO整体并入VINS-MONO,但从上述DSO的特点就能看出来DSO初始化与前后端耦合度很高,这个难度是很大的。至少

(1)需要完成直接法+IMU联合初始化,这里有2种做法,一是先DSO初始化/再优化IMU,这个可行性略高;另一个就是联合初始化,完全没思路,先放放。

(2)需要重新构建Hession/信息矩阵,DSO的Frame Hession架构和其他SWF的差不多,单个位姿矩阵8维,6自由度+2个光度参数。相对于VINS的p/q/v/Ba/Bg的15维来说,改造难度不算太大,转为17维即可。

(3)需要重新构建残差矩阵,这个还直接关系到原VINS系统的3约束:先验约束/视觉重投影误差/IMU预积分。这个工作量就比较大了,也是必不可少的工作。DSO的整个残差构建完全不同于常规如ORB SLAM类的视觉重投影误差,同时涉及到了位姿(梯度),逆深度和光度误差,原来的Tk就已经有了3个权重,工程要大改。相当于变成了5项约束,先验约束也产生了变化。好的事情是VINS的基础PQV由IMU输入,视觉重投影虽然权重也高但是更接近辅助作用(在每2个关键帧之间加以强约束权重),这里还是一定会有好的构建和约束方法的。逆深度和光度误差迭代仅1次,可以快速固定下来,其实就相当于用图像梯度(位姿)优化去联合前面这2哥们去替代视觉重投影误差约束。想得很理想,具体做好再看效果了。

思路就是如上这样了,如果实操遇到逻辑问题死火的话,那就还是继续攻关D相机与DIO。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于DSO直接法与IMU预积分联合VIO/SLAM一些思路 的相关文章

  • 为什么很多程序员喜欢linux系统?

    a gt Linux哪些行业在运用 xff1f Linux系统运用极其广泛 xff0c 不少用户只知道windows xff0c 是因为 xff0c Linux的运用主要是在企业端 现在科技极其发达 xff0c 我们手机在手 xff0c 就
  • Linux Ubuntu下的标准IO相关库函数的介绍与使用

    大家好 xff0c 我是练习编程时长两年半的个人练习生昆工第一ikun xff0c 今天我们来分享一下标准IO相关函数库的介绍与使用 xff0c 话不多话 xff0c 开团 xff01 xff01 xff01 xff01 xff01 目录
  • Linux Ubuntu下的文件IO介绍及实例应用(C语言)

    大家好 xff0c 我是练习编程时长两年半的个人练习生昆工第一ikun xff0c 昨天咋们说了标准IO xff0c 今天咋们来分享文件IO xff0c 以及一个很有趣的实例 xff0c 给图片加密 xff0c 使其无法打开 话不多说 xf
  • 输入年月日得出该天是星期几(C语言)

    大家好 xff0c 我是练习编程时长两年半的个人练习生昆工第一ikun xff0c 昨天因为在写Thoughtworkers的2018年笔试题 xff0c 所以没有更新 xff0c 今天就先把笔试题中的一个函数分享出来 xff0c 该函数可
  • Linux下的UDP服务器客户端的搭建(C语言实现)

    大家好 xff0c 我是练习编程时长两年半的个人练习生昆工第一ikun xff0c 昨天我们说了搭建TCP的服务器和客户端 xff0c 今天我们就来分享一下UDP的服务器和客户端搭建 UDP的特点是无连接 xff0c 多个客户端可以发送消息
  • 使用STL库list类实现单双向约瑟夫环问题(C++)

    目录 一 单向约瑟夫环 1 问题描述 2 list类函数用法 xff08 1 xff09 list构造 xff08 2 xff09 list iterator迭代器 xff08 3 xff09 list容量 xff08 4 xff09 li
  • 使用Qt制作个人计算器

    我们知道windows系统有自带的计算器 xff0c 那么我们也可以用Qt制作一款类似的个人计算器 xff0c 实现整数的加减乘除括号运算 xff0c 界面设计使用Qt xff0c 计算使用逆波兰算法 xff0c 下面我就来分享一下个人计算
  • 使用Qt制作简易的图片查看器

    我们知道windows系统有自带的图片查看器 xff0c 那么我们也可以用Qt制作一款类似的图片查看器 xff0c 实现图片的打开查看以及图片的翻页 xff0c 下面我就来分享一下图片查看器的制作方法 目录 一 描述 二 代码实现 1 头文
  • 计算机网络第二章总结

    目录 1 1物理层的基本概念 1 2数据通信的基础知识 1 2 1数据通信系统的模型 1 2 2信道的几个基本概念 常用的编码方式 1 2 3信道的极限容量 1 3物理层下面的传输媒体 1 3 1导引型传输媒体 1 双绞线 2 同轴电缆 3
  • 假溢出的解决策略

    假溢出 xff1a 在顺序队列中 xff0c 队列出队时并没有像线性表那样使后面的元素往前移 为了解决假溢出 xff0c 常用的方法是把队列想成一个首尾相接的环 xff0c 这种叫循环队列 在循环队列的入队和出队操作中 xff0c 用到了求
  • C++之lambda函数(匿名函数)

    lambda函数简介 lambda函数是C 43 43 11标准新增的语法 xff0c 也称为lambda表达式或匿名函数 lambda函数的特点是 xff1a 距离近 简洁 高效和功能强大 优点 声明式编程风格 xff1a 就地匿名定义目
  • 远程桌面基本原理

    远程桌面基本原理 远程桌面是一种技术 xff0c 它允许用户通过互联网或局域网远程访问另一台计算机的桌面 这种技术可以让用户在不同的地方使用同一台计算机 xff0c 或者在同一地方使用不同的计算机 远程桌面技术在现代计算机应用中发挥着重要的
  • C++之迭代器

    迭代器 C 43 43 中 xff0c 迭代器就是类似于指针的对象 xff0c 但比指针的功能更丰富 xff0c 它提供了对对象的间接访问 xff0c 每个迭代器对象代表容器中一个确定的地址 举个例子 xff1a void test vec
  • C++之类模板全特化和偏特化

    类模板 类模板是通用类的描述 xff0c 使用任意类型 xff08 泛型 xff09 来描述类的定义 使用类模板的时候 xff0c 指定具体的数据类型 xff0c 让编译器生成该类型的类定义 注意 xff1a 函数模板中可以不指定具体数据类
  • C++之完美转发、移动语义(forward、move函数)

    完美转发 1 在函数模板中 xff0c 可以将 自己的参数 完美 地转发 给其它函数 所谓完美 xff0c 即 不仅能准确地转发参数的值 xff0c 还能保证被转发参数的左 右值属性不变 2 C 43 43 11标准引入了右值引用和移动语义
  • C++之异常处理

    异常 异常是面向对象语言 处理错误的一种方式 当一个函数出现自己无法处理的错误时 xff0c 可以抛出异常 xff0c 然后输的直接或者间接调用者处理这个错误 语法 捕获全部的异常 try 可能抛出异常的代码 throw异常对象 catch
  • C++之原子操作(atomic)

    原子操作 所谓原子操作是指不会被线程调度机制打断的操作 xff1b 这种操作一旦开始 xff0c 就一直运行到结束 xff0c 中间不会有任何 context switch xff08 切换到另一个线程 xff09 原子操作是不可分割的 x
  • C++之RAII机制

    RAIIResource acquisition is initialization的缩写 xff0c 意思是 资源获取即初始化 xff0c 其核心思想是利用C 43 43 对象生命周期的概念来控制程序的资源 它的技术原理很简单 xff0c
  • VsCode反应较慢(vscode卡顿,反应慢)

    简述 xff1a 这几天敲代码的时候发现vscode反应好慢 xff0c 有时候更改个样式 xff0c 也是同样 xff0c 然后就开始找原因 xff0c 之前开的代码自动保存 xff0c Git Autorefresh Files Aut
  • 【C++教学】第一课——头文件,全局命名空间,主函数的介绍

    头文件 初学者肯定疑惑为什么每次打代码都要写一个所谓的头文件 xff08 如 xff1a iostream xff09 xff0c 因为你所用的 cout gt gt 34 hello world 34 就是这个 是在iostream里的东

随机推荐

  • JavaWeb02(js基本语法&表单提交方式)

    一 xff0c js基本语法 1 jsp是什么 xff1f 实际上jsp就是Servlet xff0c 是一种可以用来开发web资源的技术 2 jsp运行原理 xff1f jsp文件先翻译成 java xff0c 在将其编译成 class
  • JavaWeb(分页)

    1 分页显示的步骤 xff1a xff08 1 xff09 确定每页显示的数据量 xff08 2 xff09 计算显示的页码 xff08 3 xff09 编写SQL语句 当数据多起来的时候 xff0c 记得需要一个容器将它包装起来 xff0
  • HTTP代理

    HTTP代理 xff08 HTTP Proxy xff09 是一种在网络中经常使用的技术 xff0c 允许客户端计算机通过指定的代理服务器来进行HTTP请求 在本文中 xff0c 我将介绍HTTP代理的基本原理 实现方法以及相关的应用和安全
  • LayUI项目之我的会议(送审以及排座)

    目录 一 xff0c 会议排座 1 前台编码 调试后的jsp代码 2 后台编码 1 图片工具类 2 js代码 3 SQL语句编写 4 子控制器 5 dao方法 三 图片处理 图片处理类 前台代码 后台接收 三 xff0c 会议送审 1 前台
  • Docker-宿主机与容器之间的文件拷贝

    目录 一 xff0c Docker运行MySQL容器 二 xff0c 数据卷 三 xff0c 数据卷容器 四 xff0c Dockerfile制作增强版 五 xff0c Docker制作自定义Tomcat 一 xff0c Docker运行M
  • 小程序框架

    目录 一 xff0c 框架 二 xff0c 响应的数据绑定 三 xff0c 页面管理 四 xff0c 基础组件 逻辑层 App Service 五 xff0c 小程序的生命周期 六 xff0c 注册页面 1 使用 Page 构造器注册页面
  • 小程序后台数据交互-个人中心

    目录 一 xff0c 获取用户昵称和头像 登录过程 二 xff0c 登录 小程序 三 xff0c 后台 小程序服器配置 一 xff0c 获取用户昵称和头像 登录过程 小程序登录 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身
  • 微服务框架及多模块开发

    目录 一 xff0c 项目模式 二 xff0c 项目架构图 三 xff0c 案例演示 主模块 公共子模块 子模块 添加页面公共资源 一 xff0c 项目模式 电商模式 xff1a 市面上有5种常见的电商模式 xff0c B2B B2C C2
  • Mybatis与微服务注册

    目录 一 xff0c Springboot整合MybatisPlus 创建商品微服务子模块 二 xff0c SpringBoot整合Freeamarker 三 SpringBoot整合微服务 amp gateway amp nginx 整合
  • 服务调用&分布式session

    目录 一 xff0c Nginx动静分离 二 xff0c 服务调用 创建配置zmall cart购物车模块 创建配置zmall order订单模块 服务调用 四 xff0c spring session实战 什么是Spring Sessio
  • C语言调试技巧(以vs编译器为例)

    实用调试技巧 什么是bug调试是什么 xff0c 调试有何重要调试是什么 xff1f 调试的基本步骤Debug和Release的介绍 Windows环境调试介绍调试快捷键调试的时候查看程序当前信息查看临时变量的值查看内存信息查看调用堆栈查看
  • (十三)STM32——串口通信(UART)

    目录 学习目标 内容 通信方法 并行通信 串行通信 通信方向 通信方式 UART 特点 串口参数 通信流程 寄存器 USART SR USART DR USART BRR 过程 代码 运行结果 运行结果 遇到的问题 总结 学习目标 本节我们
  • 关于VINS-MONO与VIO轨迹漂移问题定位的一些方向

    整个VINS MONO系统 xff0c 较容易在系统静止或外力给予较大冲击时产生轨迹漂移 xff0c 原因是imu的bias在预积分中持续发散 xff0c 视觉重投影误差产生的约束失效 如静止 xff0c 先验约束可能会在LM的线性求解器中
  • 爬虫的基本原理

    爬虫是一种自动化程序 xff0c 可以模拟人类在互联网上的行为 xff0c 从而获取网页上的信息 爬虫技术在互联网上的应用非常广泛 xff0c 例如搜索引擎 数据挖掘 网络爬虫等等 本文将从爬虫的基本原理 爬虫的分类 爬虫的应用 爬虫的优化
  • 通信接口五种主要的类型是什么?RS-232、485、CAN、USB

    笔者电子信息专业硕士毕业 xff0c 获得过多次电子设计大赛 大学生智能车 数学建模国奖 xff0c 现就职于南京某半导体芯片公司 xff0c 从事硬件研发 xff0c 电路设计研究 对于学电子的小伙伴 xff0c 深知入门的不易 xff0
  • 关于机器人状态估计/VIO/VSLAM中能观性/可观性/FEJ的一些直接解释

    知识来源是高翔博士与贺一家老师的VIO课程 xff0c 以及Barfoot教授的机器人学中的状态估计 可观性问题会直接带来多传感器融合融态中的关键手段 xff1a FEJ First Estimated Jacobian 即不同残差对同一状
  • 关于电子与电气自动化芯片侧的一些基础理解

    EEE Electrical and Electronics Engineering 电子与电气自动化工程 人类科技母行业 涉及的主要领域 xff1a 半导体元器件 芯片 xff0c 模组 PCBA xff0c 嵌入式系统 xff08 驱动
  • BA(后端)优化与卡尔曼滤波的一些区别

    今天这篇文章会写得深入一些 xff0c 主要知识来自于业内多位大佬的实际落地与自身的思考 主要涉及机器人状态估计与机器视觉 xff0c 多传感器结合时 xff0c BA优化与卡尔曼滤波的差异及如何选择 机器人状态估计中 xff0c 大家应该
  • 关于VIO零速更新(ZUPT)与控制三种约束的工程实践

    今天这篇是深度稍微高一些的 xff0c 尽量写细 xff0c 但是具体实践各家都有不同的方式与工程习惯 xff0c 就不多赘述了 小组工作比较忙 xff0c 代码还没来得及整理 xff0c 总体更新一下基础知识 VIO系统后端核心的三种约束
  • 关于DSO直接法与IMU预积分联合VIO/SLAM一些思路

    本文不适合初学者 xff1b 干货多没写具体方法 xff0c 目前还在数论分解和思考中 xff0c 估计得2个月后完成 必要性 xff1a 1 常规VIO系统如VINS MONO建立的地图质量太差 xff0c 稀疏且不便认知 2 假设并入D