Welche Winkel führen die Hand zum Ziel?
Die inverse Kinematik berechnet, welche Gelenkwinkel ein Roboterarm braucht, damit seine Hand ein vorgegebenes Ziel erreicht. Sie ist die Umkehrung der Vorwärtskinematik und die Frage hinter jedem Greifauftrag.
Oft gibt es zwei Lösungen, manchmal nur eine, und manchmal gar keine. Das lässt sich mit etwas Geometrie genau vorhersagen.
Am Ende dieser Lektion
Notiz
Ich kann die Gelenkwinkel für ein Ziel berechnen und erkennen, ob das Ziel überhaupt erreichbar ist.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Inverse Kinematik | aus dem Ziel der Hand die Gelenkwinkel berechnen |
| Ziel | der Punkt, an dem die Hand ankommen soll |
| Erreichbar | der Arm kann das Ziel mit seinen Gliedern treffen |
| Kosinussatz | er liefert einen Winkel aus den drei Seiten eines Dreiecks |
| Ellbogenstellung | der Ellbogen knickt nach der einen oder der anderen Seite |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Erreichbar ist ein Ziel im Ring
Zuerst fragen wir, ob der Arm das Ziel überhaupt trifft. Der Abstand d des Ziels vom Ursprung muss zwischen der Differenz und der Summe der Gliedlängen liegen.
Bei den Längen 30 und 20 ist die untere Grenze 10 und die obere 50 Zentimeter. Alles außerhalb dieses Rings ist für die Hand unerreichbar.
Beispiel: fünf Ziele im Ring 10 bis 50
| Ziel (x, y) | Abstand d | Erreichbar? |
|---|---|---|
| (50, 0) | 50 | ja, ganz gestreckt |
| (20, 30) | etwa 36,06 | ja |
| (10, 0) | 10 | ja, ganz zurückgeklappt |
| (5, 0) | 5 | nein, zu nah |
| (40, 40) | etwa 56,57 | nein, zu weit |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Der Abstand des Ziels (20, 30)
docker exec jupyter python3 -c "import numpy as np; print(np.round(np.hypot(20, 30), 2))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Der Kosinussatz liefert den zweiten Winkel
Die beiden Glieder und die Strecke vom Ursprung zum Ziel bilden ein Dreieck. Seine Seiten sind 30, 20 und d. Der Kosinussatz berechnet daraus den Winkel am Ellbogen.
In unserer Schreibweise gilt: cos(w2) ist d mal d minus 30 mal 30 minus 20 mal 20, geteilt durch 2 mal 30 mal 20. Dann liefert arccos den Winkel w2.
Beispiel: der zweite Winkel für vier Ziele
| Ziel | d mal d | cos(w2) | w2 in Grad |
|---|---|---|---|
| (50, 0) | 2500 | 1 | 0 |
| (20, 30) | 1300 | 0 | 90, oder -90 |
| (40, 0) | 1600 | 0,25 | etwa 75,52, oder -75,52 |
| (10, 0) | 100 | -1 | 180 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Der zweite Winkel für das Ziel (40, 0)
docker exec jupyter python3 -c "import numpy as np; print(np.round(np.degrees(np.arccos((1600 - 900 - 400) / 1200)), 4))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den zweiten Winkel in Python berechnen
import math
# Zwei Gliedlängen und ein Ziel, in Zentimetern.
l1 = 25
l2 = 15
x = 29
y = 3
d2 = x * x + y * y
c = (d2 - l1 * l1 - l2 * l2) / (2 * l1 * l2)
print("cos von w2:", round(c, 3))
if abs(c) <= 1:
print("w2 =", round(math.degrees(math.acos(c)), 2), "Grad")
else:
print("Das Ziel ist nicht erreichbar.")
# Setzen Sie x auf 60 und starten Sie erneut.
Es gibt zwei Ellbogenstellungen für dasselbe Ziel
Zum Winkel w2 gehört auch der Gegenwinkel minus w2: Der Ellbogen knickt dann zur anderen Seite. Beide Stellungen bringen die Hand zum Ziel.
Den ersten Winkel w1 liefert der Unterschied zweier Richtungen: die Richtung zum Ziel minus einen Hilfswinkel, der von w2 abhängt. Beide Richtungen rechnet math.atan2 aus.
Beispiel: zwei Lösungen für das Ziel (20, 30)
| Stellung | w1 | w2 | Hand |
|---|---|---|---|
| Ellbogen nach rechts unten | 90 | -90 | (20, 30) |
| Ellbogen nach links oben | etwa 22,62 | 90 | (20, 30) |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Beide ersten Winkel für das Ziel (20, 30)
docker exec jupyter python3 -c "import numpy as np; z = np.arctan2(30, 20); print([round(float(np.degrees(z - np.arctan2(20 * np.sin(s), 30 + 20 * np.cos(s)))), 2) for s in (np.pi / 2, -np.pi / 2)])"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele glauben, ein Ziel habe immer genau eine Lösung. Meist hat es zwei. Nur am Rand des Rings gibt es eine, und außerhalb des Rings gibt es keine. Prüfen Sie darum zuerst, ob das Ziel erreichbar ist.