Quaternions et rotations

Introduction

Les quaternions sont une généralisation des nombres complexes avec trois parties imaginaires (\(i\), \(j\) et \(k\) ). Un quaternion est un nombre complexe en dimension 4 qui peut être utilisé pour représenter l'orientation d'un corp rigide ou les coordonnées d'un repère dans un espace tri-dimensionnel. La définition générale d'un quaternion est donnée par :

$$ Q=a+b.i+c.j+d.k = \left[ \begin{matrix} a && b && c && d \end{matrix} \right] $$

Représentation

Un quaternion représente une transformation de type rotation en 3D. Cette transformation peut aussi être représentée à partir des angles d'Eulers comme sur cet outil de visualisation des quaternions. Toutefois, le meilleur moyen de se représenter un quaternion est d'imaginer la rotation d'un angle donné autour d'un vecteur. La figure suivante illustre une rotation d'angle \( \theta \) autour du vecteur \( \vec{V} \) défini par trois scalaires ( \( V_x \), \( V_y \) et \( V_z \)) :

Illustration des quaternions

Le quaternion associé à cette transformation est donné par :

$$ Q = \left[ \begin{matrix} q_w && q_x && q_y && q_z \end{matrix} \right] $$

$$ Q = \left[ \begin{matrix} cos \frac{\theta}{2} && V_x.sin \frac{\theta}{2} && V_y.sin \frac{\theta}{2} && V_z.sin \frac{\theta}{2} \end{matrix} \right] $$

Rotations élémentaires

En s'appuyant sur la formule précédente, nous pouvons maintenant calculer le quaternion pour chacune des rotations autour des principaux axes :

Rotation autour de l'axe X

$$ Q_X=\left[ \begin{matrix} cos \frac{\theta}{2} && sin \frac{\theta}{2} && 0 && 0 \end{matrix} \right] $$

Rotation autour de l'axe Y

$$ Q_Y=\left[ \begin{matrix} cos \frac{\theta}{2} && 0 && sin \frac{\theta}{2} && 0 \end{matrix} \right] $$

Rotation autour de l'axe Z

$$ Q_Z=\left[ \begin{matrix} cos \frac{\theta}{2} && 0 && 0 && sin \frac{\theta}{2} \end{matrix} \right] $$

Rotation générale

Supposons que nous voulions calculer les coordonnées d'un vecteur \( \vec{v}_A \) (ou d'un point) qui subit une rotation définie par le quaternion \( {}^BQ_A \). Le vecteur résultant \( \vec{v}_B \) peut être calculé grâce à la formule suivante qui s'appuie sur le produit de quaternions et le quaternion conjugué.

$$ \vec{V}_B = {}^BQ_A \otimes \vec{V}_A \otimes \overline { {}^BQ_A } $$

Notons que les vecteurs \( \vec{V}_A \) et \( \vec{V}_B \) vivent dans \( \mathbb{R}^4 \) tandis que \( \vec{v}_A \) et \( \vec{v}_B \) vivent dans \( \mathbb{R}^3 \). \( \vec{V}_A \) et \( \vec{V}_B \) sont des quaternions purs dont la partie réelle est égale à zéro :

$$ \vec{V}_A = \begin{bmatrix} 0 \\ \vec{v}_A \end{bmatrix} = \begin{bmatrix} 0 \\ x_A \\ y_A \\ z_A \end{bmatrix} $$

$$ \vec{V}_B = \begin{bmatrix} 0 \\ \vec{v}_B \end{bmatrix} = \begin{bmatrix} 0 \\ x_B \\ y_B \\ z_B \end{bmatrix} $$

Un autre moyen de visualiser le résultat précédent est de considérer que les vecteurs \( \vec{Q_{V_A}} \) et \( \vec{Q_{V_B}} \) sont les mêmes vecteurs décrits respectivement dans les repères \( A \) et \( B \).

Le quaternion \( {}^BQ_A \) représente la transformation qui permet de passer du repère \( A \) au repère \( B \).

Exemple

Ellipse rotation

Cet exemple simple montre la rotation d'une ellipse définie dans le plan { \( \vec{X} \) , \( \vec{Y} \) }. Les point verts et rouges représentent respectivement les positions initiales et finales de l'ellipse. La ligne noire est l'axe de rotation. L'angle de rotation est de \( \frac {\pi}{4} \) et le vecteur de rotation est défini par :

$$ V_R = \begin{bmatrix} 1 \\ 1 \\ 0 \end{bmatrix} $$

Téléchargement

Les fichiers de l'exemple précédent peuvent être téléchargés ici :

ellipse_rotation.zip

Credit: cet exemple utilise la bibliothèque quaternion pour Matlab écrite par S. Madgwick's.

Voir aussi


Dernière mise à jour : 26/10/2019