SCS0009-Desktop-GUI (GUI und CLI)
Diese Seite ist das Desktop-Steuerungstutorial der SCS0009-Seriell-Bus-Version. Websteuerung siehe SCS0009-Websteuerung, Hardware-Verkabelung siehe SCS0009-Verkabelung.
Schnellstart
- Python 3.10+ und Abhängigkeiten installieren: Installation.
- Bus-Treiberplatine anschließen und seriellen Port bestätigen: Umgebungsanforderungen.
- GUI starten:
amazing-hand-guioderpython amazing_hand_gui.py. - Nach Kalibrierung linke/rechte Hand, Winkel und Mittelstellung prüfen.
- Mit Finger-Schiebereglern, Preset-Posen und Sequenzen Bewegungen ausführen.
AmazingHand Python-Steuerwerkzeug (für linke und rechte Hand)
In Python geschriebenes GUI- und Kommandozeilenwerkzeug, steuert über eine serielle Bus-Servo-Treiberplatine 8 Feetech SCS0009-Servos und treibt die AmazingHand-Dexterhand von Pollen Robotics an.
Linke und rechte Hand werden unterstützt. Beim Start die rechte Hand (Servo-IDs 1-8) oder linke Hand (Servo-IDs 11-18) wählen,
--handüberspringt die Abfrage. Die Posenbibliothek ist für beide Hände gemeinsam; jede Hand pflegt indata/config.yamlihre eigene Servozuordnung, Montage-Offsets und Rohwert-Ziele. Siehe Auswahl linke/rechte Hand.

