Geckrobot : Concept et modélisation d’une patte

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.

Geckrobot : schema cinematique patteDans 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 :

    \begin{eqnarray*} \overrightarrow{O_0 \, O_1} & = & X_0 \; \vec{x} + Y_0 \; \vec{y} + Z_0 \; \vec{z} \\ \overrightarrow{O_1 \, O_2} & = & Y_1 \; \vec{y_1}  \\ \overrightarrow{O_2 \, O_3} & = & Y_2 \; \vec{y_2}  \\ \overrightarrow{O_3 \, O_4} & = & Y_3 \; \vec{y_3} \end{eqnarray*}

où les vecteurs \vec{y_1}, \vec{y_2} et \vec{y_3} sont les vecteurs unitaires respectivement colinéaires aux vecteurs \overrightarrow{O_1 \, O_2}, \overrightarrow{O_2 \, O_3} et \overrightarrow{O_3 \, O_4}.

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

    \[ T_{i,j} = \left[ \begin{matrix} A & P \\ [0,0,0] & 1 \end{matrix} \right], \]

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

    \[ T_{i,k} = T_{i,j} . T_{j,k}. \]

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

    \[ T_{j,i} = {T_{i,j}}^{-1} = \left[ \begin{matrix} A^T & - A^T.P \\ [0,0,0] & 1 \end{matrix} \right], \]

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

    \[ T_{0,1} = \left[ \begin{matrix} \cos \theta_1 & - \sin \theta_1 & 0 & X_0 \\ \sin \theta_1 & \cos \theta_1 & 0 & Y_0 \\ 0 & 0 & 1 & Z_0 \\ 0 & 0 & 0 & 1 \end{matrix} \right], \]

    \[ T_{1,2} = \left[ \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & \cos \theta_2 & - \sin \theta_2 & Y_1 \\ 0 & \sin \theta_2 & \cos \theta_2 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right], \]

    \[ T_{2,3} = \left[ \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & \cos \theta_3 & - \sin \theta_3 & Y_2 \\ 0 & \sin \theta_3 & \cos \theta_3 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right] \text{ et } \]

    \[ T_{2,3} = \left[ \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & Y_3 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right] \]

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

    \[  T_{0,4} = \left[ \begin{matrix} \cos \theta_1 & - \sin \theta_1 . \cos (\theta_2 + \theta_3) & \sin \theta_1 . \sin (\theta_2 + \theta_3) & X \\ \sin \theta_1 & \cos \theta_1 . \cos (\theta_2 + \theta_3) & - \cos \theta_1 . \sin (\theta_2 + \theta_3) & Y \\ 0 & \sin (\theta_2 + \theta_3) & \cos (\theta_2 + \theta_3) & Z \\ 0 & 0 & 0 & 1 \end{matrix} \right], \]

où les coordonnées X, Y et Z s’écrivent

    \[ \begin{array}{l} X = X_0 - \left[ Y_1 + Y_2 \cos \theta_2 + Y_3 \cos ( \theta_2 + \theta_3 ) \right] \sin \theta_1 \\ Y = Y_0 + \left[ Y_1 + Y_2 \cos \theta_2 + Y_3 \cos ( \theta_2 + \theta_3 ) \right] \cos \theta_1 \\ Z = Z_0 + Y_2 \sin \theta_2 + Y_3 \sin ( \theta_2 + \theta_3) \end{array} . \]

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

    \[ A = Y_1 + Y_2 \cos \theta_2 + Y_3 \cos ( \theta_2 + \theta_3 ) . \]

Cette variable représente la projection sur un plan horizontal du vecteur \overrightarrow{O_1 \, O_4}. En utilisant A dans l’expression de X et Y nous obtenons

    \[ \left\lbrace \begin{matrix} X - X_0 = - A \sin \theta_1 \\ Y - Y_0 = A \cos \theta_1 \\ \end{matrix} \right. \Rightarrow A^2 = (X - X_0)^2 + (Y - Y_0)^2 . \]

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

    \[ A = \sqrt{(X - X_0)^2 + (Y - Y_0)^2} . \]

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

    \[ \theta_1 = \tan^{-1}\(\frac{X_0 - X}{Y - Y_0} \]

Pour déterminer les valeurs de θ2 et θ3, appuyons nous sur les deux équations suivantes (définition de A et expression de Z)

    \[ \left\lbrace \begin{array}{l} A - Y_1 = Y_2 \cos \theta_2 + Y_3 \cos ( \theta_2 + \theta_3) \\ Z - Z_0 = Y_2 \sin \theta_2 + Y_3 \sin ( \theta_2 + \theta_3) \end{array} \right. . \]

On peut d’abord déterminer θ3 avec l’astuce suivante

    \[ (A - Y_1)^2 + (Z - Z_0)^2 = Y_2^2 + Y_3^2 + 2 Y_2 Y_3 \cos \theta_3 , \]

d’où

    \[ \cos \theta_3 = \frac{(A - Y_1)^2 + (Z - Z_0)^2 - Y_2^2 - Y_3^2}{2 Y_2 Y_3} \]

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 -1 \leq \cos \theta_3 \leq 1, 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)

    \[ \left\lbrace \begin{array}{l} A - Y_1 = (Y_2 + Y_3 \cos \theta_3) \cos \theta_2 - Y_3 \sin \theta_3 \sin \theta_2 \\ Z - Z_0 = (Y_2 + Y_3 \cos \theta_3 ) \sin \theta_2 + Y_3 \sin \theta_3 \cos \theta_2 \end{array} \right. . \]

