Table des matières

La navigation est l'une fonction les plus importantes pour le robot. Elle permet d'éviter les obstacles locaux, et de planifier des chemins globaux dans l'environnement.

Dans ROS, il existe une stack navigation (“stack”=ensemble de packages) qui automatise et coordonne ces différentes étapes. Sa configuration est une étape délicate.

En cas de problème, lisez les pages RosDebug et RosDebugNav2d


Installation et configuration de la navigation

cette étape est délicate. Normalement, elle sera effectuée par votre responsable.

Les étapes:


Lancement Navigation2D

Prérequis:

Pour lancer la navigation, on vous fournira en général un script de lancement qu'il faudra exécuter:

$roslaunch mon_script.launch

En général, ce script lance un serveur de carte (map server), une localisation du robot (par exemple ici amcl), et plusieurs autres services (local costmap, global costmap,…). Un exemple:

<launch>
<!– Run the map server –>
<node name=“map_server” pkg=“map_server” type=“map_server” args=“$(find send_object)/world/willow-small.pgm .2”>
<param name=“frame_id” value=“/map” />
</node>
<!— Run AMCL –>
<include file=“$(find send_object)/move_base_config/amcl_node.xml”/>
<node pkg=“move_base” type=“move_base” respawn=“false” name=“move_base” output=“screen”>

Un autre exemple de script de lancement est donné sur le wiki ROS.


Prérequis:

Rviz est une interface graphique pour visualiser les données relatives au robot (position estimée du robot, carte du monde, trajectoire du robot, …), mais aussi pour piloter directement le robot en lui assignant un “goal”. Les étapes:

Il faut vérifier que les distances du capteur laser sont bien superposées aux obstacles sur la carte

On peut alors assigner un objectif au robot: il suffit de cliquer sur Navigation Goal, puis de cliquer sur la carte là où on souhaite envoyer le robot.


Cf le wiki SendingSimpleGoals


Prérequis:

Pour assigner un objectif au robot, il existe deux solutions:

La première solution est la plus simple. Elle est offerte par le node move_base qui est lancé dans le script de lancement qu'on a vu plus haut.

Ce qui se passe en fait est que le node joue le rôle d'intermédiaire avec le serveur actionlib. Il crée un objet de type MoveBaseGoal à partir de notre objet PositionStamped. Ceci nous permet de suivre le statut de notre tâche (ACTIVE, ABORTED, SUCCEDED). Par exemple, taper en ligne de commande:

$rostopic echo /move_base/status

La seconde solution est plus complexe: il faut créer directement un client SimpleActionClient et lui envoyer un goal.

actionclient


SLAM

Même si on ne dispose pas d'une carte de l'environnement, il est possible d'en créer une à la volée à l'aide du SLAM (Self Localization and Mapping).


Exemples