VIOBOT种子用户有了一定的数量,日常大家也会进行交流,整理总结一下近期的交流与答疑。
VIO-SLAM(作为三维SLAM,相对于Lidar-SLAM和LIO-SLAM)在工程上落地的长期障碍,不仅在算法精度本身,还有相对严重的鲁棒性问题,尺度问题,世界观问题和沉重的开销/成本问题。
这些我在过往的文章中已经提过了多次,我们组的核心工作也是一步步去解决这些通用性问题,工作已经持续了21个月,绝大部分问题也close掉了;剩下的少量遗留问题是极难解决的部分还在持续努力中。这些工程问题的本质是一些解决起来非常麻烦,看起来难以通用,同时在不同场景中还能跳出各种不同幺蛾子的状态估计问题。它们严重和直接地影响了VIO的工程化。
1.首先讲一下精度问题:
(1)大部分paper的RMSE和ATE指标是衡量精度的重要标准,但是大家要牢记,很多时候论文的指标是建立在理想状态上(如几个主要的数据集,其传感器指标和调校的精度都是非常严谨的),如果是建立在传感器组实际运行上,这个传感器组的标定和优化往往也是由数位强悍的科研人员完成,其组合本身的精度和指标都非常高。
(2)精度并不是玄学,综合精度取决于一系列的东西(而并不仅仅是优化方法):包括传感器组合类型,快门类型,内参,外参标定,imu的bias,传感器之间的对时,单目还是双目,前端所使用的方法,优化的具体类型(比如大家通常的理解都是BA会比KF强,实际也未必,并不是说你花了更多的算力开销,就一定会取得更好的优化结果,比如在算力有限的时候,KF更优),尤其是运行的场景(室内还是室外?光度的变化是比较稳定还是更为激烈)。任何的非线性优化都会有长期的误差积累,在长期重复运行中回环会变得尤其重要(因此一般没有回环,不能算是一个完整的SLAM,只是一个里程计)。长期运行在三旋转和三平移的误差控制当中,旋转的控制会更加的重要,因为轻微的旋转误差会带来更大的偏移量。其实关于这个部分的详解,在过去的文章中都大致提过了,主体内容太长这边就只概要了。
2.其次讲一下融合前端:
从VINS-FUSION开始,大家越来越重视在VIO系统中多传感器间融合融态的重要性,VIO本身就是相机与IMU的融合。GNSS/RTK也是非常常见的融合系统(工程中部分情况下松耦合做先验或相对信标,也不排除做得很好的紧耦合如GVINS)。
那VIO前端呢? 其实前端未来的主流就是融合前端(但得建立在足够的开销控制能力上)。2016年的SVO以及后续的SVO2是典型的融合前端,半直接法+特征点法。紫川目前的设计是直接法+ORB特征点法,徐浩博士使用Super point+LK光流。这几个方法里SVO很令人佩服,一个是古早(虽然开源得比较晚),第二个是考虑得全面(包括开销),缺点就是开源中缺失了真实传感器优化部分,还有世界观相对稀疏。
Super point的问题在于相当重(VGA分辨率在Titan X卡上70帧),导致在端侧做的话点数少帧率低,还有在开源框架下调试和优化麻烦一些。在徐浩博士的分享和交流后,我总隐约有个感觉,未来的主流方法也许是直接法+Superpoint,不分主辅(回环以superpoint来做)。从科学和工程的逻辑来说,这是一种很好的组合。
大家通过细心的观察,也会发现,融合前端的组合往往都是互补的,ORB和Superpoint强于处理明显的特征点,ORB增加质心与描述子,SuperPoint虽重但非常鲁棒可适应不同的光度条件。而LK光流和直接法都更擅长解决图像梯度本身并形成更连续的物体轮廓。
VIOBOT目前如果仅仅作为一个里程计来使用,从三相性及世界观来说可以说相当完美,除了一些极端光度变化/或极低照度场景。作为里程计使用的话可以通过一系列方式给其进行绝对/相对信标的输入,如RTK/轮速计以及其他定位装置等。
3.主流深度相机说明:
主流深度相机有2类:
(1)主动投射积分类:i-TOF/结构光
(2)双目视差运算类:双目深度相机
两类都有一个优点:稠密
都有一个很大的缺点:稠密点云开销极重,稠密SLAM以及点云处理在端侧可用性很低,高度依赖PCL/PCA/ICP,开销沉重。降采样本身又会失去稠密本身的意义,比较适配于避障和尾段作业的修偏,不适合作为完整SLAM前端使用。
第一类技术含量较高,具体原理就不多说了资料很多,多了2个缺点:距离很短,室外受干扰很多,还需要ISP的强力支持(积分和滤波开销都不小)
第二类比较暴力,标准的视差运算(重复且简单,调整双目基线即可),可以用GPU/NPU强算,目前原厂也有不少ASIC上的支撑(目前如Movidus/海思DV500等),明年会更多。同时第二类除核心缺点外,还有一个缺点:孔洞效应。当然目前VIOBOT的点云也同样存在这个缺点,这些就是工程和科学结合到一定程度后难以避免的一些原理性问题了。
另外第二类目前有很少数优秀厂家结合了可见光部分的纹理特征进行实时同步,通过目标检测进行双光融合,这类效果部分解决了孔洞效应问题,但实现难度较大,同时仍然存在无法完整端侧SLAM的问题。
4.VIOBOT近期工程汇总:
(1)进一步增强通用性
(2)完善全局一致性模块与先验建图
未进行全局一致性收敛的运行/点云优化状态(全程约600米户外运行):
完整的SLAM系统,最终都需要此模块,基于回环地图,规整轨迹与所有半稠密点云,整体完成如下所示的半稠密综合点云状态效果:
在这种基础框架上接入底图(如Googlemap,无人机航拍图),或再进一步进行线性插值,完整的先验地图就进入了可用状态。加入路径规划与动态避障,便成为了完整的自感知定位建图系统
(3)半稠密点云的避障测试
工作4其实与2/3紧密相关,传统特征点法点云,作为机器语言难以直接使用的核心原因就在于有点无边,往往需要大量的补全工作-如MESH/LIMAP/CANNY等,但这类补全工作往往都开销甚高,需要离线运行。VIOBOT目前融合前端的最大优势就在于边廓清晰,从本质上相对稠密深度相机其实只是稀疏化了。
(4)点云滤波相关工作
这块工作即难且烦,以后真正实际做好了再详细分解。