Author: Thomas Peyrucain < >

Maintainer: Jordi Pages < >



(!) Please ask about problems and questions regarding this tutorial on Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

Localization and path planning

Description: Learn how to run laser-based localization and autonomous navigation avoiding obstacles by means of global and local path planning.

Keywords: Localization, amcl, path planning, autonomous navigation

Tutorial Level: INTERMEDIATE



This tutorial shows how to make TIAGo OMNI Base navigate autonomously provided a map build up of laser scans and taking into account the laser


First make sure that the tutorials are properly installed along with the TIAGo OMNI Base simulation, as shown in the Tutorials Installation Section. Then, follow the instructions in the Create a map with gmapping tutorial in order to create and save a map.


First of all open two consoles and source TIAGo OMNI Base's public simulation workspace in each one

  • source ./devel/setup.bash

In the first console launch the simulation of TIAGo OMNI Base with all the required nodes for running the autonomous navigation

  • roslaunch omni_base_2dnav_gazebo omni_base_navigation.launch public_sim:=true lost:=true

The default map will be launched; if you want to run a specific map that you created you could run it with the map option and the absolute path to your map folder :

  • roslaunch omni_base_2dnav_gazebo omni_base_navigation.launch public_sim:=true lost:=true map:=$HOME/.pal/omni_base_maps/configurations/<the_map_folder>

By default the /home/<your_username>/.pal/omni_base_maps/config folder is pointing to the latest saved map

Among other, the following information is overlaid on top of the map:

  • Particle cloud: a cloud of small red arrows representing the amcl filter particles, which spreads around the robot. A concentration of the particles indicates a growing confidence on its position estimate.

  • Global costmap: regions around obstacles which are used by the global planner in order to compute paths to navigate from one point of the map to another without getting too close to the static obstacles registered during mapping. More details can be found here:

  • Local costmap: similar to the global costmap, but it is smaller and moves with the robot, it is used to take into account new features that were not present in the original map. It is used by the local planner to avoid obstacles, both static and dynamic, while trying to follow the global path computed by the global planner. More details can be found here:

  • Laser scan: lines in dark blue represent the points measured with the laser of the mobile base. This scan is used to add/remove obstacles both in the global and local costmaps.


As can be seen in the pictures below the robot wakes up in a position of the world which does not correspond to the map origin, which is the pose where the localization system assumes the robot is and where particles are spread representing possible poses of the robot.


In order to localize the robot you can use the 2D pose Estimate functionality of rviz. First click on the 2D Pose Estimate button and then click and drag on the point where the robot is located in rviz to estimate the position and the orientation thanks to the green arrow


Alternatively to localize the robot run the following instruction in the second console:

  • rosservice call /global_localization "{}"

This causes the amcl probabilistic localization system to spread particles all over the map as shown in the picture below.


Now a good way to help the particle filter to converge to the right pose estimate is to move the robot. A safe way to do so is to make the robot rotate about itself. You may use the left and right arrows of the key_teleop in order to do so.

  • rosrun key_teleop

The result is shown in the following pictures, where invalid particles are removed as more laser scans can be matched with the map and the localization converges eventually to the correct pose.


Now, it is preferable to clear the costmaps as it contains erroneous data due to the bad localization of the robot:

  • rosservice call /move_base/clear_costmaps "{}"

The costmap now only takes into account obstacles in the static map and the system is ready to perform navigation.


Autonomous navigation with rviz

First of all, make sure to kill the key_teleop node. Otherwise, the robot will not move autonomously as key_teleop takes higher priority.

In order to send the robot to another location on the map the button 2D Nav Goal can be pressed in rviz. Then, by clicking and holding the left button of the mouse over the point of the map at which we want to send the robot an arrow will appear. By dragging the mouse around the point the orientation will change. This arrow represents the target position and orientation that the robot needs to reach.


When releasing the mouse button the global planner will compute a path, which will appear as a blue line starting at the current position of the robot and ending with a red arrow representing the desired target orientation.


Then, the robot will start moving following the global trajectory. Given the flexibility and the freedom that the TIAGo OMNI Base provides, an appropriate Local Planner has to be used in order to exploit all the degrees of freedom of the base and plan trajectories in the plane in each direction and orientation. For this purpose, a special configuration of the teb_local_planner has been used to follow the path of a Global Planner while avoiding obstacles in a flexible way, by considering the kinematics model of the omnidirectional base.

The pictures below show different snapshots of rviz during the navigation toward the selected goal.


Finally, the robot stops when the target goal pose has been reached up to a user-defined tolerance.

Wiki: Robots/TIAGo-OMNI-base/Tutorials/Navigation/Localization (last edited 2022-09-14 15:11:03 by thomaspeyrucain)