Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Cinématique inverse : trouver les angles

Après cette leçon: Je peux trouver les angles d’un bras à deux articulations qui atteignent une cible.

Leçon de 60 min2 commandesLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Comment trouver les angles qui atteignent une cible ?

La cinématique inverse cherche les angles d’articulation qui amènent la main sur un point donné. C’est le problème d’un bras à qui l’on dit « va là » : il doit en déduire ses angles.

C’est l’inverse de la leçon précédente, et il est plus délicat : il peut y avoir deux réponses, ou aucune.

À la fin de cette leçon

Remarque

Je peux trouver les angles d’un bras à deux articulations qui atteignent une cible.

Mots clés

MotCe que ça veut direExemple
Cinématique inversetrouver les angles à partir de la position voulue
Ciblele point que la main doit atteindre(40, 10)
Atteignabledans la portée du bras
Arc cosinusla fonction qui retrouve un angle à partir de son cosinusmath.acos
Configurationun jeu d’angles possible pour une même main

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Le second angle vient de la distance

Le triangle formé par la base, le coude et la cible a trois côtés connus : L1, L2 et la distance d de la cible. Un seul angle de ce triangle fixe le pli du coude.

On calcule c = (x² + y² - L1² - L2²) / (2 × L1 × L2). Alors t2 vaut plus ou moins l’arc cosinus de c.

Exemple travaillé : la cible (40 ; 10)

ÉtapeCalculRésultat
Carré de la distance40 × 40 + 10 × 101700
Carrés des segments30 × 30 + 20 × 201300
Cosinus du pli c(1700 - 1300) / 12000,3333
Second angle t2arc cosinus de 0,333370,53 degrés

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Le cosinus et le second angle

Commande
docker exec jupyter python3 -c "import numpy as np; c=(40**2+10**2-30**2-20**2)/(2*30*20); print(round(c, 4), round(float(np.degrees(np.arccos(c))), 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 cible a souvent deux solutions

Le coude peut se plier d’un côté ou de l’autre : t2 positif ou négatif. Dans les deux cas, la main arrive sur la cible.

Pour chaque t2, on déduit t1 : c’est la direction de la cible, moins l’angle que fait le second segment vu de la base. Le code ci-dessous calcule les deux jeux d’angles, puis vérifie la main.

Exemple travaillé : deux jeux d’angles

Coudet1t2Main
Plié vers le haut (t2 positif)-13,1870,53(40 ; 10)
Plié vers le bas (t2 négatif)41,25-70,53(40 ; 10)

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Les deux solutions en Python

Code: python
import math

L1 = 30
L2 = 20
x = 40
y = 10

c = (x * x + y * y - L1 * L1 - L2 * L2) / (2 * L1 * L2)
for signe in [1, -1]:
    t2 = signe * math.acos(c)
    t1 = math.atan2(y, x) - math.atan2(L2 * math.sin(t2), L1 + L2 * math.cos(t2))
    main_x = L1 * math.cos(t1) + L2 * math.cos(t1 + t2)
    main_y = L1 * math.sin(t1) + L2 * math.sin(t1 + t2)
    print("coude", signe, ":", round(math.degrees(t1), 2), round(math.degrees(t2), 2))
    print("main :", round(main_x, 2), round(main_y, 2))
# Passez x à 60 : que se passe-t-il ?

Une cible hors de portée n’a aucune solution

Si la cible est plus loin que L1 plus L2, aucun angle ne l’atteint. Si elle est plus près que la différence des longueurs, non plus.

Dans ces cas, c sort de l’intervalle de -1 à 1, et l’arc cosinus n’existe pas. Il faut tester c avant de le calculer.

La distance des cibles 1 et 2

Commande
docker exec jupyter python3 -c "import numpy as np; print(round(float(np.hypot(40, 10)), 2), 30 + 20, round(float(np.hypot(60, 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 appellent math.acos sans vérifier c. Pour une cible trop loin, Python s’arrête avec une erreur de domaine. Testez d’abord que c est entre -1 et 1, sinon répondez que la cible est hors de portée.

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.