P28 Modélisation d'un robot chirurgical déformable pour la simulation et le contrôle

De Wiki de Projets IMA
Révision datée du 24 février 2015 à 14:49 par Cbricout (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Logo polytech.jpg

Charlotte BRICOUT & Nathan MARTIN

Élèves Ingénieurs à Polytech Lille

Projet de Fin d'Etudes (PFE)

Rapport intermédiaire: Fichier:-BRICOUT MARTIN--Rapport PFE.pdf

Lien vers la vidéo :

Contexte du projet de fin d'études

Logo inria.jpg


Dans le cadre d'un projet commun avec le King's College de Londres, l'équipe Shacra de l'INRIA de Lille va travailler pendant 2 ans sur un projet de robot déformable. L'objectif est de contrôler des robots non-rigides qui pourraient faire progresser la chirurgie non invasive. A terme, le laboratoire envisage de créer un endoscope pneumatique. Actuellement, les robots sont de types pneumatiques et le contrôle est effectué en emplissant ou vidant des volumes d'air. Le projet pourrait évoluer avec un contrôle hydraulique qui serait plus précis grâce à une mesure de l'eau injectée dans les cavités.


Description des missions à réaliser

Les objectifs du projet sont :

  • Développer un modèle FEM (Finite Element Method) du robot sur la plateforme logicielle SOFA
  • Mettre en place une simulation temps réel SOFA
  • Faire un prototype pneumatique simplifié de l'endoscope afin de valider le contrôle du robot par le biais d'une simulation informatique. Pour mener à bien le projet, une partie de contrôle bas-niveau des régulateurs de pression sera nécessaire
  • Réaliser le contrôle pneumatique du prototype
  • Mettre à jour le plug-in SOFA pour la communication série entre la simulation informatique et le prototype relié au dispositif de contrôle pneumatique
  • Interfacer la simulation avec le prototype réel. C’est-à-dire permettre le contrôle du robot par le bais de la simulation informatique
  • Faire une étude de faisabilité pour passer de la technologie pneumatique à hydraulique

Le principe de fonctionnement global suit le schéma suivant :

Schema principe.JPG

Ressources à disposition

Logo sofa.png

Le logiciel SOFA

SOFA est une plate-forme de recherche et développement dédiée aux simulations physiques interactives et en particulier à la simulation médicale. La plate-forme regroupe de nombreux algorithmes issus de domaines de recherche variés. Des modèles de natures différentes peuvent être combinés de façon à produire des simulations complexes qui restent compatibles avec des temps de calcul optimaux.
Logo blender.png


Le logiciel Blender

Blender est un logiciel libre de modélisation, d’animation et de rendu en 3D. Il dispose de fonctions avancées de modélisation, de sculpture 3D, de texturage, d’animation 3D et de rendu. Le logiciel prend en charge diverses simulations physiques telles que les particules, les corps rigides, les corps souples et les fluides.

Logo gid.jpg



Le logiciel GID

GID est un logiciel adaptatif universel pré et post-processeur pour les simulations numériques. Il a été conçu pour couvrir tous les besoins en simulation numérique de pré à post-traitement: modélisation géométrique, définition efficace des données d'analyse, maillage, transfert de données à un logiciel d'analyse et visualisation des résultats numériques.



Logo Avidemux.png


Le logiciel Avidemux

Avidemux est un logiciel libre de montage vidéo linéaire, pour les systèmes d'exploitation GNU/Linux, MacOS X et Windows.


Logo Rhino.jpg




Le logiciel Rhinocéros 3D

C'est un logiciel de Conception Assistée par Ordinateur utilisé par exemple dans le milieu du design industriel ou de de l'architecture.




Logo Arduino.png


Le logiciel Arduino

Le logiciel Arduino est un environnement de développement permettant d'écrire, de compiler et de téléverser du code sur le microcontrôleur Arduino. Notre code peut alors s'exécuter sur l'Arduino, indépendamment d'un ordinateur.

Journal de Bord

Semaine 1

Pour démarrer notre projet, nous avons commencé par élaborer un environnement de travail complet:

- Pour travailler depuis Polytech : Installation sur nos machines personnelles des logiciels Blender et SOFA

- Pour travailler depuis l'INRIA : Etablissement d'une convention et obtention des accès au bâtiment du laboratoire


Lors de la première séance complète, nous avons pris en main Blender. Ce logiciel va nous permettre de modéliser un prototype simplifié de l'endoscope. Dans un premier temps, nous concevons un modèle aux dimensions indiquées dans une publication de l'équipe. Blender nous fournira un rendu 3D de l'endoscope et nous réaliserons le maillage du prototype avec le logiciel SOFA.


Publication du robot du King's College

Semaine 2

Une fois le robot entièrement modélisé sur Blender, on génère un modèle sous le format ".obj" afin d'effectuer le maillage. Mailler une forme conçue par Conception Assistée par Ordinateur (CAO) signifie la modéliser géométriquement par des éléments finis tels que des tétraèdres dans notre cas. Le prototype modélisé sous Blender contient des cavités très fines rendant le processus de maillage impossible sur le logiciel SOFA. Le nombre de nœuds du prototype est trop important et nos machines ne supportent pas les calculs. Un nombre de tétraèdres moins important ne fait pas apparaître les cavités sur le prototype maillé (trop grande imprécision). Après plusieurs tentatives de maillage vaines issues de Blender, nous avons décidé de travailler avec le logiciel GID. L'avantage de ce logiciel est qu'il propose non seulement une modélisation du prototype mais aussi son maillage.


Semaine 3

Sur GID, on modélise le prototype du robot. Une fois le modèle terminé, nous réalisons un maillage avec un nombre de nœuds moins important qu'auparavant mais le prototype n'est pas maillé correctement. Si l'on augmente le nombre de nœuds et par conséquent, le nombre de tétraèdres, le logiciel ne supporte pas les calculs. Nous nous retrouvons donc en face du même problème qu'avec Blender. De ce fait, nous décidons de doubler les dimensions du prototype afin d'obtenir des cavités plus grandes et de soumettre le résultat à l'équipe du King's College.

Le prochain objectif est donc de prendre contact avec eux pour connaître les possibilités de modification du prototype qui permettraient un maillage correct du modèle.


Coupe transversale du prototype

Semaine 4

Après discussion avec le King's college, notre modèle est validé. Les dimensions retenues sont donc deux fois plus grandes que celles initialement prévues. Les cavités ont donc un diamètre de 3 mm pour une longueur de 100 mm. Le robot mesurera 110 mm et aura un diamètre extérieur de 34 mm.

A présent, notre travail se scinde en deux parties.

La première partie consiste à modéliser deux prototypes sur GID avec des nombres d'éléments différents:

- un modèle allégé (entre 2000 et 3000 nœuds) pour que la simulation avec SOFA soit fluide et temps réel

- un modèle précis pour évaluer les besoins en pression (entre 10000 et 11000 noeuds) et obtenir un modèle réaliste

La seconde partie consiste à mettre en simulation le prototype exporté de GID au format ".msh". Ce fichier mesh contient les coordonnées des points et les éléments de l'objet maillé. A partir de ce mesh, on cherche à générer un fichier au format ".xml" afin que les données contenues dans le mesh soient exploitables dans une scène Sofa. Pour ce faire, on utilise un script existant qui génère le fichier souhaité. Enfin, on rédige un fichier ".scn" qui va permettre de mettre en mouvement le prototype modélisé auparavant. Ce fichier scène nous permet par exemple de régler la rigidité du silicone, ou encore de définir le remplissage des cavités.

A la fin de cette semaine, nous avons conçu un premier modèle à 2600 noeuds.

Vue de profil à 2600 noeuds

Semaine 5

On souhaite valider notre modèle avec la technologie pneumatique. Pour ce faire, il est nécessaire de contrôler le prototype dans Sofa en pneumatique. Pour cela, on utilise le plug-in de Sofa SoftRobots. Sur notre modèle, on dessine des "BoxROI" qui sont des boîtes permettant de sélectionner les tétraèdres d'un volume. Ici, on crée quatre "BoxROI": une boîte permettant de fixer la base du robot déformable et trois boîtes pour sélectionner une cavité sur deux de notre modèle. En effet, il n'y aura que trois cavités sur les six de contrôlées. Une fois les tétraèdres des cavités sélectionnées par le biais des BoxROI, on récupère tous les triangles qui composent les cavités. Cette opération permet de sélectionner la surface au lieu du volume et nous permettra le contrôle par pression leur remplissage. Maintenant, il est nécessaire de fixer un point que l'on nommera "Goal" et un second point nommé "Effector". "Goal" est le point que va suivre le modèle."Effector" est un point du modèle qui cherchera à converger vers le "Goal". Une fois ces deux points définis, il nous reste à tester différentes pressions pour connaître la tolérance de notre système ainsi que plusieurs valeurs du module de Young pour avoir la rigidité souhaitée. Après plusieurs tests, on retiendra une pression maximale de 2MPa et un module de Young de 18MPa.


Semaine 6

Durant cette séance, nous avons rendu notre code fonctionnel en essayant de mettre en mouvement le robot dans notre scène. Celui-ci a un mouvement correct s'il parvient à converger vers le point demandé. Actuellement, la convergence est imparfaite.


Semaine 7 & 8

Pas de séance de projet allouée.


Semaine 9

Cette semaine, nous reprenons en main la scène SOFA afin de mettre en mouvement le robot. En parallèle, nous élaborons plusieurs modèles FEM afin de trouver le bon compromis entre le nombre de noeuds qui ne doit pas être trop important pour que le prototype soit fonctionnel et la géométrie qui doit restée fidèle à celle fixée auparavant.


Semaine 10

Nous parvenons maintenant à simuler notre robot cylindrique en temps réel. Lorsque le "Goal" se déplace, notre robot va, par injection d'air dans ses cavités, essayer d'atteindre le point "Goal" avec son centre outil ("Effector").

D'un autre côté, nous entamons les réflexions quant à la réalisation matérielle du robot. En effet, nous devons réaliser un moule aux dimensions précises afin de couler le silicone.


Semaine 11

Nous avons à présent acheté le matériel et avons élaborer une stratégie de fabrication du moule. Pour cela, nous avons acheté:

- 6 tiges filetées pour créer des cavités

- 1 tube en PVC d'un diamètre intérieur de 34 mm pour donner une forme cylindrique au prototype

- 1 tube en cuivre d'un diamètre extérieur de 16 mm pour creuser la géométrie

L'extrémité basse du robot sera fixée sur une plaque de PVC et la haute, sur une plaque de plexiglas afin de contrôler le remplissage. Les tiges filetées seront fixées à l'aide de boulons sur chaque extrémité. Le tube de cuivre sera rentré en force dans chaque place et sera ainsi immobile lors de la phase de coulage. Un "palais" en silicone sera ensuite coulé et soudé à une extrémité du robot pour assurer l'étanchéité des cavités.


Vue de profil du prototype à 10 000 noeuds
Coupe transversale

Semaine 12

Nous avons conçu le moule et avons coulé du silicone Ecoflex 00-30 dans celui-ci. Nous avons laissé sécher environ 3 heures avant de démouler. En parallèle, nous avons terminé les différents modèles en CAO et les soumettons à validation avant de faire l'implantation en simulation du modèle retenu.

Nous avons démoulé notre premier prototype physique mais nous constatons que les cavités ne sont pas parallèles entre elles. De ce fait, il est nécessaire de réitérer le processus de fabrication et de fixer davantage les extrémités afin que celles-ci n'aient aucun degré de liberté. Ainsi, le nouveau prototype devrait être opérationnel.


Semaine 13

Nous avons crée une seconde scène SOFA qui intègre le modèle à 10 000 nœuds. Etant donné que celui-ci est particulièrement précis, il nous est impossible d'utiliser SOFA en temps réel pour évaluer les besoins en pression. De ce fait, nous devons programmer un enchaînement de mouvements qui seront exécutés par notre robot. Nous pourrons ainsi réaliser une série captures "step by step" de la position du robot sous SOFA. Enfin, nous réaliserons une vidéo qui récupérera toutes les images et qui reconstituera de manière fluide la trajectoire qu'aura pris le robot. Pour cela, nous utilisons le logiciel Avidemux qui est un logiciel libre disponible sous Ubuntu. Nous avions dans un premier temps essayé différents scripts shell mais nous avons rencontré différents problèmes quant aux formats des images ou à leurs tailles.

En parallèle, nous entamons un second cycle de fabrication en réutilisant le moule. Nous avons en effet améliorer le processus de coulage du silicone par rapport au premier essai.


Semaine 14

Nous avons finalisé notre prototype et il est actuellement fonctionnel. On commence alors à prendre en main le dispositif de contrôle pneumatique. Celui-ci est constitué d'une carte arduino, d'une carte électronique, de distributeurs et d'un compresseur pneumatique. Une fois les connexions établies entre les différents éléments de notre système, on connecte une poche en silicone pour débuter les tests en pression. On utilisera notre prototype une fois le programme arduino fonctionnel.


Semaine 15

Nous avons élaboré un programme arduino permettant d'envoyer une consigne de pression à une poche de silicone. Pour cela, nous sommes partis d'un programme existant non fonctionnel et nous l'avons retravaillé afin que l'erreur entre la consigne envoyée et la valeur appliquée soit la plus petite possible. Actuellement l'envoi est configuré pour fournir une unique consigne au lieu des trois désirées pour remplir les cavités. On constate également quelques oscillations à faible amplitude avant que la valeur ne se stabilise autour de la consigne.


Semaine 16

Nous avons conçu un socle pour maintenir notre prototype. Pour cela, nous avons utilisé un kit OpenBeam Starter et nous avons réalisé une pièce en Conception Assistée par Ordinateur sur le logiciel Rhinoceros 3D. La pièce est destinée à maintenir verticalement le robot et à le fixer au socle. Il nous reste à imprimer la pièce par le biais d'une imprimante 3D. Côté logiciel, la vidéo obtenue n'est pas satisfaisante. En effet, on constate que le gonflement des cavités n'est pas uniforme (Voir figure ci-dessous). Le simulation n'est donc pas représentative du comportement du robot.

Vue en simulation du robot contrôlé par pression pneumatique


Semaine 17

Nous avons continué les tests en pression mais cette fois-ci sur le prototype directement. Pour le moment, on ne remplit que la première cavité et il nous faudra modifier le programme arduino afin d'envoyer une consigne sur chaque cavité. Notre robot admet une pression plus importante que les poches de silicone précédemment utilisées. On constate plusieurs fuite et nous allons devoir chercher des solutions pour les minimiser. Nous avons fabriqué un second prototype en silicone selon le même mode de fabrication. Ce robot va nous permettre de réaliser une seconde série de tests en pression afin de vérifier que chaque prototype tolère la même pression maximum et suit le même comportement.

Nous avons connecté les 3 cavités du prototype à notre dispositif de contrôle. Ainsi, nous avons retravaillé notre programme arduino afin de gonfler une à une les cavités. Ainsi, on peut juger de l'étanchéité de chacune et obtenir un mouvement du prototype. La consigne est entrée au clavier et elle est appliquée à chacune des cavités à tour de rôle toutes les 2 secondes.

On constate que le silicone utilisé n'est pas adéquate car à chaque mouvement du prototype, celui-ci "rebondit". Le silicone est donc trop mou et il est nécessaire de fabriquer un prototype en silicone plus dur. Précédemment, nous avions utilisé du silicone Ecoflex 00-30 qui est particulièrement flexible. On va passer sur un prototype en silicone Dragon Skin A10.

On remarque également un retard dans le programme arduino. En effet, pour chaque consigne envoyée, la pression d'air appliquée croît graduellement et n'est donc pas instantanément appliquée. Ce problème peut être issu de la boucle de contrôle dans le programme ou à une mauvaise gestion des pas de temps.

D'autre part, la pièce a été imprimée et nous obtenons le système suivant:

Robot sur le socle


Semaine 18

Après analyse, nous avons déterminé les problèmes du programme Arduino et commencé à implémenter des solutions. La régulation est actuellement faite sur la première cavité uniquement. De ce fait, lors de l'envoi de consigne sur les deux autres cavités, l'erreur est très importante. Nous devons retravailler le code pour créer une régulation standard sur les trois cavités. On souhaite également changer le programme pour que l'envoi de consigne soit fait par interruption. Pour cela, on va utiliser la librairie "MsTimer2.h".

En parallèle du contrôle pneumatique, nous travaillons sur la simulation. Celle-ci n'était pas jouée en temps réel à cause du trop grand nombre de noeuds qui composent le maillage du prototype. Pour palier à ce problème, nous avons réalisé en CAO sur le logiciel Rhinoceros 3D un prototype que l'on extrait en '.obj'. Ainsi, le maillage est réalisé automatiquement et il est donc moins précis. Afin d'éviter un maillage trop grossier des cavités, on les extrait en 'obj' séparément.


Vue de dessus et vue en perspective du prototype sur Rhino


Dans notre scène SOFA, on insère par conséquent 4 fichiers "objet" correspondants aux trois cavités et au prototype global. Finalement, on obtient une simulation temps réel adéquate pour la prochaine étape du projet : l'interfaçage. Actuellement, le robot modélisé se déforme pour atteindre un point sous le contrôle de la souris. L'objectif principal du projet est que le prototype réel subisse les mêmes déformations simultanément. Pour cela, nous devons engager une communication entre la simulation informatique et la carte arduino qui contrôle le dispositif pneumatique.

Simulation Temps réel

Nous avons fabriqué un premier prototype en silicone Dragon Skin mais celui-ci étant très visqueux, nous ne sommes pas parvenus à combler tout le moule en moins de 45 minutes ce qui correspond au temps de séchage du silicone. Nous avons dû modifier le processus de fabrication pour que le remplissage se fasse plus rapidement.


Nous avons ensuite débuté les tests en pression avec le prototype plus rigide. On a sensiblement augmenté la gamme de pression à injecter pour avoir une déformation conséquente du robot. Cependant, la déformation n'est pas optimale à cause des fuites, une fois que la pression injectée est grande. De ce fait, il nous faut concevoir une pièce qui limitera les fuites. Cette pièce sera conçue pour maintenir le câble d'injection dans les cavités sans pour autant les déformer. Il sera donc nécessaire de la concevoir très précisément en CAO.


Dans la simulation informatique SOFA, nous utilisons le plug-in "SoftRobot" qui permet notamment de contrôler le robot modélisé par injection d'air. Par ailleurs, le plug-in n'est pas configuré pour la communication série entre la simulation et une carte arduino pour le contrôle pneumatique. Jusqu'ici, l'envoi de données entre SOFA et Arduino était exploité pour le contrôle de servomoteur. De ce fait, nous avons mis à jour le plug-in afin que celui-ci permette l'échange de données dont nous avons besoin.


En parallèle, nous avons élaboré un nouveau programme arduino, chargé de la communication avec la plate-forme logicielle SOFA. Celui-ci établi la connexion série, traite les données issues de la simulation et les envoie au dispositif de contrôle.


Semaine 19

Nous avons commencé les tests liés à l'interfaçage. Dans un premier temps, nous avons constaté quelques problèmes dans les programmes du plug-in SoftRobot que nous avons modifié. Une fois les erreurs résolues, on constate que la communication série est fonctionnelle bien que certains paramètres de la simulation sont à ajuster :

  • Le module de Young qui régit la rigidité du robot
  • Le coefficient de Poisson qui permet de caractériser la contraction de la matière perpendiculairement à la direction de l'effort appliqué.
  • Le coefficient d'ajustement des valeurs entre la simulation et le programme arduino

En ce qui concerne le module de Young, des essais mécaniques ont été réalisés sur le silicone Dragon Skin que nous avons utilisé. De ce fait, on connaît déjà le module de Young qui est de 150 000 Pa. Pour le coefficient de Poisson, on le fixe à 0.4 car au dessus de ce seuil, la simulation diverge et en dessous, on perd en précision. Enfin, il est nécessaire d'ajuster la simulation par rapport à la réalité. Une fois les coefficients précédents définis, on ajuste dans la scène SOFA la pression maximale à injecter par rapport à celle relative au contrôle pneumatique. Ainsi, la déformation dans la simulation est fidèle à la déformation réelle du robot.

Au delà d'une certaine pression, les fuites deviennent trop importantes pour un contrôle précis du dispositif. De ce fait, nous avons réfléchi à plusieurs solutions pour maintenir les tuyaux dans le prototype. Après concertation, nous avons décidé de boucher les cavités avec un disque de silicone et d'insérer en force les tuyaux afin qu'ils restent bloqués.

Nous avons testé ce nouveau système d'étanchéité et les résultats sont satisfaisants. On peut injecter jusque deux fois la pression maximale déterminée auparavant.


Semaine 20

La déformation du prototype réel et du modèle de SOFA ne sont pas similaires. On remarque, en effet, que le modèle ne se courbe pas mais suit une déformation linéaire. Ce constat a mis en évidence le fait que le modèle ne possède pas suffisamment de sections et de points sur sa longueur pour se déformer correctement. Une fois ce problème résolu, la simulation est opérationnelle.


Version finale de la simulation sur SOFA


Nous devons réaliser une vidéo afin de l'envoyer au King's College. De ce fait, on décide de rédiger un script Shell qui décrit automatiquement une trajectoire pour le modèle. Ce script génère un fichier d'extension '.ws' qui sera automatiquement lu et exécuté lorsque la scène SOFA est jouée.

En parallèle, on débute l'étude de faisabilité pour la migration technologique de pneumatique à hydraulique.Après concertation avec l'équipe, nous décidons d'expliquer entièrement le processus de calcul pour le contrôle pneumatique et hydraulique ainsi que la différence entre les deux systèmes. Grace à notre rapport, la migration sera plus simple.

L'équipe du King's College est satisfaite du résultat final montré dans la vidéo. L'étude de faisabilité pour la migration technologique est terminée à l'aide de la publication d'un papier de l'équipe traitant de ce sujet. Nous préparons alors le transfert de ce projet au reste de l'équipe en partageant nos fichiers et en les commentant.

Conclusion

Tous les objectifs du projet ont été atteints et nous avons pu présenter nos résultats au centre de recherche du King's College qui en est satisfait. Actuellement, nous sommes capables de commander un robot déformable, mis en mouvement par un dispositif pneumatique, par le biais d'une simulation informatique. On peut le commander directement par le biais de l'interface graphique de la plate-forme logicielle SOFA en utilisant le pointeur de la souris. On peut également définir une trajectoire qui sera lue au démarrage de la simulation.

Le projet va pouvoir évoluer avec un contrôle hydraulique qui se substituera à la commande pneumatique. Il sera nécessaire de revoir les proportions du prototype afin que celui-ci soit conforme aux dimensions d'un endoscope. Il faudra également changer sa composition pour permettre son utilisation en chirurgie non-invasive.

A travers ce projet, nous avons progressé en programmation C++ sur les logiciels Arduino et SOFA. De plus, nous avons appréhendé les grands principes de fonctionnement de la simulation numérique appliquée aux robots déformables. Nous avons également découvert le fonctionnement d'un dispositif de contrôle pneumatique et l'avons pris en main. Nous avons expérimenté plusieurs processus de fabrication de prototype en silicone. Enfin, nous avons progressé en Conception Assistée par Ordinateur en modélisant le prototype sur différents logiciels.

Ce projet est une belle opportunité pour travailler sur un projet conséquent, réparti dans le temps. Cela nous permet, par ailleurs, de sortir du cadre de Polytech Lille pour travailler dans une autre structure et d'être intégrés à une équipe.