Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
mapping_integration_web [2018/02/13 15:39] mgp3202018 [Spécificités de Pepper] |
mapping_integration_web [2020/07/03 17:38] mai Tag0 Added: pepper |
||
---|---|---|---|
Line 2: | Line 2: | ||
Cette documentation explique comment créer une carte à partir d'un robot pour l'intégrer ensuite dans une interface Web et afficher la localisation du robot. | Cette documentation explique comment créer une carte à partir d'un robot pour l'intégrer ensuite dans une interface Web et afficher la localisation du robot. | ||
+ | Ce travail se base sur cet article : [[https://arxiv.org/pdf/1704.04797.pdf|Voir l'article]] | ||
+ | |||
+ | Vidéo de démonstration de la solution : [[https://youtu.be/xF7-tTI0zrE|Voir la vidéo YouTube]] | ||
===== Liste des packages utilisés ===== | ===== Liste des packages utilisés ===== | ||
- | * http://wiki.ros.org/rosbag | + | * http://wiki.ros.org/rosbag : Un ensemble d'outils pour l'enregistrement et la lecture de topics ROS. |
- | * http://wiki.ros.org/gmapping | + | * http://wiki.ros.org/gmapping : Création d'une carte 2D à partir des lasers d'un robot. |
- | * http://wiki.ros.org/map_server | + | * http://wiki.ros.org/map_server : Permet de publier et d'enregistrer des cartes. |
- | * http://wiki.ros.org/rosbridge_server | + | * http://wiki.ros.org/rosbridge_server : Publie les topics ROS dans un WebSocket au format JSON. |
- | * http://wiki.ros.org/roslibjs/ | + | * http://wiki.ros.org/roslibjs : Librairie JS, permet la lecture et l'écriture de topics en interaction avec le WebSocket. |
- | * http://wiki.ros.org/ros2djs | + | * http://wiki.ros.org/ros2djs : Librairie JS, permet d'afficher les cartes dans une interface web. |
- | * http://wiki.ros.org/amcl | + | * http://wiki.ros.org/amcl : Un système de localisation probabiliste pour un robot se déplaçant en 2D. |
- | * http://wiki.ros.org/nodelet | + | * http://wiki.ros.org/nodelet : Fournit un moyen d'exécuter plusieurs algorithmes dans le même processus. |
- | * http://wiki.ros.org/image_proc | + | * http://wiki.ros.org/image_proc : Rectification d'image et traitement de couleurs. |
- | * http://wiki.ros.org/depth_image_proc | + | * http://wiki.ros.org/depth_image_proc : Traitement des "depth images" (transformation en "point cloud" notamment). |
- | * http://wiki.ros.org/pointcloud_to_laserscan | + | * http://wiki.ros.org/pointcloud_to_laserscan : Transforme un "point cloud" en "laser scan". |
- | * http://wiki.ros.org/rb1_base_common | + | * http://wiki.ros.org/rb1_base_common : Contrôle de la base de RB-1. |
+ | * http://wiki.ros.org/pepper_bringup : Connexion à Pepper. | ||
+ | |||
+ | Tous ces packages peuvent être installés en utilisant la commande : | ||
+ | sudo apt-get install ros-<ros_distribution>-<ros_package> | ||
+ | La liste des packages disponibles sur une distribution ROS peut être affichée comme ceci : | ||
+ | apt-cache search ros-<ros_distribution> | ||
+ | |||
+ | Pour Pepper, il faut utiliser ROS Kinetic (installable sur Ubuntu 16.04).\\ | ||
+ | Pour RB-1, il faut utiliser ROS Indigo (installable sur Ubuntu 14.04). | ||
===== Création d'un rosbag ===== | ===== Création d'un rosbag ===== | ||
Line 49: | Line 61: | ||
Avant d'annuler le gmapping, on enregistre la carte : | Avant d'annuler le gmapping, on enregistre la carte : | ||
rosrun map_server map_saver -f <map_name> | rosrun map_server map_saver -f <map_name> | ||
+ | Exemple de carte obtenue avec les lasers de RB-1 :\\ | ||
+ | {{:screenshot_19.png?200|}}\\ | ||
+ | Les traits que l'on voit sont des aberrations dues aux lasers, on peut réduire leur impact en jouant sur les paramètres lors de la génération de la carte (paramètre //Urange//). | ||
==== Spécificités de Pepper ==== | ==== Spécificités de Pepper ==== | ||
Line 69: | Line 84: | ||
Le principe est le suivant : //rosbridge_server// publie un WebSocket contenant les informations des topics au format JSON. //roslibjs// vient ensuite souscrire aux topics et permet la récupération des données dans une page Web (voir [[http://wiki.ros.org/roslibjs/Tutorials/BasicRosFunctionality|le tutoriel roslibjs]]). Enfin, //ros2djs// permet l’affichage d’un élément de type //nav_msgs/OccupancyGrid// (le format ROS des cartes) dans l’interface (voir [[http://wiki.ros.org/ros2djs/Tutorials/VisualizingAMap|le tutoriel ros2djs]]).\\ | Le principe est le suivant : //rosbridge_server// publie un WebSocket contenant les informations des topics au format JSON. //roslibjs// vient ensuite souscrire aux topics et permet la récupération des données dans une page Web (voir [[http://wiki.ros.org/roslibjs/Tutorials/BasicRosFunctionality|le tutoriel roslibjs]]). Enfin, //ros2djs// permet l’affichage d’un élément de type //nav_msgs/OccupancyGrid// (le format ROS des cartes) dans l’interface (voir [[http://wiki.ros.org/ros2djs/Tutorials/VisualizingAMap|le tutoriel ros2djs]]).\\ | ||
+ | \\ | ||
Pour cela, on publie un topic de map à partir du fichier de map enregistré.\\ | Pour cela, on publie un topic de map à partir du fichier de map enregistré.\\ | ||
NB : il faut bien utiliser le fichier .yaml et non le fichier .pgm de la carte. | NB : il faut bien utiliser le fichier .yaml et non le fichier .pgm de la carte. | ||
Line 275: | Line 291: | ||
===== Affichage de la localisation du robot ===== | ===== Affichage de la localisation du robot ===== | ||
- | Pour la localisation du robot, on utilise le package amcl.\\ | + | Pour la localisation du robot, on utilise le package //amcl//.\\ |
Si ce n'est pas déjà fait, on publie la carte : | Si ce n'est pas déjà fait, on publie la carte : | ||
rosrun map_server map_server <yaml_file>.yaml | rosrun map_server map_server <yaml_file>.yaml | ||
On lance la lecture du bag : | On lance la lecture du bag : | ||
- | rosbag play --clock </chemin/et/nomDuBag> | + | rosbag play --clock <nom_du_bag>.bag |
On lance la détection AMCL à partir des lasers (pour RB1, ///front_laser/scan//) | On lance la détection AMCL à partir des lasers (pour RB1, ///front_laser/scan//) | ||
rosrun amcl amcl scan:=<nom_du_topic_laser_scan> | rosrun amcl amcl scan:=<nom_du_topic_laser_scan> | ||
La page Web s'abonne au topic de positionnement et affiche dynamiquement la position du robot sur la carte. | La page Web s'abonne au topic de positionnement et affiche dynamiquement la position du robot sur la carte. | ||
+ | |||
+ | ===== Travaux futurs ===== | ||
+ | ==== Pour Pepper ==== | ||
+ | |||
+ | * Troubleshooting de l'erreur avec le package //depth_image_proc/////convert_metric// pour pouvoir générer une carte à partir de la camera de Pepper | ||
+ | * Normalement, la suite devrait fonctionner comme avec RB-1 | ||
+ | |||
+ | ==== Pour le déplacement de RB-1 à la localisation spécifiée ==== | ||
+ | |||
+ | * Publier les coordonnées de destination depuis l'interface web vers ROS en utilisant //roslibjs// | ||
+ | * Utiliser ces coordonnées pour déplacer RB-1 (probablement grâce au package //rb1_base_common// / //navigation// ou //control//) | ||
+ | {{tag> pepper ros }} |