- Roboloid -
​Simulation 3D et contrôle d'un robot humanoide
Projet 2015-2016
Ce projet à pour but de créer une interface visuelle qui rend compte du mouvement du robot avec les contraintes physiques (gravité, colisions). Ceci est réalisé grâce au moteur physique Bullet.
Encadrant du projet : Lionel Reveret
Équipe : Ilyes Kacher / Thomas Sajot
Prérequis : programmation C++
Table des matières
0 - Gestion du projet
I - Introduction
II - Travail à l'origine
III - Description du robot Bioloid
IV - Modélisation du corps sous Bullet
-> Quelques simulations Physique
V - Implémentation d'un mouvement simple
VI - Le rendu
VII - Liens utiles
Nous avons commencé ce projet en se répartissant les différentes tâches, à savoir l'analyse du robot, la compréhension du travail précédemment effectué, la simulation physique et le rendu. Il a ainsi été possible de travailler en parallèle tout en aidant l'autre si besoin (beaucoup de peer-programming). Nous avons donc souvent travailler côte-à -côte, deux fois par semaine pendant des sessions de deux à trois heures, et le reste du temps seul en communiquant par mail. Une session sur deux, nous rencontrions notre encadrant pour lui demander conseil, nous donner des cours sur la physique dans Bullet ou des conseils en général. Un historique de nos avancés est mis à jour à chaque session, qui liste les tâches accomplies, en cours et les problèmes rencontrés, en parallèle avec l'application Trello. Cette méthode de travail est très efficace et nous évite de perdre du temps. La décomposition des tâches en sous-tâches donnent une meilleure vision du projet et nous permet de fixer des objectifs atteignables rapidement.
Tâches réalisées :
Procédure d'installation:
Visual Studio est requis pour toutes ces installations, une version gratuite est disponible : Visual Studio Express
Tous les documents nécéssaire sont dans l'archive du rendu. Pour l'obtenir merci de contacter Lionel Reveret.
Installation sous windows.
Installation Simulateur_Physique:
-
Il faut commencer par installer Bullet physics engine :Télécharger l’archive
-
Extraire l’archive
-
Dans le répertoire bullet3-2.83.7/examples remplacer les répertoires ExampleBrowser, DynamicControlDemo par ceux fourni dans l’archive Simulateur_Physique et ajouter le répertoire Humanoid de l’archive
-
Installer CMake : https://cmake.org/install/
-
Dans le répertoire bullet3-2.83.7/build3 lancer le script vs2010.bat
-
Lancer la solution bullet3-2.83.7/build3/vs2010/0_BulletSolution.sln
-
Une fois dans le projet chargé dans l’explorateur de solution
-
Clic droit sur App_ExampleBrowser
-
Definir comme projet de démarrage
-
App_ExampleBrowser -> examples
-
Clic doit Ajouter -> Nouveau Filtre (avec comme nom Humanoid)
-
Sur Humanoid Clic droit Ajouter -> Element existant
-
Chercher les fichiers Humanoid.h et Humanoid.cpp dans le répertoire bullet3-2.83.7/examples/Humanoid
-
-
Compiler en mode release
-
Lancer la solution (Menu Deboguer->Executer sans débogage
-
Une fenêtre graphique ce lance
-
L’exemple de l’araignée est dans API -> Motor Demo
-
La simulation physique du robot est dans API ->Humanoid Demo
-
Le simulateur est opérationnel !!
ConsoleBioloid
-
Dans le répertoire ConsoleBioloid/TestBioloid lancer le projet TestBioloid (fichier de type VC++ Project).
-
Compiler et lancer
ViewerBoiloid
-
Dans le répertoire ViewerBioloid/TestViewer lancer le projet TestViewer (fichier de type VC++ Project).
-
Compiler et lancer
Utilisation de ConsoleBioloid & ViewerBioloid
Ces deux projets sont inter-dépendent il faut lancer l'exécution de ces deux projets pour utiliser le simulateur cinématique. ConsoleBioloid permet d'envoyer des commandes de déplacement (cf help dans cette console) et ViewerBioloid permet de voir le déplacement associé sur un modèle 3D du robot. Pour tester le fonctionnement de ces deux projets il faut les lancer et utiliser la commande test dans la console, le modèle du robot sera animé dans la vue associée.
Bon courage pour l'installation. Suivez-bien les instructions, internet peut-être utile pour vous débloquer.
Un robot autonome, à l'apparence humaine, capable de s'adapter à son environnement pour atteindre son objectif est considéré comme un Robot Humanoïde. Cette spécificité différencie l'Androïde des autres types de robots. Au cours des dernières années, beaucoup de progrès ont été réalisés dans le développement des robots Humanoïdes mais bien des choses restent à faire. Bien que les Humanoïdes actuels ne sont pas suffisamment intelligents ou autonomes, ils font tout de même partie des accomplissements importants de l'humanité. Ces dernières années, les fabricants font différents types de plates-formes humanoïdes qui sont plus accessibles au grand public.
À l'heure actuelle, les systèmes humanoïdes les plus avancés sont conçus avec la reconnaissance vocale, visuelle et gestuelle. Les systèmes de déplacement dynamique avancée rendent les robots capables de marcher, courir, monter les escaliers et même d'éviter des obstacles. Afin de mieux comprendre le fonctionnement du robot, il est primordial de simuler les impacts de leurs mouvements. C'est une sécurité pour le robot, car la simulation donne une idée générale sur le comportement du robot sans avoir à le tester dans la réalité. L'objectif de ce projet est de concevoir une simulation physique simple du robot humanoïd Bioloid.
Le point de départ de ce projet était de reprendre un projet précédent et de le compléter avec une simulation physique du déplacement du robot. Le projet initial contenait le contrôleur cinématique on pouvait ainsi réaliser des tests de déplacement en 3D avant de les faire passer sur le robot. Cependant ces tests cinématiques ne sont pas suffisant car ils ne prennent pas en compte la gravité, rendant impossible le test de chute du robot.
Le kit Robotique BIOLOID est un produit de Robotics, un fabricant coréen, utilisant des servo-contrôleurs précis qui fournissent des informations sur le courant, la tension, la position et de détection de température. Il dispose d'une carte contrôleur bien documentée et un protocole de commande d'asservissement. Le robot a 18 degrés de libertés qui sont contrôlés par des actionneurs haute puissance AX-12. La figure 1 montre la répartition des servo-moteurs dans le robot, et la Figure 2 représente les axes de rotations.
La simulation physique se base sur des mesures du robot. La première étape du projet passe donc par le prélèvement des informations sur le poids et la forme des pièces les plus importantes du robot. On néglige l'influence du poids des vis, des cables, et des pièces de petites tailles.
- Servo-moteurs : 55 g
- Piece en plastic 1 : 7g
- Piece en plastic 2 : 15g
Figure 2 : axes de roations des servo-moteurs
Figure 1 : répartition des servo-moteurs
Du point de vue software, on a appris à utiliser le kit logiciel fournis avec le robot. Le fichier remise à état d'usine est utile pour remettre le software du robot dans une configuration stable (voir les liens utiles). Un fichier checkmotor a été crée pour vérifier le bon fonctionnement du moteur. ATTENTION: tenir le robot lors du teste pour éviter une chute.
Avant de faire la modélisation du robot, nous avons pris en mains Bullet en manipulant leurs exemples déjà existant. En particulier, nous nous sommes donné comme objectif de faire avancer une araignée (Example/MotorDemo/ dans la bibliothèque Bullet). Ce travail nous a familiarisé avec la notion d'articulation (joints) et de pivot (hinge), mais aussi de la manière dont bougent les membres les uns par rapport aux autres.
En s'inspirant du mouvement des araignées (les vrais, bien vivantes) et en l'adaptant à un corps sphérique, nous obtenons le déplacement de la Figure 3. CF code : App_ExampleBrowser/DynamicControlDemo/MotorDemo.cpp @ setmotortargets()
Figure 3 : vidéo déplacement d'une araignée
Corps fixé dans le repère monde
Corps Libre
En se basant sur l'exemple de l'araignée de Bullet et un modèle d'humanoïde, le RagDoll, nous avons construis un modèle 3D du robot Bioloid. Cependant, la difficulté principale a été de choisir quels types de contraintes doivent être utilisés. Dans Bullet Physics, il existe trois contraintes qui gèrent les axes de rotations : Hinge / Point2Point / ConeTwist.
-
Hinge ne possède qu'un degrés de liberté, c'est un axe de rotation, il peut être "motoriser" ce qui signifie dans le jargon de Bullet que l'on peut engendrer un mouvement selon cette axe entre deux objets liés par cette contrainte.
-
Point2Point est la contrainte entre un point et un plan, il a ces trois axes de rotation libre (lacet, tangage et roulis). Cette contrainte ne peut pas être motorisé dans Bullet. Elle est passive, ce qui de facto l'exclu de nos choix, car pour faire bouger le robot, il nous faut lui donner un mouvement.
-
ConeTwist est identique à Point2Point mais qui est motorisée. Pour les axes de roations au niveau des coudes ou des genoux, des Hinge sont utilisés. Le dilemme se pose au niveau des épaules, des hanches et des chevilles, là où les axes de rotations se complètent pour autoriser des mouvements plus complexe. On s'est posé la question de regrouper ces axes en une seule liaison, pour êtres plus fidèle au modèle humain (qui est l'objectif du robot).
Cette agglomération des axes de rotation nous pose plus des soucis au niveau de l'épaule du robot. L'objet de cette simulation est d'afficher des objectifs donnés aux moteurs du robot. Regrouper ces axes nous oblige à ajouter des fonctions pour convertir ces (angles) objectifs dans la simulation physique. L'épaule simulée va donc suivre rigoureusement l'ordonnancement des axes de rotations au niveau de l'épaule du véritable robot.
Par contre, nous sommes obligés de faire ce travail supplémentaire pour les hanches et les chevilles dont le comportement et l'agencement physique dans le robot sont différents. Au niveau de la hanche, le groupe des trois axes (gérés par les moteurs 7/9/11 et 8/10/12 cf Figure 3) ont comme équivalent une liaison rotule, soit un ConeTwist libre sur tous ces axes dans Bullet. La cheville quant à elle (moteurs 15/17 et 16/18 cf Figure 3) est une liaison sphérique à doigt, soit un ConeTwist dont l'un des axes est fixe.
Nottons que cette représentation simpliste du robot est réalisée avec un ensemble de 13 pavés (appelé rigid body), ordonnés en un arbre dont la racine est le buste. Il y a donc quatre branches qui définissent les deux bras et les deux jambes. Cet arbre est "implicite" car il est induit par la succession des liaisons mécaniques entre chaque rigid body. Cette représentation en arbre est utile pour réaliser le mouvement et est entièrement géré par Bullet.
Simulations Physique
Prototype avec une cheville à une liaison Hinge
Buste du Robot Fixe
Buste du Robot libre
Buste du Robot libre avec compensation du balancement au niveau des pieds
Prototype avec une cheville à deux liaisons Hinge
Teste libre
Teste avec compensation au niveau du genoux (faible / peu visible)
Tentatives de faire tenir le robot debout
Équibre avec bassin en arrière
Équilibre en se tenant droit
Le projet a commencé par l’étude d’un mouvement pour le robot : monter une marche. Le fichier PDF ci-joints présente la première étape de ce travail. Dans ce fichier nous trouvons une fonction qui les 3 angles nécessaire (hanche, genoux, cheville) pour monter un pied à la hauteur h et à la distance d du robot et le conserver parallèle avec le sol.
L’archive Rendu_Fablab_Bioloid_2016_Kacher-Sajot contient l’intégralité de notre travail sur la partie programmation. Cette archive est disponible sur le site de l'ENSIWIKI ou au-près de Lionel Reveret.
Cette archive contient le Simulation_Physique contient les sources associés à l’exemple de l’araignée et de la simulation physique du robot. ConsoleBioloid contient le projet Visual Studio du contrôleur du projet initial. ViewerBioloid contient le projet Visual Studio de la vue du projet initial. La section Procédure d’installation décrit les procédure d’installation des éléments cité précédement. Le répertoire Fichier_Configuration_Robot contient les fichiers tsk de remise à l’état d’usine remise_etat_usine.tsk et de vérification du fonctionnement des moteurs motor.tsk. Ces fichiers sont à utiliser avec le logiciel fournit avec le robot RoboPlus (disponible dans le CD d’installation c.f. Support Technique Robotis dans les liens utiles).
Sur ce site il y a des informations sur le projet à réaliser et quelques liens pour commencer.
Lien du projet de contrôleur cinématique associé au projet
Ce projet a été passé sur Visual Studio à partir
Cours de physique pour l’informatique
Tutoriel pour contrôler le robot à partir d’un projet C++
Ce lien est très utile pour créé un nouveau controleur avec un module plus récent.
Voir la section ROBOTIS ACADEMY -> Robotis Premium
Cette section contient toutes les informations basique sur le robot (installation du cd, utilisation des logiciels fournis, remise du robot à l’état usine …)
Fichier pdf d’analyse du robot
Il n’est pas très utile de le regarder sauf pour avoir une compréhesion plus poussée du robot
Site officiel de Bullet Physics Engine
Permet de télécharger la solution Bullet pour la simulation physique
Bullet le fait pour nous, ça peut être utile en fonction des besoins pour la suite du projet.