Projektstruktur
amazing_hand_gui.py – GUI-Hauptprogramm
amazing_hand_cmd.py – Kommandozeilenwerkzeug
hand_logic.py – gemeinsame Geschäftslogik (UI-unabhängig)
pyproject.toml – Paketmetadaten, Abhängigkeiten, pytest-Konfiguration
data/
config.yaml – Anwendungseinstellungen (seriell, Limits, Rohwert-Ziele)
hand_config.yaml – gespeicherte Gesten und Sequenzen
docs/
REQUIREMENTS.md – Anforderungen und Abnahmekriterien
CONFIG_FORMAT.md – Beschreibung des Konfigurationsformats
scs_servo_protocol.md – SCS0009-Registerreferenz
CHANGES.md – Änderungen gegenüber dem Original und Begründung
user_manual.md – Weiterleitung auf das zentrale Tutorial
tests/
test_hand_logic.py – Unit-Tests für hand_logic (155)
test_gui_utils.py – Unit-Tests für GUI-Hilfsfunktionen (51)
test_cmd.py – Unit-Tests für die CLI (42)
test_integration.py – Integrationstests (14)
test_system.py – Systemtests per Subprozess (22)
test_system_hardware.py – Hardwaretests (33, benötigt --hardware)
test_cmd_hardware.py – CLI-Hardwaretests (21, benötigt --hardware)Umgebungsanforderungen
- Python 3.10 oder neuer (GUI benötigt Tkinter)
- separate 5-V-Stromversorgung für die 8 Servos
- USB-Seriell-Busadapter mit installiertem Treiber
Installation
Empfohlen: Installation mit pip (liest pyproject.toml):
pip install -e .Oder Abhängigkeiten direkt installieren:
pip install -r requirements.txtEntwicklungs- und Testumgebung:
pip install -r requirements-dev.txtKalibrierung
Das Winkelsystem, die Gesten-Presets und die Mittelstellung der Servos hängen von der konkreten Hand ab. Alle diese Parameter sind in data/config.yaml zentralisiert.
Auswahl linke/rechte Hand
Die beiden Hände verwenden unterschiedliche Servos und mechanische Strukturen, daher wird vor dem Öffnen der Oberfläche ausgewählt:
AmazingHand — which hand?
1 = right hand (servo IDs 1-8)
2 = left hand (servo IDs 11-18)
Enter 1 or 2 [1]:
LEFT hand — servo IDs 11-18
Ring (11, 12) Middle (13, 14) Pointer (15, 16) Thumb (17, 18)
middle position raw: [571, 451, 571, 451, 571, 451, 571, 451]Abfrage überspringen:
python amazing_hand_gui.py --hand left
python amazing_hand_cmd.py --pose victory --hand leftOhne --hand wird der Wert hand: aus data/config.yaml verwendet.
Warum eine Hand nicht nur eine andere ID-Gruppe ist. Neben der Servonummerierung (rechte Hand 1-8, linke Hand 11-18, und bei der linken Hand ist die Fingernummerierung gespiegelt — Ringfinger zuerst) gibt es bei der linken Hand zwei mechanische Unterschiede, die das Programm automatisch behandelt:
| Rechte Hand | Linke Hand | |
|---|---|---|
| Servo-ID | 1-8 | 11-18 |
| Finger → ID | Zeigefinger 1,2 / Mittelfinger 3,4 / Ringfinger 5,6 / Daumen 7,8 | Ringfinger 11,12 / Mittelfinger 13,14 / Zeigefinger 15,16 / Daumen 17,18 |
| Hersteller-MiddlePos | [451, 571, …] | [571, 451, …] |
| Montage-Offset | 0° | −35,16° (hands.left.angle_offset) |
| Gleicher Finger, zwei Servos | (a, b) | (b, a) (hands.left.mirror_pose) |
Wenn eine der beiden letztgenannten Einstellungen fehlt, verformt sich jede Geste: Der Montage-Offset verschiebt jeden Finger um 35°, ohne den Tausch innerhalb eines Fingers kehrt sich die Öffnungsrichtung komplett um (beim V-Zeichen schließen sich die beiden Finger, die sich schließen sollen, die drei anderen öffnen sich stattdessen).
data/hand_config.yaml ist für beide Hände gemeinsam und speichert immer die Reihenfolge der rechten Hand; die linke Hand wird beim Lesen umgerechnet und beim Speichern zurückgetauscht.
Eine neue Hand kalibrieren. Die Werte in hands.left als Vorlage verwenden und dann in dieser Reihenfolge prüfen:
- Auf Middle position drücken und in der Zeile Current (0-1023) prüfen, ob die erwarteten Rohwerte gelesen werden
- Open All / Close All drücken — der Stellweg sollte bis an den mechanischen Anschlag gehen, ohne zu blockieren
- Eine Öffnungsgeste testen (victory als V-Zeichen, greeting mit drei geschlossenen Fingern)
Wenn ein Punkt nicht stimmt, welchen Parameter anpassen:
| Symptom | Wo ändern |
|---|---|
| Middle-position-Anzeige falsch | hands.<Name>.raw_positions.middle |
| Öffnungsrichtung verkehrt | hands.<Name>.mirror_pose |
| Stellweg zu klein oder zu groß | hands.<Name>.raw_positions.open / close |
Winkelsystem
GUI und CLI verwenden Winkelwerte, die vom rustypot-Treiber in die internen Rohwerte der Servos umgerechnet werden:
raw = 1024 × angle / 300° + 511 (0,29297°/Schritt, Rohwertbereich 0–1023)| Winkel | Bedeutung |
|---|---|
| −35° | vollständig geöffnet (gestreckt) |
| 0° | Mittelstellung, Finger natürlich leicht gebeugt |
| +75° | vollständig geschlossen (Faust) |
Die beiden Servos jedes Fingers sind nebeneinander mit kollinearen Achsen montiert: gleichsinnige Drehung erzeugt Spreizung, gegensinnige Drehung erzeugt Flexion. Der gerade-ID-Servo ist gegenüber dem ungeraden negiert, sodass derselbe Öffnungs-/Schließwert die beiden Servos in entgegengesetzte Richtungen bewegt; das erledigt das Programm automatisch, du musst nicht manuell umrechnen.
Limits
limits:
servo_min: -75 # absolute Stellweggrenzen jeder Servoanweisung
servo_max: 75
base_min: -75 # Bereich des Öffnen/Schließen-Schiebereglers
base_max: 75
side_min: -35 # Bereich des Spreizungs-Schiebereglers
side_max: 35side_min/side_max steuern die seitliche Spreizung. Da das Programm normalisiert (u = |side_offset| / |side_min|), ändert die Änderung dieses Bereichs allein nicht die tatsächliche Spreizamplitude, sondern staucht nur die Skala des Schiebereglers. Um den tatsächlichen Spreizwinkel der Finger zu ändern, muss gleichzeitig auto_extremes geändert werden.
Rohwert-Ziele
Die drei globalen Positionsbuttons fahren die Servos auf exakte Rohwerte, ohne das Winkelmodell:
raw_positions: # Index 0 -> Servo-ID 1 …… Index 7 -> Servo-ID 8
open: [260, 760, 260, 760, 260, 760, 260, 760]
close: [760, 260, 760, 260, 760, 260, 760, 260]
middle: [451, 571, 451, 571, 451, 571, 451, 571]- open / close — die beiden Enden des mechanischen Stellwegs. Mit dem Feetech-Debugging-Werkzeug des Herstellers durch einzelnes Ansteuern der Servos ermittelt.
- middle — die kalibrierte mechanische Mittelstellung (d. h. MiddlePos im Arduino-Demo des Herstellers). Beachte, dass sie nicht der Mittelpunkt von open und close ist, sondern um etwa ±60 raw (±17,6°) von raw 511 abweicht.
Dies sind Kalibrierwerte jeder einzelnen Hand. Der Hersteller schreibt: "replace values by your calibration results".
So prüfen: Das Panel Servo Feedback hat eine Zeile Current (0-1023), die die aktuelle Rohposition in Echtzeit anzeigt. Nach Drücken von Middle position sollten dort 451, 571, 451, 571, … stehen.
Übersicht der Steuerelementbereiche
| Steuerelement | Bereich |
|---|---|
| Öffnen/Schließen-Schieberegler (vertikal) | −75 … +75 |
| Spreizungs-Schieberegler (horizontal) | −35 … +35 |
| Geschwindigkeit | 1 (langsam) … 6 (schnell) |
Der Geschwindigkeitswert wird vom Treiber als rad/s an die Servos übergeben, daher entsprechen 1–6 ungefähr 57–344 °/s. Unter Last beträgt die tatsächliche Geschwindigkeit etwa 70 % dieses Werts — das bei der Wahl der Sequenzverzögerungen berücksichtigen.
GUI ausführen (amazing_hand_gui.py)

