Pilotage d'une prothèse miniaturisée - Mehdi Bennis, Abdulnafe Toulaimat Encadrés par Monsieur Luc Estebanez - UPC (UPCommons)
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Rapport final – Projet Neurosciences – P19 9 juin 2021 Pilotage d’une prothèse miniaturisée Pôle Projet « Systèmes Robotiques en interaction » (P19) Mehdi Bennis, Abdulnafe Toulaimat Encadrés par Monsieur Luc Estebanez 1
Rapport final – Projet Neurosciences – P19 9 juin 2021 Ce projet, proposé par Monsieur Estebanez, s’inscrit dans le cadre du projet de Madame Zineb Hayatou, et vise à maîtriser la commande d’une prothèse miniaturisée destinée, in fine, à être utilisée par une souris via une interface cerveau-machine. Il s’agit pour nous de travailler sur la conception de la prothèse elle-même, la manière dont elle est motorisée et la commande de cette motorisation. Nous présentons ici l’avancement de nos réalisations, en particulier la prise en main de la prothèse développée par Madame Hayatou et le code développé, ainsi que l’organisation de l’équipe et les résultats obtenus. Table des matières 1. Contexte et enjeux..................................................................................................................... 2 1.1 Le client ............................................................................................................................. 2 1.2 Le projet, les objectifs ........................................................................................................ 2 1.2.1 Le projet de Madame Hayatou ................................................................................... 2 1.2.2 Notre projet ............................................................................................................... 3 1.3 La prothèse ........................................................................................................................ 4 1.3.1 L’épaule...................................................................................................................... 5 1.3.2 L’humérus .................................................................................................................. 6 1.3.3 L’avant-bras................................................................................................................ 7 1.3.4 La motorisation .......................................................................................................... 7 1.4 Les difficultés rencontrées.................................................................................................. 8 1.4.1 Les difficultés liées au code......................................................................................... 9 1.4.2 Les difficultés liées aux câbles..................................................................................... 9 1.4.3 Les difficultés liées à la mécanique de la prothèse ...................................................... 9 2. Déroulé du projet .................................................................................................................... 10 2.1 Analyse mécanique de la prothèse ................................................................................... 10 2.1.1 Calcul des moments en fonction des vitesses angulaires ........................................... 10 2.2 La prise en main du matériel et premières améliorations ................................................. 14 2.3 Modifications de la prothèse ............................................................................................ 14 2.3.1 La liaison pivot.......................................................................................................... 15 2.3.2 Le joint de Cardan..................................................................................................... 16 2
Rapport final – Projet Neurosciences – P19 9 juin 2021 2.4 Le contrôle de la prothèse ................................................................................................ 17 2.4.1 Le code Arduino ....................................................................................................... 17 2.4.2 La boucle ouverte ..................................................................................................... 18 2.4.3 La boucle fermée ...................................................................................................... 29 2.5 Résultats .......................................................................................................................... 33 2.5.1 La boucle ouverte à 2 degrés de liberté .................................................................... 33 2.5.2 La boucle ouverte à 3 degrés de liberté .................................................................... 37 2.5.3 La boucle fermée ...................................................................................................... 40 3. Organisation du projet ............................................................................................................. 44 4. Perspectives et suite du projet ................................................................................................. 44 Bibliographie ................................................................................................................................... 47 3
Rapport final – Projet Neurosciences – P19 9 juin 2021 1. Contexte et enjeux 1.1 Le client Monsieur Estebanez est chercheur au CNRS et membre de l’équipe « Traitement Sensori- Moteur et Plasticité » de l’institut NeuroPsi. Ses recherches actuelles se concentrent sur le fonctionnement du cerveau des souris, notamment via une interface cerveau-machine (ICM) qu’il a développée avec son équipe de recherche (CNRS, n.d.). Madame Hayatou, quant à elle, est doctorante au sein de la même équipe au laboratoire NeuroPsi, sous la direction de Monsieur Estebanez. Son projet de thèse porte sur « le rôle des excitations somatosensorielles sur l'appropriation des membres, en particulier dans le contexte des interfaces cerveau-machine » (HAYATOU, 2020). Enfin, nous avons été grandement aidés par madame Engel qui réalise son stage de fin d’études au sein du laboratoire de Monsieur Estebanez. 1.2 Le projet, les objectifs 1.2.1 Le projet de Madame Hayatou Le but des travaux de Madame Hayatou est l’étude des mécanismes d’appropriation d’un membre artificiel par une souris. Il s’agit, en effet, d’un défi majeur qui se pose aux projets de neuroprothèses chez l’humain (Dayo O. Adewole, 2016), où les applications médicales potentielles sont nombreuses. La maîtrise de ces processus d’appropriation chez la souris permettra de mieux les comprendre chez l’humain et donc de faciliter la mise en place de telles prothèses, appelées neuroprothèses1. La multiplicité des techniques développées pour l’étudier le rend attrayant pour ces expériences. Notamment, outre les défis d’appropriation de la prothèse cités plus haut, le retour somato-sensoriel de la position et de l’état de la neuroprothèse est un véritable défi, d’autant plus qu’il est difficile à améliorer tout en maintenant des propriétés mécaniques biomimétiques (Dayo O. Adewole, 2016). Actuellement, Madame Hayatou a conçu une prothèse à taille réelle (de l’ordre du centimètre) qu’elle a réalisée en impression 3D et qu’elle tâche de commander. Celle- ci est motorisée à l’aide de servomoteurs distants, dont les efforts sont transmis à l’aide de câbles Bowden2 jusqu’à la prothèse. C’est ici qu’intervient notre projet. 4
Rapport final – Projet Neurosciences – P19 9 juin 2021 1.2.2 Notre projet Notre contribution s’est focalisée sur deux parties : la mécanique de la prothèse et l’implantation d’une loi de commande pour la piloter. Notamment, nous avons proposé des idées de conception de la prothèse elle-même, de la motorisation de celle- ci, et nous avons élaboré le schéma de contrôle et le code qui permet de l’implémenter. Initialement, une équipe de l’ESME Sudria était censée se pencher sur la question de la commande en boucle fermée, mais nous avons fini par avancer une proposition d’implémentation sur ce sujet également. 1 Neuroprothèse : prothèse commandée par le cerveau de l’hôte directement, et généralement avec un retour somato-sensoriel (toucher, position, tension…) 2 Câbles Bowden : il s’agit de câbles à enveloppe rigide dont l’âme métallique sert à transmettre les efforts (Bowden cable, n.d.). 5
Rapport final – Projet Neurosciences – P19 9 juin 2021 1.3 La prothèse Comme nous l’avons dit plus haut, la prothèse est élaborée en impression 3D. Elle se décompose en 3 pièces : l’épaule, qui est la partie fixe ; l’humérus, qui est la partie centrale de la prothèse et qui a 2 degrés de liberté rotatifs ; et l’avant-bras, qui a un seul degré de liberté rotatif. Ces deux dernières parties sont censées être couvertes par une « manche » élastique, molle, imprimée en 3D et qui a la forme d’une patte de souris. Figure 1 : Vue de dessus du montage Figure 2 : Vue rapprochée de la prothèse Figures 3,4 : La prothèse, vue dans Solidworks avec les mesures et un schéma des forces appliquées par les câbles Bowden avec leur degré de liberté défini 6
Rapport final – Projet Neurosciences – P19 9 juin 2021 1.3.1 L’épaule Figure 5 : Diverses vues de l’épaule, telle qu’elle se présentait initialement L’épaule est la partie qui permet de lier la prothèse à un bâti fixe. C’est donc la partie la plus grande de l’assemblage, et qui reste immobile. La contrainte principale à laquelle est soumise cette pièce est d’avoir suffisamment de canaux pour permettre le passage des câbles Bowden qui s’insèrent au niveau de l’humérus et de l’avant-bras (cf. infra 1.3.4) : Sur la version initiale que nous avons reçue de la part de Madame Hayatou, il y a 6 canaux pour ces câbles Bowden. Il y a, de plus, un septième canal, central, dédié au câble somato- sensoriel qui est censé assurer les retours de la boucle de contrôle vers l’ICM. Par ailleurs, ce câble permet d’assurer la cohésion des trois composants de la prothèse, étant collé au niveau de l’extrémité de l’avant-bras et tendu. 7
Rapport final – Projet Neurosciences – P19 9 juin 2021 1.3.2 L’humérus Figure 6 : Diverses vues de l’humérus Cette pièce est la partie centrale de la prothèse, donnant à celle-ci 2 degrés de liberté rotatifs, étant capable de tourner par rapport à son point de liaison avec l’épaule et ce dans deux plans perpendiculaires. Elle doit, en outre, laisser passer le câble somato- sensoriel, ainsi que les câbles Bowden qui mobilisent l’avant-bras. 8
Rapport final – Projet Neurosciences – P19 9 juin 2021 1.3.3 L’avant-bras Figure 7 : Diverses vues de l’avant-bras Cette partie sera l’extrémité de la prothèse, à laquelle est ancré notamment le câblesomato- sensoriel. Elle doit disposer d’un degré de liberté rotatif. 1.3.4 La motorisation Comme nous l’avons dit plus haut, la prothèse est mobilisée grâce à des servomoteurs3. Il s’agit, dans le cadre de ce projet, de servomoteurs digitaux commandés par un Arduino, plus précisément un Arduino Mega 2560. Ces servomoteurs reçoivent, comme consigne, une position angulaire, et nous pouvons, de plus, donner comme consigne leur vitesse de rotation. L’effort est ensuite transmis à la prothèse via des câbles Bowden, qui sont attachés par paires aux moteurs. Chacune de ces paires est responsable du mouvement selon l’un des degrés de liberté de la prothèse, et vient s’insérer dans les canaux correspondant de celle-ci, où elle est collée. Ainsi, en tirant sur l’un des câbles d’une paire, nous faisons bouger la pièce correspondante dans un 3 Nous utilisons les servomoteurs MS-12A de la marque Makeblock : https://www.makeblock.com/project/smart-servo-ms-12a 9
Rapport final – Projet Neurosciences – P19 9 juin 2021 sens, et nous effectuons le mouvement inverse en tirant sur l’autre. L’avantage de ce montage est sa simplicité relative, ce qui permet à une personne de l’assembler sans outils spécifiques. L’enjeu majeur sera donc de contrôler la cinématique du bras à travers ces servomoteurs de la manière la plus fluide possible. Figure 8 : Les câbles Bowden insérés dans la prothèse Les servomoteurs servent à faire précisément cela : en tournant, ils tirent sur les câbles, deux par deux. Il y a donc une relation entre la position angulaire des moteurs et celle des différentes composantes mobiles de la prothèse. 1.4 Les difficultés rencontrées Le principal défi soulevé par le client est celui de la maîtrise des mouvements de la prothèse. Le problème a plusieurs sources : - Difficulté de maîtriser les moteurs (problèmes de code) - Difficulté de maîtriser la transmission du mouvement entre les servomoteurs et la prothèse (problèmes de câbles) - Difficulté de maîtriser la réponse de la prothèse (problèmes mécaniques) 10
Rapport final – Projet Neurosciences – P19 9 juin 2021 1.4.1 Les difficultés liées au code La commande des servomoteurs est assurée, nous l’avons dit plus haut, au moyen d’un Arduino. Le code que celui-ci exécute est écrit4 sur un ordinateur puis transmis via une liaison USB. L’objectif est le suivant : nous voulons pouvoir donner des commandes en continu et en temps réel via un ordinateur connecté à l’Arduino, et ces commandes doivent être exécutées par le servo. Ces commandes sont du type « va à la position angulaire 30° » ou « tourne de 60° dans le sens horaire ». Idéalement, on souhaite des latences faibles (de l’ordre de la dizaine de milliseconde) et des réponses précises. Or cela posait un problème, notamment car les servomoteurs revenaient à leur position initiale après l’exécution de chaque commande, ce qui rendait le contrôle assez difficile. 1.4.2 Les difficultés liées aux câbles L’usage des moteurs distants a l’avantage de ne pas effrayer la souris lorsque la prothèse sera connectée à celle-ci. Cela pose néanmoins quelques défis concernant la transmission des efforts : en effet, les câbles Bowden étant détendus, déformables, à positions initiales variables et difficilement maîtrisables, la transmission des efforts ne se faisait pas de manière homogène : on constatait notamment une asymétrie dans l’amplitude du mouvement suivant le sens dans lequel celui-ci s’effectuait. De plus, on constatait une perte très importante dans la transmission du mouvement entre les servomoteurs et les articulations de la prothèse. Cela s’expliquait par la déformation et le déplacement radial des câbles eux-mêmes, ce qui rendait le système moins efficace et surtout difficilement modélisable. 1.4.3 Les difficultés liées à la mécanique de la prothèse Ici, il s’agit notamment des difficultés dues aux efforts parasites qui apparaissaient lorsque la prothèse bougeait : d’une part, la manche que nous avons mentionnée plus haut (dans 1.3) exerce un couple résistant lorsqu’elle est déformée, ce qui atténue nettement les réponses de la prothèse au mouvement des servomoteurs. D’autre part, les mêmes câbles Bowden qui transmettent les efforts des moteurs jouent également un rôle résistant, difficile à quantifier, lié d’une part à leur insertion dans la prothèse, et, d’autre part, à la rigidité de leur enveloppe. Enfin, le câble capacitif qui passe dans la prothèse exerce également un effort de rappel lorsqu’il est déformé lors des mouvements, et son utilisation pour maintenir l’ensemble des composantes de la prothèse lié rendait la modélisation du système assez complexe. Notre travail consistait donc à prendre le système en main et à nous approprier le sujet, puis à aborder ces défis afin de proposer des solutions envisageables. 4 Le code est écrit dans le langage Arduino, qui est une variante de C++ 11
Rapport final – Projet Neurosciences – P19 9 juin 2021 2. Déroulé du projet 2.1 Analyse mécanique de la prothèse Figure 9 : Prothèse et axes utilisés dans Solidworks Nous avons commencé notre étude en utilisant le modèle 3D développé pour faire une étude dynamique de la prothèse. A travers SolidWorks, nous avons pu ressortir les principaux axes d’inertie : Humérus Avant-bras Pour l’humérus, nous sommes intéressés par les moments d’inertie par rapport à l’axe X et à l’axe Z : = 0,15799 . −2, = 0,15799 . −2. Quant à l’avant-bras, nous sommes également intéressés par les moments d’inertie dans l’axe X et Z: = 0,12915 . −2, = 0,5609 . −2. 2.1.1 Calcul des moments en fonction des vitesses angulaires Nous avons fait une première résolution à partir de la méthode des puissances virtuelles. Dans ce qui suit, nous négligeons l’effet de la gravité (les masses et distances sont 12
Rapport final – Projet Neurosciences – P19 9 juin 2021 extrêmement faibles : considérant une densité de 1,2 g/cm3, la masse de l’humérus est de 0,0775 g) ainsi que les frottements au niveau des articulations. Finalement, nous ajoutons pour chaque moment une résistance élastique approchant la résistance de la membrane souple. Position initiale (Plan XY) Sur ces schémas, les points jaunes donnent les centres de masse respectifs des deux pièces. L’application de la méthode de puissance virtuelle sur 1donne : Dans le plan : 2 + 12 − 22 = arccos ( ) 2 1 1 1 1∗ 2 1 2 Figure 10 : Schéma du plan XY illustrant les quantités utilisées. En vert, les déplacements et efforts virtuels par rapport à l’épaule 1 ≠ 0, 2 = 0, 3 = 0 1 ̇∗ − ( 1 + 2 ) 1̈ ̇∗ − ̇∗ 1 ( 1̈ 1 1 ) − ̇∗ ( ̈ 2 ) = 0 1 1 1 1 donc 1 = ( 1 + 2 ) 1̈ + 12 1̈ 1 + 2 ̈ 2 + 1 13
Rapport final – Projet Neurosciences – P19 9 juin 2021 De même, sur 2 : Dans le plan : 1 1 2 2 1 2 ∗2 Figure 11 : Schéma du plan XY illustrant les quantités utilisées. En vert, les déplacements et efforts virtuels par rapport au coude 1 = 0, 2 ≠ 0, 3 = 0 2 ̇ ∗ − 2 ̈2 ̇∗ − ̇∗ 2 ( 2̇ 1 1) = 0 2 2 1 donc 2 = 2 ̈2 + 1 2 ̇2 1 + 2 14
Rapport final – Projet Neurosciences – P19 9 juin 2021 Enfin, sur 3, cela donne : Dans le plan : 3∗ , 3 3 1 = 1 cos( 1) = cos( 1 + ) 1 Figure 12 : Schéma du plan YZ illustrant les quantités utilisées. En vert, les déplacements et efforts virtuels par rapport à l’épaule 1 = 0, 2 = 0, 3 ≠ 0 3 3̇ − ( 1 + 2) ̈3 ̇∗ − ̇∗ 2 3̈ 1 − ̇∗ 2 3̈ 2 = 0 3 3 1 3 donc 3 = ( 1 + 2) ̈3 + 2 ̈3 1 + 2 ̈3 2 + 3 1 Il est possible de réaliser une étude mécanique plus précise, intégrant les masses, et modélisant plus finement l’effet des câbles Bowden et la résistance de la membrane. Mais, à ce stade, nous avons conclu qu’il était préférable de nous pencher essentiellement sur une modélisation géométrique, où l’on contrôle la position de l’extrémité de la patte par composition de déplacement des différents solides, et ce en agissant sur la position angulaire des servomoteurs. En effet, cela simplifie grandement à la fois le traitement théorique et son implémentation en code. Rappelons que les commandes aux servomoteurs se font en termes de vitesse et position et non en termes de forces, rendant la modélisation géométrique et cinématique plus facilement applicable qu’une commande basée sur un modèle physique. 15
Rapport final – Projet Neurosciences – P19 9 juin 2021 2.2 La prise en main du matériel et premières améliorations Nous avons eu la chance, par suite de réunions avec Monsieur Estebanez et grâce à l’aide de Madame Makarov, d’avoir accès à des Arduino et des servomoteurs sur lesquels nous pouvions effectuer des tests. Cette phase nous a permis de nous familiariser avec ces outils que nous ne connaissions pas auparavant, et bien que nous ayons eu quelques difficultés liées à l’alimentation des servomoteurs, nous avons fini par pouvoir écrire notre propre code et le tester directement sur les moteurs. Le code que Madame Hayatou avait écrit nous a été d’une grande aide sur ce point. Par ailleurs, nous avons modélisé dynamiquement le système (cf. supra 2.1), en appliquant les lois de Newton et d’Euler, mais nous avons abandonné cette approche en faveur d’une plus empirique. En effet, les défis (ceux posés par les câbles Bowden notamment) que nous avons cités ci-dessus rendaient cette étude peu pratique. Nous avons donc opté pour une modélisation géométrique, en utilisant la capacité de nos moteurs d’asservir leur position et leur vitesse pour ensuite la transmettre aux articulations de la prothèse. Cela étant, les dimensions dynamiques du problème sont écartées, et nous sommes ramenés à une modélisation relativement simple. La difficulté majeure qui se pose alors est de savoir comment la rotation des moteurs se traduit au niveau des articulations. Les premières discussions que nous avons eues avec le client ont donné lieu à l’idée de rigidifier complètement les câbles Bowden en les encastrant tous dans de la résine solide. Une telle rigidification a en effet été réalisée avec une gaine de résine suffisamment rigide pour permettre de stabiliser les câbles lors de la transmission des efforts. Cela a permis d’avoir des amplitudes de mouvement bien plus importantes au niveau de la prothèse. La gaine rigidifiée Figure 13 : Vue de la gaine guidant les câbles 2.3 Modifications de la prothèse Un point que nous avons soulevé lors des réunions était l’utilité finale du câble sensoriel passant au milieu de la prothèse, comme mentionné au 1.4.3 ci-dessus. Un asservissement en position était envisagé, et nous avions soulevé l’hypothèse que le câble risquait d’augmenter la rigidité du système. Il était donc intéressant d’analyser la possibilité d’élaborer une prothèse plus performante en se dispensant du canal central. 16
Rapport final – Projet Neurosciences – P19 9 juin 2021 L’absence d’articulations était également un point qui nous paraissait important à traiter si nous voulions avoir un contrôle plus fin de la prothèse. La deuxième fonction de ce câble était de limiter le mouvement des différents solides (limiter les degrés de liberté), mais cela ajoute de la rigidité à la prothèse, qui est déjà significative avec les efforts résistants des câbles Bowden. Ce câble central était également sujet à des déformations qui faisaient que la position initiale du solide n’était pas bien maîtrisée non plus. Ainsi, la solution que nous avons privilégiée est de supprimer le câble central et d’ajouter des articulations rigides qui permettraient au solide de bouger uniquement selon les directions des axes désirés. Pour les mouvements désirés dans notre prothèse, les articulations suivantes s’adaptent parfaitement : - Une liaison pivot entre l’humérus et l’avant-bras (un seul degré de liberté rotatif) - Une liaison de type rotule avec doigt pour fixer l’humérus à la potence (deux degrés de liberté rotatifs). Plus précisément, nous avons proposé un joint de cardan Nous avons donc consacré une partie du projet à ces modifications, dont nous avons fait plusieurs itérations. Voici les résultats que nous avons obtenus. 2.3.1 La liaison pivot L’idée que nous avons eue était de créer un axe de rotation, en modifiant les deux pièces concernées. D’une part, l’humérus aurait deux extensions de part et d’autre se terminant en des petits cylindres, et, d’autre part, l’avant-bras aurait des trous permettant l’insertion de ces cylindres. Figure 14 : Vue du premier prototype de la liaison pivot Ce premier prototype servait surtout de preuve de concept, mais avait l’inconvénient majeur d’être bien trop petit, et donc trop fragile. Nous avons donc opté, par suite des échanges avec le client, pour une solution légèrement différente : 17
Rapport final – Projet Neurosciences – P19 9 juin 2021 Figure 15 : Vue du second prototype de la liaison pivot Ici, il s’agissait donc d’un canal (de diamètre 0,15mm) creusé le long des deux pièces, où une barre métallique viendrait s’insérer, assurant la cohésion de l’ensemble et matérialisant l’axe de rotation. En effet, une simple corde de piano en acier devrait être assez rigide pour maintenir l’avant-bras, tout en assurant un mouvement rotatif. 2.3.2 Le joint de Cardan Cette liaison entre l’humérus et l’épaule devait, rappelons-le, permettre deux degrés de liberté rotatifs, tout en assurant l’adhésion de la prothèse au niveau de l’épaule. Nous avons donc proposé d’introduire une pièce supplémentaire, entre l’épaule et l’humérus, qui imposerait ces degrés de liberté : Figure 16 : Vue de la pièce centrale du premier joint de Cardan proposé Bien sûr, cette solution souffrait du même problème de fragilité que la liaison pivot ci- dessus. Nous avons donc, là-encore, retravaillé la conception en utilisant la même idée de barre métallique à insérer entre les pièces : 18
Rapport final – Projet Neurosciences – P19 9 juin 2021 Figure 17 : Diverses vues de la pièce centrale du second joint de Cardan proposé Il s’agit donc d’un cylindre qui s’insère entre l’humérus et l’épaule, de sorte que ses trous et ceux que nous avons ajoutés au niveau des pièces de la prothèse se trouvent alignés, permettant alors de faire passer un fil métallique, comme pour la liaison pivot ci-dessus. Cette pièce, cependant, avait un inconvénient majeur : si l’on veut augmenter l’amplitude du mouvement de l’humérus relativement à l’épaule (le client préconisait ±25°), la solution naturelle est de rallonger cette pièce centrale. Or, ce faisant, lors des mouvements, les câbles Bowden se trouveraient sous de grands efforts de cisaillement, car les canaux par lesquels ils passent dans l’épaule et l’humérus se trouveraient désalignés. Mais si l’on diminue la taille de la pièce, le mouvement se trouverait limité. A cause de ces difficultés, et des faibles dimensions de cette pièce qui la rend impossible à imprimer, le client a préféré garder la conception initiale de la prothèse, quitte à ce que le code, notamment la boucle fermée, compense les difficultés liées au câble central et aux articulations. Nous nous sommes donc entièrement consacrés au contrôle de la prothèse, que nous développions en parallèle. 2.4 Le contrôle de la prothèse 2.4.1 Le code Arduino Nous avons développé le code par incréments, rajoutant des fonctionnalités et adaptant nos méthodes au fur et à mesure des échanges avec le client et des tests réalisés sur la prothèse. Nous avons segmenté le travail en plusieurs parties : 1. Nous familiariser avec le code et la syntaxe d’Arduino, notamment la librairie MeSmartServo utilisée avec les servos. 2. Réaliser une commande simple en boucle ouverte, ne tenant compte que des deux degrés de liberté dans un seul plan. Le client disposait déjà d’un tel code, mais il comportait des erreurs. Notamment, les servomoteurs revenaient 19
Rapport final – Projet Neurosciences – P19 9 juin 2021 toujours à leur position initiale après l’exécution d’une commande, et aucun modèle géométrique n’était développé. 3. Une fois la boucle ouverte achevée, passer en boucle fermée. Cette partie s’est rajoutée tardivement, car un autre groupe qui travaillait sur le même projet devait s’en charger. C’est la partie b) qui nous a pris le plus de temps. En effet, il s’agissait d’avoir une loi de commande précise de la prothèse en agissant sur les angles des servomoteurs, et d’intégrer une forme de « biomimétisme » ou, du moins, s’assurer que les mouvements sont effectués de manière lisse. Il est à noter que nous avons également procédé à l’implémentation de ces modèles sur MATLAB pour pouvoir réaliser des simulations précises. Nous avons également développé le modèle pour les 3 degrés de liberté sur ce logiciel. 2.4.2 La boucle ouverte Le contrôle à 2 degrés de liberté Madame Makarov nous a fournis une introduction à la commande des robots dont nous nous sommes directement servis dans la réalisation de la loi de commande des deux degrés de liberté. Notamment, c’est à partir des ressources qu’elle nous a fournis que nous avons obtenu le lien entre les paramètres géométriques de la prothèse et la configuration à donner à celle-ci afin d’atteindre une position cible. En effet, nous avons schématisée la prothèse comme suit : y L’articulation « épaule » ( , ) x « L’humérus » « L’avant-bras » 2 L’articulation « coude » 1 20
Rapport final – Projet Neurosciences – P19 9 juin 2021 y 2 = 8,68 ( , ) x 1 = 4,99 = 71,9° 1 2 Figure 18 : Schéma simplifié de la prothèse Où le point de coordonnées ( , ) est la position cible que l’on veut faire atteindre à l’extrémité de la prothèse, les angles 1 et 2 sont les degrés de liberté du système, et est un angle fixe défini par la géométrie de l’avant-bras. En 2 dimensions, nous considérerons que l’épaule et le coude sont des articulations rotatives à 1 degré de liberté qui tournent autour de l’axe Z. Le modèle géométrique direct est représenté par les équations suivantes : = − 1 ( 1) − 2 ( 1 + 2 + ) { = − ( ) − ( + + ) 1 1 2 1 2 On peut donc utiliser le modèle géométrique inverse afin d’avoir les valeurs des angles qui permettent d’atteindre cette position, à supposer qu’elle soit effectivement atteignable : 2 + 2 − 2 − 2 1 2 cos( 2 + ) = { 2 1 2 sin( 2 + ) = ±√1 − cos2( 2 + ) 21
Rapport final – Projet Neurosciences – P19 9 juin 2021 Il y a effectivement deux solutions, a priori, correspondant aux deux positions possibles du coude. Or, dans notre cas, avec 1 ∈ [−46°, 32.9°], 2 ∈ [−22°, 40°], la prothèse est telle que seule une solution positive est possible. On en déduit alors 2 par sin( 2 + ) 2 = arctan ( )− cos( 2 + ) De cela, on peut déduire 1 : − 2sin( 2 + ) − 1 − 2 cos( 2 + ) cos( 1) ( )( )=( ) − 1 − 2 cos( 2 + ) 2 sin( 2 + ) sin( 1 ) Cette équation admet une solution unique si, et seulement si, 2 + 2 + 1 2 2 1 2 cos( 2 + ) ≠ 0. Or, avec les valeurs de 1 = 4,99 et 2 = 8,68 , on a 2 + 2 = 100,24 2 > 86,6 ² = 2 1 2. Il est donc impossible d’annuler le 1 2 discriminant précédent et la matrice est bien inversible, indépendamment de la valeur de 2. On a alors, en inversant la matrice : ( cos( 1)) = 2 1 ( − 2 sin( 2 + ) − 1 − 2 cos( 2 + ) ) ( ) sin( ) + 2 + 2 cos( + ) − − cos( + ) sin( + ) 1 1 2 1 2 2 1 2 2 2 2 i.e. − 2 sin( 2 + ) − ( 1 + 2 cos( 2 + )) cos( 1 ) = 2 + 2 + 2 1 2 cos( 2 + ) 1 2 −( 1 + 2 cos( 2 + )) + 2 sin( 2 + ) sin( 1 ) = 12 + 22 + 2 1 2 cos( 2 + ) ( 1) Et enfin on en déduit 1 = arctan ( ). Sur MATLAB et Arduino, nous utilisons la ( 1 ) fonction atan2d, nous permettant d’avoir l’angle dans le quadrant correspondant et en degrés. Nous retrouvons l’implémentation du modèle géométrique inverse dans la fonction MATLAB «arriver_a.m » du dossier «2D », et sur Arduino dans l’ensemble des versions de boucles que nous avons, toutes développées pour 2 degrés de liberté. Le contrôle à 3 degrés de liberté Pour l’implémentation d’un modèle à 3 degrés de liberté, en nous nous appuyant sur le cours des Systèmes Robotiques Interactifs (GROSSARD), nous avons procédé en 3 étapes : 22
Rapport final – Projet Neurosciences – P19 9 juin 2021 Paramètres géométriques du modèle selon la convention Khalil-Kleinfinger Nous commençons par définir les axes X et Z pour chacune des articulations. Notons que l’épaule, articulation à 2 degrés de liberté, a été considérée comme deux révolutions perpendiculaires s’appliquant au même point. Figure 19 : Chaîne cinématique et schéma géométrique selon la convention K-K Nous avons conservé les notations utilisées lors du modèle géométrique direct à 2 degrés de liberté : q1 pour la rotation de l’épaule autour de l’axe Z et q2 pour la rotation du coude autour de l’axe Z (axe Z du plan XY du mouvement à 2 degrés de liberté). Nous ajoutons q3 comme nouveau degré de liberté, définissant la rotation autour de l’axe z3. Cependant, 23
Rapport final – Projet Neurosciences – P19 9 juin 2021 nous pouvons observer dans notre chaîne cinématique que le premier lien est entre 1 et 3 (les deux degrés de liberté de l’épaule), et non entre 1 et 2. Malgré la confusion que cela peut susciter, nous avons préféré garder cette notation pour utiliser des paramètres géométriques équivalents entre le modèle géométrique des 2 degrés de liberté et celui des 3 degrés de liberté. Grâce au schéma de la Figure 13, nous pouvons déduire l’ensemble des paramètres géométriques de la prothèse : i α d θ r 1 0 0 − + 1 2 3 0 + 3 0 2 2 1 2 0 2 1 Les variables de notre prothèse sont donc = ( 3) . 2 Modèle géométrique direct Après avoir défini les paramètres géométriques, nous pouvons appliquer les matrices de transformations directes : ( −1) = , ( , ) , ( , ) cos( ) − sin( ) 0 = (cos( ) sin( ) cos( ) cos( ) − sin( ) − sin( )) sin( ) sin( ) sin( ) cos( ) cos( ) cos( ) 0 0 0 1 ( −1) ( −1) =( ) 01×3 1 Il ne faut pas oublier que, pour avoir les coordonnées du vecteur position de la pointe, nous devons également appliquer une translation de longueur 2 au long de l’axe 2: 0 ( ) = 01( ) 13( ) 32( ) ( , 2) En appliquant ces matrices de transformation, nous retrouvons les coordonnées de la pointe dans les trois premiers éléments de la dernière colonne de la matrice de transformation 0 . Dans notre code MATLAB, les matrices de transformation sont appliquées à travers les fonctions « Compute_DGM » dans le dossier « 3D et Simulink », et la translation finale à travers la fonction « Compute_exercice ». 24
Rapport final – Projet Neurosciences – P19 9 juin 2021 Modèle géométrique inverse Nous avons premièrement utilisé la méthode de Newton-Raphson, qui nous permet de faire une recherche itérative de la manière suivante : +1 = + −1( )[ − ( )] { ‖ − ( )‖ < Avec : - d les coordonnées du point cible - −1( ) l’inverse de la matrice Jacobienne, définie comme = ( ) | = - l’erreur tolérée pour la distance entre le point cible et le point calculé - ( ) l’application du modèle géométrique direct avec les paramètres qk La fonction «ComputeIGM » dans le dossier « 3D et Simulink » applique l’algorithme suivant : K0 Tant que ‖ − ( )‖ > ou n’est pas dans les intervalles [ , ] k k+1 qk −1 + −1( −1)[ − ( −1)] fin tant que q* +1 renvoyer q* Cette méthode était fonctionnelle quand nous n’avions aucune contrainte sur l’espace de travail de la prothèse, elle convergeait vers une solution qui respectait la borne . Mais vu les restrictions d’angles que nous avions pour chaque articulation, 1 ∈ [−46°, 32.9°], 2 ∈ [−22°, 40°], 3 ∈ [−30°, 30°] , il était pratiquement impossible de faire converger la solution dans l’espace contraint avec une faible erreur (la convergence se faisait de manière plus efficace mais toujours avec un grand temps de latence à partir d’1 mm d’erreur permise, erreur qui reste intolérable). Nous avons ensuite tenté de formuler cela comme un problème d’optimisation, en minimisant ( ) et en posant comme contraintes les valeurs maximales et minimales des angles tels que ∈ [ , ], avec 1 1 − ( )2‖ = ( − ( ) − ( )) ( ) = ‖ )( 2 2 Pour cela nous avons utilisé dans la fonction « ComputeIKMlimits » la méthode de gradient, posant, à chaque nouvelle itération + 1 : +1 = − ∇ ( ) = + ( )[ − ( )] 25
Rapport final – Projet Neurosciences – P19 9 juin 2021 Nous avons cependant retrouvé les mêmes problèmes au niveau de la convergence des solutions. Cela est compréhensible, compte tenu de la multitude des configurations possibles qui permettent d’arriver à un point et les intervalles limités que nous avons pour les angles, ce qui réduit énormément la probabilité pour l’algorithme d’arriver à une configuration appartenant à notre espace de travail. Finalement, nous avons opté pour une solution moins sophistiquée mais qui nous a apporté des résultats concluants pour l’ensemble de l’espace de travail. Nous pouvons résumer la méthode implémentée dans « ComputeIGM2 » (dans le dossier « 3D et Simulink ») par l’algorithme suivant : pour i=q1min :0.02 : q1max On parcourt chaque intervalle d’angle par incrément de 0.02 rad pour j=q3min :0.02: q3max pour k=q2min :0.02: q2max q [i j k] X g0E(q) Modèle géométrique direct si ‖ − ‖ < Condition de précision renvoyer X, q fin si fin pour fin pour fin pour Il n’est évidemment envisageable d’utiliser ce type de procédé que si l’espace de travail est suffisamment restreint pour nous permettre de faire ce calcul dans un temps acceptable. En utilisant cet algorithme sur l’ensemble de l’espace de travail nous retrouvons les coordonnées des angles avec un temps de calcul compris entre 0,0015s et 1,35s. Ce temps de calcul peut avoir une influence non-négligeable sur le temps de réponse du servo si nous voulons l’utiliser dans une boucle fermée par exemple. Il faut préciser que nous avons pris en compte une erreur maximale de 0,25 mm comme compromis entre temps de calcul et précision. En parcourant les intervalles d’angles en incréments de 0,02 radians par itération (décrit dans l’algorithme ci-dessus), nous avons une distance maximale entre deux points adjacents de 0,25 mm. 26
Rapport final – Projet Neurosciences – P19 9 juin 2021 La réponse de la prothèse Ainsi donc, à partir d’une position cible dans l’espace physique, nous pouvons calculer les angles qu’il faut donner à la prothèse pour atteindre cette position. Or, nous ne contrôlons celle- ci que via les câbles et les moteurs, dont les positions angulaires sont les seuls paramètres sur lesquels nous puissions agir directement. Il nous a donc fallu caractériser laloi de réponse de la prothèse aux mouvements des servo. Comme dit précédemment au 2.1.1, nous avons opté pour une loi faisant abstraction des détails des efforts exercés, liant simplement les angles des servos à ceux des pièces de la prothèse. Ici, c’est Marie Engel qui nous a aidés en effectuant les mesures dont nous avions besoin quand nous n’avions pas accès à la prothèse directement. Les mesures faites par Marie consistaient en récupérer l’angle d’une articulation après avoir donné une commande de position au servomoteur censé contrôler ce degré de liberté. Nous avons jugé que l’hypothèse d’une relation linéaire était convenable vu le comportement observé dans les figures ci-dessous, avec des coefficients de détermination R2 > 0.99 pour les 4 tests effectués. Figure 20 : Régression linéaire de la réponse des pièces de la prothèse aux rotations des servomoteurs Nous avons donc défini par régression linéaire les coefficients de transmission de déplacement angulaire entre les servomoteurs et les articulations correspondantes : Δ = Δ Nous utilisons donc 1 = 3,1722 et 2 = 2,2179. Nous n’avons malheureusement pas pu faire de mesures actualisées sur le 3ème angle, nous utiliserons un coefficient cohérent avec les valeurs des deux autres en attendant que l’équipe du CNRS ait de nouveau une prothèse fonctionnelle. 27
Rapport final – Projet Neurosciences – P19 9 juin 2021 Notons l’amélioration significative de ces coefficients de transmission lors de la rigidification des câbles Bowden. Ils ont été multipliés par 15 pour le coude et 3 pour l’épaule. Figure 21 : Régression linéaire avant la rigidification des câbles Bowden Avec ces coefficients, notre code en boucle ouverte permet donc de passer des angles que nous devons donner à la prothèse, à ceux dont il faut faire tourner les servos afin d’atteindre la position cible. Génération de la trajectoire La trajectoire est générée à partir des points de passage et d’une méthode d’interpolation polynomiale. Rappelons que nous désirons générer une trajectoire qui suppose, pour chaque articulation, d’aller d’une position initiale qi à une position finale qf, et de conserver cette position une fois arrivé (donc vitesse et accélération nulles). ( = 0) = 0; ( = ) = { ̇ ( = 0) = ̇ ( = ) = ̈ ( = 0) = ̈ ( = 0)0 Pour cela, nous procédons à la génération de la trajectoire par interpolation de cinquième degré des positions angulaires initiales et finales pour chacune des articulations, donnant de la fluidité au mouvement et permettant un contrôle de la prothèse maîtrisé au cours du temps. La fonction polynomiale de degré 5 est utilisée de manière courante pour générer des trajectoires en robotique car c’est une fonction simple, continue et dérivable, ainsi que sa première dérivée ̇ ( ) et sa deuxième dérivée ̈ ( ), propriétés essentielles quand nous recherchons une fluidité des mouvements. Pour cela, nous calculons ( ) = 0 + ( ) 3 4 5 ( ) = 10 ( ) − 15 ( ) + 6 ( ) avec { = − 0 étant l’angle cible, et 0l’angle initial. 28
Rapport final – Projet Neurosciences – P19 9 juin 2021 r(t) nécessite le paramètre défini comme suit : - On définit des temps par : 15 | | 10| | = max( , √ ) 8 √3 où et sont, respectivement, les vecteurs de vitesse et d’accélération angulaires maximales. - On prend alors = ma x( 1 , … , ) Vu que le servomoteur peut indiquer sa propre position angulaire, nous avons donné comme consigne d’aller à la vitesse maximale pour analyser l’évolution de la vitesse et de l’accélération sur les intervalles des angles utilisés par la prothèse. Figure 22 : Angle du servo (en degrés) en fonction du temps (ms) Nous avons ici une relation linéaire entre position et temps, découlant sur une vitesse maximale de 50 RPM (révolutions par minute), ce qui correspond à la vitesse maximale donnée dans la fiche technique du servomoteur que nous avons. Cependant, dans le cadre de ce projet, les servomoteurs sont utilisés avec des angles inférieurs à 30° (afin de ne pas causer de cassure des pièces de la prothèse ou des câbles), ce qui signifie qu’il s’agit du domaine dans lequel la vitesse n’est pas constante : 29
Rapport final – Projet Neurosciences – P19 9 juin 2021 Figure 23 : Zoom sur le graph précédent Nous pouvons observer une évolution quadratique de la position angulaire du servo (en degrés) en fonction du temps (en ms), avec ( ) = 0,0319 − 0,043 + 0,0014 2 Cela nous permet de déduire que l’accélération angulaire maximale du servomoteur est de = 0,0028 °/ 2 = 4,88 10−5 / 2 Finalement, nous pouvons dire que ce n’est pas pertinent d’utiliser le vecteur sur un intervalle de valeurs dans lequel il ne sera pas atteint. Il est donc préférable d’utiliser le vecteur . Nous profiterons du fait que nous avons la capacité de contrôler la position et la vitesse angulaire du servomoteur pour lui donner comme commande ces deux paramètres en utilisant la même fonction d’interpolation : ( ) = 0 + ( ) { ( ̇ ) = ̇( ) Résumons donc l’algorithme de la boucle ouverte : Cible X,Y lire l’entrée Coordonnées cartésiennes, en mm, du point cible q1, q2 Modèle géométrique inverse (X,Y) Configuration finale de la prothèse q1sf, q2sf Régression linéaire (q1, q2) Configuration finale des servo ( ( ), ( ), ̇ ( ), ̇ ( )) Interpolation ( , , , ) Génération de la trajectoire 1 2 1 2 1 2 1 2 Servo : MoveTo( 1 ( ), 2 ( )) avec les vitesses ( 1̇ ( ), 2̇ ( )) Instruction donnée aux servos 30
Rapport final – Projet Neurosciences – P19 9 juin 2021 Cela étant fait, nous sommes passés à la commande en boucle fermée. 2.4.3 La boucle fermée Initialement, le client envisageait d’utiliser le câble central pour faire le retour somato- sensoriel sur l’état de la prothèse. Or, l’équipe de Luc Estebanez a considéré plus pratique d’employer un retour visuel à l’aide d’une caméra extérieure qui permettrait de relever la position de la pointe de la prothèse à chaque instant. Le client a alors opté pour la camera PixyCam (Pixy, s.d.), à cause de sa facilité d’usage et sa compatibilité avec l’Arduino, d’une part, et parce qu’elle peut filmer en infrarouge, ce qui permettra de ne pas gêner les souris, d’autre part. Il suffit, en effet, d’insérer une LED infrarouge à une position connue de la prothèse, et de suivre le mouvement de cette LED afin de caractériser le mouvement de la prothèse. Il nous a fallu, dès lors, tenir compte du fait que la LED n’est pas insérée à la pointe de la prothèse, mais à une position légérement différente qu’il a fallu déterminer précisément pour que la boucle fermée puisse fonctionner. Figure 24 : Configuration initiale, avec la pointe et le point lumineux (LED) représentés Nous avons donc modifié les paramètres géométriques de notre modèle, en remplaçant 2 = 8.68 par 2 = 6.55 , et = 71.9° par = 69.9°. Il s‘agissait ensuite de faire le lien entre les données que renvoie la Pixy et les coordonnées de l’extrémité de la prothèse. En effet, la Pixy renvoie la position du point traqué en pixels, et il fallait donc faire le lien entre ces données et les distances réelles parcourues, ce lien dépendant de la distance entre la caméra et la prothèse. Nous avons alors utilisé les données techniques de la caméra, notamment sa distance focale et ses angles de champ (qui nous ont permis de calculer les dimensions du capteur de la caméra) afin d’obtenir la relation cherchée : 31
Rapport final – Projet Neurosciences – P19 9 juin 2021 + = + = Avec : (resp. Y) l’abscisse (resp. l’ordonnée) réelle (en mm) du point (resp. ) la coordonnée, en pixels, du point f la distance focale de la lentille de la Pixy (1.8 mm) la distance entre la Pixy et la prothèse (en supposant que l’axe optique est perpendiculaire au plan de la prothèse lorsque celle-ci est au repos) (resp. ) la taille horizontale (resp. verticale) du capteur de la pixy, valant 2.1 mm (resp. 1.3mm) (resp. ) la résolution horizontale (resp. verticale) en pixels, valant 320 (resp. 200) Le code nécessite donc de fixer la distance entre la Pixy et la prothèse, et nous l’avons signalé au client, qui compte intégrer un système permettant de fixer la caméra par rapport à la prothèse dans le prochain montage. Avec ces relations, la commande en boucle fermée devient possible, dont le schéma peut se représenter comme suit : Figure 25 : Schéma bloc de la boucle fermée Dans ce schéma Simulink nous pouvons observer les sous-systèmes suivants : - qdf IGM(xdf) Modèle géométrique inverse - qc(t) GenTraj(qdf,qdi,t) Générer la commande qc suivant une trajectoire - qs(t) ServoMotor(qc(t), q(t)) Générer la rotation des servos selon qc et le retour q - xf,qf Bowden cables(qs(t)) Introduction d’une erreur pour simuler l’incertitude du modèle de transmission entre les servomoteurs et les articulations 32
Vous pouvez aussi lire