Lors de cette séance, vous implémenterez une loi de commande cinématique qui permet à l'organe terminal d'un robot d'atteindre une attitude désirée. Vous considérerez que vous disposez des modèles géométrique et cinématique du robot. Vous ferez également l'hypothèse que les boucles de contrôle locales en vitesse possèdent une bande passante très supérieure à celle de la tâche opérationnelle à accomplir.
Le travail se fera en simulation au sein d'un environnement de développement Python et avec l'aide de la libraire Robotics Toolbox développée par Peter Corke\footnote{P.I. Corke : https://github.com/petercorke/robotics-toolbox-python/wiki}. \
Vous vous intéresserez plus particulièrement, et sans perte de généralité, au robot UR3 à 6 degrés de liberté, et nous mettrons en \oe uvre une loi de commande basée sur la représentation axe angle de l'erreur de l'orientation. Les axes de l'UR3 sont asservis en vitesse. Au vu de l'hypothèse énoncée plus haut, vous considérerez que les entrées de commande articulaire seront directement égales aux vitesses articulaires.
De façon générale, toute rotation d'un angle
Dans le cours nous avons vu que (
et
Comme vous pouvez le voir, la représentation axe/angle admet des singularités pour
-
Etablissez la relation entre la trace de la matrice de rotation
$\rm{R(}\theta,u\rm{)}$ et$\cos(\theta)$ -
Montrer que la norme de
$l$ est égale à$2\sin(\theta)$ -
Calculez successivement la matrice de rotation
$\rm{R}$ pour$\theta=0$ et$\theta=\pi$ qui correspondent à un facteur près aux angles de singularité de la représentation axe/angle -
Ajouter la matrice identité à la matrice
${\rm{R}}(\theta,u)$ . Constituer un vecteur à partir des éléments diagonaux et diviser le par 2. Donner le vecteur obtenu. -
Proposez une méthode basée sur la matrice de rotation
${\rm{R}}(\pi,u)$ afin de trouver les signes des composants de$u$ -
Calculez les traces de la matrice
$\rm{R(}\theta,u\rm{)}$ et$\cos(\theta)$ pour$\theta = 0$ et$\theta=\pi$ . Donnez à chaque fois le signe de la trace -
Comme
$\theta=0$ et$\theta=\pi$ sont des singularités pour la représentation axe/angle. Proposez des solutions qui permettent de les contourner.
Lors de l'implémentation d'une loi de commande basée sur le paramétrage axe/angle, vous commencerez par le calcul de la matrice de rotation qui correspond à l'erreur avant d'en extraire l'axe et l'angle.\
- Dans cette partie, vous allez procéder à l'envers : le script « part_1.py » vous donne la possibilité de définir un vecteur de rotation, qui sera normalisé ainsi qu'un angle de rotation.
- Commencez par lire le code et complétez-le.
- Modifier la valeur de l'angle en gardant une rotation autour d'un angle différent de
$k\pi$ et vérifier la cohérence des résultats avec la préparation - Saisir à tour de rôle
$\theta=0$ et ensuite$\theta=\pi$ . Commentez.
- Ouvrez maintenant le script "part_2.py". Comme dans le script précédent, vous allez pouvoir définir un axe de rotation unitaire. Le code conduit ensuite une comparaison d'un angle
$\theta$ qui varie dans$]-\pi,\pi[$ avec son estimation en utilisant l'arc-cosinus telle qu'exprimée dans l'équation~\eqref{eq:axe_angle} et l'arc-tangente 2.
- Commencez par lire le code et complétez-le en fonction des résultats obtenus plus haut
- Ajouter
$10^{-4}$ à la variable arg et observez les commentaires générés lors de l'interprétation du script.
- Vous allez maintenant distinguer le cas
$\theta=0$ de celui de$\theta=k\pi$
- D'après votre préparation, quel critère permet de distinguer les 2 cas ?
- Nous allons maintenant, mettre en oeuvre le choix des signes des différents éléments de
$l$ . Pour cela ouvrez le script "part_3.py" qui servira de test à la fonction "determine_signs(R)" présente dans "commande.py" : ouvrez également ce fichier et complétez la fonction en question et procéder ensuite aux tests.
Vous allez maintenant vous attaquer à la commande opérationnelle à proprement parler. Pour cela ouvrez les scripts "tp_main.py" et "commande.py".
- Commencez par lire le code de "tp_main.py" afin d'en saisir la structure.
- Lisez le code contenu dans "commande.py" pour le comprendre et le compléter
- Dès que la loi de commande donne des résultats satisfaisants, testez les cas de singularité