Die Oberfläche ist in vier Blöcke gegliedert:
- Linke Spalte: Fingersteuerungspanels für die vier Finger, mit Öffnen/Schließen-/Spreizungs-Schiebereglern, Auto/Raw-Modus, Geschwindigkeit, Open/Close/Center.
- Mittlere Spalte: globale Steuerbuttons (Open All / Close All / Center All / Middle position) und Posenverwaltung.
- Rechte Spalte: Telemetriekurven und die Feedback-Tabelle Servo Feedback (Position, Last, Temperatur, Spannung).
- Unten: Ausführungslog und Statusleiste mit Verbindungsstatus, Aktionsfortschritt und Fehlermeldungen.
Nach pip-Installation direkt aufrufbar:
amazing-hand-gui
amazing-hand-gui --port /dev/ttyUSB0Oder direkt ausführen:
python amazing_hand_gui.py
python amazing_hand_gui.py --port /dev/ttyUSB0Das Port-Dropdown listet die tatsächlich vorhandenen seriellen Ports des Rechners auf (bevorzugt pyserial, sonst Windows-Registrierung), sodass auch Adapter mit höherer Nummer erscheinen. Der Port kann auch direkt in das Dropdown eingegeben werden. Wenn der Standardport aus der Konfiguration nicht angeschlossen ist, startet die GUI automatisch mit dem ersten realen Port; für einen festen Port explizit --port übergeben.
Funktionen

