2D SLAM with a robot

Now that we have tested some SLAM packages in a simulation, let’s try them out on a real robot - Clearbot. We will be using Google Cartographer.

Copying necessary files to your workspace

  1. For starters, ssh to your robot, create a new workspace (you can name it for example academy_ws) and go to your source folder.

  2. In your source folder, use

    catkin_create_pkg <your_package_name>
    

    where your package name could be something along the lines of my_mapping. You don’t need any build dependencies because this package will only hold launch and configuration files.

  3. Create a folder named launch in your package.

  4. Create a folder named configuration in your package.

  5. Using roscp (http://wiki.ros.org/rosbash#roscp), copy teleop_cartographer_2d.launch and navstack.launch and teleop_carto_with_navstack.launch from robotont_teleop package into your new package’s launch folder.

  6. Using roscp, copy the following files from robotont_teleop into your package’s configuration folder:

    robotont_cartographer_2d.lua
    robotont_cartographer_localization_2d.lua
    robotont_depth_camera_2d.lua
    costmap_common.yaml
    costmap_exploration.yaml
    costmap_global_laser.yaml
    costmap_global_static.yaml
    costmap_local.yaml
    laser_params.yaml
    planner.yaml
    
  7. Do catkin build and source the workspace.

Now you have a package with launch and configuration files that you can safely modify.

Configuring and launching Google Cartographer

Next task is to modify your copied launch files to include the configuration files from your package.

  1. Open teleop_cartographer_2d.launch from your package.
  2. Change the launch file so that it reads configuration files from your package. (NOTE: You have to change paths in 2 places.)

Now that you have configured the launch files, let’s try running the SLAM package.

  1. In robot’s terminal, run roscore.

  2. In another robot terminal, launch

    roslaunch <your_package_name> teleop_cartographer_2d.launch
    

    This will run the mapping software.

  3. In the PC, launch:

    roslaunch robotont_description display_2dmapping.launch
    

    This will launch preconfigured RViz environment.

  4. In the PC, launch:

    roslaunch robotont_teleop teleop_pc_side.launch
    

    From this terminal, you can control the robot.

  5. Now you should be able to map the world.

Tuning Google Cartographer

Although last step will already produce a map, it could be better (or worse). Therefore, you have the chance to try tuning the algorithm and maybe get a better result.

  1. For tuning, you can try changing parameteres in 2 files: robotont_cartographer_2d.lua and robotont_cartographer_localization_2d.lua

  2. For example, what if you changed translation and rotation weights in robotont_cartographer_2d.lua?

  3. To test your changes, relaunch teleop_cartographer_2d.launch

  4. To tune your Cartographer, there is a guide at https://google-cartographer-ros.readthedocs.io/en/latest/tuning.html

    Follow this guide and see if you can improve the mapping to be more stable and accurate.