🧪 Neue Tutorials in Arbeit — vom Roboterarm bis zum Sensor
Zum Inhalt springen

SCS0009-Websteuerung ​

Diese Seite ist die SCS0009-Seriell-Bus-Version-spezifische Beschreibung der Websteuerung. Allgemeine Oberfläche, Start, Preset-Posen und Kamera-Teleop findest du in der Websteuerungsübersicht.

Servozuordnung ​

Datenquelle: DEFAULT_HAND_SERVOS in AmazingHandControl/hand_logic.py und docs/zh-hans/CONFIG_FORMAT.md.

FingerID rechte HandID linke Hand
Ringfinger5, 611, 12
Mittelfinger3, 413, 14
Zeigefinger1, 215, 16
Daumen7, 817, 18

Beide Servos treiben den Finger gemeinsam im Differenzialantrieb ⚠️ ​

Die beiden Servos jedes Fingers sind nebeneinander montiert, ihre Achsen liegen auf derselben Linie; nicht „ein Servo für Flexion, ein Servo für Spreizung", sondern beide Servos treiben denselben Finger gemeinsam:

  • beide Servos gleichsinnig → Finger spreizt seitlich (Abduktion/Adduktion)
  • beide Servos gegensinnig → Finger streckt/beugt (Flexion)
  • beide Servos gleichzeitig mit gleich- und gegensinnigen Anteilen → Flexion und Spreizung überlagern sich
text
Spreizung (gleichsinnig)     Flexion (gegensinnig)
Achse1 ↻   Achse2 ↻           Achse1 ↻   Achse2 ↺

Die Oberfläche zeigt zwei Steuerachsen, nicht zwei Servos:

Flexion = (servo1 + servo2) / 2
Spreizung = (servo1 − servo2) / 2

Umgekehrt rechnet das Programm die Steuerachsen in Zielwinkel für zwei Servos um:

servo1 = Flexion + Spreizung
servo2 = Flexion − Spreizung

Hier sind servo1 / servo2 Software-Zielwinkel (die gerade ID ist wegen der verkehrten Montage bereits negiert), nicht die physische Richtung der Servo-Abtriebswelle. Ob zwei Servos sich am realen Mechanismus gleichsinnig/gegensinnig drehen, siehst du an der Abtriebswelle, nicht am direkten Vergleich dieser beiden Zahlen.

Beispiel: Bei nur +20 Spreizung sind die Softwarewerte servo1 = +20, servo2 = −20; nach der Negation der geraden ID drehen sich beide Servos tatsächlich gleichsinnig.

„Der Finger spreizt sich nicht / schließt sich nicht" bedeutet, dass der Spreizungs-Steuerwert 0 ist oder die beiden Servos kein Differenzial bilden — z. B. entsteht das V bei der Schere durch Zeigefinger-Spreizung +17 und Mittelfinger-Spreizung −30 (einer positiv, einer negativ).

Bereich (abgeleitet aus den offiziellen 19 Posen + Mittelstellung):

AchseBereichBedeutung
Flexion−50 ~ +90offen (negativ) ↔ geschlossen (positiv)
Spreizung−45 ~ +45zusammengeführt (negativ) ↔ gespreizt (positiv)

Zwei ID-Regeln (bei Fehlern verbrennen Servos oder die Bewegung kehrt sich um):

  1. Ungerade ID ist der erste Servo jedes Fingers, gerade ID der zweite. Gilt an beiden Händen (links 11/12, 13/14 … wechseln ebenfalls ab). Der zweite Servo ist verkehrt herum montiert und muss bei der Umrechnung negiert werden.
  2. Die linke Hand hat nicht 9–16, sondern 11–18, nummeriert nach „Ringfinger zuerst". Sequenziell als 1–8 zu verkabeln ist immer falsch.

Physische Richtung und Mittelstellung: Von rechts nach links gezählt, rechts ungerade, links gerade. Mittelstellungsreihenfolge der rechten Hand (raw 0–1023) 451,571,451,571,451,571,451,571; linke Hand 571,451,571,451,571,451,571,451.

Both_Hands-IDs


Umrechnungsformel ​

Identisch mit apply_pose() in AmazingHandControl (Pose für Pose verifiziert):

1) wenn mirror_pose wahr ist, zuerst die Werte der beiden Servos jedes Fingers tauschen
2) servo_deg = (ID ungerade ? +1 : -1) × (Posenwert − angle_offset_deg)
Handangle_offset_degmirror_pose
Rechte Hand0ja ⚠️
Linke Hand-35.16ja

-35.16° ist der physische Halbslot-Versatz der Servohörner der linken Hand gegenüber der rechten, aus der offiziellen Konfiguration ermittelt.

Zu mirror_pose — dieser Build weicht vom offiziellen ab

In der offiziellen Referenz ist nur die linke Hand true. Beim rechten Handmodul dieses Builds sind die Servopaare ebenfalls verkehrt herum montiert, daher ist auch die rechte Hand true.

Der Tausch dreht mathematisch nur die Spreizung, nicht die Flexion: base = (a+b)/2 bleibt beim Tausch unverändert, side = (a−b)/2 wechselt das Vorzeichen. Wenn also „die Spreizung einer Hand insgesamt verkehrt" herauskommt, ist dies der erste Schalter, den man prüfen sollte.

Das Posen-Array hat immer 8 Werte in der Reihenfolge [Ringfinger, Mittelfinger, Zeigefinger, Daumen], zwei pro Finger — byte-identisch zur offiziellen data/hand_config.yaml, sodass du sie direkt vergleichen kannst.

Durchgerechnete Beispiele ​

PoseRechte HandLinke Hand
open [-35]*8ID5 −35 / ID6 +35ID11 +0,16 / ID12 −0,16
close [75]*8ID5 +75 / ID6 −75ID11 +110,16 / ID12 −110,16
Mittelstellung [-17.578]*8ID5 −17,58 / ID6 +17,58ID11 +17,58 / ID12 −17,58

Beachte, dass close bei der linken Hand ±110,16° benötigt, deutlich mehr als bei der rechten. Deshalb ist das Limit in config.json auf ±120° gesetzt (der volle Bereich des SCS0009 liegt bei etwa ±150°). Ein Limit von ±90 würde die Faust der linken Hand abschneiden.


Häufige Probleme bei SCS0009 ​

Bewegungsrichtung verkehrt → prüfen, ob die Verkabelung „ungerade ID zuerst" folgt; bei der linken Hand zusätzlich angle_offset_deg = -35.16 bestätigen.

Faust der linken Hand zu klein / Servos fiepen → das Limit ist wahrscheinlich noch ±90; prüfe, ob config.json auf ±120 gesetzt ist.

Finger bewegt sich nicht / Meldung „expected N motors, found M" → tools/scan_servos.py ausführen; die IDs der linken Hand sind am leichtesten falsch zu verkabeln.

Mittelstellung falsch → der Mittelwert -17.578125 ist aus den offiziellen Rohwerten 451/571 umgerechnet; für die eigene mechanische Montage middle.positions in config.json anpassen.

Verwandte Seiten ​