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

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 ​

  1. Python 3.10+ und Abhängigkeiten installieren: Installation.
  2. Bus-Treiberplatine anschließen und seriellen Port bestätigen: Umgebungsanforderungen.
  3. GUI starten: amazing-hand-gui oder python amazing_hand_gui.py.
  4. Nach Kalibrierung linke/rechte Hand, Winkel und Mittelstellung prüfen.
  5. 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 in data/config.yaml ihre eigene Servozuordnung, Montage-Offsets und Rohwert-Ziele. Siehe Auswahl linke/rechte Hand.

Hauptoberfläche des AmazingHand-Steuerwerkzeugs


Projektstruktur ​

text
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):

bash
pip install -e .

Oder Abhängigkeiten direkt installieren:

bash
pip install -r requirements.txt

Entwicklungs- und Testumgebung:

bash
pip install -r requirements-dev.txt

Kalibrierung ​

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:

text
  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:

bash
python amazing_hand_gui.py --hand left
python amazing_hand_cmd.py --pose victory --hand left

Ohne --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 HandLinke Hand
Servo-ID1-811-18
Finger → IDZeigefinger 1,2 / Mittelfinger 3,4 / Ringfinger 5,6 / Daumen 7,8Ringfinger 11,12 / Mittelfinger 13,14 / Zeigefinger 15,16 / Daumen 17,18
Hersteller-MiddlePos[451, 571, …][571, 451, …]
Montage-Offset0°−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:

  1. Auf Middle position drücken und in der Zeile Current (0-1023) prüfen, ob die erwarteten Rohwerte gelesen werden
  2. Open All / Close All drücken — der Stellweg sollte bis an den mechanischen Anschlag gehen, ohne zu blockieren
  3. Eine Öffnungsgeste testen (victory als V-Zeichen, greeting mit drei geschlossenen Fingern)

Wenn ein Punkt nicht stimmt, welchen Parameter anpassen:

SymptomWo ändern
Middle-position-Anzeige falschhands.<Name>.raw_positions.middle
Öffnungsrichtung verkehrthands.<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:

text
raw = 1024 × angle / 300° + 511        (0,29297°/Schritt, Rohwertbereich 0–1023)
WinkelBedeutung
−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 ​

text
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: 35

side_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:

text
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 ​

SteuerelementBereich
Öffnen/Schließen-Schieberegler (vertikal)−75 … +75
Spreizungs-Schieberegler (horizontal)−35 … +35
Geschwindigkeit1 (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) ​

AHC-Hauptoberfläche: Fingersteuerung, globale Buttons, Telemetrie und Log

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:

text
amazing-hand-gui
amazing-hand-gui --port /dev/ttyUSB0

Oder direkt ausführen:

bash
python amazing_hand_gui.py
python amazing_hand_gui.py --port /dev/ttyUSB0

Das 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 ​

Fingersteuerungspanel: Auto/Raw-Modus, Geschwindigkeit und Open/Close/Center-Schnellbuttons

  • 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.yaml

  • Gespeicherte 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ßenSpreizung
✋ Open Allalle Finger auf Rohwert openzentrieren
✊ Close Allalle Finger auf Rohwert closezentrieren
⊙ Center Allunverändertzentrieren
⊙ Middle positionalle Finger auf Rohwert middlezentrieren

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:

bash
ls /dev/ttyACM* /dev/ttyUSB* 2>/dev/null
# oder
dmesg | grep -E 'ttyACM|ttyUSB' | tail -5

Bei Permission denied den aktuellen Benutzer zur Gruppe dialout hinzufügen und neu anmelden:

bash
sudo usermod -aG dialout $USER

Nach pip-Installation ​

text
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/ttyUSB0

Direkt ausführen ​

bash
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.yaml

Parameter ​

