首先假设读者是了解基础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真正构建起了世界观

(半稠密建图),再结合重定位就可以开始真正的小范围低成本世界探索了。