J’ai introduit le projet Geckrobot précédemment (ici). Je vais développer dans cet article plus en détail le fonctionnement d’une patte :
- Le concept initial.
- Les modèles cinématiques direct et inverse qui permettrons de piloter les pattes dans un systèmes de coordonnées cartésiennes (X, Y, Z).
- Le modèle mécanique qui permettra de dimensionner les servomoteurs.
- Le premier prototype de patte.
1. Concept
Je suis parti sur un concept de patte s’articulant sur 3 axes de rotation (1 verticale, 2 horizontales) qui sont motorisées avec les servomoteurs. Le schéma cinématique est représenté ci-dessous.
Dans ce schéma, 01, 02 et 03 sont les centres de rotation, 00 est la référence (ou origine) du robot et 04 est l’extrémité de la patte. Les angles θ1, θ2 et θ3 sont les déplacements des servomoteurs.
On peut définir les vecteurs suivants :
où les vecteurs , et sont les vecteurs unitaires respectivement colinéaires aux vecteurs , et .
2. Modélisation cinématique direct
La modélisation des pattes est établie à l’aide de la convention de Khalil-Kleinfinger. C’est une représentation des mouvements généralement utilisée pour décrire la cinématique des robots polyarticulés. Elle permet d’exprimer le passage d’un point i à un point j, à l’aide d’une matrice 4 × 4 sous la forme
où A est une matrice 3 × 3 de rotation et P un vecteur colonne 1 × 3 de déplacement. Un changement de repère Ti,k d’un point i à un point k peut alors être facilement obtenu par
Notons que cette forme présente aussi l’intérêt de pouvoir être inversée facilement. Le changement de repère Tj,i est donné par
où AT est la transposée de A.
Nous avons vu dans la section 1 le schéma cinématique de notre patte, que nous pouvons décrire par quatre matrices de transfert : T0,1, T1,2, T2,3 et T3,4 données par
Nous pouvons maintenant évaluer la position (X, Y, Z) du point O4 dans dans le repère du robot en calculant la matrice de transfert T0,4 qui s’exprime alors
où les coordonnées X, Y et Z s’écrivent
3. Modélisation cinématique inverse
Maintenant que nous sommes capables de calculer la position X, Y, Z du point O4 en fonction des angles θ1, θ2 et θ3 (position angulaire des servomoteurs), nous allons maintenant rechercher quelles valeurs d’angles sont nécessaires pour atteindre une position X, Y, Z donnée.
Commençons par définir une variable intermédiaire A définie par
Cette variable représente la projection sur un plan horizontal du vecteur . En utilisant A dans l’expression de X et Y nous obtenons
La variable A peut alors avoir deux valeurs (égales au signe près) qui va correspondre à une valeur de l’angle θ1 à ±180°. Nous allons réduire le problème à la valeur positive de A
Nous pouvons donc maintenant déterminer la valeur de θ1 avec son arc tangente (nous utiliserons la fonction atan2
lorsqu’il faudra le programmer). Nous avons donc
Pour déterminer les valeurs de θ2 et θ3, appuyons nous sur les deux équations suivantes (définition de A et expression de Z)
On peut d’abord déterminer θ3 avec l’astuce suivante
d’où
Il faut s’assurer que Y2 ≠ 0 et Y3 ≠ 0.
A partir du cosinus, deux valeurs – identiques au signe près – de l’angle θ3 sont possibles. Si θ3 > 0, le genou est “tourné à l’intérieur”, si θ3 < 0, le genou est “tourné à l’extérieur”. Nous choisissons cette seconde solution. Il est aussi important de vérifier que , sinon cela signifie que la position X, Y, Z désirée est trop éloignée pour la géométrie de la patte.
Reprenons notre système d’équations précédent et arrangeons le pour avoir une équation linéaire dont les inconnues sont cos θ2 et sin θ2 en développant cos(θ2 + θ3) et sin(θ2 + θ3)
La résolution du système donne
Il faut s’assurer que Y2 ≠ 0 et Y3 ≠ 0. Si , c’est à dire ou , on a alors
4. Modélisation mécanique direct
Soit le vecteur une force qu’on applique au point O4 (extrémité de la patte). Exprimons ce vecteur dans le repère du robot par
Les couples (ou moments) C1, C2 et C3 appliqués aux différents servomoteurs s’expriment alors (on ne considère que le moment sur l’axe de rotation)
où est un produit vectoriel.
À l’aide des matrices transfert, on obtient aisément les vecteurs , et . Il faut ensuite effectuer un changement de repère du vecteur pour chaque servomoteur à l’aide des matrices de transferts inverses.
Nous pouvons donc poser pour C1 :
Puis C2 :
Et enfin C3 :
5. Prototype
Pour conclure ce long article, j’ai fabriqué un premier prototype de patte avec 3 servomoteurs HerkuleX DRS-0101 (d’où le développement de la librairie HerkuleXLib pour Arduino) et des pièces en aluminium. Voici la bête.
La modélisation décrite dans cette article est utilisée dans le cadre de simulations numériques ici.
Et bien ça en fait des calculs. Ça te rappelle tes cours de méca? On est loin de mes bidouilles … 🙂 Alors ça fonctionne? L’arduino le supporte?
J’avoue que j’ai ressorti les cours. Pour le moment je sais piloter les servomoteurs avec l’Arduino. J’ai commencé à m’attaquer au pilotage de la patte pour faire des trajectoires linéaires de la tête. Je n’y suis pas encore.