Robots suiveurs 3 - Tableau de Bord : Différence entre versions
(→II) Déplacements contrôlés au clavier) |
(→V)) |
||
| Ligne 67 : | Ligne 67 : | ||
[[Fichier:deplacement_comm.png|300px|thumb|center|Schéma du déplacement]] | [[Fichier:deplacement_comm.png|300px|thumb|center|Schéma du déplacement]] | ||
| − | == V) | + | == V) Mise en place de la scène == |
Version du 17 avril 2020 à 11:06
Sommaire
I) Description du simulateur
II) Déplacements contrôlés au clavier
L'objectif de cette partie est d’implémenter la possibilité de contrôler un robot avec les touches classiques zqsd afin de permettre la réalisation de tests. Pour ce faire, on faut créer un nouveau contrôleur : Wizards -> New Robot Controller. Notre contrôleur sera nommé Clavier_Control et codé en C++. Une fenêtre éditor s'ouvre alors. Pour gérer le contrôle des moteurs. Nous sommes partis de la base donnée en tutoriel à cette adresse.
Cette base donne les fondations pour pouvoir contrôler en vitesse les moteurs. C'est exactement ce dont nous avons besoin, puisque notre robot doit accélérer lorsqu'on le lui impose. Le code suivant est commenté pour les parties liées au clavier. Le tutoriel concernant la gestion des moteurs sera traduit sur cette page
L'idée générale derrière ce code est d'affecter aux moteurs une vitesse selon la touche enfoncée sur le clavier. On utilise Z et S pour respectivement avancer et reculer, Q et D pour pivoter à gauche ou à droite et enfin A et E pour avancer en pivotant légèrement. Pour cela, on utilise un objet Keyboard existant dans la bibliothèque proposée par Webots.
III) Robot Suiveur simple avec capteurs de distance
a) Description
Dans cette partie, on devait réaliser un robot suiveur rudimentaire en utilisant 2 capteurs de distance afin de comprendre leur fonctionnement. le logiciel webots nous fourni déjà des robots préfait possédant une multitude de capteurs. On a donc utilisé le robot E-puck, possédant 2 roues et 8 capteurs de distances autour de lui (ainsi qu'une caméra, un émetteur et un récepteur).
b) Fonctionnement
Afin d'avoir un robot simple, on utilise seulement les 2 capteurs à l'avant du robot (un plutôt à droite et l'autre plutôt à gauche). Ces capteurs servent à détecter le robot de devant. On fixe un seuil de distance activant ou non 2 booléens "robot_a_droite/gauche". On a donc 4 combinaisons différentes de ces booléens qui vont servir a commander notre robot:
| robot_a_droite | robot_a_gauche | résultat |
|---|---|---|
| faux | faux | avancer |
| faux | vrai | tourner à gauche |
| vrai | vrai | stop |
| vrai | faux | tourner à droite |
c) Résultats
Le résultat est plutôt satisfaisant vue sa simplicité. on remarque que les robots se suivent très bien les uns les autres vue qu'ils ont la même vitesse. Le comportement du premier robot est pas encore stable, mais comme il est censé suivre un humain, son fonctionnement va changer de toutes manières.
d) Suite
Les capteurs de distance on été utilisés ici pour suivre un robot, ou pourrait par la suite les utiliser pour éviter un obstacle. Il faudra pour cela éloigner les robots les uns des autres et leur faire suivre une commande à l'aide des autres parties réalisées
IV) Communication entre deux robots
Pour configurer la communication entre deux robots, au tout début, il a fallu additionner les robots au monde et exécuter la commande “Convert to Base Node(s)” (clique droit sur le robot dans le node tree). Cela a été nécessaire pour pouvoir changer quelques caractéristiques des robots, comme ses noms et le “range” de l'émetteur.
Pour faire le code, on est parti du controller emitter_receiver, trouvé dans un monde de base homonyme. Nous avons eu deux démarches : une consistant à garder le code dans son langage, le C, est à l’adapter et une autre consistant à passer en C++ pour garder une cohésion avec le groupe entier qui code aussi en C++.
Dans les deux cas nous sommes arrivés à mettre en place une communication continue entre deux robots. Nous sommes capables de savoir si la communication se passe bien ou si elle est interrompue et nous avons réussi à transmettre au robot esclave la position relative (le robot esclave est utilisé comme origine d’un système de coordonnées) du robot maître. Nous allons utiliser ces données pour déplacer correctement le robot esclave. Deux solutions s’offrent à nous :
- Se déplacer selon l’axe des X puis l’axe des Z.
- Se déplacer selon l’hypoténuse formée.