本文用于浅浅记录下自己的操作经历
一、下载安装octomap_server
#首先要安装octomap库(这里我的版本是18.04)
sudo apt-get install ros-melodic-octomap-ros
sudo apt-get install ros-melodic-octomap-server
#安装octomap在rviz中的插件
sudo apt-get install ros-melodic-octomap-rviz-plugins
装完插件后再rviz中会出现以上选项
二、创建启动octomap_server的launch文件
#进入octomap_server的launch文件夹
cd /opt/ros/melodic/share/octomap_server/launch
(这里具体为啥要这样不太清楚,后面研究一下能否在lego-loam文件夹下建立一个launch用于启动)
#创建一个launch文件
sudo touch octomap_server.launch
#给launch文件加可写权限(可有可无好像)
sudo chmod a+w octomap_server.launch
三、编写启动octomap_server的launch文件
<launch>
<node pkg="octomap_server" type="octomap_server_node" name="octomap_server">
<!--resolution in meters per pixel-->
<param name="resulution" value="0.1" />
<!--name of the fixed frame,needs to be "/map" for SLAM-->
<param name="frame_id" type="string" value="/map" />
<!--max range/depth resolution of the kinect meters-->
<param name="sensor_model/max_range" value="50.0" />
<param name="latch" value="true" />
<!--max/min height for occupancy map, should be in meters-->
<param name="pointcloud_max_z" value="1.6" />
<param name="pointcloud_min_z" value="0.8" />
<param name="graound_filter_angle" value="3.14" />
<!--topic from where pointcloud2 messages are subscribed-->
<remap from="/cloud_in" to="/registered_cloud" />
</node>
</launch>
这里因为运行的是lego-loam,所以把"frame_id"的值改成"/map",最后一行“remap”中的目的话题改成“/registered_cloud”。
四、运行启动
1、启动octomap_server的launch文件
cd /opt/ros/melodic/share/octomap_server/launch
roslaunch octomap_server.launch
2、启动lego-loam算法的launch文件
3、运行数据集
4、最终在rviz中添加Map,OccupancyGrid,OccupancyMap这三个选项,并设置其话题为"/projected_map"、“octomap_full"与"octomap_binary”
这里出现了一个问题:就是栅格地图只有前部分有,后部分就没有了。应该是要调节一些参数,后面自己尝试解决一下。
五、地图保存
可以自己创建一个用于存放地图的文件夹,我建立了一个map文件夹,在该文件夹下打开终端输入map_server地图保存命令:
rosrun map_server map_saver map:=/projected_map
即可生成pgm文件
但是以上生成的地图还存在着很多需要改进的地方,大家可以去探索一下,一些问题和优化方案可以参考:利用Octomap建立二维导航地图时出现的问题
注:如果大家想运行aloam算法,可以将"/map"改成"/camera_init","/registered_cloud"改成"/laser_cloud_map"
<launch>
<node pkg="octomap_server" type="octomap_server_node" name="octomap_server">
<!--resolution in meters per pixel-->
<param name="resulution" value="0.1" />
<!--name of the fixed frame,needs to be "/map" for SLAM-->
<param name="frame_id" type="string" value="/camera_init" />
<!--max range/depth resolution of the kinect meters-->
<param name="sensor_model/max_range" value="50.0" />
<param name="latch" value="true" />
<!--max/min height for occupancy map, should be in meters-->
<param name="pointcloud_max_z" value="1.6" />
<param name="pointcloud_min_z" value="0.8" />
<param name="graound_filter_angle" value="3.14" />
<!--topic from where pointcloud2 messages are subscribed-->
<remap from="/cloud_in" to="/laser_cloud_map" />
</node>
</launch>
结果如下:
总结
本文另外参考的文章如下,给与感谢:
A-LOAM/LOAM/Lego-LOAM/SC_Lego_LOAM实时构建3d点云地图与2d栅格地图(octomap)