前一段时间安装了ROS kinetic版本的google cartographer算法,完成了谷歌提供的博物馆的数据包bag的SLAM建图。这个过程应该说只是通过bag验证了ROS cartographer这个平台已经搭建完毕(可参看:Cartographer ROS编译安装及相关可执行文件理解)。然而要真正把它用起来,需要用自己手上的激光雷达来连接实现 cartographer建图。
关于实现雷达与cartographer的连接建图的例程,网上能找到的很多如rplidar,hokuyo UTM-30LX等等。我手边的雷达是图漾公司的2D激光雷达LM820,是固态激光雷达,而非机械激光雷达。最近一段时间就在摸索研究这款雷达与cartographer的连接建图。这两天终于有了阶段性成果,想把这个过程写下来,也算是这段时间的工作总结,也希望能给跟我一样正在学习catographer的朋友们一个参考。
一、LM820激光雷达的主要参数
- 测距范围:30cm ~ 5m
- FOV(水平):88°-92°
- 单次测量点数:960/480/240/120 可设
- 通讯:UART串口
二、根据LM820的SDK,编写ROS 节点程序
我是参考rplidar的node程序进行编写。node节点程序的主要功能就是获取激光雷达数据,然后通过/scan 这个topic进行发布。scan接收的传感器数据类型如下:
![3290d57f3ff9bad3455414729ff1cd05.png](https://img-blog.csdnimg.cn/img_convert/3290d57f3ff9bad3455414729ff1cd05.png)
我设计SDK的输出参数为单次测量点数、FOV、测量的深度值、时间戳,并分别对应输入到node的LaserScan.msg数据中。
程序编写过程中需要注意ROS中坐标系为右手坐标系。右手坐标系定义:
把右手放在原点的位置,使大姆指、食指和中指互成直角,把 大姆指 指向 Z轴 的正方向,食指指向X轴的正方向时,中指所指的方向就是 Y轴 的正方向相对于我们的身体而言(图一): X -> 朝前, 绕 X轴 旋转,称之为 横滚角,使用roll表示;
Y -> 朝左, 绕 Y轴 旋转,称之为 俯仰角,使用pitch表示; Z -> 朝上,绕 Z轴 旋转,称之为 航向角,使用yaw表示;
![532c5e12040e42a1fc15193f4daedc02.png](https://img-blog.csdnimg.cn/img_convert/532c5e12040e42a1fc15193f4daedc02.png)
LM820的