VIO/VINS/VSLAM问题定位流程与思路

2023-05-16

       首先假设读者是了解基础VSLAM,了解VIO基础(至少要会标定,调过几个开源系统的)

       先说一下双目的VINS-FUSION,大部分问题都是基线造成的问题,简单点说就是如果使用较短的基线如5cm(Real sense)和常规的14cm,在大场景(如空间广阔,特征分布远近不一的大户外场景)中失去尺度是比较正常的,室内一般纹理比较好的区域相对单目还是比较稳定的,尤其是可以静止初始化是比较大的优势。FUSION因为代入了2个相机的特征+视差开销也是较高的,另外双目系统的外部参数会比较复杂,调参过程相对会麻烦很多。使用较大的基线则探测和建图的距离很远(如DJI+五菱的方案),在室外也不会飘飞,缺点是会有近距离灯下黑的情况需要补摄。其他都和单目VIO差不多,下面详述,基本普遍适用各类主流VIO。

       单目VIO很容易飘飞和出现精度问题,涉及的场景多种多样,今天主要讨论常规问题,就不多涉及ZUPT了(ZUPT参见前文)

尺度崩溃/飘飞:

1.首先看快门,如果使用的是卷帘快门尽量换全局快门,目前已知的卷帘快门工作得比较好的还是REALSENSE系列。

2.其次看TD,即相机与IMU之间的对时,以IMU-200HZ,相机30fps为参考,如TD>30ms,系统基本不可用,也不需要研究别的了,尽量控制到10ms以内,卷帘快门自己调的话比较难达到,1Xms也凑合能用,但是时间长了容易有问题。自己做硬件设计的话使用MCU做同步触发。

3.然后看前端开销,使用的如果是算力较好的平台如NUC/XAVIER之类的话不涉及,如果是嵌入式系统看看整个特征提取,匹配,几何校验,RANSAC的平均单张耗时,>50ms的话容易出问题,即使不出现尺度飘飞,也会在长距离探索中严重影响精度。

4.然后看后端BA开销,平均单张不应超过100ms(部分复杂纹理的关键帧偶然超过没问题),滑窗至少需保持6+,BA处理8+。ICE的话LBA滑窗50,DMVIO滑窗7即可(判断机制完全不同,多了没用)

5.点云匹配,深度数据和点云数据是2件事,如使用或打开了ICP进行点云匹配,开销是巨大的,不宜与VIO存在于同一算力平台,没有足够好的优化系统是跑不好的。而这一块的优化工作量巨大。说人话就是跑了VIO的嵌入式系统不要再开D相机的ICP(哪怕用了较好的数据结构如KD-TREE/八叉树等),当前世界主流SOC系统均支持不好,包括车载用的主SOC(通常都是极强的NPU,弱兮兮的主核,一般般的GPU,常常没有DSP),主要还是给激光和深度用的,不适合双开。

6.初始化质量,这个的判断不难,通常面前有较好的纹理,一个简单的扇面移动或摆头就能做好,VINS的初始化无论单双目都很不错。而且初始化如质量不佳很快就会飘飞,很容易通过代码做判断。

7.剩下导致尺度飘飞的就是ZUPT那一大堆问题了,见前文。

8.DMVIO/DM-VIO除了以上部分主要涉及的是光度标定,整个TUM系列的光度标定都是重中之重,可以放到重要性第5位。ICE-BA/ICEBA反而只需要弄好1和2就基本不飞了,这东西实在是太鲁棒了,缺点就是精度非常差,关注的始终是BODY坐标系,和世界坐标系的耦合度一般,经常会玄学漂移,真心不太适合机器人的应用落地。

精度问题:

1.首先对精度影响较大的就是相机内参,但是这个一般会张定友和Kalibr的都不会标错,出问题的几率很低。

2.外部参数:Qbc是一个3x3矩阵,同轴的话往往就是个单位阵(懒一点直接置0置1就行),代表的是IMU和相机的旋转关系,自己装相机的话只要装正一点就行了。但是这个单位阵的形态会变化(比如常见的从1,0,0,0,1,0,0,0,1变成0,-1,0,1,0,0,0,0,1),即这个旋转关系本身会根据你实际设计相机时,IMU与相机相对位置的差别而变化。这个其实也很难出错,但是这个出错系统基本就废掉了,这个可以先填个上面的阵再让系统自己优化和估一下。

3.外部参数:Pbc,这个其实就是相机和IMU的x/y/z相对位置,也是非常难出错的,实际拿游标卡尺大概量一下都差不多。。。一般让系统自己估一下能非常准,如果出问题比如出现了几十cm这种极大值,那就不要看这里,9成9是上面的前8个基础问题。

