Zum Artikel

Schwerkraftkompensation konfigurieren

Geprüft 2026-11-01

Ergebnis: Verwenden Sie ein Modell, das zu Ihrem Arm passt, und verstehen Sie, was passiert, wenn die Kontrolle endet. Sie benötigen eine verifizierte Kalibrierung und eine Controller-Datei.

Überprüfen Sie die Modellübereinstimmung

Der Host berechnet den Stellgröße aus den gemessenen Positionen und sendet ihn an die Servos. Die Firmware enthält keine Armgeometrie. Positiver Stellwert folgt steigenden Encoderzahlen; Das Modell muss die physikalische Gelenkrichtung berücksichtigen.

Zwei Modelle beschreiben aufrechte Arme mit leeren Greifern:

Datei in host/arm-control/models/ Arm
arm-upright-empty.json SO-102
so101-upright-empty.json SO-101

Beide definieren gekoppelte Terme für M2–M4 und expliziten Null-Stellgröße für M1, M5 und M6. Das mitgelieferte Arm-Setup mit sechs Motoren verwendet die IDs 1–6 mit einem Profil für jeden Motor. Ihre Kalibrierung bindet bestimmte Encoder-Offsets, Einheitenauflösung und Umkehrflags; Preflight vergleicht diese Werte mit den Motoren bevor die Steuerung beginnt.

Ein Armname oder ein Referenzwert von 2048 reicht nicht aus. Kopieren Sie nicht die Offsets eines anderen Arms in Ihre Motoren und ändern Sie nicht nur encoderCalibration, um die Prüfung zu bestehen. Unterschiedliche Kalibrierung, Montage, Geometrie oder Nutzlast erfordern eine angepasste oder angepasste Modell- und Hardwarevalidierung.

Verbinden Sie ein validiertes Modell

Fügen Sie für tools/poses/controller.local.json dieses Feld zum vorhandenen JSON-Objekt hinzu; Die Zeile ist keine vollständige Konfiguration:

"gravityModel": "../../host/arm-control/models/arm-upright-empty.json"

Dieser Pfad wählt das Modell SO-102 aus. Die SO-101-Datei ist so101-upright-empty.json; Sein Status erfordert ausdrücklich eine Validierung auf dem beabsichtigten Arm- und Bewegungspfad. Verwenden Sie einen relativen Pfad für Ihr eigenes Modell und behalten Sie Kommas zwischen JSON-Feldern bei.

gravitySlewEffortPerS jedes Profils begrenzt, wie schnell sich die Schwerkraft-Stellgröße ändert; effortLimit begrenzt die Gesamtmotorleistung. Ohne gravityModel laufen die Tools ohne Modell und löschen die beibehaltene Schwerkraft bei der Wiederverwendung einer Sitzung. Eine Slew-Einstellung ungleich Null allein ermöglicht keine Kompensation.

Überprüfen Sie dies vor dem Umzug

Führen Sie eine normale Vorschau Ihrer Aufnahme aus:

macOS / Linux
npm run replay -- tools/poses/controller.local.json POSES.json
Windows PowerShell
npm.cmd run replay -- tools/poses/controller.local.json POSES.json

Eine Nichtübereinstimmung der Kalibrierung, fehlende Eingaben oder ein übermäßiger berechneter Stellwert erfordern eine Untersuchung. Ergebnisse oberhalb der Modell- oder Motorgrenzen werden verworfen und nicht stillschweigend abgeschnitten. Erhöhen Sie den Grenzwert nicht nur, um den Fehler zu unterdrücken, ohne die Last zu überprüfen.

Mit --run berechnet, sendet und bestätigt der Controller die Schwerkraft vor dem ersten Bewegungsziel. Überprüfen Sie an einem unterstützten Mechanismus die Richtung und das Verhalten bei verschiedenen Posen und Lasten. Eine erfolgreiche Pose validiert nicht den gesamten Arbeitsbereich.

Während der Kontrolle und nach dem Verlassen

Feedback und Schwerkraft teilen sich einen Leser, mit Aktualisierungen etwa alle 50 ms. Host-Aktualitäts- und Terminprüfungen machen den Host nicht zu einem Echtzeitsystem.

Bei normalem Abschluss verbleibt die endgültige Kompensation im Servo. Es passt sich nicht mehr an Posen- oder Nutzlaständerungen an. Fehlende Nachrichten löschen auch nicht die Schwerkraft: Die Firmware nähert sich der letzten Anfrage mit der konfigurierten Anstiegsgeschwindigkeit und behält diese bei. Torque-Off beseitigt das Problem. Siehe Beenden des ersten Satzes.

Ein Modell erstellen

Jeder gesteuerte Motor benötigt ein explizites Modell, einschließlich Nullkompensationseinträgen. Jeder von gekoppelten Termen verwendete Eingang muss kontrolliert und gemessen werden. Begriffe verwenden coefficient × sin(angle) oder coefficient × cos(angle), wobei angle = offsetRad + sum(counts[id] × weights[id]). Winkel sind Bogenmaße und Koeffizienten sind PWM-Stellgrößeneinheiten. Konstante Terme haben keine Gewichte.

Protokollbasierte Anpassung und unabhängige Validierung gehören zum Tuning-Prozess. Angepasste Koeffizienten sind kein gemessenes physikalisches Drehmoment und stellen nicht automatisch ein validiertes Modell dar.


Startseite der Dokumentation · Quellrevision: a995f77. Erweiterung 9.0.