ROS之旅(二) 在激光雷达仿真环境下使用古月居提供的cartographer算法SLAM,最终导出 .pgm 与 .yaml 地图文件全过程
该文章存在意义声明:古月居虽然提供了cartographer算法在仿真环境下SLAM的全过程,其cartographer算法存放于
文件中。但是!该功能包中并没有将
.pbstream文件转换成
.pgm文件和yaml文件的节点!!!(如果你的有,当我没说)
因此我又自己配置了一个cartographer的工作空间
,然后就是将google_ws功能包中有关配合仿真环境进行SLAM的文件转移到我创立的工作空间下,然后进行建图、导出地图、转换格式。
1.首先创建一个包catkin_my,该功能包可以实现一个搭载激光雷达的小车在仿真环境中采集周围信息。(依据古月居提供的仿真资料创建)
功能包内容如下:
(看过古月居九讲的应该能理解这个工作空间的组成了,在此不进行赘述,链接见文章底部)
接下来运行该工作空间下的文件。
没有安装过gazebo模型的需要先安装模型!!!:
(1)设置源
source ~/catkin_my/devel/setup.bash
(2)运行仿真环境
roslaunch mymbot_gazebo view_mbot_with_laser_gazebo.launch
(图中蓝色的为搭载激光雷达的小车)
2.新建一个工作空间名为cartographer,将cartographer_ws中src中的内容复制到cartographer中,接下来将google_ws中的相关文件转移到cartographer中。
(1)将google_ws/src/cartographer_ros/cartographer_ros/launch中的文件复制到 cartographer/src/cartographer_ros/cartographer_ros/launch路径下。
(2) 将google_ws/src/cartographer_ros/cartographer_ros/configuration_files路径下的 文件复制到cartographer/src/cartographer_ros/cartographer_ros/configuration_files 路径下。
(3)将cartographer/src/cartographer_ros/cartographer_ros/configuration_files路径下的
中的内容替换该路径下的
文件中的内容。
(4)将cartographer/src/cartographer/cartographer/sensor中的文件中的
CHECK_GT(data.time, std::prev(trajectory.end())->first);
改为
CHECK_GE(data.time, std::prev(trajectory.end())->first);
该操作的目的是使caetographer的各个数据的时间戳同步。
配置完后一定注意保存并编译!!!
编译指令:
catkin_make_isolated --install --use-ninja
3.启动cartographer功能包
(1)设置源
source ~/cartographer/devel_isolated/setup.bash
(2)运行
roslaunch cartographer_ros cartographer_demo_rplidar.launch
4.启动键盘控制节点
(1)设置源
source ~/catkin_my/devel/setup.bash
(2)运行
roslaunch mbot_teleop mbot_teleop.launch
在这个界面上使用 ijl, 四个键分别是前进、左轮加速、右轮加速、后退。
(3)操作小车实现SLAM
5.保存地图
(1)设置源
source ~/cartographer/devel_isolated/setup.bash
(2)停止cartographer接收数据
rosservice call /finish_trajectory 0
(3) 生成.pbstream文件的地图
rosservice call /write_state "filename: 'map.pbstream' "
生成的文件在home/用户名/.ros中
(4)格式转换
rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=/home/rws/savemap -pbstream_filename=/home/rws/.ros/map.pbstream -resolution=0.05
这一步一定要修改路径中的用户名,我的是rws
生成的 .yaml 与 .pgm文件就在home/rws目录下
展示!!!
上传的cartographer工作空间就是将古月居提供的google_ws工作空间中的有关仿真内容搬运到cartographer_ws之后的新建的工作空间
使用我上传的资源时一定要将工作空间中除src文件以外的编译文件删掉重新编译
没有安装过gazebo模型的需要先安装模型!!!:
资源链接: