Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
mapping_integration_web [2018/02/13 15:39]
mgp3202018 [Création d'une carte]
mapping_integration_web [2020/07/03 17:38]
mai Tag0 Added: ros
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 64: Line 79:
 On lance le package //​pointcloud_to_laserscan//​ qui génère un //​sensor_msgs/​LaserScan//​ à partir du nuage de points : On lance le package //​pointcloud_to_laserscan//​ qui génère un //​sensor_msgs/​LaserScan//​ à partir du nuage de points :
   rosrun pointcloud_to_laserscan pointcloud_to_laserscan_node cloud_in:​=/​points   rosrun pointcloud_to_laserscan pointcloud_to_laserscan_node cloud_in:​=/​points
-Puis on génère la carte comme dans le cas général.+Puis on génère la carte comme vu dans la partie 3.
  
 ===== Intégration de la carte dans une interface Web ===== ===== Intégration de la carte dans une interface Web =====
  
 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>​ros}}
  • mapping_integration_web.txt
  • Last modified: 2020/07/03 17:38
  • by mai