Comment utiliser les quaternions en robotique industrielle ?

Share

By Ilian Bonev, Ph.D., Eng.

Le concept des quaternions est fascinant et ses applications sont nombreuses, mais en robotique, les quaternions nous intéressent principalement en tant que paramétrage très efficace de l’orientation 3D, notamment celle de l’effecteur final du robot. Il existe des dizaines de présentations approfondies sur les quaternions, mais aucune n’est destinée aux programmeurs de robots industriels. Pour combler ce vide, ce tutoriel présente le strict minimum de quaternions que les utilisateurs de robots industriels doivent connaître.

Les quaternions, une extension des nombres complexes

Les quaternions ont été inventés par le mathématicien irlandais W. R. Hamilton en 1843. Il s’agit essentiellement d’une extension des nombres complexes. Comme vous l’avez appris au lycée, un nombre complexe est représenté par

a + bi,

a et b sont des nombres réels, et i est ce que l’on appelle un nombre imaginaire unitaire tel que i2 = −1.

« Les quaternions sont essentiellement une extension des nombres complexes.

De même, un quaternion est représentée comme suit

q = q1 + q2 i + q3 j + q4 k,

i2 = j2 = k2 = −1, ij = k = −ji, jk = i = −kj, and ki = j = −ki. Souvent, nous désignons simplement les quaternions par le quadruple {q1, q2, q3, q4}.

En utilisant les identités qui viennent d’être données, si p = {p1, p2, p3, p4} est un autre quaternion, on peut facilement montrer que le produit de q foisp, appelé le Hamilton productest définie par

qp = (q1p1q2p2q3p3q4p4) + (q1p2 + q2p1 + q3p4q4p3)i + (q1p3 + q3p1q2p4 + q4p2)j + (q1p4 + q4p1 + q2p3q3p2)k.

Il est également facile de démontrer que la multiplication des quaternions n’est pas commutative, ce qui signifie qu’en général qppq.

En revanche, l’addition des quaternions est commutative et s’effectue par composantes :

q + p = p + q = (q1 + p1) + (q2 + p2)i + (q3 + p3)j + (q4 + p4)k.

Théorème de rotation d’Euler

En 1775, le scientifique suisse Leonhard Euler a prouvé que toute réorientation d’un corps rigide est équivalente à une rotation unique autour d’un axe. Ainsi, toute orientation dans l’espace 3D peut être représentée par un vecteur unitaire u le long de cet axe et l’angle de rotation, θ, où le sens de rotation est déterminé par la règle de la main droite. Nous utiliserons donc dorénavant le terme d’axe orienté défini par un vecteur unitaire, et ne répéterons pas que le sens des rotations positives autour de cet axe orienté se mesure à l’aide de la règle de la main droite. Ainsi, si u et θ représentent une orientation dans l’espace, alors -u et représentent la même orientation, de même que -u et 360°-θ.

« Toute réorientation d’un corps rigide est équivalente à une rotation unique autour d’un axe.

Imaginez que vous fassiez bouger l’effecteur terminal de votre robot en mode réorientation autour de son TCP (point central de l’outil). Même après une longue séquence de rotations autour des axes x, y et z du cadre de référence de l’outil, vous pouvez revenir à votre orientation initiale en effectuant une seule rotation de moins de 180° autour d’un axe passant par le TCP. En fait, si vous exécutez une commande de mouvement linéaire (MoveLin, dans le cas des robots Mecademic) avec comme arguments la même position inchangée du TCP mais l’orientation originale du cadre de référence de l’outil, l’effecteur final effectuera exactement cette rotation unique de moins de 180° autour d’un axe passant par le TCP. Nous reviendrons plus tard sur cette interpolation dite SLERP.

Toute réorientation de l'effecteur d'un robot peut être obtenue par une simple rotation autour d'un axe donné
Toute réorientation de l’effecteur d’un robot peut être obtenue par une simple rotation autour d’un axe donné

Les quaternions comme rotations dans l’espace 3D

Un quaternion unitaire, q, tel que |q| = q12 + q22 + q32 + q42 = 1, peut également être représentée comme suit

q = {cos(θ/2), ux sin(θ/2), uy sin(θ/2), uz sin(θ/2)},

ux, uyet uz sont les composantes d’un vecteur unitaire u, et θ est un angle quelconque. On peut montrer, bien que ce ne soit pas trivial, que si l’on suppose que le quaternion unitaire ci-dessus représente une rotation de θ autour d’un axe orienté défini par le vecteurunous obtiendrons des propriétés élégantes.

Par exemple, étant donné que la même orientation peut être représentée par une rotation de 360°−θ  autour d’un axe orienté défini par le vecteur−u, on peut facilement montrer que

q = {cos(180°-θ/2), -ux sin(180°-θ/2), -uy sin(180°-θ/2), -uz sin(180°-θ/2)}
= {−cos(θ/2), −ux sin(θ/2), −uy sin(θ/2), −uz sin(θ/2)} = −q.

En d’autres termes, si l’on annule tous les termes d’un quaternion, le nouveau et l’ancien représentent la même orientation.

Quaternions unitaires en tant que transformations

Soit Rq est la matrice de rotation 3×3, que vous connaissez bien, représentant la même orientation que le quaternion q, et que Rp la matrice de rotation représentant la même orientation qu’un autre quaternion unitaire p. Ensuite, l’orientation représentée par la matrice correspondant au produit RqRp est la même que l’orientation représentant le produit de quaternions qp (qui a été défini au tout début). De même, l’orientation représentée par la matrice correspondant au produit RpRq est la même que l’orientation représentée par le produit de quaternions pq.

Ainsi, alors que le calcul de la transformation correspondant à deux rotations successives nécessite 27 multiplications et 18 additions/soustractions lorsqu’on utilise des matrices de rotation, la même opération ne nécessite que 16 multiplications et 12 additions/soustractions lorsqu’on utilise des quaternions.

Comme vous vous en souvenez probablement, l’inverse d’une matrice de rotation est la même chose que sa transposition :

Rq-1 = RqT

L’inverse d’un quaternion est non seulement plus facile à calculer, mais aussi plus intuitif. L’inverse d’une rotation de θ autour d’un axe orienté défini par le vecteur unitaire u est simplement une rotation de autour du même axe orienté. En d’autres termes, l’inverse du quaternion unitaire q est :

q−1 = {cos(−θ/2), u x sin(-θ/2), u y sin(-θ/2), u z sin(-θ/2)} = {cos(θ/2), –u x sin(θ/2), –u y sin(θ/2), -u z sin(θ/2)}.

Nous avons donc

q−1q = qq−1 = {1, 0, 0, 0},

qui correspond à l’absence d’orientation (similaire à la matrice d’identité).

Enfin, vous connaissez certainement la manière dont les coordonnées exprimées dans un cadre de référence sont exprimées dans un autre, à l’aide de matrices de rotation. Cette opération est équivalente au triple produit quaternion suivant :

qvq−1,

v = {0, v x , v y , v z } est ce que l’on appelle un quaternion pur, et v x , v y et v z sont les coordonnées à transformer.

La multiplication d’une matrice de rotation par un vecteur de position nécessite 9 multiplications et 6 additions/soustractions. L’opération équivalente utilisant les quaternions nécessite plus du double : 18 multiplications et 13 additions/soustractions.

Comme nous venons de le voir, le quaternion unitaire peut représenter une rotation, tandis qu’un quaternion pur peut représenter une translation. Mais comment les combiner pour effectuer des transformations dans l’espace, comme nous le faisons avec les matrices homogènes 4×4 ? Cette opération est réalisée à l’aide de ce que l’on appelle des quaternions doubles.

Dans ce tutoriel, nous ne présenterons pas les quaternions doubles, car ils ne sont guère utiles au programmeur de robot typique. Il convient toutefois de mentionner les avantages qu’elles présentent par rapport aux matrices homogènes. En termes d’efficacité de calcul, les deux méthodes sont similaires, mais les quaternions doubles sont plus compacts et plus robustes sur le plan numérique.

Conversion entre matrices de rotation et quaternions unitaires

Bien que les quaternions soient très utiles – et parfois même indispensables – lorsqu’il s’agit d’orientations 3D, pour définir le quaternion correspondant à l’orientation d’un cadre de référence par rapport à un autre, vous devez généralement calculer d’abord la matrice de rotation correspondante. Nous avons donc besoin de la formule suivante pour calculer les composantes d’un quaternion, q, à partir des éléments d’une matrice de rotation, R :

q1 = 1 / 21 + r1,1 + r2,2 + r3,3,

q2 = 1/2sgn(r3,2r2,3)√1 + r1,1r2,2r3,3,

q3 = 1/2sgn(r1,3r3,1)√1 − r1,1 + r2,2r3,3,

q4 = 1/2sgn(r2,1r1,2)√1 − r1,1r2,2 + r3,3,

R =
 
r1,1 r1,2 r1,3
r2,1 r2,2 r2,3
r3,1 r3,2 r3,3
  .

Bien entendu, rappelez-vous que si q est le quaternion unitaire correspondant à la matrice de rotation R, alors -q est l’autre quaternion correspondant à la même orientation.

De même, si vous disposez d’un quaternion unitaire q et que vous souhaitez le convertir en une matrice de rotation R, la formule est la suivante :

R =
 
2q12 + 2q22 − 1 2q2q3−2q1q4 2q2q4 + 2q1q3
2q2q3 + 2q1q4 2q12 + 2q32 − 1 2q3q4 − 2q1q2
2q2q4 − 2q1q3 2q3q4 − 2q1q2 2q12 + 2q42 − 1
  .

