Wie schnell bewegt sich die Hand?
Die Jacobi-Matrix sagt, wie schnell sich die Hand eines Roboterarms bewegt, wenn sich die Gelenke mit bestimmten Geschwindigkeiten drehen. Sie ist eine kleine Zahlentabelle, die für jede Haltung des Arms neu gilt.
Man kann sie ohne Formeln schätzen: einen Winkel um ein winziges Stück ändern und beobachten, wie weit die Hand wandert. Das lernen Sie hier.
Am Ende dieser Lektion
Notiz
Ich kann mit einer geschätzten Jacobi-Matrix aus den Gelenkgeschwindigkeiten die Geschwindigkeit der Hand berechnen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Gelenkgeschwindigkeit | wie viele Grad sich ein Gelenk in einer Sekunde dreht | 10 Grad je Sekunde |
| Handgeschwindigkeit | wie viele Zentimeter die Hand in einer Sekunde wandert | |
| Jacobi-Matrix | eine Tabelle: Handbewegung je Grad eines Gelenks | |
| Differenzenquotient | eine Änderung geteilt durch einen kleinen Schritt | |
| Singularität | eine Haltung, in der die Hand in eine Richtung nicht ausweichen kann |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein winziger Schritt zeigt, wie die Hand reagiert
Die Hand liegt bei (30, 20), wenn w1 gleich 0 und w2 gleich 90 ist. Drehen Sie nur w1 um 1 Grad, und die Hand wandert ein Stück. Die Verschiebung geteilt durch den Schritt ist ein Differenzenquotient.
Er sagt: so viele Zentimeter wandert die Hand für ein Grad Drehung. Dasselbe machen wir danach mit w2.
Beispiel: ein Grad mehr, die Hand wandert
| Was ändert sich? | Hand vorher | Hand nachher | Änderung (x, y) |
|---|---|---|---|
| w1 plus 1 Grad | (30, 20) | (29,65; 20,52) | (-0,35; 0,52) |
| w2 plus 1 Grad | (30, 20) | (29,65; 20,00) | (-0,35; 0,00) |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Handänderung bei einem Grad mehr
docker exec jupyter python3 -c "import numpy as np; f = lambda a, b: np.array([30 * np.cos(np.radians(a)) + 20 * np.cos(np.radians(a + b)), 30 * np.sin(np.radians(a)) + 20 * np.sin(np.radians(a + b))]); print(np.round(f(1, 90) - f(0, 90), 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.
Einen Differenzenquotienten in Python rechnen
import math
def hand(l1, l2, w1, w2):
a = math.radians(w1)
b = math.radians(w1 + w2)
return [l1 * math.cos(a) + l2 * math.cos(b), l1 * math.sin(a) + l2 * math.sin(b)]
# Der Arm steht bei w1 = 20 und w2 = 50. Wir ändern w1 um 0,5 Grad.
vorher = hand(25, 15, 20, 50)
nachher = hand(25, 15, 20.5, 50)
aenderung_x = (nachher[0] - vorher[0]) / 0.5
aenderung_y = (nachher[1] - vorher[1]) / 0.5
print(round(aenderung_x, 3), round(aenderung_y, 3))
# Ändern Sie den Schritt von 0,5 auf 0,01 (an beiden Stellen) und vergleichen Sie.
Die Jacobi-Matrix sammelt beide Spalten
Die Jacobi-Matrix hat zwei Spalten. Die erste hält fest, wie die Hand auf ein Grad in w1 reagiert, die zweite, wie sie auf ein Grad in w2 reagiert. Die obere Zeile gehört zu x, die untere zu y.
Die Handgeschwindigkeit entsteht so: vx ist die obere Zeile mal die beiden Gelenkgeschwindigkeiten, vy die untere. Mit Grad je Sekunde kommt Zentimeter je Sekunde heraus.
Beispiel: Gelenkgeschwindigkeit wird Handgeschwindigkeit
| Gelenke drehen sich mit | Rechnung für vx | Rechnung für vy | Hand bewegt sich mit |
|---|---|---|---|
| 10 und 0 Grad je Sekunde | -0,35 mal 10 | 0,52 mal 10 | (-3,5; 5,2) cm je Sekunde |
| 0 und 10 Grad je Sekunde | -0,35 mal 10 | 0,00 mal 10 | (-3,5; 0) cm je Sekunde |
| 10 und 10 Grad je Sekunde | -3,5 plus -3,5 | 5,2 plus 0 | (-7; 5,2) cm je Sekunde |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Beide Gelenke mit 10 Grad je Sekunde
docker exec jupyter python3 -c "import numpy as np; j = np.array([[-0.35, -0.35], [0.52, 0]]); print(j @ np.array([10, 10]))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Im gestreckten Arm fehlt der Hand eine Richtung
Bei gestrecktem Arm zeigt die Hand genau vom Ursprung weg. Egal, wie sich die Gelenke drehen: Die Hand kann dann nur senkrecht zum Arm wandern, nicht entlang des Arms.
So eine Haltung heißt Singularität. Die Matrix verrät sie: Ihre Determinante, also das Produkt der Diagonalen minus das der Gegendiagonale, ist dann 0.
Beispiel: zwei Haltungen im Vergleich
| Haltung | Matrix je Grad | Determinante | Singulär? |
|---|---|---|---|
| w1 = 0, w2 = 90 | [[-0,35; -0,35], [0,52; 0]] | etwa 0,18 | nein |
| w1 = 0, w2 = 0 | [[0; 0], [0,87; 0,35]] | 0 | ja |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Determinante des gestreckten Arms
docker exec jupyter python3 -c "import numpy as np; print(np.linalg.det(np.array([[0, 0], [0.87, 0.35]])))"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, die Jacobi-Matrix gelte für den ganzen Arbeitsraum. Sie gilt nur für die Haltung, in der sie berechnet wurde. Ändern sich die Winkel, müssen Sie sie neu schätzen.