This tutorial shows you how to use move_base with Google Cartographer to perform autonomous planning and movement with simultaneous localization and mapping (SLAM), on a simulated Husky, or a factory-standard Husky with a laser scanner publishing on the /scan topic.
Developed by Google, Cartographer is an open-source library used for real-time simultaneous localization and mapping (SLAM). Using LIDAR data, it generates submaps which are later optimized and scan-matched to provide real-time loop closure. As a result, Cartographer is able to successfully close loops and generate a consistent map each time whereas Gmapping can occasionally fail to do so, resulting in unique maps generated after every iteration [1]. A variety of sensor configurations are supported allowing Cartographer to be used for a broad range of applications. In this demo, Cartographer uses IMU and LIDAR data from the Husky to perform real-time SLAM.
To adapt this demo to your own Husky, you may need to clone the husky_cartographer_navigation repository, and modify the relevant parameters. To learn about move_base and the navigation stack, see the Navigation Tutorials. To learn more about Google Cartographer for ROS, see the Cartographer ROS documentation.
-
To get started with 2-D SLAM using Google Cartographer, clone this repository into your working directory (e.g. catkin_ws):
git clone http://github.com/husky/husky_cartographer_navigation.git
-
Install the dependencies in your workspace (e.g. catkin_ws):
rosdep install --from-paths src --ignore-src --rosdistro=$ROS_DISTRO -y
-
Build the workspace and open two new terminal/tabs, source the workspace for each terminal/tab:
source devel/setup.bash
-
Launch the Gazebo simulation:
roslaunch husky_gazebo husky_playpen.launch
-
Launch the Cartographer node to begin SLAM:
roslaunch husky_cartographer_navigation cartographer_demo.launch
-
Launch Rviz:
roslaunch husky_viz view_robot.launch
-
-
In the Rviz visualizer, make sure the visualizers in the Navigation group are enabled.
-
Use the 2D Nav Goal tool in the top toolbar to select a movement goal in the visualizer. Make sure to select an unoccupied (dark grey) or unexplored (light grey) location.
-
As the robot moves, you should see the grey static map (map topic) grow. There might be discrete jumps in the map as the Cartographer algorithm attempts to localize the robot.
-
To save the generated map, you can run the map_saver utility:
rosrun map_server map_saver -f <filename>
To tune Cartographer for low latency SLAM, edit the husky.lua configuration file found in the husky_cartographer_navigation/config directory.
For more information on tuning, click here
[1] T. Coroiu and O. Hinton, "A Platform for Indoor Localisation, Mapping, and Data Collection using an Autonomous Vehicle," M.S. thesis, Lund Univ., Lund, Sweden, 2017.