• 阅读数:88发布于2021-03-30 15:51:55

    只看该作者
    VSLAM技术实现机器人在不同场景下的精准导航、避障 复制本文链接

    一、LAM 技术原理和不同的算法实现

    下面为大家介绍一下vSLAM的技术原理和一些开源的VSLAM算法的实现。vSLAM的技术框架主要包含了传感器的预处理、前端、后端、回环检测、建图等。
    图片alt

    -传感器
    传感器部分我们经常用到的就是单目、双目和RGBD。由于单目相机尺度的不确定性,所以初始化的时间一般比较长,而且估计的位姿会有累积的误差;而双目相机本身是有尺度信息的,所以初始化很快,但是对标定有一定的要求;RGBD相机主要受室外阳光的影响比较大,包括反光物体的表面对RGBD相机的干扰也是比较大的,如果再加入IMU,就需要考虑IMU和图像之间同步的问题。

    -前端
    前端又称为视觉里程计 VO,主要是做一些相邻帧的图像估算,还有帧间相机的运动,其实是解决了定位的问题,里边又涉及到特征提取和位姿估计的算法。

    这里提到的视觉里程计只能做相邻帧的运动,相当于做一个局部的估计,运行时间长了会有累积误差,因此需要后端的优化和回环检测去做闭环处理。

    -后端
    后端优化主要有两类算法:基于滤波理论的优化和非线性优化。近些年来基于非线性优化的vSLAM越来越多,而且逐渐成为主流的方法,但是实际上基于滤波理论的发展时间比较长,而且之前也有很好的应用案例,所以也是非常有生命力的。

    -回环检测
    回环检测和我们人类用眼睛来判断两个地方是否相同是一样的道理,检测到了相同的点就会做一次回环修正。但是这里有一个问题需要注意,由于场景里边可能出现高度相似的情况导致错误的闭环,比如贴着相同重复纹理的墙纸,这种情况我们需要增加一些其他的约束来避免它的错误闭环。

    -建图
    图片alt

    vSLAM建立的地图有几种

    (1)比如特征地图会把几何特征点和一些关键帧存储起来,这些可以做定位导航用,也可以保存成地图载入做导航。

    (2)拓扑地图也叫统计地图,它是一种保持点与线相对位置关系正确但是不关心面积距离和方向是否正确的一种抽象地图。

    (3)栅格地图就是加入了尺寸信息的一种二维地图,比如大家可以看到上面图片背景的小格子,每一个格子就代表1个固定单位的尺寸信息,整个地图都是按照尺寸去描述的。二维的地图实际上比较适用于在地面运动且没有太多高度的机器人。

    (4)三维地图可以把三维的环境和场景进行还原,比如Octomap或者是点云的地图,有了这个地图,我们就可以做空间的三维重建或者路径规划,比如无人机的路径规划和导航。
    图片alt

    下面为大家快速介绍几种开源的SLAM案例:

    -ORB_SLAM

    ORB_SLAM的核心是使用ORB作为vSLAM的核心特征,是一个完整的SLAM系统,包含了视觉里程计、跟踪、闭环检测,是一种完全基于稀疏特征点的单目SLAM系统。同时也有单目、双目和RGBD相机的接口。

    ORB特征实际上是将FAST特征的检测方法和BRIEF特征描述子的结合起来,并在他们原来的基础上做了改进和优化,在效果和速度上都有很大的提升。上面的地址是我们的双目产品接入了ORB_SLAM后的一个历程,ORB_SLAM并没有加入IMU的计算。

    ORB的作者发了一篇基于惯导的单目vSLAM的文章,可以解决纯旋转的问题,国内的大神王京把它进行了简单的实现,但是这个仅仅是验证性质的,里边还存在一些Bug,下图里有代码地址,大家可以去学习下。
    图片alt

    -VINS

    VINS-Mono和VINS-Mobile是香港科技大学的沈劭劼老师团队开源的单目视觉惯导SLAM方案,也是非常经典而且我个人非常推荐的一个单目VIO的项目。对整体算力的要求不高,精度也不错,尤其是VINS-Mobile可以在iOS系统运行。

    VINS-Fusion是香港科技大学VINS-Mono的一个扩展,它支持多传感器的整合,包括单目+IMU、双目+IMU甚至纯双目,同时也提供了增加GPS的版本,也非常有幸我们和秦通大神一起探讨传感器在VINS上面的优化,在这方面提供了优化方案和支持,这个也帮助VINS在前期发布的时候有一个很好的传感器。

    -OKVIS
    OKVIS是苏黎世联邦理工学院发布的一个双目VIO项目,这也是一个非常经典的双目VIO,但是它只输出六自由度的位姿,并没有回环检测和地图,因此严格意义上说并不是一个完整的SLAM,虽然它精度不错,但是如果长时间静止会出现位姿飘走的情况,这也是该项目里的一个问题。

    OKVIS的代码结构框架是非常清晰的,但只限于定位功能这一部分,当然它也包含了紧耦合和多传感器融合,代码也是非常推荐大家去学习。
    图片alt

    -maplab
    maplab是苏黎世理工大学继OKVIS之后推出的另一个vSLAM框架,它包含了两部分,一部分是ROVIO,另一部分是SLAM离线处理的console.

    -MSCKF
    MSCKF是一个经典的基于滤波理论优化的vSLAM,它的优点是对算力要求不高,而且精度也不错。

    二 、VSLAM 在不同场景下的应用挑战与解决办法

    下面主要是针对几种常见的VIO的性能做一些对比介绍,以及传感器选型时的一些注意事项。

    测试对比用到的机型分别是Intel NUC、Odroid XU4、Up Board。这里NUC和UpBoard都是X86架构的,XU4使用的是一个ARM架构的主板。
    图片alt

    在这幅图里横坐标代表了位姿的误差,这个误差越小越好,纵坐标分别是CPU的占用率、内存的占用率和处理的时间。从这个结果来看VINS、OKVIS和ROVIO的表现效果还是不错的,随着一些新的算法推出,也会有一些新的评测,大家可以关注一下。

    -图像传感器
    对于vSLAM全局快门要比卷帘快门好,因为全局快门一次是曝光一整幅图像,而卷帘快门是按行去做曝光。这里可能有个误区,有人会觉得全局快门不会模糊,其实并不是这样的,是否模糊跟曝光时间的长短有关系,如果是在比较暗的环境,并且自动曝光时间拉长的情况下,即使移动也是会模糊的,这个和图像传感器的感光面积、镜头的光圈等因素有关,全局快门实际上主要解决的是果冻效应问题。

    -镜头
    对于镜头来讲,视场角对于SLAM系统来说越大越好,因为视野里信息越多,能抓的特征点就越多,但是在选择大广角的镜头时,画面的畸变不能太怪异,需要匹配标定和矫正的模型才可以使用。

    -双目传感器
    另外,双目传感器一定要注意双目之间的同步,左目和右目必须在同一时间内曝光,曝光的同时也要有相同的AE(自动白平衡)和AWE(自动曝光)。

    -图像+IMU
    图像和IMU之间的同步也有严格要求,最好的情况是IMU和图像能够完全的对齐,就像第一种情况,这种实际上是很难的,但是我们的传感器基本上已经可以做到了,这也是我们在市面上比一些竞品做得好的一个非常重要的原因;

    第二种情况是Sensor和IMU的时钟同步,由于二者时钟是同步的,所以它的offset相对来说是固定的,这种也是可以用的,因为在初始化的时候,我们能够把offset估计出来然后固定化;但是第三种情况是不同步的,这对于vSLAM来说是致命问题,是不能使用的。
    图片alt
    在产品化的过程中,实际上我们还要对算法进行加速,包括CPU指令集的加速、GPU里CUDA或者Open CL的加速以及FPGA、DSP、ASIC等芯片的加速。这里有一个误区,很多公司希望通过开源项目稍加修改来实现产品化,但这是非常困难的。因为算法需要对场景进行优化,对不同传感器进行融合,同时也要对于特定的平台去做加速和优化,降低一些主机的配置降低成本,才有可能把产品做好。

    我们在Jetson TX 2上面也跑过VINS相关的算法,而且值得一提的是,VINS有一个专门的项目是VINS-Fusion对于GPU的优化项目,大家可以看一下,这也使得其在英伟达的GPU产品上能有更好的表现。

    vSLAM 在不同场景下的应用

    vSLAM发展到现在,在很多领域都有了很成熟的应用。下边我们看一下vSLAM在哪些产品中都得到了应用?
    图片alt

    对于现在市面上不同的定位导航和避障方案来讲,双目+IMU的产品逐渐成为大家选型的主流方向,因为它的精度和布置成本相对来说都比较好,同时也能提供视觉传感器里的识别等部分。

    像AR、VR之前基本上是使用外部设备进行定位的,或者在环境中部署一些二维码,但是对于环境和部署的要求比较高。

    现在一些新的VR、AR定位产品都在使用VIO技术,让头盔能够实现自主定位,主要关注的是图像的高帧率,定位的帧率要高,传感器不能太重,而且功耗也不能太高。定位的高帧率,和头盔的图像刷新率有关,因为它要有很好的响应速度,才不会让人感到眩晕。

    -无人机避障
    针对于无人机的避障现在也越来越多的方案用到了双目,因为双目能够很好的去用作室外的一些避障和导航,并且分辨率越高,对于物体的检测效果会越好。

    -无人驾驶
    在无人驾驶的应用里大部分都是在借助于多传感器融合的方案,里面包含了高精度的GPS、毫米波雷达、相机、激光雷达、惯导等传感器。对于里面的视觉部分,我们比较关心图像的动态范围,可以让相机在低光或者背光的环境下(比如隧道)能有很好的表现。同时也希望相机能够用到这种车规级的传感器,因为在夏天阳光直射的情况下,车内的温度会非常高。

    下图是VINS融合GPS做的数据集的定位导航,可以看到双目+GPS也可以达到很好的效果。
    图片alt

    三、VSLAM 在机器人实时定位导航避障中的应用实践

    安防机器人我们用到了扫地机的一种底盘,然后使用我们的双目相机做定位、导航和避障,最上面有一个2D的激光雷达去做建图,同时还有一个三摄像头的全景相机做全景图像的采集,下面我们说一下不同传感器在这套系统里边起到的作用。
    图片alt

    -超声波传感器
    超声波传感器实际上是一个精度不高的传感器,而且易受外界环境的干扰,在这里的主要是解决视觉和激光以及一些传感器对于玻璃等透明物体识别无效的问题,超声波可以很好的探测到玻璃。

    -双目传感器
    双目传感器主要用来提供位姿信息,包括避障的点云和深度,同时也可以做回环检测。主要起到定位、导航和避障的作用。

    -IMU传感器
    IMU传感器:我们是和视觉做了一些融合,也放到了vSLAM VIO的相关算法里,我们用到的IMU实际上只是这种消费级的IMU,精度并不是很高,但是达到了非常好的效果。
    图片alt

    -激光雷达
    现在的产品里大多数用的都是单线激光雷达,因为多线的激光雷达价格太高,激光雷达在这种建图的精度上和一些特殊场景上有很好的表现。至于这套系统要做多少传感器的冗余和配合,需要结合应用场景和产品的定位来决定,在一些场景里边可以完全不用激光雷达也能得到很好的效果。

    -底盘里程针
    另外,要注意的是底盘里程计,相对来说,底盘轮子的转动是比较精确的,但是打滑或者地面有坑坑洼洼的情况除外,这种情况需要一个多传感器融合的方案。

    -主机
    对于主机现在比较常见的是GPU或X86的主机,我们用到的基本是NVIDIA的嵌入式平台,通过ARM+GPU的优化方式,把我们的算法放进去。同时对于低成本的要求,我们也会去别的平台做一些移植和优化。

    ————————————————
    版权声明:本文为CSDN博主「Techblog of HaoWANG」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/hhaowang/article/details/103831687
    编辑整理:追光者

    回复 (0)

    举报
举报

请选择举报理由

  • 垃圾广告
  • 违规内容
  • 恶意灌水
  • 重复发帖
提示

奥比中光 · 3D视觉开发者社区...

站长统计