IMA3/IMA4 2021/2023 P14
Sommaire
Résumé
Le projet BraVeD (projet n°14) acronyme de "Bras Virtuel Distant" consiste en un système de manipulation d'un bras robotique à distance qui recopie les mouvements du bras de l'utilisateur avec un retour visuel dans un casque de réalité virtuelle. Des caméras placées autour de l'opérateur permettent de capter les mouvements de son bras, de les analyser et de les reproduire avec le bras robotique. Le casque de réalité virtuelle permet à l'opérateur de contrôler le bras comme s'il s'agissait de son propre bras. L'ajout de la vision 3D augmente encore cette immersion en offrant un retour en temps réel des actions du bras. Le but final est de pouvoir contrôler le bras robot depuis n'importe quel endroit possédant une connexion internet. Nous pourrions de ce fait déplacer le savoir-faire humain, ses compétences et son analyse dans des situations où ce dernier ne serait agir. Nous inscrivons BraVeD dans l'avenir. En cette nouvelle ère de digitalisation, notre projet offre la possibilité à n'importe qui de travailler n'importe où.
Voici le lien de la vidéo de présentation du projet : Vidéo de présentation du projet BraVeD
Présentation générale
Un projet est avant tout les personnes travaillant à sa réalisation. Nous nous présentons à vous. Nous sommes un groupe de 4 étudiants de SE 4 :
- Julien CHARLEUX
- Karl HABRE
- Thomas LEFRANC
- Tanguy RIDREMONT
Le projet BraVeD est constitué de 3 parties majeures :
- Le système mécanique : bras robotique
- La reconnaissance d'image : intelligence artificielle et traitement des données
- La transmission des données : transfert des flux vidéos et des commandes au bras
Contexte
Avant de commencer, nous devons mieux définir le sujet qui nous est donné, lui donner un cadre. Pour nous aider, nous réalisons le diagramme “bête à cornes” ci-dessous :
Nos recherches d’idées seront donc axées sur le principe suivant : le bras robot doit être capable de reproduire les mouvements du bras de son utilisateur tout en offrant une commande intuitive. Nous offrons aussi un retour visuel afin que l’opérateur ait l’impression que le bras robotique est un prolongement de son propre bras. Nous ajoutons la possibilité d’utiliser notre système depuis n’importe quel endroit.
Nous souhaitons réaliser un bras manipulateur pouvant s’adapter à plusieurs situations, il est donc difficile de fixer un client type. Cependant, nous pouvons cibler certains domaines : la manutention, l’art, la santé et l’industrie.
Pour donner un exemple, prenons un joaillier. Son savoir-faire est unique et lui permet de travailler avec précision. Notre bras pourrait lui permettre d’appliquer son art à une différente échelle tout en gardant une utilisation simple afin de pleinement lui permettre de réaliser son travail.
Objectif
Cahier des charges
Le sujet donné étant assez large, nous devons nous fixer un cadre et approfondir. Le but est de construire un bras manipulateur contrôlé par la réalité virtuelle. Nous choisissons de définir plusieurs points clés qui définissent notre projet. Nous appelons ces points “fonctions principales” :
- FP1 : Doit permettre des manipulations efficaces
- FP2 : Doit pouvoir communiquer avec l’utilisateur
- FP3 : Doit respecter les normes de sécurité
- FP4 : Doit être modulable
- FP5 : Doit être résistant
- FP6 : Doit être ergonomique
- FP7 : Doit avoir un prix raisonnable
- FP8 : Doit être respectueux de l’environnement
A partir de ces axes principaux, nous avons explicité des fonctions complémentaires permettant de créer un cahier des charges détaillé. Ce cahier des charges contient l’ensemble des points que l’objet final doit pouvoir respecter ou effectuer. Les priorités sont fixées pour la réalisation du prototype. Nous fixons des limites à notre projet afin de le rendre réalisable mais en gardant les fonctions qui semblent intéressantes à implémenter.
Diagramme pieuvre / APTE :
Notre cahier des charges : Fichier:Cdc P14.pdf
Description
Faire un choix parmi les idées proposées ne fut pas une étape facile. Cependant, nous nous sommes vite accordés. L’idée permettant de contrôler un bras robotique à partir des mouvements de son propre bras semblait assez novatrice. De plus, après une rapide étude de faisabilité, cette solution nous a paru la meilleure. Nous aurions aimé pouvoir ajouter l’option du retour de force au système, mais faute de moyen et de temps nous avons abandonné cette idée.
Ce schéma nous montre comment l’ensemble du système que nous souhaitons développer est censé fonctionner. De gauche à droite, nous avons : 2 à 3 caméras permettant d’observer les mouvements de l’utilisateur. Une 3ème caméra servirait dans le cas où nous voudrions implémenter la retranscription des mouvements des 2 bras de la personne. Le flux vidéo est ensuite transmis vers une unité de traitement de données (Raspberry PI) qui va convertir le mouvement des bras en vecteurs dans un référentiel en 3 dimensions. Ce même Raspberry PI servira à transmettre le flux vidéo reçu vers le casque de réalité virtuelle. Pour envoyer et recevoir des données, nous passons par un routeur WiFi connecté, de préférence, au réseau en Ethernet pour une meilleure stabilité et une connexion plus rapide. Celui-ci transmettra vers un deuxième routeur situé à distance (quelques mètres ou à des milliers de kilomètres) communiquant avec la deuxième unité de traitement des données (Raspberry PI) Le rôle de ce Raspberry PI sera de transmettre les informations de déplacement au bras manipulateur directement (si nous utilisons un protocole UDP, sinon nous passerons par l’intermédiaire d’une carte Arduino). De plus, il servira à combiner le flux vidéo des 2 caméras situées au niveau du robot pour former une image 3D visualisable par un casque de réalité virtuelle.
Ce modèle peut être amené à changer au fur et à mesure de notre avancement, des potentielles difficultés rencontrées ou si de meilleures solutions sont trouvées. Par exemple, si nous disposons d’une caméra 3D, nous pourrions éviter la conversion des 2 flux vidéo si cela nous permet de garder une bonne qualité d’image. D’autres changements dans le même genre pourront être envisagés en fonction de notre avancement l’année prochaine.
Réalisations et résultats du semestre 7
Système mécanique
Le bras que nous utilisons pour ce projet et le bras NED de la société Niryo. Nous avons choisi ce bras (ci-contre) car il remplissait la majorité de nos attentes :
- Ses proportions sont proches de celles d’un bras humain.
- Ses articulations permettent plus de liberté dans les mouvements possibles.
- La communication sans fil nous permet de contrôler le bras en aillant un espace de travail sans câble.
- Le robot peut être commandé par un programme Python qui est un langage de programmation que nous connaissons bien.
Pour la commande du bras, nous avons décidé de développer deux modes pour laisser le choix en fonction des performances obtenues pour chacun d'entre eux.
- Le premier utilise les commandes fournies par le package du robot Niryo NED. Nous saisissons les valeurs de rotation des angles souhaitées sur un ordinateur. Le robot se déplace alors à cette position.
- Le second se base sur les coordonnées de l'articulation du "poignet" par rapport au socle du robot. En utilisant les touches du clavier, nous changeons les coordonnées X, Y et Z de cette articulation. Le robot effectue les mouvements choisis. Ce mode de commande nécessite plus de calcul car il se base sur la résolution d'un système d'équations pour trouver les valeurs des angles nécessaires pour atteindre les coordonnées.
Lien de la démonstration du second mode de commande : Vidéo de démonstration
Le développement du modèle mathématique nous a également permis de créer une représentation graphique du bras pour vérifier que la position dans laquelle est le robot est bien celle ordonnée par les commandes. Cependant, le développement de la modélisation a retardé l'interface de contrôle du robot qui n'est pour l'instant qu'à l'état d'ébauche :
Les résultats de notre travail sont présents. Les deux modes de commandes fonctionnent et offre une précision correcte. Cependant, nous relevons plusieurs problèmes suites aux essais que nous avons réalisé :
- Le temps de réponse du robot est long. Si le déplacement demandé est très éloigné la position actuelle du robot, son déplacement prendra du temps à s'exécuter. A chaque déplacement lancé par le code Python, ce dernier n'effectue par d'autre calculs tant que ce déplacement n'est effectué.
- Le modèle mathématique actuel ne présente que 3 des 6 articulations que possède le bras. La prise en compte des autres augmentera significativement le temps de résolution du système d'équations.
Nous avons donc chercher des solutions et des changements que nous devrons réaliser pour obtenir un meilleur résultat :
- Si le programme de commande des moteurs du robot fourni avec le package Pyniryo est lent, nous pouvons essayer de trouver un moyen de commander nous même les moteurs et de refaire l'asservissement. Dans le cas où l'opération serait impossible, il faudra refaire la commande sur un autre bras offrant une meilleure réactivité.
- Le modèle mathématique doit être améliorer afin de prendre en compte l'intégralité des articulations. Cependant comme le calcul des coordonnées se fait à partir de la pince, le système d'équation resterait identique.
Intelligence artificielle
L’intelligence artificielle est un script python basé sur le réseau de neurone Pose de Mediapipe celui-ci renvoie la position des différentes articulations ou points importants pour décrire la position du corps. Le programme fait tourner l'algorithme suivant deux points de vues gérés par des caméras dont les informations sont elles même récupérées via OpenCV. Celà permet de reconstituer plus précisément la position 3D du corps et de corriger de potentielles erreurs. L’objectif à terme est de récupérer uniquement les coordonnées du bras et de transformer ces coordonnées en l’angle des articulations qui pourra permettre de restituer les mouvements sur le bras d’un robot.
Le principale inconvénient de cette méthode est la puissance de calcul nécessaire. Il faut faire tourner un algorithme relativement demandeur en puissance de calcul en double sur une seule machine ce qui nécessite d’optimiser l'algorithme et donc de perdre en précision. Le prototype devant rester portable, il n’est pas possible de faire porter à l’utilisateur une grosse machine alors que ce même utilisateur doit déjà porter la structure de maintien des caméras.
Plusieurs solutions d’optimisation existent: -La première consiste à réduire dans un premier temps la précision de l’algorithme même si les coordonnées du bras sont relativement peu précise puis à zoomer sur l’image à la position relative du bras et faire tourner l’algorithme que sur cette position à plus haute performance la réduction du nombre de pixel permettra à l’algorithme de réduire son temps de calcul et les données du bras resteront précise. -La seconde consiste à réduire la fréquence des images pour laisser plus de temps à l’algorithme pour calculer ces coordonnées mais dans cette situation on prend le risque de réduire le temps de réponse du système. Les tests du prochain semestre nous diront ce qu’il adviendra de ces solutions.
Transmission de données
Concernant la transmission des données, encore une fois nous avons choisi de nous servir de scripts Python, ce qui permet de faire facilement le lien avec les autres programmes en développement pour notre projet. Dans un premier temps, on récupère un ou plusieurs flux vidéos (image par image) à l'aide de la librairie cv2 (OpenCV) à partir de cameras que l'on branche sur les ports séries de notre machine.
Ensuite, notre script permet d'établir la communication entre deux ordinateurs distants via le réseau Internet. Pour outrepasser les sécurités des réseaux de l'université, nous créons un réseau local virtuel via Hamachi. La communication se fait via des paquets en UDP/IP et sert principalement à envoyer un flux vidéo en temps réel entre les deux ordinateurs.
La seconde majeure partie concerne la liaison entre un ordinateur et le casque de réalité virtuelle. Pour le moment, nous nous servons de Vizard pour établir la communication entre le casque et l'ordinateur en Python. Cet outil nous permet d'envoyer le flux vidéo directement vers le casque, tout en ayant la possibilité d'y ajouter l'affichage d'informations importantes. Cependant, cet outil étant limité à des utilisations de 5 minutes maximum, nous sommes actuellement à la rechercher d'alternatives plus viables.
Réalisations et résultats du semestre 8
Bilan
Lors de ce semestre, nous avons acquit de nombreuses compétences techniques dans les domaines sur lesquels nous avons travaillé. Que ce soit le maîtrise de moyen de connexion distant, la commande d'un bras ou la gestion d'une intelligence artificielle. Ce projet nous force à développer nos compétences transversales. De ce fait, nous apprenons à gérer une équipe, à se transmettre les informations nécessaires. La planification est importante car elle structure le projet et permet à chacun d'adapter son travail à celui des autres. Ce point sera particulièrement important au prochain semestre pour coordonnées les avancements de chacun si les séances de projets n'ont pas lieu en même temps pour chaque membre de l'équipe.
Gestion de projet
Lors des premières séances de travail, nous avons décider de répartir les rôles pour la création du système complet. Ainsi, chacun des membres est responsable d'une partie décrite précédemment. Cette organisation a changé au semestre 8 suite à l'avancée plus rapide de certaines tâches. Vous pouvez trouver la répartition que nous avons utilisé sur les semestres 7 et 8 :
- Julien CHARLEUX, Karl HABRE : mise en place de la partie transmission des données et de l'affichage dans le casque VR
- Thomas LEFRANC : création du nouveau bras et implémentation de la reconnaissance d'images
- Tanguy RIDREMONT : création de la commande du bras (Niryo NED), implémentation de la reconnaissance d'images et de l'extraction des commandes
Cette méthode de travail permet à chacun des membres de se concentrer entièrement sur sa partie. De plus, comme nous travaillons dans la même salle, nous échangeons souvent afin d'adapter notre travail selon l'avancement de chacun.
GANTT prévisionnel du semestre 6 :
Cette version du diagramme de GANTT a été réalisé au semestre 6 lors de l'étude du projet donc avant toutes réalisations physique. En foncé, il s'agit du temps incompressible alloué à chaque tâche. En clair, il s'agit des créneaux horaires sur lesquels chaque tâche peut déborder. Cette convention sera gardée pour chaque diagramme réalisé plus tard.
GANTT prévisionnel du semestre 7
Ce diagramme de GANTT montre l'organisation adoptée pour le semestre 7 et celui a adopté pour le semestre 8. Les parties en bleues sont réservées pour assurer le fonctionnement du système et faire les derniers réglages. Nous avons appliqué beaucoup de modification par rapport à celui établi au semestre précédent. Ces modifications sont liées directement à la répartition des tâches que nous avons choisi. Comme nous avions mieux définis le projet à ce moment, nous pouvions mieux définir ce qu'il restait à faire.
GANTT réel du semestre 8
Les modifications apportées au digramme du semestre 7 sont moins importantes que les changements du semestre 6 au 7. Les tâches ont un peu évoluées mais les tâches à réaliser sont les mêmes. Le changement principal vient de la création d'un nouveau bras et de la nouvelle répartition des tâches qui permet sa réalisation.
Compte-rendu 18/01/2023
Avancement cette semaine :
- Recherche d’alternatives à Vizard pour la communication avec le casque de réalité virtuelle
- Exploration de nombreuses librairies sur git, mais aucune de fonctionnelle avec notre casque
- Téléchargement et découverte de Unity permettant de développer une application pour le casque
- Communication entre Unity et Python via l’ouverture d’un socket en 127.0.0.1 (c’est à dire en interne de l’ordinateur)
- Création d’un API implémentant des PIDs
- Utilisation d’un nouveau mode de commande du bras
- Construction d’un support pour les 2 caméras afin d’avoir un grand angle
*Mesure, découpe, perçage, ponçage, rigidification, tests
Points à développer la semaine prochaine :
- Mettre la solution unity + python en pratique sur le casque
*Voir comment installer un APK sur le casque (adb debugging) *Mise en place de la communication entre unity et notre programme python *Manque des rallonges usb pour le support de caméras
- Adaptation des algorithmes à la structure construite
- Changer les structures de données du programme de commande du bras
Equipements
Liste des équipements demandés
- Bras robotisé Niryo Ned + alimentation + câble Ethernet (reçu)
- Raspberry Pi 3 1.2B + câble micro USB (reçu)
- Raspberry PI 4 (reçu ×2)
- Routeur WiFi TP-Link (reçu)
- Caméra 3D (à disposition)
- Casque VR HTC Vive Pro (à disposition)
- 2x Rallonge USB (male-femelle)
- 1 câble USB male vers Ethernet RJ45 femelle
Mode d'emploi
-- Mode d'emploi à venir --