Utilisation des quaternions unitaires pour mesurer les déplacements en rotation

Comme nous l’avons vu dans notre tutoriel sur les angles d’Euler, ces angles sont presque toujours la seule façon dont l’orientation est définie par les utilisateurs et leur est représentée dans le cas des robots industriels. C’est donc une erreur très courante que de faire un parallèle entre la nature des coordonnées de position et celle des angles d’Euler lorsqu’il s’agit de mesurer un déplacement relatif, ou une « distance ». En fait, même la norme ISO 9283, qui dicte comment les performances des robots doivent être mesurées et représentées, indique que la précision d’orientation est essentiellement mesurée avec exactement la même formule que la précision de positionnement, mais avec des angles d’Euler remplaçant les coordonnées x, y et z de la position. Cependant, à l’instar des singularités de représentation des angles d’Euler (communément appelées « effet de verrouillage du cardan »), les angles d’Euler peuvent varier considérablement, même si l’orientation ne change que légèrement.

Mesure de la répétabilité et de la précision de l'orientation
Il est absurde d’utiliser les angles d’Euler pour mesurer la précision de l’orientation et la répétabilité d’un robot industriel.

La seule et unique mesure du déplacement rotationnel, c’est-à-dire la « distance » entre une orientation initiale et l’orientation finale, peut être facilement calculée à l’aide de quaternions unitaires. En effet, soit q le quaternion unitaire représentant l’orientation du cadre de référence de l’outil à la pose 1, et p le quaternion unitaire représentant l’orientation du cadre de référence de l’outil à la pose 2. L’orientation du bâti de l’outil à la pose 2 par rapport au bâti de l’outil à la pose 1 est la suivante

d = q−1p = {cos(φ/2), w x sin(φ/2), w y sin(φ/2), w z sin(φ/2)},

w x , w y et w z sont les composantes d’un vecteur unitaire w. En d’autres termes, pour passer de l’orientation du cadre de l’outil à la pose 1 à l’orientation à la pose 2, le cadre de l’outil doit effectuer une rotation φ autour d’un axe orienté défini par le vecteur w. Puisque nous ne nous intéressons qu’à la rotation la plus courte possible, nous voulons 0 < φ ≤ 180°. Par conséquent, si nous constatons que la première composante du quaternion d résultant est négative, nous devons simplement annuler le quaternion. (Rappelons que d = -d.) Ensuite, pour calculer la rotation équivalente la plus courte entre les deux orientations, nous devons calculer le cosinus inverse de la première composante de d et le multiplier par 2.

De même, beaucoup pensent à tort que la vitesse angulaire d’un corps dans l’espace est le vecteur des dérivées des angles d’Euler. Le vecteur vitesse angulaire, ω, est en fait le vecteur unitaire correspondant à l’axe de rotation instantané dirigé multiplié par le taux de rotation autour de cet axe.

Utilisation des quaternions pour interpoler les orientations

Comme nous venons de le voir, le moyen le plus rapide de passer d’une orientation à l’autre est de tourner autour de l’axe de rotation équivalent à un angle ne dépassant pas 180°. Cette trajectoire de rotation est souvent appelée trajectoire de couple minimal. Ainsi, pour obtenir une série « équidistante » d’orientations qui vous amènent d’une orientation représentée par le quaternion q, à une orientation représentée par le quaternion p, nous devons utiliser la formule simple suivante :

Slerp(q,p,t) = q(q−1p)t,

t est un paramètre variant de 0 (lorsque l’orientation est q) à 1 (lorsque l’orientation est p). La procédure ci-dessus est appelée interpolation linéaire sphérique, ou SLERP.

Augmentation du quaternion d = q−1p = {cos(φ/2), w x sin(φ/2), w y sin(-φ/2), w z sin(-φ/2)} à la puissance t est équivalent à la rotation t fois à un angle φ, donc

d t = {cos(tφ/2), w x sin(tφ/2), w y sin(-tφ/2), w z sin(-tφ/2)}.

Ainsi, si t = 0, 1/n, 2/n, …, 1, SLERP consiste essentiellement à « ajouter » une rotation de φ/n à chaque étape de la discrétisation, où n − 1 est le nombre d’orientations intermédiaires. Bien entendu, φ ne doit pas dépasser 180°, sinon vous devez annuler l’un des deux quaternions et recommencer les calculs.

On peut démontrer que la formule SLERP ci-dessus est équivalente à l’équation suivante, qui est un peu plus rapide à calculer :

Slerp(q,p,t) = sin((1 − t)φ/2)/sin(φ/2) q + sin(tφ/2)/sin(φ/2) p,

