Nav2之视觉建图

算法层面建议:

3D Lidar + IMU方式:

Cartographer3D 

Cartographer 2D在效果上更胜于 Cartographer3D,室内、室外都可以用,但建议室内应用

单目 + 3D Lidar + IMU + GPS方式:

 LVI-SAM

   LVI-SAM可以认为是LIO-SAM和VINS-MONO的合体,在此基础上的修改不大。出色的Demo级算法,是否适合商用有待验证

视觉(RGB-D、双目)+ 3D Lidar + IMU + GPS方式

RTAB-Map

  稳定性更好,丰富的传感器组合、长期和大规模场景应用,适合商用场景

效果对比:

Cartographer3D < LVI-SAM < RTAB-Map

RTAB-MAP的组合使用教程:

Kinect (RGB-D相机)+ 里程计 + 2D 激光


室内

    Kinect + 里程计 + Kinect 的假 2D 激光

    Kinect + 2D 激光

    仅二维激光

    2D 激光 + 车轮里程计

         该方式将失去检测全局闭环或使用视觉进行全局定位的能力

功能受限

Kinect(RGB-D相机) + 里程计


室内

    Kinect

    双目摄像头A

    双目摄像头B


室外/室内(光线充足)

实际使用经验汇总:

在凹凸不平的地面上建图:

    1.单线激光雷达(+imu)的SLAM方法

    2.多线的激光雷达支持,参照Lego-LOAM(可变地形下的轻量级和地面优化的雷达里程计与建图)的原理,并不是所以支持多线雷达的SLAM算法都支持,需要针对性选择


室外场景建图:

    1.建议多线激光雷达+Imu+里程计

    2.建议单目/双目视觉+imu+里程计

    3.RGB-D相机不可行,其主动发射的红外光,极易受强光干扰,畸变严重

    4.DOF的单线激光雷达也不建议



开源3D激光SLAM总结大全 

(Cartographer3D,LOAM,Lego-LOAM,LIO-SAM,LVI-SAM,Livox-LOAM的原理解析及区别)

开源自主导航小车MickX4

(Cartographer2D、Cartographer3D、 LeGO-LOAM 对比系列)

四种视觉SLAM的对比分析


一、ORB_SLAM2

室内跑两圈,采集结果如下:


说明:

1、可获得point、keyframe、graph数据

2、相比于kinect相机,跑小觅相机中速运动时不易丢包;

3、重定位算法比较好,但仍有较大偏差;

4、光线强度高的地方很容易丢包;测量地点为一个闭环,测试结果却没形成闭环;图像为稀疏点云,数据大了会卡。

二、VINS MONO;mono+imu;回环

室内跑两圈,采集结果如下


说明:

1、加回环检测(红三角)能识别曾经到过的路径并修正,但延迟比较高;未加回环(绿三角)跑偏,相比于vins fusion的双目不加回环,效果较差;

2、IMU漂移比较严重



三、VINS FUSION;stereo+imu;无回环

室内跑两圈,采集结果如下:


四、RTAB

三楼阳台测试,生成点云图示意:


说明:

1、SLAM集成完整;可生成稠密地图,用于导航、避障

2、慢速下不易丢包【速度和ORB差不多】;丢包后能进行快速重定位;对光线不敏感,能适应多复杂场景

3、两种安装格式:二进制——直接应用;源码——可二次开发

4、用kinect测试,效果不错,




综上:

可参考方案有VINS FUSION和RTAB

1)若选择VINS FUSION双目+imu,加入回环算法,效果会好很多;但后续仍需优化、稠密建图等处理

2)若选择RTAB-Map,添加小觅相机的依赖,提高识别距离,效果应该不错;选用源码安装方式,便于后期二次开发。


商业化用途的话,个人倾向于RTAB-Map




RTAB_Map ROS

Framework

TAB-Map ROS节点的框图

所需输入是:

TF,用于定义传感器相对于机器人底座的位置; 来自任何来源的里程计(可以是3DoF或6DoF); 

其中一种相机输入(一个或多个RGB-D图像,或双目立体图像),且带有相应的校准消息。

可选输入:

2D激光的雷达扫描,或3D激光的点云。然后,来自这些输入的所有消息被同步并传递给graph-SLAM算法。

输出的是:

1.Map Data,包含最新添加的节点(带有压缩传感器数据)和Graph; Map Graph,

2.没有任何数据的纯图;

3.TF,矫正过的里程计; 

4.可选的OctoMap(3D占用栅格地图); 

5.可选的稠密点云地图; 

6.可选的2D占用栅格地图。

视觉里程计:

视觉里程计

激光里程计

激光里程计

key Topic List:

ICP Odom

Wheel Odom

Vision Odom

Scan

Depth Topic

RGBD Topic

Stereo Topic

GPS

AprilTag Topic


other:

obstacles_detection(Stereo)


find_object_2d


rtabmap+find_object_2d


Navigation:

(RTABMap+MoveBase)


dao



RTAB视觉里程计------丢失的里程计

当背景变成红色时,表示无法计算里程,即里程丢失,无法继续建图。

这些事件会导致红色屏幕:

1. 无特征的环境:白墙、均匀纹理、黑暗区域等。没有足够的特征,就无法计算里程计。对于具有足够视觉特征的环境,里程计质量将超过 100。

2. “空旷空间”环境:对于像 Kinect 这样的传感器,良好的特征位于距离传感器大约 0.4 到 4 米的范围内。例如,如果您将传感器指向一个没有 4 米以下物体的清晰区域,则里程计很可能会失去跟踪。

3. 对于帧速率来说相机运动太快:如果相机移动得太快,连续帧之间匹配的特征就会减少。根据相机的不同,RGB 图像也可能会模糊,这会减少帧之间良好视觉匹配的数量。

4.深度和 RGB 图像之间的错位:如果视觉特征的深度错误,这会对里程计产生负面影响。确保深度图像正确注册到 RGB 图像,就像这里一样。


解决方案:

要从丢失的里程计中恢复,请更换无法计算里程计的相机:可以再次跟踪相机姿势(红色背景消失)并且映射应该继续。如果您总是在环境中的同一个地方丢失里程计,请尝试向场景中添加纹理/对象以添加更多要跟踪的视觉特征。如果你有一个有纹理的地面,你可以稍微倾斜相机以便能够从地面跟踪视觉特征。


要从丢失的里程计中恢复,您还可以使用“检测 -> 重置里程计”(在 ROS 上:)重置里程计$rosservice call /reset_odom。重置前不要忘记将相机更换为纹理较多的场景,否则里程计将仍然无法启动(RED 背景将留在这里)。重置里程计将使 RTAB-Map 创建一个新地图,因此地图应该消失并显示一个新地图。



RTAB Map室内外方案:

双目摄像头+激光雷达+轮式里程计

由于RTABmap的官方推荐方案中没有双目+激光雷达的方案,所以Demo中都不是针对双目相机实现的,以强制我们在 rtabmap 节点之前将立体主题一起同步到RGBDImage主题中。只有在同时订阅扫描主题时才需要这个额外的步骤,因为在与激光雷达进行近似同步之前,立体图像应该完全同步。

在您的启动文件中,添加以下内容:

                                 

然后对于 rtabmap 和 rtabmapviz 节点,添加:

       

这将使他们订阅  /rtabmap/rgbd_image 和 /scan。

编辑:请注意,对于 RGB-D 主题,建议改为使用rgbd_sync节点执行相同的操作(在 rtabmap 之前同步 rgb 和深度主题)。

你可能感兴趣的:(Nav2之视觉建图)