Quelle vitesse la main prend-elle ?
La jacobienne est un tableau de quatre nombres qui relie les vitesses des articulations à la vitesse de la main. Elle répond à une question simple : si je tourne chaque articulation à telle vitesse, à quelle vitesse la main bouge-t-elle ?
Ce calcul sert à limiter la vitesse d’un bras simulé, et à repérer les poses où il se bloque.
À la fin de cette leçon
Remarque
Je peux dire comment les vitesses des articulations se transforment en vitesse de la main.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Vitesse articulaire | la vitesse de rotation d’une articulation | 10 degrés par seconde |
| Jacobienne | le tableau qui convertit les vitesses articulaires en vitesse de la main | |
| Différence finie | une pente estimée en bougeant un peu une variable | |
| Pas | le petit changement d’angle utilisé pour l’estimer | h = 0.01 |
| Singularité | une pose où la main ne peut plus aller dans toutes les directions |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une pente estimée en bougeant un angle
On veut savoir de combien la main bouge quand t1 augmente d’un degré. On ne connaît pas la formule, mais on sait calculer la main.
On la calcule à t1, puis à t1 plus un petit pas h. On divise l’écart de position par h. C’est une différence finie, une pente en centimètres par degré.
Exemple travaillé : une pose en équerre
| Angle bougé | Variation de x | Variation de y |
|---|---|---|
| t1, de 0,01 degré | -0,3491 cm par degré | 0,5236 cm par degré |
| t2, de 0,01 degré | -0,3491 cm par degré | 0 cm par degré |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
La pente de x selon t1
docker exec jupyter python3 -c "import numpy as np; f=lambda t: 30*np.cos(np.radians(t))+20*np.cos(np.radians(t+90)); h=0.01; print(round(float((f(h)-f(0))/h), 4))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
La première colonne en Python
import math
L1 = 30
L2 = 20
def position_main(t1, t2):
a1 = math.radians(t1)
a2 = math.radians(t1 + t2)
return [L1 * math.cos(a1) + L2 * math.cos(a2), L1 * math.sin(a1) + L2 * math.sin(a2)]
h = 0.01
base = position_main(0, 90)
apres = position_main(h, 90)
dx = (apres[0] - base[0]) / h
dy = (apres[1] - base[1]) / h
print("dx/dt1 :", round(dx, 4))
print("dy/dt1 :", round(dy, 4))
# Estimez ensuite la colonne de t2.
La jacobienne regroupe quatre pentes
La jacobienne range les quatre pentes dans un tableau : une colonne par articulation, une ligne pour x et une pour y.
Pour avoir la vitesse de la main, on multiplie : vx = J11 × w1 + J12 × w2, puis vy = J21 × w1 + J22 × w2. Ici w1 et w2 sont les vitesses articulaires en degrés par seconde.
Exemple travaillé : la vitesse de la main
| w1 | w2 | vx | vy |
|---|---|---|---|
| 10 | 0 | -3,49 | 5,24 |
| 0 | 10 | -3,49 | 0 |
| 10 | -10 | 0 | 5,24 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
La vitesse pour w1 = 10 et w2 = 0
docker exec jupyter python3 -c "import numpy as np; print(np.round(np.array([[-0.349, -0.349], [0.5236, 0]]) @ np.array([10, 0]), 2))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une erreur fréquente
Attention
Beaucoup croient que plus le pas h est petit, meilleure est l’estimation. C’est faux : trop petit, les arrondis de l’ordinateur dominent. Avec h égal à 1, on trouve -0,3536 ; avec 0,01, -0,3491 ; avec 1e-12, -0,3446.
Au bras tendu, la main perd une direction
Bras tendu, les deux colonnes de la jacobienne pointent dans la même direction, celle de la perpendiculaire au bras. La main ne peut plus avancer le long du bras, quelle que soit la vitesse des moteurs.
C’est une singularité. Le déterminant de la jacobienne, un nombre calculé avec ses quatre cases, est alors presque nul.