P20 Projet marionnette déformable interactive
Cahier des charges
Présentation générale du projet
Contexte
Dans le cadre de ma cinquième année j'ai choisi de faire mon projet de fin d'études chez l'équipe DEFROST du laboratoire INRIA. Cette équipe a pour thème de travail la robotique déformable. Pour ce projet il s'agit de la mise en place d'un démonstrateur interactif dans lequel l'utilisateur pilote une marionnette déformable à travers d'un LeapMotion. Une simulation temps réel de la marionnette, grâce au simulateur SOFA, pilotera la version réelle du robot déformable.
Description et objectifs
Le projet consistera principalement de deux étapes:
- La première sera d'améliorer la version actuelle de la plate-forme d'actionnement. L'objectif est de la rendre généralisable, c'est-à-dire de pouvoir changer plus facilement de marionnette à actionner. Étant donné qu'actuellement cette procédure est très longue et fastidieuse.
- Deuxièmement, l'ajout d'un système d'actionnement contrôlé pour faire coulisser la plate-forme dans le plan X et potentiellement Y également. Ainsi que l'intégration du système de contrôle dans une carte de contrôle. Une carte Arduino sera utilisé dans un premier temps mais il est envisagé de passer à une carte plus puissante, Teensy 3.2 ou même 3.5 si besoin.
Calendrier prévisionnel
Avec l'ingénieur Recherche et Développement de l'équipe DEFROST, nous avons pu établir le calendrier prévisionnel suivant. Ce calendrier pourrait être mis à jour par la suite en fonction de l'avancement du projet et des éventuelles circonstances.
- Début Novembre: Mettre à jour l'organisation des moteurs sur la plaque et avoir la nouvelle plaque des moteurs de prêt.
- Début Décembre: Formation sur le logicielle de simulation et contrôle des corps déformable SOFA. Ainsi que se familiariser avec la scène contenant la marionnette et les capteurs utilisé pour détecter la main, sa forme ainsi que sa position.
- Mi-décembre: Prendre une décision concernant le micro-contrôleur à utiliser par la suite, soit continuer avec Arduino ou changer vers Teensy.
- Début Janvier: Équiper la plaque de moteurs pour avoir dans un premier temps un mouvement sur l'axe X (cf photo 2).
- Fin Janvier: Mapping de la main, c'est à dire d'associer la main et les doigts à certains parties de la marionnette pour pouvoir la contrôler et de prendre en compte un mouvement dans l'axe X.
- Février: Prospectif d'ajouter un mouvement de la plaque dans l'axe Y. Tester le système et faire des améliorations où c'est possible.
Feuille d'heures
Tâche | Semaine 38 | Semaine 39 | Semaine 40 | Semaine 41 | Semaine 42 | Semaine 43 | Semaine 45 | Semaine 46 | Total |
---|---|---|---|---|---|---|---|---|---|
Présentation du projet et objectifs | 1 | 1 | |||||||
Rédaction du wiki | 2 | 0,5 | 0,5 | 2 | 0.5 | 0.5 | 6 | ||
Mise-à-jour de la plaque des moteurs (recherche d'améliorations) | 2 | 2 | 2 | 6 | |||||
Prise en main du Gesture Sensor ZX | 1,5 | 1,5 | |||||||
Familiarisation avec la librairie de contrôle des moteurs | 1,5 | 1,5 | |||||||
Préparation de la plaque des moteurs | 2 | 4 | 6 | ||||||
Impression et préparations des pièces 3D | 2,5 | 2 | 4 | 8,5 |
Avancement du Projet
Semaine 38
L'objectif de cette semaine était de rencontrer l'équipe avec laquelle je vais travailler et de me présenter au projet. Grâce à la réunion de cette semaine, j'ai une idée initiale des objectifs à réaliser ainsi qu'une liste de tâches sur lesquels commencer la semaine prochaine. Vous trouverez ci-dessous une liste d'objectifs sur lesquels nous nous sommes mis d'accord cette semaine:
- Rendre le dispositif plus modulaire et plus fiable. La procédure de changement de marionnette et très longues, ce qui poses des problèmes lors des démonstration. C'est pour cela qu'il est important de rendre cette opération essentiel le plus efficace possible.
- L'actuel disposition des moteurs n'est pas optimale. Il y a un jeux avec les socles des moteurs actuel et les engrenage traverse la plaque supérieure (cf photo 1), ce qui rend la gestion d'espace plus difficile (cf photo 1). Cela sera la première tâche sur laquelle je vais travailler, des nouvelles socles moteurs ont était crée et il faut donc imprimer assez pour tout les moteurs et mettre en place une nouvelle matrice de moteurs (plaque de moteurs actuel en photo 2).
- Les moteurs actuel ont pour but de faire bouger le corps de la marionnette ainsi que créer des mouvements sur l'axe Z. Mais des mouvements de la marionnette entière dans le plan XY (cf photo 2) n'est actuellement pas possible. Cela est également un problème à résoudre, il faut donc trouver une solution valable à implémenter.
- La carte Arduino actuellement utiliser cause des retard de réponse, même minimale, une migration de microcontrôleur vers une carte Teensy plus puissante est souhaité pour éliminer les retards.
Semaine 39
Durant cette semaine j'ai essayé de trouver une solution d'horaires pour mon projet au laboratoire. Effectivement les personnels arrivent vers 9h30 et c'est compliqué de travailler durant certains séances. Nous sommes toujours en train de discuter du sujet pour trouver une solution.
J'ai néanmoins pu réfléchir sur un nouveau plan de placement des moteurs et une méthode d'installation de fils connectant les moteurs et la marionnette. J'attends actuellement de re-rencontrer l'équipe pour en discuter de la faisabilité de mes idées et de savoir s'il faudrait changer quelque chose avant de commencer la création d'une nouvelle plateforme pour les moteurs.
Semaine 40
Durant la première séance de cette semaine j'ai reçu un "ZX gesture sensor", ce dispositif va nous permettre de suivre la position de la main de l'utilisateur et de d'actionner la marionnette en fonction de cette information. J'ai ensuite fait un simple montage avec un Arduino pour pouvoir le tester et en déduire si cela nous sera utile et si oui comment l'utiliser. Le champs de détection de ce capteur étant assez restreint et ses valeurs pas assez fiable, nous allons s’intéresser beaucoup plus à un Leapmotion pour ce qui concerne la détection d'une main.
Malheureusement je n'ai pas pu rencontrer l'ingénieur R&D de l'équipe pour discuter des solutions que je voudrais proposer pour ce qui concerne l'organisation des moteurs et l'installation des fils actionneurs.
Semaine 41
J'ai commencé la semaine par lire la documentation des servomoteurs ainsi que me familiariser avec la librairie Arduino qui va être utilisé pour les contrôler (Herkulex).
Ensuite j'ai pu discuter avec l’ingénieur R&D par rapport au solutions que je voudrais proposer concernant l'organisation des moteurs et l'installation des fils de contrôle. Ma proposition d'organisation a été accepté et nous allons poursuivre pour la réaliser, cf photo 3. La pièce a été ensuite envoyé à la découpe avec les dimencions 46cmx30cm. Mon idée idée installation des fils de contrôle n'as pas pu être acceptée à cause des éventuelles problèmes qui peuvent surgir lors du fonctionnement ou calibration de la marionnette. Je vais donc y revenir sur ce point par la suite.
J'ai récupéré les modèles 3D des pièces nécessaire pour tenir les moteurs en place sur la plaque de bois. L'ingénieur R&D m'as ensuite rappelé l'essentiel pour pouvoir utiliser l'imprimante 3D pour pourvoir imprimer les pièces nécessaire durant la semaine prochaine. Il y avait déjà plusieurs pièces d'imprimé, j'ai donc pris ces pièces là pour les nettoyer et les préparer à l'utilisation.
Semaine 42
J'ai pu commencer cette semaine à réaliser la plaque de moteurs que j'ai proposé. Il y avait déjà des socles moteurs imprimées mais j'ai aussi imprimé deux. Ensuite, j'ai nettoyer et lisser les pièces pour les préparer à l'installation. Une fois que les socles était installé, j'ai dû faire les trous traversantes pour installer les fils qui vont relier les moteurs et la marionnette. Cf photo 4.
Cette semaine j'ai également pu commencer à m'initier à l'utilisation d'un driver (DRV8825) pour contrôler le moteur pas à pas, qui servira à bouger la planche de moteurs sur l'axe X.
Semaine 43
Cette semaine j'ai proposé des modification à certains pièces qui pourront rendre les pièces imprimées 3D moins fragile et moins susceptible à la casse. Ensuite j'ai du effectuer les modifications sur le logiciel blender ainsi que les imprimer. J'ai malheureusement eu des problèmes techniques concernant l'imprimante lors de deux essaies. Je dois donc attendre le retour de l'ingénieur R&D de l'équipe pour réparer l'imprimante et continuer mes tests.
J'ai aussi continuer de travailler sur le moteur pas à pas et le code Arduino lui concernant.
Semaine 45
#define PINstep 10 #define PINdir 8 const long int stepspermm = 800; const int periode = 28; long int stepperposition = 0; byte header; unsigned char positions[13] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; long int steps; void setup() { OCR1A = periode; TCCR1B = TCCR1B & 0b11111000 | 0x12; pinMode (PINdir, OUTPUT); analogWrite(PINstep, 0); Serial.begin(115200); // Open serial communications analogWrite(PINstep, 0); } void loop() { analogWrite(PINstep, periode >> 1); for (long int i = 1; i < 1000; i++) { delayMicroseconds(periode); } analogWrite(PINstep, 0); }
Semaine 46
J'ai commencé cette semaine par lancer un impression 3D des pièces pour fixer les moteur sur la nouvelle plaque de moteurs. J'ai imprimé moins de pièces cette fois en espérant ne pas avoir de problèmes durant l'impression.
En parallèle, je continue à faire des tests sur des technologies qui pourront être utilisé pour la détection de la position de la plaque des moteurs, cette semaine j'ai commencé à tester un capteur ultrason (Ultrasonic Sensor - HC-SR04). Ce capteur est facile à prendre en main et assez précis au niveau des mesures de distance des objets situé devant ceci, je continue donc de le tester mais je pense que ça sera la technologie que nous allons employer pour cette fonctionnalité.
#define trigPin 13 #define echoPin 12 void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { long duration, distance; //In order to generate the ultrasound you need to set the Trig on High for 10µs digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // v=340m/s et donc 0.034cm/µs //The echo pin will outuput the time in µs the sound wave travelled back and forth duration = pulseIn(echoPin, HIGH); distance = (duration*0.034/2); /*http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/*/ //print result Serial.print(distance); Serial.println(" cm"); delay(500); }
La première impression lancé a aussi échoué, le fil de PLA a été coincé et ne sortais plus de l'embout de l'imprimante. J'ai donc remplacé le fil par un autre qui est plus flexible et relancé une impression de test.