La résolution du système donne

    \[ \left\lbrace \begin{array}{l} \cos \theta_2 = \dfrac{(Y_2 + Y_3 \cos \theta_3) (A - Y_1) + Y_3 \sin \theta_3 (Z - Z_0)}{(Y_2 + Y_3 \cos \theta_3)^2 + Y_3^2 \sin^2 \theta_3} \\ \sin \theta_2 = \dfrac{(Y_2 + Y_3 \cos \theta_3) \cos \theta_2 - A + Y_1}{Y_3 \sin \theta_3} \end{array} \right. . \]

Il faut s’assurer que Y2 ≠ 0 et Y3 ≠ 0. Si \sin \theta_3 = 0, c’est à dire \theta_3 = 0 ou 180, on a alors

    \[ \theta_2 = tan^{-1} \frac{Z - Z_0}{A - Y_1} . \]

4. Modélisation mécanique direct

Soit le vecteur \vec{F} une force qu’on applique au point O4 (extrémité de la patte). Exprimons ce vecteur dans le repère du robot par

    \[ \vect{F} = \left[  \begin{array}{l} F_x \\ F_y \\ F_z \end{array} \right] . \]

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)

    \[  \begin{array}{l} C_1 = ( \overrightarrow{O_1 \, O_4} \wedge \vec{F} ) \vec{z_1} \\ C_2 = ( \overrightarrow{O_2 \, O_4} \wedge \vec{F} ) \vec{x_2} \\ C_3 = ( \overrightarrow{O_3 \, O_4} \wedge \vec{F} ) \vec{x_3} \end{array} , \]

\wedge est un produit vectoriel.

À l’aide des matrices transfert, on obtient aisément les vecteurs \overrightarrow{O_1 \, O_4}, \overrightarrow{O_2 \, O_4} et \overrightarrow{O_3 \, O_4}. Il faut ensuite effectuer un changement de repère du vecteur \vec{F} pour chaque servomoteur à l’aide des matrices de transferts inverses.

Nous pouvons donc poser pour C1 :

    \[  \overrightarrow{O_1 \, O_4} \wedge \vec{F} = \left\vert  \begin{array}{l} 0 \\ Y_1 + Y_2 \cos \theta_2 + Y_3 \cos (\theta_2 + \theta_3) \\ Y_2 \sin \theta_2 + Y_3 \sin (\theta_2 + \theta_3) \end{array} \right. \wedge \left\vert  \begin{array}{l} F_x \cos \theta_1 + F_y \sin \theta_1 \\ -F_x \sin \theta_1 + F_y \cos \theta_1 \\ F_z \end{array} \right. \]

    \[ C_1 = - [Y_1 + Y_2 \cos \theta_2 + Y_3 \cos ( \theta_2 + \theta_3)] ( F_x \cos \theta_1 + F_y \sin \theta_1 ) . \]

Puis C2 :

    \[  \overrightarrow{O_2 \, O_4} \wedge \vec{F} = \left\vert  \begin{array}{l} 0 \\ Y_2 + Y_3 \cos \theta_3 \\ Y_3 \sin \theta_3 \end{array} \right. \wedge \left\vert  \begin{array}{l} F_x \cos \theta_1 + F_y \sin \theta_1  \\ (-F_x \sin \theta_1 + F_y \cos \theta_1) \cos \theta_2 + F_z \sin \theta_2  \\ (F_x \sin \theta_1 - F_y \cos \theta_1) \sin \theta_2 + F_z \cos \theta_2 \end{array} \right. \]

    \[ \begin{array}{rl} C_2 = & Y_2 [ (F_x \sin \theta_1 - F_y \cos \theta_1) \sin \theta_2 + F_z \cos \theta_2] + \dots \\ & Y_3 [ (F_x \sin \theta_1 - F_y \cos \theta_1) \sin (\theta_2 + \theta_3) + F_z \cos (\theta_2 + \theta_3)] . \end{array} \right. \]

Et enfin C3 :

    \[  \overrightarrow{O_3 \, O_4} \wedge \vec{F} = \left\vert  \begin{array}{l} 0 \\ Y_3 \\ 0 \end{array} \right. \wedge \left\vert  \begin{array}{l} F_x \cos \theta_1 + F_y \sin \theta_1  \\ (-F_x \sin \theta_1 + F_y \cos \theta_1) \cos (\theta_2 + \theta_3) + F_z \sin (\theta_2 + \theta_3) \\ (F_x \sin \theta_1 - F_y \cos \theta_1) \sin (\theta_2 + \theta_3) + F_z \cos (\theta_2 + \theta_3) \end{array} \right. \]

    \[ C_3 = Y_3 [ (F_x \sin \theta_1 - F_y \cos \theta_1) \sin (\theta_2 + \theta_3) + F_z \cos (\theta_2 + \theta_3) ] . \]

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.

2 réflexions au sujet de « Geckrobot : Concept et modélisation d’une patte »

  1. 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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *