Comment calculer où est la main du bras ?
La cinématique directe calcule la position de la main d’un bras à partir de ses angles d’articulation. C’est le calcul de base de toute simulation de bras de robot.
Une machine qui trie des colis doit savoir où se trouve sa pince avant de bouger. Ici, le bras est simulé et plat, avec deux segments.
À la fin de cette leçon
Remarque
Je peux calculer où se trouve la main d’un bras à deux articulations.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Articulation | le point où un segment tourne par rapport au précédent | |
| Segment | une barre rigide entre deux articulations | L1 = 30 |
| Angle d’articulation | de combien une articulation est tournée | |
| Main | l’extrémité du dernier segment | |
| Cinématique directe | trouver la main à partir des angles | |
| Portée | la distance que la main peut atteindre depuis la base |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Chaque segment prolonge le précédent
Le bras a une base fixe en (0, 0). Le premier segment, de longueur L1, tourne de l’angle t1 depuis l’axe des x. Son bout est le coude.
Le second segment, de longueur L2, part du coude. Sa direction vaut t1 plus t2, car t2 se mesure depuis le premier segment. Son bout est la main.
Exemple travaillé : quatre poses du bras
| t1 | t2 | Coude | Main |
|---|---|---|---|
| 0 | 0 | (30 ; 0) | (50 ; 0) |
| 0 | 90 | (30 ; 0) | (30 ; 20) |
| 90 | -90 | (0 ; 30) | (20 ; 30) |
| 30 | 60 | (25,98 ; 15) | (25,98 ; 35) |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
La main pour t1 = 90 et t2 = -90
docker exec jupyter python3 -c "import numpy as np; t1=np.radians(90); t2=np.radians(-90); print(round(float(30*np.cos(t1)+20*np.cos(t1+t2)), 2), round(float(30*np.sin(t1)+20*np.sin(t1+t2)), 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.
La main s’obtient en additionnant deux déplacements
La position de la main est la somme de deux déplacements, un par segment. En x : L1 cos(t1) + L2 cos(t1 + t2). En y : L1 sin(t1) + L2 sin(t1 + t2).
On calcule d’abord le coude, puis on lui ajoute le second déplacement. Le code ci-dessous suit cet ordre.
Le coude puis la main en Python
import math
L1 = 30
L2 = 20
t1 = 30
t2 = 60
a1 = math.radians(t1)
a2 = math.radians(t1 + t2)
coude_x = L1 * math.cos(a1)
coude_y = L1 * math.sin(a1)
main_x = coude_x + L2 * math.cos(a2)
main_y = coude_y + L2 * math.sin(a2)
print("coude :", round(coude_x, 2), round(coude_y, 2))
print("main :", round(main_x, 2), round(main_y, 2))
# Passez t2 à -60 puis relancez.
Une erreur fréquente
Attention
Beaucoup calculent le second segment avec t2 seul. Or t2 se mesure depuis le premier segment. La direction du second segment est t1 plus t2 : c’est cette somme qui entre dans le cosinus.
La portée limite les positions de la main
La main ne peut pas aller n’importe où. Bras tendu, elle est à L1 plus L2 de la base, soit 50 cm. Bras replié, elle est à la différence des longueurs, soit 10 cm.
Tous les points entre ces deux distances sont atteignables. Les autres ne le sont pas, ce qui compte pour la leçon suivante.