赞
踩
三维点云地图转二维栅格地图的实现需要1.地图转换工具——octomap;2.栅格地图保存工具——map_server;3.点云发布和转换工具启动launch文件。
安装octomap
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,点击Add时可以看到增加了octomap-rviz-plugins相关的模块。
sudo apt-get install ros-melodic-map-server
或者直接
sudo apt-get install ros-melodic-navigation
1.运行三维地图发布程序
如果是存为pcd文件的点云地图,需要自己写点云文件读取和发布的代码,通过ROS的publish以话题形式发布出来,所发布的点云地图topic在下一步中被使用。最好一定频率发布,方便octomap获取数据。
一般的SLAM系统具备地图发布功能,也可以获取到相应的地图topic,供octomap_server使用。
2.启动octomap_server
和一般的ROS工具包启动方式一样,rosrun或者roslaunch。由于地图转换涉及到一些参数的调整,最好配置成launch文件来启动。
进入octomap_server的launch文件夹(此步可选,也可以放在其他地方)
cd /opt/ros/melodic/share/octomap_server/launch
创建launch文件
sudo touch octomap_server.launch
如果无权限,则给launch文件加可写权限(可选)
sudo chmod a+w octomap_server.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>
3.RViz显示结果
启动RViz后,点击“add”,分别添加"Map"、“OccupancyGrid"与"OccupancyMap”,并把其话题名依次改为"/projected_map"、“octomap_full"与"octomap_binary”,结合点云发布程序就可以看了。
4.保存二维地图
rosrun map_server map_saver map:=/projected_map -f [PATH_TO_FILE]/mymap
/projected_map是octomap_server默认发布的名字;
[PATH_TO_FILE]/mymap是转换后的栅格地图保存的路径。
over!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。