ParameterStandardwertBeschreibung
--pose NAME–Geste mit dem angegebenen Namen anwenden
--sequence NAME–Sequenz mit dem angegebenen Namen abspielen
--list–alle Gesten und Sequenzen auflisten
--loopausSequenz bis Ctrl+C in Schleife abspielen
--speed N3Servogeschwindigkeit 1 (langsam) … 6 (schnell)
--port PORTLinux /dev/ttyACM0
Windows COM9
Portnummer der seriellen Schnittstelle
--baudrate N1000000Baudrate
--config PATHdata/hand_config.yamlandere Konfigurationsdatei angeben
--handhand in config.yamlwelche 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.yaml passenden --config-Parameter; diese Datei wird immer aus dem Projektverzeichnis geladen.


Konfigurationsdatei ​

data/config.yaml ​

AbschnittZweck
serialStandard-Seriellport je Plattform, Baudrate, Liste wählbarer Baudraten
servosServo-ID für jeden Finger
limitsWinkelbereiche von Servos und beiden Schiebereglern
speedsStandard-/Min-/Max-Werte der Geschwindigkeitsskala 1–6
auto_extremesServopositionen, wenn der Spreizungs-Schieberegler am Anschlag steht
raw_positionsexakte Rohwert-Ziele der globalen Positionsbuttons
pathsSpeicherorte der Gesten-/Sequenzdateien

Servo-Finger-Zuordnung ​

FingerServo-IDIndex im Posen-Array
Pointer Zeigefinger1, 24, 5
Middle Mittelfinger3, 42, 3
Ring Ringfinger5, 60, 1
Thumb Daumen7, 86, 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 ​

Posenverwaltungspanel

Alle Gesten und Sequenzen werden in data/hand_config.yaml gespeichert. Wenn die Datei nicht existiert, legt die GUI sie automatisch an.

Geste speichern ​

  1. Mit Schiebereglern oder Tastatur die Hand in die Zielpose bringen
  2. Im Feld "Name:" einen Namen eingeben
  3. 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 ​

  1. Im Sequence Player auf "🔧 Manage" klicken, um den Sequenzmanager zu öffnen
  2. Saved Sequences (linke Spalte)
  • vorhandene Sequenzen anzeigen, ausführen, bearbeiten oder löschen
  • Doppelklick oder "▶ Execute" führt sie einmal aus
  1. 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
  1. Zurück im Hauptfenster im Sequence Player Loop aktivieren, um kontinuierlich abzuspielen

Sequenzeditor

Schrittformat ​

text
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 ​

text
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) ​

text
pytest

GUI- + CLI-Hardwaretests ausführen (Servos müssen angeschlossen sein) ​

text
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 --hardware

test_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.yaml sie, 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.

Telemetriekurven

Servo-Feedback-Tabelle

Sequenzeditor ​

  1. Im Sequence Player auf Manage klicken.
  2. Mit Available Poses Schritte hinzufügen, Geschwindigkeit pro Finger, Schrittverzögerung oder Ruhepause einstellen.
  3. Mit ↑/↓ die Reihenfolge ändern, Namen eingeben und speichern; alternativ zuerst Execute zum Testen.
  4. 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 ​

SymptomEmpfehlung
Kein serieller Port aufgelistetUSB-Adapter neu anstecken, Treiber installieren oder GUI neu starten.
Connect-Button ausgegrautbereits verbunden, zuerst Disconnect klicken.
Ruckeln beim Ändern der Fenstergrößeunnötige Fenster schließen; Größenänderungen sind bereits entprellt/gedrosselt.
Sequenz treibt nicht alle FingerGeschwindigkeit jedes Schritts prüfen und sicherstellen, dass jede Pose alle 8 Servowerte enthält.
Blockierungsanzeige bleibtmechanische Blockierung prüfen; große Abweichung zwischen Ziel und Ist ohne Bewegung löst Blockierung aus.

Verwandte Entwicklerdokumentation ​

Danksagung ​

Originalprojekt: Betatester777 Hardware und Referenzfirmware: Pollen Robotics