Outils pour utilisateurs

Outils du site


lissi:rosnav2d

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:

  • vérifier que la navigation est installée sur votre machine. Sinon:

    sudo apt-get install ros-hydro-navigation

  • configurer la navigation.

Lancement Navigation2D

Prérequis:

  • avoir crée un environnement de travail catkin et un package
  • charger les variables d'environnement

    $ source ~/catkin_ws/devel/setup.bash

  • avoir un robot réel qui fournit les topics cmd_vel pour commander les actionneurs, laser et tf; ou bien lancer un simulateur tel que Gazebo (3D), ou Stage(2D):

    rosrun stage_ros stageros `rospack find send_object`/world/willow-erratic.world

  • Filtrer les LaserScan si certaines valeurs sont aberrantes.
  • Vérifier que l'Odométrie fonctionne.

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:

  • lancer Rviz.

    $rosrun rviz rviz

  • configurer Rviz comme dans la video wiki ROS.
  • n'oubliez pas de sauvegarder votre configuration.
  • configurer la position initiale du robot en cliquant sur Position Estimate et en cliquant sur la carte.

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:

  • lancer les différents services, configurer la position initiale du robot avec Rviz, comme dans Navigation2D avec Rviz

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

  • envoyer une position (de type PositionStamped) à atteindre en publiant directement vers le topic /move_base_simple/goal.
  • envoyer un objectif (“goal”) en utilisant un client serveur actionlib qui communiquera avec le SimpleActionServer

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.

  • Dans un script Python, on va créer un publisher:

    move_pub = rospy.Publisher('/move_base_simple/goal', PoseStamped)

  • Puis on crée un objet de type PoseStamped qui indique la position et l'orientation à atteindre pour le robot:

    ps = PoseStamped()
    ps.header.frame_id = “map”
    ps.pose.position= Point(7., 14., 0.)
    ps.pose.orientation = Quaternion(0., 0., -0.7, 0.6)

  • Il ne reste plus qu'à publier effectivement la position ps vers move_pub:

    move_pub.publish(ps)

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

lissi/rosnav2d.txt · Dernière modification : 2013/12/20 16:21 de aurelien.hazan