> 文档中心 > 在激光雷达仿真环境下使用古月居提供的cartographer算法SLAM,最终导出 .pgm 与 .yaml 地图文件全过程

在激光雷达仿真环境下使用古月居提供的cartographer算法SLAM,最终导出 .pgm 与 .yaml 地图文件全过程





该文章存在意义声明:古月居虽然提供了cartographer算法在仿真环境下SLAM的全过程,其cartographer算法存放于文件中。但是!该功能包中并没有将.pbstream文件转换成.pgm文件和yaml文件的节点!!!(如果你的有,当我没说)

因此我又自己配置了一个cartographer的工作空间,然后就是将google_ws功能包中有关配合仿真环境进行SLAM的文件转移到我创立的工作空间下,然后进行建图、导出地图、转换格式。




1.首先创建一个包catkin_my,该功能包可以实现一个搭载激光雷达的小车在仿真环境中采集周围信息。(依据古月居提供的仿真资料创建)

功能包内容如下:

(看过古月居九讲的应该能理解这个工作空间的组成了,在此不进行赘述)

接下来运行该工作空间下的文件。

(1)设置源

source ~/catkin_my/devel/setup.bash 

(2)运行仿真环境

roslaunch mymbot_gazebo view_mbot_with_laser_gazebo.launch

 (图中蓝色的为搭载激光雷达的小车)

2.将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的各个数据的时间戳同步。

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目录下




展示!!!

 

 如果需要本文用到的功能包请私聊我。