Projet

Général

Profil

La navigation autonome » Historique » Version 1

Anonyme, 30/03/2021 15:20

1 1 Anonyme
h1. La navigation autonome
2
3
Bien que le paquet de navigation soit conçu pour être aussi polyvalent que possible, trois exigences matérielles principales limitent son utilisation:
4
5
* Il est destiné uniquement aux robots à entraînement différentiel et aux robots à roues holonomiques. Il suppose que la base mobile est contrôlée en envoyant les commandes de vitesse souhaitées sous forme de: vitesse x, vitesse y, vitesse thêta.
6
7
* Il nécessite un laser planaire monté quelque part sur la base mobile. Ce laser est utilisé pour la création de la cartographie et la localisation du robot.
8
9
* Le paquet de navigation a été développé sur un robot carré; ses performances seront donc optimales pour les robots presque carrés ou circulaires. Il fonctionne sur des robots de formes et de tailles arbitraires, mais il peut avoir des difficultés avec les gros robots rectangulaires situés dans des espaces étroits tels que les portes.
10
11
On utilisant la pose estimée de Pepper, les points Lasers, la cartographie Pepper peut se déplacer vers une position prédéfinie par l’utilisateur d’une façon autonome en évitant les obstacles. Cette position à atteindre peut être envoyée depuis l’outil RVIZ, ou indirectement à l’aide d’une commande sur le terminal.
12
13
Le nœud du paquet de la navigation permet de déterminer le chemin optimal pour aller de la position courante à la position souhaitée. Il détermine aussi la vitesse de déplacement du robot.
14
15
***
16
17
h2. 1- Le SLAM :
18
19
***
20
21
La localisation et cartographie simultanées, connue en anglais sous le nom de SLAM (simultaneous localization and mapping) ou CML (concurrent mapping and localization), consiste, pour un robot ou véhicule autonome, à simultanément construire ou améliorer une carte de son environnement et de s’y localiser.
22
23
Sous ROS, il existent plusieurs paquets qui développent cette technologie : 
24
25
h3. A- Le  paquet Gmapping : "lien":http://wiki.ros.org/gmapping
26
27
Ce paquet permet de créer la cartographie 2D d’une zone et la localisation d’un robot.
28
29
Il possède un nœud ‘slam_gmapping’ qui permet de créer la carte de grille d’occupation 2D, à partir des données du capteur Laser fournies par le topic /naoqi_driver/laser (de type sensor_msgs/LaserScan) et les données de la position du robot transmises par le topic /naoqi_driver/odom (de type ...).
30
31
Pour pouvoir utiliser ce paquet il faut que le robot soit équipé de :
32
33
- l’odométrie
34
35
- Un télémètre Laser fixé et monté horizontalement.
36
37
Le rôle de ce nœud est de transformer les données du Laser en une matrice d’occupation de l’espace qui contient que des 0 et des -1, 0 signifie la présence d’un obstacle et -1 le vide.
38
39
Ce nœud possède plusieurs topics
40
41
- /map : il renvoi la carte créé, ses données sont de type nav_msgs/occupancyGrid.
42
43
- /map_metadata : il renvoi les données relatives au robot sur la carte (la position, l’orientation, la vitesse de déplacement).
44
45
Pour créer la carte, il faut lancer le nœud slam_gmapping en choisissant la source des données de type Laser, pour ce faire il suffit de lancer la commande suiante :
46
 
47
<pre> rosrun gmapping slam_gmapping scan:=base_scan _odom_frame:=odom_combined </pre>
48
49
Dans notre cas base_scan est le topic /naoqi_driver/laser et la frame d’odométriè est odom, la commande devient alors :
50
51
<pre> rosrun gmapping slam_gmapping scan:= naoqi_driver/laser _odom_frame:= odom. </pre>
52
53
Voila la cartographie obtenue à l'aide de cette méthode :
54
55
!https://forge.clermont-universite.fr/attachments/download/12087/Gmapping_Pepper.png!
56
57
Remarque : pour la bonne création de la cartographie il faut éviter la rotation pure de Pepper.
58
59
h3. B- Le paquet Hector : "lien":http://wiki.ros.org/hector_slam
60
61
Ce paquet est basé sur le même principe du paquet Gmapping sauf que avec celui-ci nous arrivons pas à crée la cartographie.
62
	