φ est tel qu’il vient d’être défini, c’est-à-dire l’angle de rotation entre q et p. Notez que les deux fonctions SLERP sont équivalentes et que le résultat est un quaternion unitaire pour tout t.

Une façon plus rapide d’interpoler entre les orientations le long de la même trajectoire de rotation autour de l’axe de rotation équivalent est d’utiliser la formule simple suivante :

Lerp(q,p,t) = (1 – t)q + tp ,

t est à nouveau un paramètre variant entre 0 et 1. Toutefois, cette interpolation dite LERP ne fonctionne relativement bien que pour des orientations proches les unes des autres (par exemple, φ < 90°). En effet, la réorientation ne se fait pas à vitesse angulaire constante. En outre, avec la méthode LERP, vous devez normaliser le quaternion résultant à chaque étape t (la méthode s’appelle alors NLERP).

La plupart des robots industriels utilisent une interpolation SLERP pour réorienter l’effecteur le long d’une trajectoire linéaire. Il est évident que si les orientations de départ et d’arrivée sont à 180° l’une de l’autre, il y aura deux trajectoires identiques de couple minimum. Le contrôleur du robot peut choisir arbitrairement l’un d’entre eux, mais cela signifie que l’utilisateur ne peut pas anticiper le mouvement de l’effecteur. Ainsi, les robots industriels sont toujours soumis à des limites de déplacement le long d’une trajectoire linéaire. Par exemple, les robots Mecademic refusent simplement un mouvement linéaire vers une pose dont l’orientation est exactement à 180°.

Interpolation SLERP en robotique

La plupart des robots industriels modifient l’orientation de l’effecteur final à l’aide de la méthode SLERP tandis que le TCP suit une trajectoire linéaire.

Quaternions et angles d’Euler

Chaque fois que je publiais un article sur les angles d’Euler, il y avait toujours des gens qui les critiquaient et qui faisaient l’éloge des quaternions. En effet, les angles d’Euler – et toute représentation à trois paramètres de l’orientation dans l’espace – présentent des singularités de représentation selon lesquelles une orientation peut être représentée par un nombre infini de triplets. (Ce problème est similaire à celui de la représentation des coordonnées au pôle Nord ou au pôle Sud de la Terre – la latitude n’est pas définie de manière unique aux deux pôles).

Angles d'Euler

Bonne chance pour calculer à la main le quaternion représentant l’orientation de l’image 1 par rapport à l’image 0.

Les angles d’Euler sont certainement inadéquats pour traiter des orientations qui varient. Toutefois, en robotique, les angles d’Euler sont généralement utilisés pour définir un cadre de référence fixe par rapport à un autre, comme le cadre de référence de l’outil par rapport au cadre de référence de la bride. Comme le montre la figure ci-dessus, il est généralement impossible de calculer à la main le quaternion correspondant à l’orientation d’un cadre de référence par rapport à un autre, alors qu’il est souvent facile de deviner les angles d’Euler par tâtonnement.

« Les angles d’Euler sont certainement inadéquats pour traiter des orientations qui varient ».

Il existe cependant des situations où il est impossible de deviner les angles d’Euler et où vous devez les calculer à l’aide de formules trigonométriques impliquant les éléments d’une matrice de rotation. Par exemple, dans la figure ci-dessus, pour l’orientation du cadre 1 par rapport au cadre 0, les angles d’Euler selon la convention XYZ mobile utilisée par Mecademic Robotics sont {0°, 45°, 40°}, mais les angles d’Euler selon la convention ZYX mobile utilisée par KUKA sont {49.879°, 32.798°, 32.732°}, et les quaternions utilisés par ABB sont {0.868163, 0.130885, 0.359605, 0.315986}.

Néanmoins, il n’est pas surprenant que la quasi-totalité des robots industriels demandent aux utilisateurs de définir les orientations à l’aide des angles d’Euler, car ceux-ci sont plus faciles à comprendre, même s’ils ne sont pas triviaux. ABB est une rare exception, où les quaternions sont la principale façon d’entrer les orientations, bien que les angles d’Euler soient également une option.

Cela dit, tous les robots industriels utilisent des quaternions dans leurs contrôleurs, que ce soit pour l’interpolation de l’orientation, le calcul des transformations ou à d’autres fins.

Résumé

En résumé, en tant que programmeur de robots industriels, vous devez connaître les quaternions au moins pour les raisons suivantes :

  • pouvoir anticiper la réorientation de l’effecteur du robot le long d’une trajectoire linéaire (interpolation SLERP)
  • savoir comment mesurer correctement la précision et la répétabilité de l’orientation
  • mieux comprendre les inconvénients des angles d’Euler
  • savoir utiliser les quaternions lorsqu’ils sont disponibles

© Mecademic. La reproduction de ce didacticiel, en tout ou en partie, est strictement interdite.

Share

Les commentaires sont fermés.