2 septembre 2022
Mi 2023, nous étudions la possibilité de commander un robot holonome sur le même principe que nos robots précédents (que nous appellerons robot différentiels).
Tout d’abord, qu’est-ce qu’un robot holonome ? Un robot holonome est un robot capable de translater dans toutes les directions (du plan). Il est aussi censé pouvoir tourner autour de n’importe quel axe vertical. Plus pragmatique, c’est un robot capable de rouler d’avant en arrière, mais aussi sur le côté.
La magie du robot holonome commence avec ses roues. Les roues sont dotées de rouleaux qui lui permettent de se mouvoir dans une direction perpendiculaire à la roue. Il existe deux grandes familles de roues holonomes. Celle qui nous intéressent sont celles-ci :
Vous avez :
En vue de dessus, ceci donne :
Nous souhaitons réaliser une robot holonome en nous servant des même technologies que sur nos robots différentiels. Donc, dans les grandes lignes, se servir des codeurs des moteurs pour déterminer la distance parcourue et d’un gyroscope pour connaître l’orientation du robot.
Nous envisageons un robot avec les trois moteurs disposés à 120°.
Nous cherchons à déterminer la vitesse du robot à partir de la vitesse de ses moteurs.
Or sur une telle configuration, déduire la vitesse instantanée du robot grâce à la vitesse de rotation de ses roues n’est pas trivial.
En effet, si la vitesse forcée VF se déduit facilement de la vitesse de rotation du moteur (en supposant un roulement sans glissement), la vitesse libre dépend de nombreux paramètres comme nous allons le voir.
Nous appellerons les roues A, B et C. Nous considérerons que les roues se trouvent à une distance d du centre du robot. La position des roues est définie par un angle, α (alpha) pour la roue A, β (beta) pour la roue B et γ (gamma) pour la roue C.
Pour chaque roue, nous définissons une vitesse tangentielle au robot, nommée vitesse forcée. C’est la vitesse qui est contrôlée par la rotation de la roue. Nous la notons VXF, X étant le nom de la roue.
Pour chaque roue, nous définissons également, une vitesse radiale au robot, nommée vitesse libre. C’est la vitesse qui est n’est pas contrôlée par la rotation de la roue. Nous la notons VXL, X étant le nom de la roue.
Nous allons avoir besoin de projeter ces vitesses sur les axes x et y. Alors faisons-le avant de rentrer dans le vif du sujet. Pour la roue A :
$$ \vec{V}_{A} = \left\{ \begin{array}{c} V_{Ax} \\ V_{Ay} \\ 0 \end{array} \right\}= \left\{ \begin{array}{c} \sin(\alpha)\times V_{AF} + \cos(\alpha)\times V_{AL}\\ -\cos(\alpha)\times V_{AF} + \sin(\alpha)\times V_{AL}\\ 0 \end{array} \right\} $$
Pour les roues B et C, les formules sont identiques, c’est la valeur de l’angle qui change :
$$ \vec{V}_{B} = \left\{ \begin{array}{c} V_{Bx} \\ V_{By} \\ 0 \end{array} \right\}= \left\{ \begin{array}{c} \sin(\beta)\times V_{BF} + \cos(\beta)\times V_{BL}\\ -\cos(\beta)\times V_{BF} + \sin(\beta)\times V_{BL}\\ 0 \end{array} \right\}$$
$$ \vec{V}_{C} = \left\{ \begin{array}{c} V_{Cx} \\ V_{Cy} \\ 0 \end{array} \right\}= \left\{ \begin{array}{c} \sin(\gamma)\times V_{CF} + \cos(\gamma)\times V_{CL}\\ -\cos(\gamma)\times V_{CF} + \sin(\gamma)\times V_{CL}\\ 0 \end{array} \right\} $$
Dans ces équations, nous connaissons la géométrie du robot (cosinus et sinus des angles α, β et γ). Nous connaissons aussi les vitesses forcées VAF, VBF et VCF. Ce que nous cherchons ce sont les autres vitesses : VAL, VBL, VCL, VAx, VAy, VBx, VBy, VCx et VCy.
Présenté ainsi, nous avons 6 équations, 9 inconnues. Bref, beaucoup trop d’inconnues.
Il nous faut donc rajouter une contrainte entre ces vitesses. Quelque chose qui nous permette de les relier les unes aux autres.
Cette contrainte, c’est que les trois roues appartiennent au même robot, que nous allons considérer comme un solide indéformable.
Le torseur cinématique permet de représenter de façon pratique le champ des vitesses d’un solide indéformable [1].
On note :$\mathcal{V}(S/R)_{A}$ le tenseur cinématique du solide S dans le repère R au point A.
Dans notre cas, nous considérerons que tous nos points appartiennent au châssis du robot et que nous n’avons qu’un seul référentiel, la table de jeu. Nous simplifierons la notation de notre tenseur comme ceci : $\mathcal{V}_{A}$.
En un point A, un torseur cinématique s’exprime :
$$ \mathcal{V}_A = \begin{matrix} \\ \\ \end{matrix}_{A} \begin{Bmatrix} \vec{\Omega} \\ \vec{\mathrm{V}}_A \end{Bmatrix} $$
Avec $\vec{\Omega}$, le vecteur rotation du robot et $\vec{\mathrm{V}}_A$ la vitesse du point A.
En utilisant la loi du transport des moments [2], il est possible d’exprimer la vitesse de n’importe quel point du solide à partir d’un point de référence.
La formule, avec nos notations, donne ceci :
$$ \mathcal{V}_{B} = \begin{matrix} \\ \\ \end{matrix}_{B} \begin{Bmatrix} \vec{\Omega} \\ \vec{\mathrm{V}}_{B} \end{Bmatrix} = \begin{matrix} \\ \\ \end{matrix}_{B} \begin{Bmatrix} \vec{\Omega} \\ \vec{\mathrm{V}}_A + \overrightarrow{\mathrm{BA}} \wedge \vec{\Omega} \end{Bmatrix} $$
Le drôle de signe "$\wedge$" symbolise un produit vectoriel [3].
À l’aide de cette formule, nous allons pouvoir exprimer la vitesse au point O (le centre du robot) à partir des trois vitesses en A, B et C...
Nous pouvons exprimer la vitesse du point O ainsi :
$$ \mathcal{V}_{O} = \begin{Bmatrix} \vec{\Omega} \\ \vec{\mathrm{V}}_A + \overrightarrow{\mathrm{OA}} \wedge \vec{\Omega} \end{Bmatrix} = \begin{Bmatrix} \vec{\Omega} \\ \vec{\mathrm{V}}_B + \overrightarrow{\mathrm{OB}} \wedge \vec{\Omega} \end{Bmatrix} = \begin{Bmatrix} \vec{\Omega} \\ \vec{\mathrm{V}}_C + \overrightarrow{\mathrm{OC}} \wedge \vec{\Omega} \end{Bmatrix} $$
Les vecteurs $\vec{OA}$ et $\vec{\Omega}$ se définissent ainsi :
$$\vec{OA} = \left\{ \begin{array}{} \cos(\alpha) \times d \\ \sin(\alpha) \times d \\ 0 \end{array} \right\}$$
$$\vec{\Omega} = \left\{ \begin{array}{c} 0 \\ 0 \\ \omega{}_z \end{array} \right\}$$
Le robot est en appui plan sur la table, la rotation n’est que selon l’axe z.
Le produit vectoriel des deux donne :
$$ \overrightarrow{\mathrm{OA}} \wedge \vec{\Omega} = \left\{ \begin{array}{} \omega_z \times \sin(\alpha)\times d \\ -\omega_z \times \cos(\alpha)\times d \\ 0 \end{array} \right\} $$
Nous pouvons ainsi exprimer la vitesse du point O en déplaçant le tenseur cinématique du point A. Nous notons cette vitesse $\vec{V}_{OA}$.
$$\vec{V}_{OA} = \left\{\vec{V}_{A} + \overrightarrow{\mathrm{OA}} \wedge \vec{\Omega} \right\}$$
$$\vec{V}_{OA} = \left\{\begin{array}{ccc} \sin(\alpha)\times V_{AF} + \cos(\alpha)\times V_{AL} &+& \omega_z \times \sin(\alpha)\times d \\ -\cos(\alpha)\times V_{AF} + \sin(\alpha)\times V_{AL} &+& -\omega_z \times \cos(\alpha)\times d \\ 0 \end{array} \right\}$$
Sur le même modèle nous exprimons $\vec{V}_{OB}$ et $\vec{V}_{OC}$ la vitesse du point O obtenu en déplaçant respectivement les tenseurs cinématiques des points B et C :
$$\vec{V}_{OB} = \left\{\begin{array}{ccc} \sin(\beta)\times V_{BF} + \cos(\beta)\times V_{BL} &+& \omega_z \times \sin(\beta)\times d \\ -\cos(\beta)\times V_{BF} + \sin(\beta)\times V_{BL} &+& -\omega_z \times \cos(\beta)\times d \\ 0 \end{array} \right\}$$
et
$$\vec{V}_{OC} = \left\{\begin{array}{ccc} \sin(\gamma)\times V_{CF} + \cos(\gamma)\times V_{CL} &+& \omega_z \times \sin(\gamma)\times d \\ -\cos(\gamma)\times V_{CF} + \sin(\gamma)\times V_{CL} &+& -\omega_z \times \cos(\gamma)\times d \\ 0 \end{array} \right\}$$
Nous parlons bien de la vitesse du même point O. Nous pouvons écrire :
$$\vec{V}_{OA} = \vec{V}_{OB} = \vec{V}_{OC} $$
Pour obtenir nos équations nous utiliserons :
$$ \left\{ \begin{array}{l} \vec{V}_{OA} = \vec{V}_{OB} \\ \vec{V}_{OA} = \vec{V}_{OC} \end{array} \right. $$
Et à partir de là, il faut noircir du papier. Projetons les vecteurs sur les axes x et y (l’axe z n’apporte rien).
$$ \left\{ \begin{array}{c} V_{OAx} = V_{OBx} \\ V_{OAy} = V_{OBy} \\ V_{OAx} = V_{OCx} \\ V_{OAy} = V_{OCy} \\ \end{array} \right. $$
Ce qui donne, en remplaçant les vitesses par leurs expressions :
$$ \left\{ \begin{array}{rcl} \sin(\alpha)\times V_{AF} + \cos(\alpha)\times \color{red}V_{AL}\color{black} + \color{red}\omega_z\color{black} \times \sin(\alpha)\times d & = &\sin(\beta)\times V_{BF} + \cos(\beta)\times \color{red}V_{BL}\color{black} + \color{red}\omega_z\color{black} \times \sin(\beta)\times d \\ -\cos(\alpha)\times V_{AF} + \sin(\alpha)\times \color{red}V_{AL}\color{black} -\color{red}\omega_z\color{black} \times \cos(\alpha)\times d & = & -\cos(\beta)\times V_{BF} + \sin(\beta)\times \color{red}V_{BL}\color{black} -\color{red}\omega_z\color{black} \times \cos(\beta)\times d \\ \sin(\alpha)\times V_{AF} + \cos(\alpha)\times \color{red}V_{AL}\color{black} + \color{red}\omega_z\color{black} \times \sin(\alpha)\times d & = & \sin(\gamma)\times V_{CF} + \cos(\gamma)\times \color{red}V_{CL}\color{black} + \color{red}\omega_z\color{black} \times \sin(\gamma)\times d \\ -\cos(\alpha)\times V_{AF} + \sin(\alpha)\times \color{red}V_{AL}\color{black} -\color{red}\omega_z\color{black} \times \cos(\alpha)\times d & = & -\cos(\gamma)\times V_{CF} + \sin(\gamma)\times \color{red}V_{CL}\color{black} -\color{red}\omega_z\color{black} \times \cos(\gamma)\times d \\ \end{array} \right. $$
Bien, maintenant, au lieu de 9 inconnues, nous en avons 4. Les trois vitesses $V_{AL}$, $V_{BL}$ et $V_{CL}$ et la vitesse de rotation $\omega_z$. Et nous avons également 4 équations, probablement indépendantes. C’est plutôt bon signe !
Pour résoudre ce système d’équation, nous allons utiliser la règle de Cramer. Pour cela, nous mettons les termes avec une inconnue d’un côté, les termes connus de l’autre :
$$ \left\{ \begin{array}{rcl} \cos(\alpha)\times \color{red}V_{AL}\color{black} - \cos(\beta)\times \color{red}V_{BL}\color{black} + \color{red}\omega_z\color{black} \times d \times [\sin(\alpha)-\sin(\beta)]& = &\sin(\beta)\times V_{BF} - \sin(\alpha)\times V_{AF} \\ \sin(\alpha)\times \color{red}V_{AL}\color{black} - \sin(\beta)\times \color{red}V_{BL}\color{black} + \color{red}\omega_z\color{black} \times d\times [\cos(\beta)-\cos(\alpha)] & = & \cos(\alpha)\times V_{AF}-\cos(\beta)\times V_{BF} \\ \cos(\alpha)\times \color{red}V_{AL}\color{black} -\cos(\gamma)\times \color{red}V_{CL}\color{black} + \color{red}\omega_z\color{black} \times d \times[\sin(\alpha)-\sin(\gamma)]& = & \sin(\gamma)\times V_{CF} - \sin(\alpha)\times V_{AF} \\ \sin(\alpha)\times \color{red}V_{AL}\color{black} -\sin(\gamma)\times \color{red}V_{CL}\color{black} +\color{red}\omega_z\color{black} \times d \times [\cos(\gamma) -\cos(\alpha)] & = & \cos(\alpha)\times V_{AF} -\cos(\gamma)\times V_{CF} \\ \end{array} \right. $$
Nous allons représenter nos équations sous la forme matricielle :
$$ A \cdot X=\Lambda $$
Avec :
$$ A = \left\{ \begin{array}{c} \cos(\alpha)& -\cos(\beta) & 0 & d \times [\sin(\alpha)-\sin(\beta)]\\ \sin(\alpha)& -\sin(\beta) & 0 & d \times [\cos(\beta)-\cos(\alpha)] \\ \cos(\alpha)& 0 & -\cos(\gamma)& d \times[\sin(\alpha)-\sin(\gamma)]\\ \sin(\alpha)& 0 & -\sin(\gamma) & d \times [\cos(\gamma) -\cos(\alpha)]\\ \end{array} \right\} $$
$$ X = \left\{ \begin{array}{c} V_{AL}\\ V_{BL}\\ V_{CL}\\ \omega_z\\ \end{array} \right\} $$
et
$$ \Lambda = \left\{ \begin{array}{c} \sin(\beta)\times V_{BF} - \sin(\alpha)\times V_{AF} \\ \cos(\alpha)\times V_{AF}-\cos(\beta)\times V_{BF} \\ \sin(\gamma)\times V_{CF} - \sin(\alpha)\times V_{AF} \\ \cos(\alpha)\times V_{AF} -\cos(\gamma)\times V_{CF} \\ \end{array} \right\} $$
La règle de Cramer stipule que le système admet une solution si et seulement si le déterminant de la matrice A est non nul.
Nous ne détaillerons pas le calcul du déterminant d’une matrice de 4x4. Nous allons juste indiquer que nous choisissons la 3e colonne comme "axe" pour calculer le déterminant.
Nous trouvons le résultat suivant :
$$ \begin{array}{rl} \det(A)=& \cos(\gamma)\cos(\alpha)\sin(\beta)\times d \times[cos(\gamma)-\cos(\alpha)] \\ & -\cos(\gamma)\sin(\alpha)\cos(\beta) \times d \times [\cos(\gamma)-\cos(\alpha)] \\ & +\cos(\gamma)\sin(\alpha)\cos(\beta) \times d \times [\cos(\beta)-\cos(\alpha)] \\ & -\cos(\gamma)\sin(\alpha)\sin(\beta) \times d \times [\sin(\alpha) - \sin(\gamma)] \\ & \\ & -\sin(\gamma)\cos(\alpha)\sin(\beta)\times d \times[\sin(\alpha) - sin(\gamma)] \\ & +\sin(\gamma)\sin(\alpha)\cos(\beta)\times d \times[\sin(\alpha) - sin(\gamma)] \\ & -\sin(\gamma)\cos(\alpha)\cos(\beta)\times d \times[\cos(\beta) - \cos(\alpha)] \\ & +\sin(\gamma)\cos(\alpha)\sin(\beta)\times d \times[\sin(\alpha) -\sin(\beta)] \end{array} $$
Nous allons calculer le déterminant pour des valeurs représentatives de notre application. Pour simplifier le calcul, remarquons tout d’abord qu’avec un angle γ valant 270°C, les 4 premières lignes du determinant valent zéro et $\sin(\gamma)$ vaut -1. Si $\sin(\alpha) = \sin(\beta)$, alors la dernière ligne est nulle. La formulle se simplifie ainsi :
$$ \begin{array}{rl} \det_{simplifié}(A)= & \cos(\alpha)\sin(\beta)\times d \times[\sin(\alpha) - sin(\gamma)] \\ & -\sin(\alpha)\cos(\beta)\times d \times[\sin(\alpha) - sin(\gamma)] \\ & \cos(\alpha)\cos(\beta)\times d \times[\cos(\beta) - \cos(\alpha)] \end{array} $$
Pour calculer ce déterminant, nous utilisons un tableur. Il est possible de faire beaucoup de chose avec un tableur, mais ce n’est pas toujours le bon outil. Ici, en l’occurence, la possibilité de nommer les cellules permet d’avoir des fomules propres faciles à relire.
Voici comment nommer les cellules pour ceux qui ne connaissent pas. Nous utilisons LibreOffice, mais ceci marche aussi avec d’autres tableurs connus :
Le résultat numérique donne 25,98. Soyons rassurés, le déterminant n’est pas nul, le système admet une solution !
Vous retrouverez le fichier ici !
La suite consistera utiliser la règle de Cramer pour obtenir les expressions d’au moins une vitesse libre (pourquoi pas VAL) et de la rotation $\omega_z$. Ainsi nous pourrons calculer la vitesse du point O à partir des vitesses forcées VAF,VBF et VCF.
Mais ce sera pour un prochain article...