4.外部参数:Gc0,这个是很直接影响精度的,而且不仅仅影响Z轴(这一点大家往往容易忽略),但是只要模长不填错,自估算产生的影响并不大。

写到这里大家看了可能觉得很废,那意思就是上面4个出问题的几率不高咯,那你说个鬼!其实我是想说大家当系统精度出问题的时候尽量先不要去乱怀疑上面那几个。。。首先考虑8个主要问题。好了,精度出问题和参数强相关的如下:

5.IMU内参,首先要知道你用的IMU本身无论如何都会飘,先使用滤波处理好毛刺。比如常用的低成本博世IMU,其实良率与一致性问题都很大,需要经历精准的调校,这里可以用Kalibr和其他工具标,然后用6面法或者加个转台调(但是低精度的IMU其实用了也白用),这块一共涉及4样东西,acc(加速度)的bias和noise,gyro(角速度)的bias和noise,但是就是会有那么些IMU,无论你怎么努力,这4样里面都会有些问题,那大概怎么判断呢? 这4项里面如果有1项数量级到了e-02次方,基本就不可用了,累积的误差会使你的努力都白费。但是如果e-03或者更小就还是可以接受的,视觉总是能给你纠回来。如果有e-02的IMU,在纹理丰富处表现尚可,但是如果应对激烈场景就容易使系统迅速进入低精度状态: 举个例子,如gyro的bias很大,则在无纹理区域的转向输入会产生较大的偏差,在长距离探索当中,这种累计哪怕是0.5度,随着探索距离的增长,整体数据就会变得不再可用了。 应对方式:换掉这个IMU或者相机,或者使这个装置只在室内丰富纹理处使用(室外除非是小回环场景)。

       万变不离其宗,此文送给调参侠们(我也是之一,哈哈),VSLAM和VIO的路漫漫其修远兮,但是光明逐渐到来,最近2个月的主要精力都放到了更深一步的优化上,不仅仅是通过多核负荷分担,而是得要从更加本质的角度去解决问题!今天也是补充一些大家平时经常提问的问题。当具备了三相性(开销/鲁棒/精度)的VIO真正构建起了世界观(半稠密建图),再结合重定位就可以开始真正的小范围低成本世界探索了。

      

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

