我的本科毕设需要使用到LOAM算法,最近因为疫情原因,可能没有小车来操作,故学习了如何在gazebo中进行实物仿真。目前实现了gazebo和LOAM之间的配合。
本来打算在网上找一些资源,用起来会快一点,发现全网没有详细介绍如何在gazebo中实现LOAM算法的,倒是有一些介绍在gazebo中实现ORB-SLAM算法的,比如这个博客
https://blog.csdn.net/baidu_36211769/article/details/103374441
所以我打算写一片gazebo+LOAM的博客,才进入这个领域不久,希望前辈们批评指正,指点迷津。
Ubuntu版本为18.04
ros版本为melodic
gazebo版本为9
一般来较新近的ros版本都会自带gazebo,如果没有的话,可以安装一下,参考这个博客
https://blog.csdn.net/weixin_41045354/article/details/84881498
前人栽树后人乘凉。总体的代码都是在已有基础上改动的。
LOAM部分的代码是使用的2014年发表在RSS上的论文《LOAM:Lidar Odometry and Mapping in Real-time》的开源代码。源码地址在
https://github.com/laboshinl/loam_velodyne
大家可以clone下来。
具体操作如下
1、建立工作空间并编译
打开终端,输入
$ mkdir ~/LOAM_ws
$ cd ~/LOAM_ws
$ mkdir src
$ cd ~/LOAM_ws/src/
$ git clone https://github.com/laboshinl/loam_velodyne.git
$ cd ~/LOAM_ws
$ catkin_make -DCMAKE_BUILD_TYPE=Release
$ source devel/setup.bash
在编译过程中如果遇到提示缺少库的话,大家按照自己的需要添加
2、测试
网站上给出的一些数据集地址都挂掉了,这里我找到一个数据集,大家可作为作为测试使用。
把这个包放在刚才建立的LOAM_ws目录下面,方便使用。
接着刚才的终端,运行LOAM算法,输入
$ roslaunch loam_velodyne loam_velodyne.launch
新建一个标签页或窗口,输入
$ rosbag play nsh_indoor_outdoor.bag
这个时候可以在自动打开的rivz窗口中看到LOAM的建图过程了,最后的结果如下
3、总结
大家如果想要弄懂其中的源码算法,可以参考大佬魏新slam的一些源码解析的博客。
如果这一部分测试没有问题,就可以继续往下看了。
这一部分是借鉴的clearpath公司开发的huskyA200的ROS和gazebo文件。其源代码链接
https://github.com/husky/husky
我进行的主要改动包括:原来需要joystick操作,现在改成了键盘控制;引入Velodyne包,将原有的sick的2D激光雷达改为了Velodyne的3D激光雷达;新增了一个museum.world文件,并使用此文件作为地图;打开gazebo自动打开键盘控制。
由于改动较多,所以这里直接给出改完之后的代码,链接如下
https://github.com/18801133196/husky
大家可一直接clone下来使用
具体操作如下
1、环境准备
因为在其中用到的Velodyne VLP-16传感器并不是ros自带的,所以需要自己下载
打开终端,输入
sudo apt-get install ros-melodic-velodyne
如果ros版本不是melodic,请换成相应名称
2、建立工作空间并编译
打开终端,输入
$ mkdir ~/husky_ws
$ cd ~/husky_ws
$ mkdir src
$ cd ~/husky_ws/src/
$ git clone https://github.com/18801133196/husky.git
$ sudo cp -r ~/husky_ws/src/husky/ ~/husky_ws/src
$ sudo rm -rf husky
$ catkin_make
$ source devel/setup.bash
在编译过程中如果遇到提示缺少库的话,大家按照自己的需要添加
3、测试
接这上面的终端,输入
$ roslaunch husky_gazebo husky_playpen.launch
可能会出现一些标红报错的现象,但并不影响使用,最后终端界面为
可以发现自动打开了gazebo,界面为
此时鼠标点击终端,即可对小车进行控制,具体控制按钮可以在终端中已经说明
如果想要查看其中的点云图像,可以新打开一个终端窗口,输入
$ rviz
打开rviz之后点击界面左下角的Add按钮,选择By topic,找到消息velodyne_points
点OK,将DIsplay工具栏的Gloabl Options中Fixed Frame选为base_link,即可看到点云
4、一些说明
在完成LOAM和husky gazebo的分别调试之后,便可以进行联合运行。
具体方法和分别调试是类似的,具体如下
打开终端,输入
$ cd ~/LOAM_ws
$ source devel/setup.bash
$ roslaunch loam_velodyne loam_velodyne.launch
$ cd ~/husky_ws
$ source devel/setup.bash
$ roslaunch husky_gazebo husky_playpen.launch
这样就可以通过控制小车来走完这个地图,最后得到的地图如下
虽然最后成功将gazebo和LOAM算法结合在了一起,也得到了地图,但可以看到地图并不是很准确。
经过多次测试,发现应该是LOAM算法的问题,可以尝试一下新的算法。