Finger-Schieberegler steuern Öffnen/Schließen und Spreizung, mit den Modi Auto (Öffnen/Schließen + Spreizung) und Raw (direkte Steuerung der beiden Servowinkel)
Die beiden Schieberegler im Auto-Modus sind Steuerachsen, das Programm bildet sie automatisch differenziell; Raw-Modus gibt die Winkel direkt an die beiden Servos. Die beiden Servos jedes Fingers sind nebeneinander mit kollinearen Achsen montiert: gleichsinnige Drehung erzeugt Spreizung, gegensinnige Drehung erzeugt Flexion.
Schnellbuttons Open / Close / Center pro Finger
Geschwindigkeitsauswahl pro Finger (1–6), zusätzlich ein globales Dropdown zur Geschwindigkeitssynchronisierung
Tastaturkürzel für präzise Feinabstimmung
Globale Positionsbuttons: Open All, Close All, Center All, Middle position
Gesten- und Sequenzverwaltung auf Basis von
data/hand_config.yamlGespeicherte Gesten können direkt in der Oberfläche gelöscht werden (🗑 Delete-Button)
Echtzeit-Servotelemetriekurven (Position, Last, Temperatur, Spannung)
Tabelle Servo Feedback mit Echtzeit-Rohposition (0–1023) zur Kalibrierungsprüfung
Tastaturbedienung
- 1-4: Finger auswählen (Ring Ringfinger, Middle Mittelfinger, Pointer Zeigefinger, Thumb Daumen)
- Pfeiltasten: ausgewählten Finger bewegen
- Hoch/Runter: schließen / öffnen
- Links/Rechts: seitlich bewegen
- Modifikatortasten:
- keine: je 1° (Feinabstimmung)
- Shift: je 5° (normal)
- Ctrl: je 10° (schnell)
- Schnellaktionen:
- Q: ausgewählten Finger vollständig schließen
- E: ausgewählten Finger vollständig öffnen
- C: seitliche Position zentrieren
Globale Buttons
| Button | Öffnen/Schließen | Spreizung |
|---|---|---|
| ✋ Open All | alle Finger auf Rohwert open | zentrieren |
| ✊ Close All | alle Finger auf Rohwert close | zentrieren |
| ⊙ Center All | unverändert | zentrieren |
| ⊙ Middle position | alle Finger auf Rohwert middle | zentrieren |
Das Dropdown Global Speed (1–6) wendet die gewählte Geschwindigkeit sofort auf alle Fingersteuerungen an und synchronisiert die Schieberegleranzeige aller Finger.
Die drei Rohwert-Buttons (Open All, Close All, Middle position) umgehen das Winkelmodell, daher zeigen die Schieberegler danach den nächstgelegenen darstellbaren Wert, nicht den exakten Wert. Wer danach den Schieberegler berührt, weicht bis zu etwa 0,3° vom Rohziel ab — eine bewusste Abwägung, um die kalibrierte Position exakt zu treffen.
Bekanntes Problem: Center All überspringt keine Finger im Raw-Modus und überschreibt die manuell gesetzten Rohwinkel. Der ⊙ Center-Button eines einzelnen Fingers tut das nicht.
CLI ausführen (amazing_hand_cmd.py)
Eigenständiges Kommandozeilenwerkzeug, das Gesten anwendet und Sequenzen abspielt, ohne die GUI zu starten. Es liest dieselbe data/hand_config.yaml und sendet die gespeicherten Posenwerte zeichengenau — identisch mit dem, was die GUI sendet.
Linux: serielle Berechtigungen
USB-Seriell-Adapter erscheinen üblicherweise als /dev/ttyACM0 (Waveshare / CDC-ACM) oder /dev/ttyUSB0 (FTDI / CH340).
So findest du sie:
ls /dev/ttyACM* /dev/ttyUSB* 2>/dev/null
# oder
dmesg | grep -E 'ttyACM|ttyUSB' | tail -5Bei Permission denied den aktuellen Benutzer zur Gruppe dialout hinzufügen und neu anmelden:
sudo usermod -aG dialout $USERNach pip-Installation
amazing-hand-cmd --list
amazing-hand-cmd --pose open
amazing-hand-cmd --sequence demo --loop
amazing-hand-cmd --pose open --speed 6
# bei Bedarf seriellen Port überschreiben:
amazing-hand-cmd --pose open --port /dev/ttyUSB0Direkt ausführen
python amazing_hand_cmd.py --list
python amazing_hand_cmd.py --pose open
python amazing_hand_cmd.py --pose close --speed 6
python amazing_hand_cmd.py --sequence demo
python amazing_hand_cmd.py --sequence wave --loop
python amazing_hand_cmd.py --port /dev/ttyUSB0 --pose open
python amazing_hand_cmd.py --list --config /path/to/hand_config.yamlParameter
| Parameter | Standardwert | Beschreibung |
|---|---|---|
| --pose NAME | – | Geste mit dem angegebenen Namen anwenden |
| --sequence NAME | – | Sequenz mit dem angegebenen Namen abspielen |
| --list | – | alle Gesten und Sequenzen auflisten |
| --loop | aus | Sequenz bis Ctrl+C in Schleife abspielen |
| --speed N | 3 | Servogeschwindigkeit 1 (langsam) … 6 (schnell) |
| --port PORT | Linux /dev/ttyACM0 Windows COM9 | Portnummer der seriellen Schnittstelle |
| --baudrate N | 1000000 | Baudrate |
| --config PATH | data/hand_config.yaml | andere Konfigurationsdatei angeben |
| --hand | hand in config.yaml | welche Hand verwenden (rechte Hand 1-8, linke Hand 11-18) |
Beim Beenden des Skripts (auch bei Ctrl+C) wird das Drehmoment aller Servos automatisch abgeschaltet.
Die CLI hat keinen zu
data/config.yamlpassenden--config-Parameter; diese Datei wird immer aus dem Projektverzeichnis geladen.
Konfigurationsdatei
data/config.yaml
| Abschnitt | Zweck |
|---|---|
| serial | Standard-Seriellport je Plattform, Baudrate, Liste wählbarer Baudraten |
| servos | Servo-ID für jeden Finger |
| limits | Winkelbereiche von Servos und beiden Schiebereglern |
| speeds | Standard-/Min-/Max-Werte der Geschwindigkeitsskala 1–6 |
| auto_extremes | Servopositionen, wenn der Spreizungs-Schieberegler am Anschlag steht |
| raw_positions | exakte Rohwert-Ziele der globalen Positionsbuttons |
| paths | Speicherorte der Gesten-/Sequenzdateien |
Servo-Finger-Zuordnung
| Finger | Servo-ID | Index im Posen-Array |
|---|---|---|
| Pointer Zeigefinger | 1, 2 | 4, 5 |
| Middle Mittelfinger | 3, 4 | 2, 3 |
| Ring Ringfinger | 5, 6 | 0, 1 |
| Thumb Daumen | 7, 8 | 6, 7 |
Die Reihenfolge des Posen-Arrays ist Ringfinger, Mittelfinger, Zeigefinger, Daumen, nicht nach Servo-ID. Beim manuellen Bearbeiten von hand_config.yaml ist das der häufigste Fehler.
Der Kommentar oben in amazing_hand_cmd.py sagt "index 0→servo1 … 7→servo8", dieser Kommentar ist falsch; die obige Tabelle entspricht dem tatsächlichen Codeverhalten.
Gesten und Sequenzen

