Comment l'orientation dans l'espace est-elle représentée par les angles d'Euler ?
Si vous utilisez un bras robotique à six axes, comme le Meca500 de Mecademic utilisé dans ce tutoriel, vous cherchez probablement à positionner son outil (effecteur final) dans diverses orientations. En d'autres termes, vous devez pouvoir programmer votre robot pour déplacer son effecteur final à la fois vers une position désirée ET une orientation désirée (c'est-à-dire vers une pose désirée). Bien sûr, vous pouvez toujours guider manuellement l'effecteur final de votre robot ou le piloter par enseignement pour atteindre approximativement la pose désirée, mais cette méthode dite de programmation en ligne est fastidieuse et très imprécise. Il est bien plus efficace de calculer et de définir votre pose désirée hors ligne. De plus, pour définir le repère d'outil associé à votre effecteur final (comme dans l'image illustrée), vous devrez calculer la pose de ce repère d'outil par rapport au repère de bride.
Dans l'espace 3D, vous avez besoin d'un minimum de six paramètres pour définir une pose. Par exemple, la position de l'effecteur final du robot, ou plus précisément du TCP (point central de l'outil), est généralement définie par les coordonnées x, y et z de l'origine du repère d'outil par rapport au repère monde. Mais comment définir alors l'orientation dans l'espace ?
La représentation de l'orientation dans l'espace est un sujet complexe. Le théorème de rotation d'Euler stipule que, dans l'espace (3D), tout déplacement d'un corps rigide de sorte qu'un point de ce corps reste fixe est équivalent à une seule rotation autour d'un axe passant par ce point fixe. Par conséquent, une telle rotation peut être décrite par trois paramètres indépendants : deux pour décrire l'axe et un pour l'angle de rotation. Cependant, l'orientation dans l'espace peut être représentée de plusieurs autres façons, chacune avec ses avantages et inconvénients. Certaines de ces représentations utilisent plus que le minimum nécessaire de trois paramètres.
La méthode la plus courante pour transformer des coordonnées de position d'un repère cartésien (3D) F vers un autre F′ est la matrice de rotation. Cette matrice 3×3 peut donc être utilisée pour représenter l'orientation du repère F′ par rapport au repère F. Toutefois, cette représentation, bien que souvent nécessaire comme nous le verrons plus tard, n'est pas une façon compacte et intuitive de définir l'orientation.
Une façon beaucoup plus compacte de définir l'orientation est le quaternion. Cette forme de représentation consiste en un vecteur normalisé de quatre scalaires. Le quaternion est généralement utilisé dans les contrôleurs de robots, car il est non seulement plus compact que la matrice de rotation, mais aussi moins sensible aux erreurs d'approximation. De plus, lors d'une interpolation entre deux orientations différentes, les éléments du quaternion varient continuellement, évitant les discontinuités inhérentes aux paramétrisations tridimensionnelles telles que les angles d'Euler. Néanmoins, le quaternion est rarement utilisé comme moyen de communication entre un utilisateur et le contrôleur du robot car il est contre-intuitif.
Définition détaillée des angles d'Euler
De loin, la méthode la plus courante pour communiquer une orientation dans l'espace à un utilisateur, ou pour permettre à un utilisateur de définir une orientation, dans un logiciel de CAO ou dans un contrôleur de robot, est l'utilisation des angles d'Euler. Comme le terme « angles d'Euler » est souvent mal utilisé, nous avons préparé ce tutoriel interactif.
Les angles d'Euler sont un ensemble (ou plutôt une séquence) de trois angles, qui peuvent être notés par exemple α, β et γ. (Souvent, les angles d'Euler sont notés roulis, tangage et lacet.) Les angles d'Euler sont définis comme suit : considérons deux repères cartésiens droits 3D, dont l'un sera arbitrairement appelé le repère fixe et l'autre le repère mobile. Les deux repères coïncident initialement. Pour définir l'orientation d'un troisième repère (les trois repères partagent la même origine), le repère mobile est amené, dans l'ordre indiqué ci-dessous, à coïncider avec le troisième repère en le faisant tourner :
- autour de l'axe x, y ou z du repère fixe ou des axes x′, y′ ou z′ du repère mobile, de α degrés,
- puis autour de l'axe x, y ou z du repère fixe ou des axes x′, y′ ou z′ du repère mobile, de β degrés,
- et enfin autour de l'axe x, y ou z du repère fixe ou des axes x′, y′ ou z′ du repère mobile, de γ degrés.
L'ordre dans lequel les trois rotations sont effectuées est important. Ainsi, nous avons un total de 216 (63) séquences possibles : x→y→z, y→y→z, z→y→z, x′→y→z, y′→y→z, z′→y→z, etc. Cependant, une séquence de trois rotations dans laquelle deux rotations consécutives portent sur le même axe (par exemple, y→y→z) ne peut pas décrire une orientation générale. De plus, avant la première rotation, x coïncide avec x′, y coïncide avec y′ et z coïncide avec z′. Par conséquent, parmi ces 216 combinaisons, il n'existe que douze séquences ordonnées de rotations uniques et significatives, ou douze conventions d'angles d'Euler : XYX, XYZ, XZX, XZY, YXY, YXZ, YZX, YZY, ZXY, ZXZ, ZYX, ZYZ.
Cela dit, chacune des douze combinaisons est équivalente à trois autres séquences. En d'autres termes, chaque convention d'angles d'Euler peut être décrite de quatre manières différentes. Par exemple, la convention ZYX est équivalente aux séquences z→y→x, x′→y′→z′, y→z′→x et y→x→z′. Heureusement, personne ne décrit les angles d'Euler avec des séquences où certaines rotations portent sur les axes du repère mobile et d'autres sur les axes du repère fixe (par exemple, séquences comme y→z′→x et y→x→z′).
Ainsi, bien qu'il existe douze conventions différentes d'angles d'Euler, chacune est généralement décrite de deux manières : soit comme une séquence de rotations autour des axes du repère fixe, soit comme une séquence de rotations autour des axes du repère mobile. Il peut donc être commode de parler de conventions fixes et mobiles, bien qu'elles soient équivalentes. Par exemple, la convention d'angles d'Euler XYZ fixe est décrite par la séquence x→y→z, tandis que la convention d'angles d'Euler ZYX mobile est décrite par la séquence z′→y′→x′, mais les deux sont équivalentes, comme nous le verrons plus tard.
En robotique, FANUC et KUKA utilisent la convention d'angles d'Euler XYZ fixe, tandis qu'ABB utilise la convention d'angles d'Euler ZYX mobile. De plus, Kawasaki, Omron Adept Technologies et Stäubli utilisent la convention d'angles d'Euler ZYZ mobile. Enfin, les angles d'Euler utilisés dans CATIA et SolidWorks sont décrits par la convention d'angles d'Euler ZYZ mobile.
Chez Mecademic, nous utilisons la convention d'angles d'Euler XYZ mobile, et décrivons donc les angles d'Euler comme la séquence x′→y′→z′. Pourquoi être différent ? La raison est que nous proposions autrefois un préhenseur mécanique pour la manipulation de pièces axisymétriques (voir vidéo), qui était actionné par le moteur de l'axe 6. Un robot à six axes équipé d'un tel préhenseur ne peut contrôler que deux degrés de liberté rotationnels, ou plus précisément la direction de l'axe de l'articulation 6, c'est-à-dire la direction de l'axe de symétrie de la pièce. Dans la convention d'angles d'Euler choisie, les angles α et β définissent cette direction, tandis que l'angle γ est ignoré car il correspond à une rotation parasite qui est incontrôlable.
Notre applet ci-dessous vous aidera à comprendre les angles d'Euler. Vous pouvez sélectionner l'une des douze conventions d'angles d'Euler possibles en cliquant sur les cases x, y et z de la première, deuxième et troisième rotation. (La séquence d'angles d'Euler par défaut est celle utilisée par Mecademic.) Pour basculer entre rotations autour des axes du repère fixe ou mobile, vous devez double-cliquer sur l'une de ces neuf cases. Les axes du repère fixe sont tracés en gris tandis que ceux du repère mobile sont en noir. Les axes x et x′ sont en rouge, y et y′ en vert, et z et z′ en bleu. Faire glisser la souris le long de l'une des trois flèches horizontales bleues modifie l'angle d'Euler correspondant. Alternativement, vous pouvez définir directement la valeur de l'angle d'Euler (en degrés) dans la zone de texte correspondante sous la flèche. Enfin, vous pouvez faire glisser la souris sur le repère pour changer le point de vue.
| R = Rx(0°) Ry(0°) Rz(0°) = |
|
| 1.000 |
0.000 |
0.000 |
| 0.000 |
1.000 |
0.000 |
| 0.000 |
0.000 |
1.000 |
|
|
|
Calcul des angles d'Euler via les matrices de rotation
Avec l'applet ci-dessus, vous verrez l'orientation du repère mobile par rapport au repère fixe, pour un ensemble donné d'angles d'Euler, dans le sous-figure de droite. Malheureusement, en pratique, la situation est généralement l'inverse. Vous avez fréquemment deux repères, et vous voulez trouver les angles d'Euler qui décrivent l'orientation de l'un par rapport à l'autre.
Pour les orientations dans lesquelles au moins deux axes sont parallèles, vous pourriez tenter de deviner les angles d'Euler par essais et erreurs. Par exemple, regardez à nouveau l'image au début de ce tutoriel et essayez de trouver les angles d'Euler utilisés par Mecademic qui définissent l'orientation du repère d'outil associé au préhenseur, par rapport au repère de bride. La réponse est α = −90°, β = 0°, γ = −90°. Pas si facile à obtenir, n'est-ce pas ? Pour être plus efficace, vous devez donc apprendre les matrices de rotation.
Comme nous l'avons déjà mentionné, toute orientation dans l'espace peut être représentée par une matrice de rotation 3×3. Par exemple, une rotation de α autour de l'axe x, une rotation de β autour de l'axe y et une rotation de γ autour de l'axe z correspondent respectivement aux trois matrices de rotation de base suivantes :
| Rx(α) = |
|
| 1 |
0 |
0 |
| 0 |
cos(α) |
−sin(α) |
| 0 |
sin(α) |
cos(α) |
|
|
, |
|
| Ry(β) = |
|
| cos(β) |
0 |
sin(β) |
| 0 |
1 |
0 |
| −sin(β) |
0 |
cos(β) |
|
|
, |
|
| Rz(γ) = |
|
| cos(γ) |
−sin(γ) |
0 |
| sin(γ) |
cos(γ) |
0 |
| 0 |
0 |
1 |
|
|
. |
|
Nous appellerons les matrices ci-dessus des matrices de rotation de base. Pour obtenir le produit de matrices de rotation de base correspondant à une séquence de rotations, commencez par écrire la matrice de rotation de base correspondant à la première rotation. Par exemple, si la première rotation porte sur l'axe x (ou x′), écrivez Rx(ψ), où ψ est l'angle de rotation. Pour chaque rotation suivante, post-multipliez (multipliez à droite) le résultat courant par la matrice de rotation suivante si la rotation porte sur un axe du repère mobile, ou pré-multipliez (multipliez à gauche) le résultat courant par la matrice de rotation suivante si la rotation porte sur un axe du repère fixe. Utilisez notre applet pour voir le produit résultant des matrices de rotation de base. Par exemple, la séquence de rotation x′→y′→z′ correspond au produit R = Rx(α)Ry(β)Rz(γ). Ainsi, la matrice de rotation correspondant aux angles d'Euler utilisés par Mecademic est :
| R(α, β, γ) = |
|
| cos(β)cos(γ) |
−cos(β)sin(γ) |
sin(β) |
| cos(α)sin(γ) + sin(α)sin(β)cos(γ) |
cos(α)cos(γ) − sin(α)sin(β)sin(γ) |
−sin(α)cos(β) |
| sin(α)sin(γ) − cos(α)sin(β)cos(γ) |
sin(α)cos(γ) + cos(α)sin(β)sin(γ) |
cos(α)cos(β) |
|
|
. |
|
Par conséquent, pour une orientation donnée, vous devrez faire deux choses : premièrement, trouver la matrice de rotation correspondant à votre orientation. Deuxièmement, extraire les angles d'Euler à l'aide de quelques équations simples. Montrons d'abord deux façons de trouver votre matrice de rotation.
Considérez l'exemple illustré dans la figure ci-dessous où nous devons trouver la matrice de rotation représentant l'orientation du repère F′ par rapport au repère F. (Rappel : nous représentons toujours l'axe x en rouge, l'axe y en vert et l'axe z en bleu.)
Ici, il est facile de voir que si nous alignons un troisième repère avec F, qui servira de repère mobile, puis faisons tourner ce repère autour de son axe z′ de θ degrés, puis autour de son axe y′ de φ degrés, nous obtiendrons l'orientation de F. Ainsi, la matrice de rotation recherchée est :
| Rdésirée = Rz(θ)Ry(φ) = |
|
| cos(θ)cos(φ) |
−sin(θ) |
cos(θ)sin(φ) |
| sin(θ)cos(φ) |
cos(θ) |
sin(θ)sin(φ) |
| −sin(φ) |
0 |
cos(φ) |
|
|
. |
|
Alternativement, nous pouvons obtenir la matrice de rotation ci-dessus directement. Ses première, deuxième et troisième colonnes représentent les coordonnées des vecteurs unitaires le long des axes x, y et z, respectivement, du repère F′, par rapport au repère F.
Maintenant que vous avez la matrice de rotation représentant votre orientation désirée, vous devez simplement résoudre le système de neuf équations trigonométriques scalaires Rdésirée = R(α, β, γ), pour α, β et γ. Heureusement, ce problème a une solution générique et nous vous donnerons simplement les équations à utiliser.
Soit l'orientation désirée d'un repère F′ par rapport à un repère F représentée par la matrice de rotation suivante :
| Rdésirée = |
|
| r1,1 |
r1,2 |
r1,3 |
| r2,1 |
r2,2 |
r2,3 |
| r3,1 |
r3,2 |
r3,3 |
|
|
. |
|
Les angles d'Euler (en degrés), conformément à la convention XYZ mobile utilisée par Mecademic, sont alors obtenus selon les deux cas suivants :
Cas 1 : r1,3 ≠ ±1 (c.-à-d., l'axe z′ du repère F′ n'est pas parallèle à l'axe x du repère F).
β = asin(r1,3), γ = atan2(−r1,2, r1,1), α = atan2(−r2,3, r3,3).
Cas 2 : r1,3 = ±1 (c.-à-d., l'axe z′ du repère F′ est parallèle à l'axe x du repère F).
β = r1,390°, γ = atan2(r2,1, r2,2), α = 0.
Dans le cas général (Cas 1), nous avons en réalité deux ensembles de solutions où tous les angles sont dans l'intervalle semi-ouvert (−180°, 180°]. Cependant, il est inutile de calculer les deux ensembles, donc seul le premier est présenté, dans lequel −90° < β < 90°. Notez également que nous utilisons la fonction atan2(y, x) dans notre solution. Attention : dans certains langages de programmation, certaines calculatrices scientifiques et la plupart des tableurs, les arguments de cette fonction sont inversés.
Enfin, notez que le Cas 2 correspond à une singularité de représentation. Cette singularité est présente dans toute représentation à trois paramètres de l'orientation dans l'espace 3D (pas seulement dans le choix d'angles d'Euler de Mecademic). Elle est similaire au problème de représentation des points sur une sphère par seulement deux paramètres. Par exemple, la longitude n'est pas définie sur Terre aux pôles Sud et Nord. En d'autres termes, cette singularité n'a rien à voir avec les singularités des mécanismes (par exemple, le verrouillage de cardan ou gimbal lock), qui correspondent à de vrais problèmes physiques (par exemple, la perte d'un degré de liberté).
Exercice
Considérons la situation réelle suivante qui nous est arrivée. Nous voulions fixer une valve de dosage FISNAR à l'effecteur final de notre robot Meca500. Naturellement, l'ingénieur qui a conçu et usiné l'adaptateur ne se souciait pas des angles d'Euler et ne s'intéressait qu'à l'usinabilité et à l'accessibilité. Dans sa conception, il y avait essentiellement deux rotations de 45°. Premièrement, il a utilisé deux trous filetés diamétralement opposés sur la bride du robot pour fixer l'adaptateur, ce qui a causé la première rotation de 45°. Deuxièmement, l'angle entre le plan d'interface de la bride et l'axe du doseur était de 45°.
La figure ci-dessus montre l'installation réelle (à gauche) et le repère d'outil (à droite) qui devait être défini. Notez que lors de l'utilisation d'outils axisymétriques, il est courant d'aligner l'axe z de l'outil avec l'axe de l'outil. Cela est particulièrement utile avec la convention d'angles d'Euler XYZ mobile, puisque la rotation redondante autour de l'outil axisymétrique correspond au troisième angle d'Euler, γ. Ainsi, les deux premiers angles d'Euler définissent l'axe de l'outil, tandis que le troisième peut être utilisé pour choisir la configuration optimale du robot (c.-à-d., loin des singularités).
Revenant à notre exemple, nous allons maintenant montrer qu'il est impossible de trouver les angles d'Euler selon la convention XYZ mobile par essais et erreurs. En effet, pour ce choix de repère d'outil, nous pouvons représenter l'orientation finale comme une séquence des deux rotations suivantes : R = Rz(45°)Ry(45°). À partir de là, nous pouvons extraire les angles d'Euler selon la convention XYZ mobile en utilisant les équations décrites précédemment et obtenir : α = −35,264°, β = 30,000°, γ = 54,735°. Êtes-vous maintenant convaincu que vous devez maîtriser les angles d'Euler pour des situations comme celle-ci ?
Singularités de représentation et erreurs d'orientation
Dans le cas de la convention d'angles d'Euler XYZ mobile, si l'axe z′ du repère F′ est parallèle à l'axe x du repère F, il existe une infinité de paires α et γ qui définissent la même orientation. Évidemment, vous n'avez besoin que d'une seule pour définir votre orientation désirée, nous avons donc arbitrairement fixé α à zéro. Plus précisément, si β = 90°, alors toute combinaison de α et γ telle que α + γ = φ, où φ est une quelconque valeur, correspondra à la même orientation, et sera affichée par le contrôleur de Mecademic comme {0, 90°, φ}. De même, si β = −90°, alors toute combinaison de α et γ telle que α − γ = φ, où φ est une quelconque valeur, correspondra à la même orientation, et sera affichée par le contrôleur de Mecademic comme {0, −90°, −φ}. Notez cependant que si vous essayez de représenter l'orientation d'un repère F′ par rapport à un repère F et que l'axe z′ du repère F′ est presque parallèle à l'axe x du repère F (c.-à-d., β est très proche de ±90°), les angles d'Euler seront très sensibles aux erreurs numériques. Dans un tel cas, vous devriez entrer autant de chiffres après la virgule que possible lors de la définition de l'orientation à l'aide d'angles d'Euler.
Considérez la situation suivante qui a inquiété plusieurs utilisateurs de notre Meca500. Vous définissez l'orientation du repère d'outil par rapport au repère monde sur {0°, 90°, 0°}, ce qui est une singularité de représentation. Ensuite, vous conservez cette orientation et déplacez l'effecteur final dans l'espace vers plusieurs positions. À certaines positions, en raison du bruit numérique, le contrôleur ne détecte pas la condition r1,3 = ±1 (Cas 2, comme mentionné ci-dessus) et calcule les angles d'Euler comme si l'orientation ne correspondait pas à une singularité de représentation. Ainsi, le contrôleur renvoie quelque chose comme {41,345°, 90,001°, −41,345°}, qui semble totalement faux et très loin de {0°, 90°, 0°}. Eh bien, ce n'est pas le cas.
Contrairement aux erreurs de position, qui sont mesurées par √(Δx2 + Δy2 + Δz2), les erreurs d'orientation ne sont pas directement liées aux variations des angles d'Euler, surtout près des singularités de représentation. Pour mieux comprendre cette nature non euclidienne des angles d'Euler, considérez les coordonnées sphériques utilisées pour représenter un lieu sur Terre. Au pôle Nord, la latitude est 90° (Nord), mais quelle est la longitude ? La longitude n'est pas définie au pôle Nord, ou elle peut prendre n'importe quelle valeur. Imaginez maintenant que nous nous déplacions de seulement 1 mm du pôle Nord dans la direction de Greenwich. Dans ce cas, la latitude sera de 89,99999999°, mais la longitude aura maintenant la valeur de 0°. Imaginez à nouveau que vous retourniez au pôle Nord et vous déplaciez de 1 mm dans la direction de Tokyo. La nouvelle longitude sera d'environ 140°. Entre vos deux positions, l'erreur en longitude est de 140° ! Cependant, l'erreur angulaire réelle sera d'environ 0,00000002°.
La situation décrite ci-dessus est similaire dans toutes les autres conventions d'angles d'Euler. Selon la convention, la singularité de représentation correspondante se produit lorsque un axe spécifique du repère F′ est parallèle à un autre axe spécifique du repère F. Dans une telle singularité, la première et la troisième rotation deviennent dépendantes.
En conclusion, à moins de maîtriser les angles d'Euler (ou d'utiliser un logiciel de programmation hors ligne sophistiqué), et plus spécifiquement la convention utilisée pour programmer votre robot, vous aurez du mal à programmer autre chose que des opérations simples de pick-and-place. La robotique n'étant pas simple, nous faisons de notre mieux pour vous aider à en comprendre les bases.