创建地图是一件比较复杂的工作,ROS利用map_server地图服务器,借助激光雷达和机器人的里程信息来完成这项工作。本篇我们还是利用柳树车库作为默认的地图环境。
切换到catkin_ws/src目录下,如下:
catkin_create_pkg mbot_sim_gazebo_mapping urdf xacro
切换到catkin_ws目录下,编译该功能包,如下:
catkin_make mbot_sim_gazebo_mapping
在该功能包下创建include、src、launch、urdf文件夹,在urdf文件下创建urdf文件夹和xacro文件夹,复制meshes文件夹到该功能包下。
在启动文件中配置rviz和gmaping包,robot_gazebo_mapping.launch文件内容如下:
在运行launch文件之前,需要先完成与建图定位导航相关的功能包的安装,逐步执行如下代码进行安装:
sudo apt-get install ros-melodic-slam-gmapping
sudo apt-get install ros-melodic-gmapping
sudo apt-get install ros-melodic-navigation
安装完成,执行如下代码,启动模型:
roslaunch mbot_sim_gazebo_mapping robot_gazebo_mapping.launch
在rviz里面,添加RobotModel,添加LaserScan,添加Map。
然后将LaserScan的Topic设置为/scan,将Map的Topic设置为/map,将Global Options——Fixed Frame设置为base_footprint
执行如下代码,实现模型的键盘控制:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
通过键盘控制机器人的移动,完成建图过程,移动过程中可以观察到rviz中地图的变化,在这里我只移动了一小块区域,效果如下:
在mbot_sim_gazebo_mapping功能包下,新建一个map文件夹,切换到该文件夹下,执行如下命令,完成地图保存:
rosrun map_server map_saver -f myMapFile
该命令会创建两个文件,myMapFile.pgm文件和myMapFile.yaml文件。myMapFile.pgm文件是以.pgm为格式的地图(可输出灰色地图格式)。myMapFile.yaml文件是该地图的配置文件。
打开myMapFile.pgm文件,内容如下:
要想使用机器人创建的地图,必须将其加载到map_server功能包中。执行如下命令:
rosrun map_server map_server myMapFile.yaml
可以新建一个名为robot_gazebo_mapping_loadMap.launch的启动文件,文件内容如下:
运行该命令后,效果如下:
可以看到,与上面的myMapFile.pgm文件内容基本一致。至于rviz中的错误,不太明白,后续再研究。。。
主要介绍了地图的创建、保存、加载,下一篇尝试配置导航功能包集,并在gazebo仿真环境下完成自定义机器人的自主导航。