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.
| Finger | ID rechte Hand | ID linke Hand |
|---|---|---|
| Ringfinger | 5, 6 | 11, 12 |
| Mittelfinger | 3, 4 | 13, 14 |
| Zeigefinger | 1, 2 | 15, 16 |
| Daumen | 7, 8 | 17, 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
Spreizung (gleichsinnig) Flexion (gegensinnig)
Achse1 ↻ Achse2 ↻ Achse1 ↻ Achse2 ↺Die Oberfläche zeigt zwei Steuerachsen, nicht zwei Servos:
Flexion = (servo1 + servo2) / 2
Spreizung = (servo1 − servo2) / 2Umgekehrt rechnet das Programm die Steuerachsen in Zielwinkel für zwei Servos um:
servo1 = Flexion + Spreizung
servo2 = Flexion − SpreizungHier sind
servo1/servo2Software-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
+20Spreizung sind die Softwarewerteservo1 = +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):
| Achse | Bereich | Bedeutung |
|---|---|---|
| Flexion | −50 ~ +90 | offen (negativ) ↔ geschlossen (positiv) |
| Spreizung | −45 ~ +45 | zusammengeführt (negativ) ↔ gespreizt (positiv) |
Zwei ID-Regeln (bei Fehlern verbrennen Servos oder die Bewegung kehrt sich um):
- 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.
- 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.

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)| Hand | angle_offset_deg | mirror_pose |
|---|---|---|
| Rechte Hand | 0 | ja ⚠️ |
| Linke Hand | -35.16 | ja |
-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 abIn 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 Handtrue.Der Tausch dreht mathematisch nur die Spreizung, nicht die Flexion:
base = (a+b)/2bleibt beim Tausch unverändert,side = (a−b)/2wechselt 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
| Pose | Rechte Hand | Linke Hand |
|---|---|---|
open [-35]*8 | ID5 −35 / ID6 +35 | ID11 +0,16 / ID12 −0,16 |
close [75]*8 | ID5 +75 / ID6 −75 | ID11 +110,16 / ID12 −110,16 |
Mittelstellung [-17.578]*8 | ID5 −17,58 / ID6 +17,58 | ID11 +17,58 / ID12 −17,58 |
Beachte, dass
closebei der linken Hand ±110,16° benötigt, deutlich mehr als bei der rechten. Deshalb ist das Limit inconfig.jsonauf ±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.