VIO/VINS/VSLAM问题定位流程与思路 的相关文章

  • 关于VIO中IMU预积分的讲解

    Why VIO 转自 xff1a https zhehangt github io 2019 03 23 SLAM Basic VIOInit 首先我们先简单回顾一下为什么要做VIO xff0c 以及为什么要做VIO初始化 我们知道单目相机
  • VINS-mono中坐标系定义以及通过VINS-mono求解无人机位姿

    因为在科研中需要使用VINS mono算法来为无人机提供位姿估计信息 因此需要搞清楚VINS mono相应坐标系以及无人机坐标系之间的关系 目录 1 坐标系关系 1 1 VINS mono坐标系定义 1 2 无人机坐标系 2 通过VINS
  • VINS - Fusion GPS/VIO 融合 一、数据读取

    目录 一 相关概念 二 程序解读 2 1 参数读取 解析 xff1a 2 2 获取图像时间信息 解析 xff1a 2 3 获取图像时间信息 解析 xff1a 2 4 定义VIO结果输出路径和读取图像信息 解析 xff1a 2 5 读取GPS
  • 【学习SLAM】vins笔记

    VINS ROS source catkin ws devel setup bash 3 1 1 Open three terminals launch the vins estimator rviz and play the bag fi
  • realsense435i运行vins-mono,标定部分

    相机标定 1 安装kalibr xff1b 参考 xff1a https blog csdn net wangbaodong070411209 article details 112248834 https blog csdn net we
  • VINS-Mono

    非极大值抑制 NMS算法 xff0c 思想是搜索局部最大值 xff0c 抑制非极大值 输入 xff1a 目标边界框及其对应的置信度的分列表 xff0c 设定阈值 xff0c 阈值用来删除重叠较大的边界框 IoU xff1a 两个边界框的交集
  • VINS-Mono代码阅读笔记:feature_tracker代码阅读(转载)

    转载 xff1a https blog csdn net moyu123456789 article details 100988989 1 入口main函数 feature tracker结点的入口函数为feature tracker n
  • Ubuntu20.04跑VINS-fusion

    Ubuntu20 04跑VINS Fusion 使用docker 由于工程较大 xff0c 依赖较多 xff0c 环境配置十分繁琐 xff0c 故使用docker环境来运行VINS Fusion Docker 可以让开发者打包他们的应用以及
  • dm-vio-ros的安装(详细)

    前言 dm vio安装 参考博客 SLAM DM VIO ros版 安装和论文解读 在安装过程中 xff0c 有些地方提示的不是很清楚 xff0c 故写一篇记录避免再次犯错 在dm vio的一个子目录下创建ros工作空间 xff0c 如图所
  • 关于VINS-MONO与VIO轨迹漂移问题定位的一些方向

    整个VINS MONO系统 xff0c 较容易在系统静止或外力给予较大冲击时产生轨迹漂移 xff0c 原因是imu的bias在预积分中持续发散 xff0c 视觉重投影误差产生的约束失效 如静止 xff0c 先验约束可能会在LM的线性求解器中
  • 关于VIO零速更新(ZUPT)与控制三种约束的工程实践

    今天这篇是深度稍微高一些的 xff0c 尽量写细 xff0c 但是具体实践各家都有不同的方式与工程习惯 xff0c 就不多赘述了 小组工作比较忙 xff0c 代码还没来得及整理 xff0c 总体更新一下基础知识 VIO系统后端核心的三种约束
  • Ubuntu20.04运行Vins-fusion

    因已安装ROS noetic xff0c eigen xff0c opencv及ceres等库 xff0c 这部分环境配置就不细讲 xff0c 直接下载VINS FUSION的代码库 下载编译 cd span class token ope
  • IMU误差模型简介及VINS使用说明

    1 IMU误差来源 2 IMU噪声模型 Noise and Bias kalibr中的imu noise model 参考 xff1a https github com ethz asl kalibr wiki IMU Noise Mode
  • NVIDIA Jetson Xavier NX部署VINS-fusion-GPU

    NVIDIA Jetson Xavier NX部署VINS fusion GPU 一 环境配置 xff08 Ubuntu 18 04 xff09 1 Cuda 10 2的安装 span class token function sudo s
  • VINS-FUSION-GPU在jetson nx上的实现

    需要安装经过修改的Ubuntu18系统 https span class token operator span span class token comment developer nvidia com zh cn embedded do
  • VINS-mono 位姿图 重利用测试

    在前一篇博文里介绍了VINS mono pose graph reuse功能的使用 xff0c 这里接着贴出一些延伸的测试 xff0c 并进行一些探讨 延伸测试 一般来说 xff0c 加载地图是进行非GPS定位必要的一步 这里根据新的VIN
  • 从零实现vins-mono+fast-planner+M100无人机实验在现实场景中的应用

    版权声明 本文为博主原创文章 未经博主允许不能随意转载 本文链接 https blog csdn net AnChenliang 1002 article details 109535355 最近由于科研的需要 要将VINS mono与fa
  • VINS-Mono视觉初始化代码详解

    摘要 视觉初始化的过程是至关重要的 xff0c 如果在刚开始不能给出很好的位姿态估计 xff0c 那么也就不能对IMU的参数进行精确的标定 这里就体现了多传感器融合的思想 xff0c 当一个传感器的数据具有不确定性的时候 xff0c 我们需
  • VINS-RGBD运行指令

    创建工程VINS RGBD catkin ws 将代码放入src文件夹当中 git clone https github com STAR Center VINS RGBD 进行编译 cd VINS RGBD catkin ws catki
  • 【深蓝学院】手写VIO第2章--IMU传感器--笔记

    0 内容 1 旋转运动学 角速度的推导 xff1a 左 61 omega wedge xff0c 而

