Pilotage d'une prothèse miniaturisée - Mehdi Bennis, Abdulnafe Toulaimat Encadrés par Monsieur Luc Estebanez - UPC (UPCommons)

La page est créée Fanny Ruiz
 
CONTINUER À LIRE
Pilotage d'une prothèse miniaturisée - Mehdi Bennis, Abdulnafe Toulaimat Encadrés par Monsieur Luc Estebanez - UPC (UPCommons)
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
Pilotage d'une prothèse miniaturisée - Mehdi Bennis, Abdulnafe Toulaimat Encadrés par Monsieur Luc Estebanez - UPC (UPCommons)
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
Pilotage d'une prothèse miniaturisée - Mehdi Bennis, Abdulnafe Toulaimat Encadrés par Monsieur Luc Estebanez - UPC (UPCommons)
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
Pilotage d'une prothèse miniaturisée - Mehdi Bennis, Abdulnafe Toulaimat Encadrés par Monsieur Luc Estebanez - UPC (UPCommons)
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
Pilotage d'une prothèse miniaturisée - Mehdi Bennis, Abdulnafe Toulaimat Encadrés par Monsieur Luc Estebanez - UPC (UPCommons)
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
Pilotage d'une prothèse miniaturisée - Mehdi Bennis, Abdulnafe Toulaimat Encadrés par Monsieur Luc Estebanez - UPC (UPCommons)
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
Pilotage d'une prothèse miniaturisée - Mehdi Bennis, Abdulnafe Toulaimat Encadrés par Monsieur Luc Estebanez - UPC (UPCommons)
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
Pilotage d'une prothèse miniaturisée - Mehdi Bennis, Abdulnafe Toulaimat Encadrés par Monsieur Luc Estebanez - UPC (UPCommons)
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
Pilotage d'une prothèse miniaturisée - Mehdi Bennis, Abdulnafe Toulaimat Encadrés par Monsieur Luc Estebanez - UPC (UPCommons)
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
Pilotage d'une prothèse miniaturisée - Mehdi Bennis, Abdulnafe Toulaimat Encadrés par Monsieur Luc Estebanez - UPC (UPCommons)
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 :

 K0

 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