CHAPITRE 3
FIGURE 3.6 - Niveaux d'abstraction du processus de navigation,
planification et évitement d'obstacles du simulateur PyRoboticsLab
ne se focaliser que sur l'action souhaitée. Il suffit
d'utiliser par exemple la commande ro-bot.move(forward) pour le
déplacer un mètre en avant, et robot.turn(45) pour faire
une rotation de 45° dans le sens des aiguilles d'une montre. D'autres
routines permettent d'effectuer des tâches relatives à la
détection d'obstacles et de cartographie telle que lidar.scan()
pour récupérer la liste des obstacles
détectés, lidar.get_measurement_confidence() pour
calculer le degré de confiance dans la mesure du lidar selon le
modèle du bruit, et robot.update_map() pour mettre à
jour la carte.
Afin de simplifier encore plus le processus de
développement de nouveaux algorithmes, le simulateur offre un autre
niveau d'abstraction permettant à l'utilisateur de définir
directement les coordonnées (x, y) du point auquel le robot devra se
diriger sans se soucier des commandes de direction (move) et de rotations
(turn). Ceci peut se faire en utilisant donc la commande
robot.move_toward_point(x,y). De même il suffit d'utiliser les
commandes ro-bot.set_goals() et robot.plan_path() pour
définir un ou plusieurs points à visiter et planifier une
trajectoire vers ces points.
L'idée est donc d'offrir plusieurs niveaux
d'abstraction permettant aux utilisateurs de choisir différentes
commandes à utiliser selon leurs objectifs. Un utilisateur qui souhaite
utiliser le simulateur pour développer un nouvel algorithme
d'exploration choisira de préférence un niveau d'abstraction
simple afin de ne se focaliser que sur la stratégie du robot, alors
qu'un utilisateur souhaitant tester de nouvel algorithme de navigation ou de
cartographie choisira sûrement l'utilisation de routines de bas niveau
pour contrôler les chaque action individuellement.
Nous laissons aussi la flexibilité aux utilisateurs de
pouvoir redéfinir n'importe quelle fonction et apporter des
modifications dans l'implémentation à bas niveau afin de leur
permettre d'adapter le simulateur à leurs besoins spécifiques. Il
pourront pour cela utiliser les variables de classe pour avoir accès aux
informations internes du robot telles que le niveau de batterie restant,
l'état du robot (en mouvement, en attente, bloqué par un
obstacle), la distance parcourue, le nombre de mouvements
effectués...etc.
La figure 3.7 présente un schéma
général de notre modélisation du processus de naviga-
93
tion, planification et évitement d'obstacles. Cette
modélisation se base sur l'implémentation en interne d'un
automate à états finis.
Chaque état présenté dans ce
schéma possède une routine définissant l'ensemble des
opérations à effectuer. La figure 3.8 par exemple décrit
les détails de l'opération "solve conflict" dont l'objectif est
de trouver un compromis entre deux robots qui se bloquent mutuellement le
chemin. Cette routine poussera un des robots à changer de trajectoire,
ou de se mettre dans un état d'attente pour laisser l'autre robot
passer.
3.5 Modélisation des grilles
d'occupation
L'exploration de zones inconnues est étroitement
liée au problème de navigation et de cartographie. Le robot doit
se déplacer dans l'environnement et le découvrir progressivement.
Lors de cette opération, il est fort probable de rencontrer des impasses
et autres obstacles bloquant le chemin. Le robot mémorisera alors la
position des obstacles et les utilisera pour planifier des chemins alternatifs
et découvrir de nouvelles régions.
Les robots utilisent des capteurs pour détecter les
murs et les obstacles. Étant donné que ces capteurs ont une
portée limitée, il n'est pas possible d'observer l'ensemble de
l'environ-nement à la fois. Dans ce cas, nous devons sauvegarder les
positions des obstacles détectés dans une structure de
données qui permet au robot d'agréger facilement de nouvelles
observations et de les combiner de manière à simplifier le calcul
des trajectoires.
La Grille d'Occupation (Occupancy Grid Map [34]) est la
structure de données la plus utilisée pour représenter
l'environnement en robotique. C'est une matrice 2D où chaque cellule
représente une partie de l'environnement. La taille des cellules
influence le degré de détails affichés sur la grille, elle
est généralement définie sur une taille égale ou
inférieure à la circonférence du robot. La figure 3.9
montre un exemple de carte quadrillée.
La valeur de chaque cellule de la grille représente la
probabilité que la région correspondante de l'environnement soit
vide ou occupée par un obstacle. Puisque le robot n'a aucune information
à priori sur la région à explorer, toutes les cellules ont
une probabilité d'occupation initiale de 0,5. Cette probabilité
sera mise à jour à l'aide de la règle de Bayes
(équation 3.1) chaque fois que les capteurs du robot détectent
une cellule vide ou occupée.
p(A/B) = p(B/A) * p(A) (3.1)
p(B)
A est la valeur d'occupation, et
B est l'observation
Une pratique courante dans le domaine de cartographie vise
à utiliser les valeurs logarithmiques d'occupation au lieu des
probabilités, et ceci afin de convertir les opérations de
multiplication en additions tel que décrit par les équations 3.2
et 3.3.
94
|