Robots suiveurs 3 - Tableau de Bord : Différence entre versions
| Ligne 130 : | Ligne 130 : | ||
== V) Robot avec détection de couleur == | == V) Robot avec détection de couleur == | ||
| + | Le but est ici d'utiliser la caméra du robot E-Puck afin de de pouvoir suivre un objet de couleur, que l'on pourrai par exeple placer à l'arrière d'un robot pour que celui de derrière puisse le suivre. | ||
Version du 17 avril 2020 à 14:51
Sommaire
I) Description du simulateur
Le logiciel Webots est un simulateur robotique 3D OpenSource fonctionnant sous Windows, Mac OS et Linux.
Ce logiciel est très facile à prendre en main car il suffit de l'installer, de le lancer et de jouer avec les exemples livrés avec le logiciel.
Il existe aussi un tutoriel très facile d'accès, très documenté permettant de comprendre la logique du logiciel et d'être rapidement en capacité de créer sa propre simulation.
Ce qui en fait aussi un logiciel très facile d'accès est la possibilité de l'utiliser avec plusieurs langages de programmation grâce à des API complètes.
En effet, les robots peuvent être contrôlés via du C, C++, Python, Java et MATLAB. On peut aussi utiliser ROS.
Les tests sont aussi très agréables à réaliser puisqu'on peut interagir avec le robot et son environnement pendant le test.
Création d'un espace de test 3D
Le logiciel propose à l'utilisateur de créer un espace de test 3D en ajoutant toutes sortes d'éléments.
Ces éléments peuvent être des formes élémentaires : alors le travail fait par l'utilisateur se rapprochera d'un travail de CAO.
Ces éléments peuvent aussi être des objets existant dans la base fournie : du mobilier, des plantes, des fruits, des extincteurs, etc.
Pour tous ces éléments, on peut configurer de nombreuses propriétés : leur masse, leur densité, les frottements auxquels ils sont soumis, leur taille, etc.
De même, pour les robots, il est possible d'en créer un à partir de rien mais beaucoup sont proposés dans la base de robots : du petit robot éducatif Thymio au robot humanoïde Atlas de Boston Dynamics.
Et c'est la même chose pour les actionneurs et les capteurs : une base est fournie et décrite sur le site !
Utilisation d'un controller
Chaque robot peut être associé à un programme appelé controller dont le rôle est de définir le comportement du robot.
Ces controllers peuvent être écrits dans tous les langages supportés par Webots : C, C++, Python, Java, MATLAB. Dans les tutoriels, tous sont présentés mais nous avons choisi de travailler en C++ car tous les membres de l'équipe connaissaient ce langage. Notre objectif n'était pas d'apprendre un nouveau langage de programmation, et le C++ est tout de même très utilisé dans ce domaine.
Au lancement de la simulation, le logiciel lancera un processus par controller utilisé sur chaque robot. On ne peut associer qu'un controller par robot (c'est l’exécutable qui est utilisé) mais on peut utiliser le même controller pour plusieurs robots : dans ce cas, des processus distincts seront créés pour chaque robot.
Interface Graphique
L'interface graphique se découpe en plusieurs parties que l'on peut afficher dans différentes fenêtres.
La fenêtre 3D permet d'afficher et de dérouler la simulation dans l'espace 3D créé plus tôt. Dans cette fenêtre, même pendant une simulation, on peut encore déplacer des objets, les faire tourner, les faire interagir pour tester le comportement de notre robot simulé.
Le "Scene Tree" représente le monde 3D créé. Il comporte des blocs correspondant aux différents éléments créés ou importés tels que les objets ou les robots. En cliquant sur les flèches, il est possible de dérouler les propriétés accessibles sur un composant.
La console, affichée par défaut en bas de l'écran permet de lire des informations de débug ou les résultats de compilation.
On peut aussi retrouver un éditeur de texte permettant de compiler le code écrit afin de le tester dans la simulation.
Pour plus de détails sur les menus et l'interface graphique
II) Déplacements contrôlés au clavier
Introduction
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.
Code
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.
Utilisation
Le code du controller mis en place a pour but de permettre un contrôle manuel du robot. Cette fonction doit entre implantée en début de projet de façon assez rapide pour permettre aux autres équipes de réaliser des tests de façon simplifiée, en ayant la main sur les action du robot en développement.
Les fonctions introduites ne sont pour autant pas Immuable, celles-ci pouvant être modifiées selon les besoins requis, les mouvement pouvant être adaptés.
III) Robot Suiveur simple avec capteurs de distance
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).
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 |
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.
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.
V) Mise en place de la scène
Pour modifier la scène nous nous sommes aidé du tutoriel disponible à cette adresse.
Comme dit précédemment l'interface graphique est plutôt intuitive et il est donc facile de modifier la scène. Tout se fait via le bouton Plus (Add) en haut à gauche entouré en rouge.
Une fois qu'on a cliqué dessus on peut choisir un élément de base (base nodes) ou des éléments déjà existants (Proto Nodes). Dans les éléments existants il y a des objets, des robots, des véhicules... Une fois l'élément choisi il va être placé au centre du sol. La touche MAJ en même temps qu'un click gauche de la souris permet de le déplacer là où l'on souhaite. Cette manipulation est aussi possible via la fenêtre de paramètre de l'objet (accolade en rouge sur la photo).
On peut ainsi choisir de déplacer l'objet via les paramètres de translation, de le tourner via la rotation et enfin de changer sa taille via scale.
Pour les objets déjà existants la méthode scale n'est pas directement accessible il faut faire un click droit sur l'objet et sélectionner "convert to base nodes". Une fois cette opération effectuée, les paramètres scale seront accessibles.
Pour un objet de type solid on peut modifier la forme (Shape) via les paramètres (voir l'exemple du tutoriel situé en haut).
Pour changer le controller d'un robot voir le lien suivant.
V) Robot avec détection de couleur
Le but est ici d'utiliser la caméra du robot E-Puck afin de de pouvoir suivre un objet de couleur, que l'on pourrai par exeple placer à l'arrière d'un robot pour que celui de derrière puisse le suivre.