63
Même si Pepper possède trois capteurs Lasers horizontaux, il fournissent très peu de points.
64
65
L’idée alors est de chercher une autre solution qui ne demande pas l’utilisation des capteurs Lasers ou de cher.
66
67
Nous avons deux solutions :
68
69
* remplacer les capteurs Lazers du robot Pepper par un lidar plus performant 
70
71
* reconstruire les données Lasers 
72
73
Nous avons choisit la deuxième solution car il est gratuite et elle ne demande aucune manipulation. 
74
75
h3. C- Reconstruction des données Lasers
76
77
On utilise la caméra 3D pour avoir les images de profondeur, on les converties ensuite en points Lasers 2D.
78
79
Ces points Lasers peuvent être ensuite utilisés pour la construction du la cartographie (SLAM).
80
81
Ils existent deux solutions qui permettent cette conversion sous ROS : 
82
83
* La première solution : Le paquet depthimage_to_laserscan : "lien":http://wiki.ros.org/depthimage_to_laserscan 
84
85
ce paquet permet d’effectué cette conversion Mais seulement pour les les images de profondeur acquises à partir de capteurs 3D fixes et montés horizontalement. Ce qui n’est pas notre cas, car cette caméra et montée sur la tête de Pepper, mais qui ne peux pas rester fixe car la tête de Pepper peut bouger. Cela rend ce paquet inutile. 
86
87
* La deuxième solution :
88
89
On utilisera donc deux autres paquets, le premier paquet est "depth_image_proc":http://wiki.ros.org/depth_image_proc qui permet de convertir les images de profondeur au Point cloud 3D, le deuxième est "pointcloud to laserscan":http://wiki.ros.org/pointcloud_to_laserscan , il construit  les points Lasers 2D à partir des points cloud 3D.
90
91
Voici les résultats obtenues : 
92
93
!https://forge.clermont-universite.fr/attachments/download/12096/lasers_reconstruites.png!
94
95
***
96
97
h2. 2- La localisation du robot 
98
99
***
100
101
La localisation s’effectue à l’aide des points Lasers 2D, l’odométrie et la cartographie donné par map server. On utilise le paquet AMCL "lien": http://wiki.ros.org/amcl ( Adaptive Monte Carlo Localisation) pour estimer la position de Pepper dans la cartographie. la ligne de commande suivante permet de lancer le noeud amcl fourni par ce paquet et en lui permettant d'accéder aux données lasers fournies par le topic /scan: 
102
103
<pre> Rosrun amcl amcl scan:naoqi_driver/laser </pre>
104
105
Ce paquet a quatre subscribers : 
106
* scan : il accède aux données Lasers, le type de message de ce topic est sensor_msgs/LaserScan.
107
* tf  : il accède aux données des transformations entre repères, le type de message de ce topic est tf/tfMessage.
108
* initialpose : pour avoir une bonne estimation de la position du robot on fournit sa position initiale à ce subscriber, le type de message de ce topic est geometry_msgs/PoseWithCovarianceStamped.
109
* Map : le paquet AMCL souscrit à ce topic pour  récupérer la carte utilisée, le type de message de ce topic est nav_msgs/OccupancyGrid.
110
Il faut donc lancer cette carte en utilisant le nœud map_server et en utilisant la ligne de commande suivante sur un terminal de commandes (1) ou dans un fichier launch (2) : 
111
<pre> (1) rosrun map_server map_server  mymap.yaml </pre>
112
<pre> (2) <node pkg="map_server" type="map_server" name="map_server" args="$(find « l’emplacement du  fichier »/ « le nom du fichier ».yaml"> </node>  </pre>
113
114
115
116
Et trois publishers : 
117
* amcl_pose : ce topic publie une estimation de la position du robot sur la cartographie avec covariance, le type des messages publiées par ce topic est geometry_msgs/PoseWithCovarianceStamped.
118
119
* Particlecloud : Ce topic publie un groupe de points caractérisant le cercle de ressemblance de la position du robot, le type des messages publiées par ce topic est geometry_msgs/PoseArray.
120
* tf (tf/tfMessage) : ce topic publie la transformation entre les deux repères ‘odom’ et ‘map’.
121
122
Voici les résultats obtenues concernant la cartographie crée à l'aide des données lasers reconstruites et l'estimation de la position du robot : 
123
124
!https://forge.clermont-universite.fr/attachments/download/12090/localisations_pepper.png!
125
126
***
127
128
h2. 3- Le paquet navigation 
129
130
***
131
132
h3. A- La configuration du robot 
133
134
!https://forge.clermont-universite.fr/attachments/download/11922/navigation_stack.png!
135
136
La pile de navigation suppose que le robot est configuré d'une manière particulière pour pouvoir s'exécuter. Le diagramme ci-dessus montre un aperçu de cette configuration. Les composants blancs sont des composants 
137
138
requis déjà implémentés, les composants gris sont des composants facultatifs déjà implémentés et les composants bleus doivent être créés pour chaque plate-forme de robot. Les conditions préalables de la pile de 
139
140
navigation, ainsi que des instructions sur la manière de remplir chaque exigence, sont fournies dans les sections ci-dessous.
141
142
* 1- ROS
143
144
La pile de navigation suppose que le robot utilise ROS. Veuillez consulter la documentation ROS pour savoir comment installer ROS sur votre robot.
145
146
* 2-Transformer Configuration (autres transformations)
147
148
La pile de navigation nécessite que le robot publie des informations sur les relations entre les cadres de coordonnées à l'aide de tf. Un tutoriel détaillé sur la configuration de cette configuration est disponible ici: "lien":http://wiki.ros.org/navigation/Tutorials/RobotSetup/TF.
149
150
Dans notre cas, l'image suivante montre les repères lièes au solides qui appartiennent au robot Pepper : 
151
152
!https://forge.clermont-universite.fr/attachments/download/11923/frames_pepper.png!
153
154
* 3- Informations sur le capteur (sources de capteurs)
155
156
La pile de navigation utilise les informations provenant des capteurs pour éviter les obstacles dans le monde. Elle suppose que ces capteurs publient des messages sensor_msgs / LaserScan ou sensor_msgs / PointCloud sur
157
158
ROS. En outre, un certain nombre de capteurs dotés de pilotes ROS prennent déjà en charge cette étape. 
159
160
* 4-Informations sur l'odomètre (source d'odométrie)
161
162
La pile de navigation nécessite la publication des informations d'odométrie à l'aide de tf et du message nav_msgs / Odometry. Un tutoriel sur la publication des informations d'odométrie est disponible à l'adresse suivante: "lien":http://wiki.ros.org/navigation/Tutorials/RobotSetup/Odom.
163
164
* 5- Contrôleur de base :
165
166
La pile de navigation suppose qu'elle peut envoyer des commandes de vélocité à l'aide d'un message geometry_msgs / Twist supposé se trouver dans le cadre de coordonnées de base du robot dans le topic  " /cmd_vel". Cela signifie qu'un nœud doit être abonné au topic "cmd_vel" capable de prendre (vx, vy, vtheta) <==> (cmd_vel.linear.x, cmd_vel.linear.y, cmd_vel.angular.z). et les convertir en commandes de moteur à envoyer à une base mobile. 
167
168
* 6- La cartographie (serveur_map)
169
170
La pile de navigation n’a pas besoin de carte pour fonctionner, mais pour les besoins de ce tutoriel, nous supposerons que vous en avez une. 
171
172
173
"navigation_stack.png":https://forge.clermont-universite.fr/attachments/download/11922/navigation_stack.png 
174
175
"frames_pepper.png":https://forge.clermont-universite.fr/attachments/download/11923/frames_pepper.png 
176
177
"Gmapping_Pepper.png":https://forge.clermont-universite.fr/attachments/download/12087/Gmapping_Pepper.png 
178
179
"localisations_pepper.png":https://forge.clermont-universite.fr/attachments/download/12090/localisations_pepper.png 
180
181
"lasers_reconstruites.png":https://forge.clermont-universite.fr/attachments/download/12096/lasers_reconstruites.png