Alle Gesten und Sequenzen werden in data/hand_config.yaml gespeichert. Wenn die Datei nicht existiert, legt die GUI sie automatisch an.
Geste speichern
- Mit Schiebereglern oder Tastatur die Hand in die Zielpose bringen
- Im Feld "Name:" einen Namen eingeben
- Im Bereich Pose Management auf "➕ Add New" klicken
Die Geschwindigkeit beeinflusst nur, wie schnell sich die Schieberegler bewegen; eine gespeicherte Geste zeichnet nur die 8 Servopositionen auf.
Geste laden / löschen
- Im Dropdown auswählen und ✓ Apply klicken, damit die Hand in diese Pose fährt
- Rechts neben Apply auf 🗑 Delete klicken, nach Bestätigung dauerhaft löschen
Sequenzverwaltung
- Im Sequence Player auf "🔧 Manage" klicken, um den Sequenzmanager zu öffnen
- Saved Sequences (linke Spalte)
- vorhandene Sequenzen anzeigen, ausführen, bearbeiten oder löschen
- Doppelklick oder "▶ Execute" führt sie einmal aus
- Sequence Builder (rechte Spalte)
- Doppelklick auf eine Geste unter "Available Poses" fügt sie als Schritt hinzu
- Für jeden Schritt können Geschwindigkeit und Verzögerung der 8 Servos einzeln gesetzt werden; Schritte werden als "pose:s1,s2,...,s8|delay" gespeichert
- Mit ↑/↓ die Reihenfolge ändern oder über "⏱ Delay" eine eigenständige Pause einfügen
- Nach dem Namen auf "💾 Save Sequence" klicken zum Speichern; "▶ Execute" testet vor dem Speichern
- Zurück im Hauptfenster im Sequence Player Loop aktivieren, um kontinuierlich abzuspielen

