最近使用VLP-16跑了SC-LeGO-LOAM,考虑到后续导航过程中需要使用二维栅格地图,所以三维点云转换为二维栅格地图属实工程需要。
一、准备工作
1.1 Octomap安装
- sudo apt-get install ros-melodic-octomap-ros
- sudo apt-get install ros-melodic-octomap-msgs
- sudo apt-get install ros-melodic-octomap-server
- sudo apt-get install ros-melodic-octomap-rviz-plugins
1.2 map_server安装
sudo apt-get install ros-melodic-map-server
二、制作launch文件
2.1 在默认目录下,创建launch文件
cd /opt/ros/melodic/share/octomap_server/launch
手动进入该目录也可以。
然后:
sudo gedit octomap_server.launch
2.2 编写launch文件
在新建的launch文件中填写以下内容:
<launch>
<!--启动的节点-->
<node pkg="octomap_server" type="octomap_server_node" name="octomap_server">
<!--栅格分辨率-->
<param name="resolution" value="0.1" />
<!--世界坐标系话题,一般为map-->
<param name="frame_id" type="string" value="/map" />
<param name="sensor_model/max_range" value="1000.0" />
<param name="latch" value="true" />
<!--截取的三维点云范围-->
<param name="pointcloud_max_z" value="0.8" />
<param name="pointcloud_min_z" value="-0.5" />
<param name="graound_filter_angle" value="3.14" />
<!--订阅的点云消息名称 PointClout2,即上一步发布出来的点云topic-->
<!-- cloud_in是octomap默认的输入话题,做一下映射-->
<remap from="cloud_in" to="your_map_topic" />
</node>
</launch>
注:“your_map_topic”这里笔者选择填入“/registered_cloud”
然后保存,关闭文件。
三、运行
3.1 启动launch文件
打开终端,进入.launch文件所在目录,启动launch文件
- cd /opt/ros/melodic/share/octomap_server/launch
- roslaunch octomap_server.launch
3.2 开始三维建图
运行建图算法,在线或者离线播放数据包,这里直接省略
3.3 添加话题
开始建图后,在RVIZ中分别添加"Map"、“OccupancyGrid"和"OccupancyMap”,并把话题名依次改为"/projected_map"、“octomap_full"与"octomap_binary”。
3.4 保存二维栅格地图
建图结束后,保存地图。
rosrun map_server map_saver map:=/projected_map -f [PATH_TO_FILE]/mymap
四、调参
可以参考下面链接:
https://blog.csdn.net/aidimoli123/article/details/121922553https://blog.csdn.net/aidimoli123/article/details/121922553补充:生成的二维栅格地图yaml文件,如果map坐标为[1.0,2.0,nan],需要把nan值改为0.0,小数点后多余的0可以去掉,例如3.14000000,直接写成3.14即可,以上操作是为防止文件读取时报错。