随机推荐

  • MyBatisPlus中的likeLeft和likeRight

    在使用MyBatisPlus来匹配身份证后6位时遇到了likeLeft和likeRight的问题 xff1a likeLeft时匹配最左边还是匹配最右边 xff1f 所以来一个简单的测试 xff08 通过打印 成功 失败 来判断 xff09
  • 计算机网络第一章总结

    目录 1 1计算机网络再信息时代中的作用 1 2互联网的概述 1 2 1网络 xff0c 互联网和因特网 1 2 2互联网基础结构的三个阶段 1 2 3互联网的标准化工作 1 3互联网的组成 1 3 1三种交换方式 1 4计算机网络的类别
  • Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column……报错的解决办法

    问题原因 xff1a 这个报错是执行有GROUP BY的语句时出现的 原因是MySQL启用了默认的only full group by SQL模式 导致GROUP BY语句报错 解决办法 xff1a 打开mysql的安装目录找到my ini
  • 【Linux安全管理】Firewalld详解

    目录 1 与iptables不同 2 配置防火墙 3 firewalld区域概念 4 filewalld 配置生效 5 firewalld服务 firewalld 端口映射 富规则 rich rule 1 与iptables不同 firew
  • C++之class和struct的区别

    在C语言中 xff0c struct是一个数据类型 xff0c 所以struct内不能定义函数 xff1b 在C 43 43 中保留了struct关键字 xff0c 并且进行了补充 xff0c struct类似于class xff0c 可以
  • QEMU使用virtio磁盘(Ubuntu/windows)

    环境 宿主环境 xff1a windows 10 pro QEMU版本 xff1a 3 1 客户机 xff1a windows2003 virtio是一种半虚拟化技术 xff0c window2003安装盘不带驱动程序 xff0c 所以首先
  • 创建一个ArrayList<String> 集合,通过反射向集合中添加Integer类型的数据

    1 思路 创建一个ArrayList lt String gt 集合 通过反射获取到ArrayList的Class对象通过Class类获取到ArrayList中的add方法 2 所需关键知识 获取Class类有三种方法 xff1a xff0
  • Git分支&标签

    目录 一 xff0c 分支 环境的的功能及特点 分支的策略 分支的相关指令 二 xff0c 标签 1 查看所有标签 2 创建tag 3 删除tag 4 分支与版本 一 xff0c 分支 1 分支的命名规范 dev test pre pro
  • java酒店管理系统小型项目

    前言 学习java这段时间以来 xff0c 给我的感觉是非常枯燥和乏味的 xff0c 因为学习编程这个过程就是这样 xff0c 除此之外我是自学 xff0c 所以遇到问题只能自己上网找资料 xff0c 或者看一些大佬的文章来解决问题 不过学
  • 基于智能优化算法的无人机路径规划(Matlab代码实现)

    目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 无人机作为一种现代航空设备 不仅作业速度快 成本低 还具有卓越的灵活性和时效性 常用于完成那些繁冗 危险 对灵活性要求较高 作业范围较大的任务 比如航空拍摄 农
  • 布谷鸟搜索算法的改进及其在优化问题中的应用(Matlab代码实现)

    x1f352 x1f352 x1f352 欢迎关注 x1f308 x1f308 x1f308 x1f4dd 个人主页 xff1a 我爱Matlab x1f44d 点赞 评论 收藏 61 61 养成习惯 xff08 一键三连 xff09 x1
  • 基于MATLAB中雷达和视觉合成数据的目标级传感器融合(Matlab)代码实现

    目录 x1f4a5 1 概述 x1f4da 2 运行结果 x1f389 3 参考文献 x1f468 x1f4bb 4 Matlab代码 x1f4a5 1 概述 本文使用MATLAB的场景生成器工具箱 xff0c 通过合成雷达和视觉观察创建一
  • Linux嵌入式开发——C编程

    文章目录 Linux嵌入式开发 C编程一 编写C程序1 1 设置vim编辑器1 2 编写C程序 二 编译C程序三 make工具和Makefile文件3 1 编写C程序C文件H文件 3 2 不使用make工具3 3 使用make工具和Make
  • C#中的接口

    一 什么是接口 含义 xff1a 接口是指定一组函数成员而不实现它们的引用类型 xff08 只能用类和结构实现接口 xff09 接口可以包含实例方法 属性 事件 索引器或这四种成员类型的任意组合 接口可以包含静态构造函数 xff08 不能创
  • VINS-MONO工程改造

    这篇是接着前文 主流VIO VSLAM系统改造与工程化落地 和 关于VIO零速更新 ZUPT 与控制三种约束的工程实践 的 xff0c 有时候想一出是一出 xff0c 导致写的东西还是太分散了 要做VINS改造首先要熟悉VSLAM和数学基础
  • DM-VIO简析

    今天主要是针对DMVIO DM VIO的简析 xff0c 中文网上有的东西都太少了 xff0c 只能靠看完论文和组员们一起改代码 Lukas组这个东西在中文网被称为有史以来最好的VIO xff0c 但是实际过程中我们还是发现了许多不完美的地
  • Hao to setup windbg on windows10 LTSC img

    Windows host Debugger install windbg https developer microsoft com en us windows downloads windows 10 sdk download the i
  • VINS/VIO的并行化与工程化(GPU篇)

    最近更新的这2篇应该是比较重的了 xff0c 先做GPU篇 xff0c 再做DSP篇 先友情提醒 xff0c 这篇文章很重很费时 xff0c 对各种软硬算的知识要求多多 主体知识来源于UZH和ETH的研究者Balazs Nagy组 xff0
  • 关于机器人状态估计8-VSLAM工程与VIO工程难点

    最近做产设和综述把头都整晕了 xff0c 本来想认真更新GPU那篇DSP的姊妹篇 xff0c 突然觉得太长了实在是没有写的欲望 xff0c 还是写篇杂文算了 一看这个标题就知道 首先如果没有 关于机器人状态估计 4 成长路径与能力提升这块基
  • VIO/VINS/VSLAM问题定位流程与思路

    首先假设读者是了解基础VSLAM xff0c 了解VIO基础 至少要会标定 xff0c 调过几个开源系统的 先说一下双目的VINS FUSION xff0c 大部分问题都是基线造成的问题 xff0c 简单点说就是如果使用较短的基线如5cm