Schrittformat
pose_name:speed1,speed2,...,speed8|delay- speed1..speed8 —— die 8 Servogeschwindigkeiten (1–6) in Posenreihenfolge
- delay —— Wartezeit bis zum nächsten Schritt, z. B. 0.6s. Kann entfallen; ohne Angabe fällt die GUI auf eine feste automatische Wartezeit zurück
- Eine eigenständige Pause wird als SLEEP:1.0s geschrieben (ohne kommagetrennte Geschwindigkeitsliste)
Wahl der Verzögerung. Der Treiber kann zwar erkennen, ob ein Servo stehen bleibt, die Sequenzwiedergabe verwendet jedoch feste Verzögerungen. Grob nach Winkel / (Geschwindigkeit × 57,3 × 0,7) Sekunden schätzen und Reserve einplanen — an einer Hand unter Last braucht eine Bewegung über etwa 130° bei Geschwindigkeit 3 mehr als 1,0 Sekunden.
YAML-Formatbeispiel
poses:
open:
positions: [-35, -35, -35, -35, -35, -35, -35, -35]
close:
positions: [75, 75, 75, 75, 75, 75, 75, 75]
ring_close: # Ringfinger geschlossen, übrige geöffnet
positions: [75, 75, -35, -35, -35, -35, -35, -35]
sequences:
demo:
steps:
- "open:3,3,3,3,3,3,3,3|2.0s"
- "close:6,6,6,6,6,6,6,6|2.0s"
- "ok:3,3,3,3,3,3,3,3|1.0s"
- "victory:3,3,3,3,3,3,3,3|1.0s"
- "greeting:3,3,3,3,3,3,3,3|1.5s"
- "close:6,6,6,6,6,6,6,6|2.0s"
wave:
steps:
- "open:6,6,6,6,6,6,6,6|0.8s"
- "wave_r:5,5,5,5,5,5,5,5|0.6s"
- "wave_l:5,5,5,5,5,5,5,5|0.6s"
- "open:5,5,5,5,5,5,5,5|0.8s"
finger_roll:
steps:
- "open:6,6,6,6,6,6,6,6|0.5s"
- "ring_close:5,5,5,5,5,5,5,5|0.6s"
- "open:5,5,5,5,5,5,5,5|0.5s"
- "middle_close:5,5,5,5,5,5,5,5|0.6s"
- "open:5,5,5,5,5,5,5,5|0.5s"Die Schleifenwiedergabe wird zur Laufzeit gesteuert (Kontrollkästchen der GUI) und nicht mehr in YAML geschrieben.
Tests
Das Projekt enthält 284 Unit-/Integrations-/Systemtests sowie 54 Hardwaretests.
Alle Tests ausführen (ohne Hardware)
pytestGUI- + CLI-Hardwaretests ausführen (Servos müssen angeschlossen sein)
pytest tests/test_system_hardware.py --hardware --port /dev/ttyACM0
pytest tests/test_cmd_hardware.py --hardware --port /dev/ttyACM0
# oder beide zusammen:
pytest tests/test_system_hardware.py tests/test_cmd_hardware.py --hardwaretest_system_hardware.py prüft Verbindung, Gestenanwendung, Telemetrieauslesung, Öffnen/Schließen/Winken einzelner Finger, Geschwindigkeitssteuerung, Sequenzausführung und Bewegungserkennung.
test_cmd_hardware.py prüft die CLI-Ebene end-to-end: Posenpositionen, Geschwindigkeitsparameter, Sequenzschritte, wait_for_motion, --list-Ausgabe und das Abschalten des Drehmoments beim Beenden.
Vollständige Abnahmekriterien siehe Abnahmeanforderungen und Tests.
Hinweis: Die Nicht-Hardwaretests prüfen die Fallback-Standardwerte in hand_logic.py, die noch auf der ursprünglichen Skala −40…110 basieren. Zur Laufzeit überschreibt
data/config.yamlsie, sodass die Tests unabhängig von deiner Kalibrierung bestehen — das bedeutet aber auch, dass die Tests deine aktuellen Kalibrierparameter nicht validieren.
Servo-ID-Konfiguration
Tutorial zur Konfiguration der Servo-IDs mit der offiziellen Feetech-Software und der seriellen Bus-Treiberplatine: https://www.robot-maker.com/forum/tutorials/article/168-brancher-et-controler-le-servomoteur-feetech-sts3032-360/
Feetech-Software-Download: https://github.com/Robot-Maker-SAS/FeetechServo
Telemetrie und Rückmeldung
- Messgrößenauswahl: Position, Last, Geschwindigkeit, Temperatur, Spannung, Bewegungsflag.
- Diagrammmodus: Multi-Servo (Kurven mehrerer Servos) und Scope (Einkanal-Oszilloskop).
- Zoom/Pan: Y Zoom / Pan, Time Zoom / Pan.
- Feedback-Tabelle: Goal, Position, Speed, Load, Voltage, Temperature, Status, Moving.


