Author: Thomas Peyrucain < thomas.peyrucain@pal-robotics.com >

Maintainer: Jordi Pages < jordi.pages@pal-robotics.com >

Support: tiago-support@pal-robotics.com

Source: https://github.com/pal-robotics/pmb3_tutorials.git

(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. 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

pmb3_navigation.png

Purpose

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

Pre-Requisites

First make sure that the tutorials are properly installed along with the ARan 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.

Execution

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

  • source ./devel/setup.bash

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

  • roslaunch pmb3_2dnav_gazebo pmb3_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 pmb3_2dnav_gazebo pmb3_navigation.launch public_sim:=true lost:=true map:=$HOME/.pal/pmb3_maps/configurations/<the_map_folder>

By default the $HOME/.pal/pmb3_maps/config folder is pointing to the latest saved map

Among others, 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: http://wiki.ros.org/costmap_2d

  • 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: http://wiki.ros.org/costmap_2d

  • 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.

  • RGBD scan: points in magenta represents the projection of the point cloud reconstructed by the RGBD cameras. This artificial scan is also used to add/remove obstacles to the global and local costmaps. This scan is useful to obtain 3D information about the environment and detect obstacles that are higher or lower than the laser scan.

Localization

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.

pmb3_nav_init.png

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

pmb3_estimation.png

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.

pmb3_amcl.png

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 key_teleop.py

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.

pmb3_map_before_clear.png

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.

pmb3_map_cleared.png

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.

pmb3_nav_goal.png

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.

pmb3_nav_path.png

Then, the robot will start moving following the global trajectory. A special configuration of the teb_local_planner has been used to follow the path of the Global Planner while avoiding obstacles in a flexible way.

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

pmb3_nav_full.png

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

Wiki: Robots/ARan-base/Tutorials/Navigation/Localization (last edited 2023-02-09 17:49:40 by thomaspeyrucain)