基于ROS的SLAM开源库学习笔记
一直听说SLAM, SLAM。 但是实际上,除了SLAM是持续定位和生成地图的意思以外, 了解的程度并不是深。 再深一点,也就是能想到,SLAM需要的知识面很多,比如滤波,视觉定位,激光雷达定位,生成地图。
最近对SLAM有了进一步的想法。 就是先了解别人的做的SLAM package & Library
首先, 只要说是ros的定位的话, gmapping的库肯定是会出来的。
gmapping貌似是最基本的SLAM库(不确定)。暂时还没有跑demo。
为了更快的学习ros内容, 我们购买了turtlebot3. 这个移动机器人是由ros公司开发的。他们和其他公司一起合作开发的,所以,它的软件硬件都是互相匹配的,只要把他们连接到了电脑上,然后在电脑上输入相应的命令的话就会执行相关的操作。
拿到手的时候的样子
各个部件,需要手动组装
组装完成之后的样子
这个机器人的说明官网上都有,但是在这里简单的介绍一下,他有几个传感器。
首先,它有一个由电机驱动的,也就是上面那个部分的东西就是激光雷达。它其实跟其他的激光雷达没什么区别,就是精度低一些。
乌龟机器人身上的激光雷达
还有一个主要的常感激,就是摄像机。除了这些以外,还有最基本的硬件,比如电池,比如其他的控制器。这里面想再说一句有一种单片机。他的名字是openCR。它是一种开源的,和乌龟机器人有互相合作的控制单片机。因为官网上对这个乌龟机器人有详细的介绍。这里面就不一一的进行介绍了。大家可以自行参考官网。
之后研究室的同事又根据ros官网的介绍,简单的用这个机器人做了看起来还行,但是很不精准的地图。他的结果如下图。
turtlebot3 slam demo
大概可以看出demo确实是可以做一些定位加地图生成,但是也可以看出它的精度不是很高。
所以,他又用的是谷歌的Cartographer 2D SLAM包。 据说是用了gmapping的包和格式。做出来之后的感觉就是这样。同时也换了硬件。硬件是笔记本电脑和velodyne的16线雷达(请忽略下面的px2,现在买来都不会用。如果有人会用,请教教我!)如图所示。
他的结果如下。
激光雷达在ROS的Rviz上的样子
在收集数据和定位同时生成地图。
最终由激光雷达生成的地图
看到最后生成的地图。然后我们就开始讨论,为什么是二维的地图?而不是3D的呢?而且我以为会生成那种能在电影上看到的那种非常炫的,可以直接看到当时环境的地图。
然后就找找。 首先,发现生成电影中酷炫的地图的是一种叫RTAB-map的 ros包。这个的原理其实和我们手机中的全景拍照差不多。手机中是左右全景。那么这边就是上下左右所有角度素有照片都合成的全景。且,识别到是同样的/重复的内容的时候, 我们需要做的覆盖,而不是二维展开。然后就形成了全景3维地图。 比如下面这种。当然,这个东西的支持包rtab-map暂时是需要RGB-D摄像机,也就是普通摄像机+红外摄影机组合。这个传感器可以直接得出图像的RGB值,还会利用红外线返回的特定矩阵,用特定的投影公式得到相应的深度信息。当然,如果单独用lidar和cmos摄像机来融合,那么是要符合rtab-map 包的输入格式就可以。
youtube 上的rtab-map研究
图片来自:
https://www.youtube.com/watch?v=FvhxdUhsNUkwww.youtube.com
今天先写到这里。
最近在做基于点云的识别。感觉还蛮有趣的。
之后 会更新相应的文章~
敬请期待