Sequenzeditor
- Im Sequence Player auf Manage klicken.
- Mit Available Poses Schritte hinzufügen, Geschwindigkeit pro Finger, Schrittverzögerung oder Ruhepause einstellen.
- Mit ↑/↓ die Reihenfolge ändern, Namen eingeben und speichern; alternativ zuerst Execute zum Testen.
- Zurück im Hauptfenster Sequenz auswählen und Play; Loop für kontinuierliche Wiedergabe aktivieren.
Sequenzdefinitionen liegen in data/hand_config.yaml unter dem Schlüssel sequences.
Fehlerbehebung
| Symptom | Empfehlung |
|---|---|
| Kein serieller Port aufgelistet | USB-Adapter neu anstecken, Treiber installieren oder GUI neu starten. |
| Connect-Button ausgegraut | bereits verbunden, zuerst Disconnect klicken. |
| Ruckeln beim Ändern der Fenstergröße | unnötige Fenster schließen; Größenänderungen sind bereits entprellt/gedrosselt. |
| Sequenz treibt nicht alle Finger | Geschwindigkeit jedes Schritts prüfen und sicherstellen, dass jede Pose alle 8 Servowerte enthält. |
| Blockierungsanzeige bleibt | mechanische Blockierung prüfen; große Abweichung zwischen Ziel und Ist ohne Bewegung löst Blockierung aus. |
Verwandte Entwicklerdokumentation
- Konfigurationsformat (YAML)
- SCS0009-Protokollspeichertabelle
- Designänderungen und Kalibrierungshinweise
- Abnahmeanforderungen und Tests
Danksagung
Originalprojekt: Betatester777 Hardware und Referenzfirmware: Pollen Robotics

