Linux(Ubuntu)Ein-Klick-Deployment und -Ausführung
AmazingHand-main.zip
Dieses Tutorial basiert auf dem offiziellen Demo von AmazingHand (Fingerhand von Pollen Robotics), die Ein-Klick-Deployment-Skripte sind bereits vorbereitet. Führen Sie alles einfach in der Reihenfolge der Nummerierung aus. Alle Skripte befinden sich im Ordner Demo/Linux(Ubuntu)一键部署脚本/ und werden im Terminal mit ./Skriptname ausgeführt.
Hardware-Vorbereitung
Die Modelldateien können Sie auf Onshape ansehen oder selbst herunterladen (inkl. URDF).
Ausführungsrechte für die Skripte erteilen (wichtig)
Nach dem Kopieren der Skripte von Windows / aus einem Archiv nach Linux geht das Ausführungsrecht (+x) verloren, bei direkter Ausführung wird Permission denied gemeldet. Vor der ersten Verwendung müssen Sie zuerst ausführen:
cd "AmazingHand-main/Demo/Linux(Ubuntu)一键部署脚本"chmod +x *.shDanach kann jedes Skript mit ./Skriptname ausgeführt werden. Beides lässt sich auch zusammenfassen:
cd "AmazingHand-main/Demo/Linux(Ubuntu)一键部署脚本" && chmod +x *.sh && ./1-安装环境.shTipp: Beim Kopieren von
AmazingHand-mainnach Linux ist die Beibehaltung der Rechte mit tar am sichersten:tar czf AmazingHand-main.tar.gz AmazingHand-main(auf einer beliebigen Seite — Windows/Linux — packen, auf der Linux-Seite entpacken), oder nach dem Entpacken einmal einheitlichchmod +x *.shausführen.
Umgebungsinstallation (Skript 1)
Im Terminal in das Skriptverzeichnis wechseln und ausführen (vergewissern Sie sich, dass der obenstehende Schritt 2 chmod +x bereits ausgeführt wurde):
cd "Demo/Linux(Ubuntu)一键部署脚本"./1-安装环境.shAutomatisch wird Folgendes ausgeführt:
Rust installieren (rustup + stable-Toolchain)
Cargo-Tsinghua-Spiegelquelle konfigurieren (
~/.cargo/config.toml), beschleunigt den Download von Cratesuv installieren (Python-Paketmanager)
dora-cli 0.5.0 installieren (
cargo install, erste Kompilierung ca. 10~20 Minuten, geduldig warten)dora-rs pip-Paket installieren (optional)
Wichtig: Nach Ende des Skripts das Terminal schließen und neu öffnen, damit die Umgebungsvariablen wirksam werden. Wenn die Versionsnummer leer angezeigt wird, den folgenden Pfad zu
~/.bashrchinzufügen:export PATH="$HOME/.cargo/bin:$HOME/.local/bin:$PATH"
Manuelle Installationsalternative (wenn das Skript nicht verfügbar ist)
- Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh- uv:
curl -LsSf https://astral.sh/uv/install.sh | sh- dora-cli:
cargo install dora-cli --version 0.5.0Cargo-Tsinghua-Spiegeleinstellung (~/.cargo/config.toml)
[source.crates-io]
replace-with = "tuna"
[source.tuna]
registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"
[registries.tuna]
index = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"
[http]
check-revoke = falseVerwenden Sie den sparse-Tsinghua-Index (dünnbesetzter Index) (wie oben), nicht einen git-Repository-Spiegel——die git-Methode lädt beim ersten Mal etwa 1GB Index herunter und bleibt leicht bei
Updating 'tuna' indexhängen.
Verkabelung
Servo-Treiberplatine per USB mit dem Computer verbinden, externe 5V4A-Stromversorgung
Portnummer anzeigen:
ls /dev/ttyUSB* /dev/ttyACM*- In der Regel
/dev/ttyACM0
Seriellen Port konfigurieren (Skript 2)
Ausführen von ./2-配置串口.sh:
Aufforderung „Bitte die Servo-Treiberplatine mit dem Computer verbinden" → Enter drücken, um die Erkennung zu starten
Listet die erkannten seriellen Ports automatisch auf (
/dev/ttyACM*//dev/ttyUSB*)Bei einem einzelnen Port mit Enter bestätigen, bei mehreren Ports die Nummer eingeben
Schreibt automatisch den
--serialportin die 3 dataflow-yml-Dateien und den Standardport inAHControl/src/main.rsKonfiguriert automatisch die Rechte für den seriellen Port:
sudo chmod 666 /dev/ttyACM0- Es wird empfohlen, den aktuellen Benutzer zur Gruppe dialout hinzuzufügen (vermeidet die Passworteingabe bei jedem Mal, Ab- und Anmelden erforderlich):
sudo usermod -aG dialout $USERWenn
ls /dev/ttyUSB* /dev/ttyACM*in einer virtuellen Maschine kein Ergebnis liefert, verbinden Sie das USB-Gerät in den Einstellungen der virtuellen Maschine mit dieser.
Code-Deployment (Skript 3)
Ausführen von ./3-部署代码.sh, automatisch wird Folgendes ausgeführt:
dora-Daemon starten (
dora up)Virtuelle Python-3.12-Umgebung erstellen (
uv venv --python 3.12)Virtuelle Umgebung aktivieren
AHControl-Rust-Knoten kompilieren (
cargo build --release, beim ersten Mal ca. 10 Minuten)AHSimulation- und HandTracking-Abhängigkeiten synchronisieren (
uv sync)mediapipe==0.10.14 zwangsweise installieren (bekannte Falle des Tutorials, Absicherung)
Das Deployment muss nur einmal ausgeführt werden. Bei späterer erneuter Ausführung wird gefragt, ob die virtuelle Umgebung neu erstellt werden soll.
Code ausführen (Skript 4)
Ausführen von ./4-运行代码.sh, es erscheint ein interaktives Menü:
============================================
请选择运行模式:
============================================
1 - 模拟仿真(摄像头手势追踪)
2 - 真实硬件
q - 退出
============================================
请输入序号 [1/2/q]:1 wählen: Simulationsumgebung, Kameragesten steuern zwei simulierte Hände
2 wählen: ins Untermenü wechseln und rechte Hand / linke Hand / beide Hände wählen
============================================
真实硬件 - 请选择灵巧手:
============================================
1 - 右手
2 - 左手
3 - 左右双手
b - 返回上级菜单
============================================Nach der Auswahl wird automatisch dora build + dora run ausgeführt. Ein Kamerafenster öffnet sich; machen Sie Gesten vor der Kamera, die Fingerhand folgt in Echtzeit. Ctrl+C zum Stoppen, nach Ende des Datenstroms Enter drücken, um zum Hauptmenü zurückzukehren; Sie können dann einen anderen Modus wählen oder mit q beenden.
Der Linux-Desktop benötigt Kameraberechtigungen (z. B. Ubuntu-Datenschutzeinstellungen → Kamera); vergewissern Sie sich außerdem, dass die Kamera nicht von anderen Anwendungen belegt ist. Wenn sich die Kamera in einer virtuellen Maschine nicht öffnen lässt, siehe 9.6 Kameraberechtigung / Kamera lässt sich in der virtuellen Maschine nicht öffnen.
Projektbereinigung (Skript 0)
Ausführen von ./0-清理项目.sh, nach Eingabe von Y zur Bestätigung wird automatisch bereinigt:
dora-Daemon stoppen
3 virtuelle Umgebungen löschen (
.venv)Rust-Kompilierungsartefakte löschen (
Demo/target)__pycache__,.bak-Sicherungen, Logs undDemo/outlöschen (dora-Logverzeichnis)Standardport wiederherstellen (
--serialport /dev/ttyACM0), lokale Reste des seriellen Ports entfernen
Nach der Bereinigung können Sie den gesamten Ordner
AmazingHand-mainan andere weitergeben, sauber und ohne Reste. Auf einem neuen Rechner einfach in der Reihenfolge 1 → 2 → 3 → 4 ausführen.
Häufige Fragen und Hinweise
9.1 Permission denied (Skript hat keine Ausführungsrechte)
Symptom: Bei Ausführung von
./1-安装环境.shwirdbash: ./1-安装环境.sh: Permission deniedgemeldetUrsache: Nach dem Kopieren der Skripte von Windows / aus einem Archiv nach Linux geht das Ausführungsbit verloren
Lösung: Allen Skripten Ausführungsrechte erteilen
chmod +x *.sh- Dann mit
./Skriptnameausführen (nicht mitbash 脚本名, das umgeht die interaktive Aufforderung aus Schritt 2 dieses Tutorials)
9.2 cargo bleibt bei Updating 'tuna' index hängen
Ursache: Die Spiegelkonfiguration verwendet die git-Repository-Methode (
.../git/crates.io-index.git), beim ersten Mal werden 1GB+ Index heruntergeladenLösung:
~/.cargo/config.tomlauf sparse dünnbesetzten Index ändern (siehe Abschnitt 3.2), oder direkt1-安装环境.sherneut ausführen
9.3 mediapipe fehlt das solutions-Untermodul / Installation beschädigt
uv pip uninstall mediapipeuv pip install mediapipe==0.10.14Muss bei aktivierter virtueller Umgebung ausgeführt werden (im
Demo-Verzeichnis)3-部署代码.shführt diesen Schritt bereits automatisch als Absicherung aus
9.4 dora-Version inkompatibel (message v0.8.0 vs v0.7.0)
Symptom:
version mismatch: message format v0.8.0 is not compatible with expected message format v0.7.0Ursache: Die dora-cli-Version passt nicht zu dora-node-api. Muss einheitlich 0.5.0 sein
Prüfen:
dora --versionsolltedora-cli 0.5.0,dora-message: 0.8.0ausgeben1-安装环境.sherkennt die Version jetzt automatisch: Ist sie nicht 0.5.0, wird bereinigt und zwangsweise neu installiert
Falls im System eine alte dora-Version verbleibt (z. B. 0.4.1), zuerst manuell bereinigen und dann neu installieren:
# 1. Ermitteln, wo die alte dora-Version liegt
which dora
ls -la ~/.cargo/bin/dora ~/.dora/bin/dora ~/.local/bin/dora 2>/dev/null
# 2. Gefundene alte Version löschen (nach tatsächlichem Pfad, evtl. mehrere)
rm -f ~/.cargo/bin/dora ~/.dora/bin/dora ~/.local/bin/dora
# 3. Installation von 0.5.0 erzwingen (nach ~/.cargo/bin)
cargo install dora-cli --version 0.5.0 --force
# 4. Version überprüfen (sollte dora-cli 0.5.0 / dora-message: 0.8.0 ausgeben)
dora --versionWenn
dora --versionweiterhin eine alte Version anzeigt, verbirgt sich an einer anderen Stelle im PATH noch eine alte dora-Version; spüren Sie sie mitwhich doraeinzeln auf und löschen Sie sie, und stellen Sie sicher, dass~/.cargo/binim PATH weiter vorne steht.
9.5 Keine Rechte für den seriellen Port (Permission denied)
sudo chmod 666 /dev/ttyACM*Bei jedem erneuten An- und Abstecken können die Rechte zurückgesetzt werden
Grundlegende Lösung:
sudo usermod -aG dialout $USER, ab- und wieder anmelden
9.6 Kameraberechtigung / Kamera lässt sich in der virtuellen Maschine nicht öffnen
Echter Host:
Ubuntu: Einstellungen → Datenschutz → Kamera → Zugriff für Anwendungen erlauben
Vergewissern Sie sich, dass die Kamera nicht von anderen Anwendungen (Kamera-App, Zoom usw.) belegt ist
Kamera lässt sich in der virtuellen Maschine (VMware) nicht öffnen:
Symptom: open VIDEOIO(V4L2:/dev/video0): can't open camera by index oder select() timeout, während ls /dev/video0 existiert und v4l2-ctl Frames erfassen kann, aber OpenCV cap.read() immer ret = False liefert.
Fehlersuche und Lösung (in dieser Reihenfolge):
Kamera in die virtuelle Maschine weiterleiten: Menü → Virtuelle Maschine → Wechselmedien → Kamera → Verbinden
USB-Controller-Version umschalten (häufige VMware-Lösung, am effektivsten):
Virtuelle Maschine → Einstellungen → USB-Controller →
USB 2.0/USB 3.1umschaltenNach dem Umschalten die virtuelle Maschine neu starten und erneut versuchen
Prüfen, ob das Gerät existiert:
ls -l /dev/video0
sudo usermod -aG video $USER # Zur Gruppe video hinzufügen, abmelden und erneut anmelden- Mit v4l2 prüfen, ob die Kamera wirklich Frames liefert (Frame vorhanden = Treiber in Ordnung, Problem liegt bei der OpenCV-Kompatibilität):
v4l2-ctl --device=/dev/video0 --set-fmt-video=width=640,height=480,pixelformat=MJPG --stream-mmap --stream-count=1 --stream-to=/tmp/frame.jpg
ls -l /tmp/frame.jpg # Einige zehn bis einige hundert KB = Datenfluss aktiv9.7 Portnummer ändert sich jedes Mal
- Nach dem erneuten An- und Abstecken des USB kann sich die Gerätenummer ändern;
2-配置串口.sherneut ausführen
9.8 openCV fehlt
python -m pip install opencv-contrib-python numpy mediapipe -i https://mirrors.aliyun.com/pypi/simple/(im HandTracking-Verzeichnis, nach Aktivierung der virtuellen Umgebung ausführen)
Beschreibung der Code-Struktur
Demo-Verzeichnis
Zuordnung der einzelnen dataflow-Dateien
Prinzip des Datenflusses
Kamera → HandTracking (MediaPipe erkennt Gesten)
↓ Hand-Landmarken-Koordinaten
AHSimulation (MuJoCo-Simulation + inverse Kinematik)
↓ Gelenk-Zielwinkel
AHControl (serieller Port → Servo-Treiberplatine → Fingerhand)Position der Portkonfiguration
Die
args:-Zeile der dreidataflow_tracking_real_*.yml:--serialport /dev/ttyACMxdefault_value = "/dev/ttyACM0"inAHControl/src/main.rs(Standardwert des Seriell-Port-Parameters)AHControl/config/*.toml: Servo-Modell, ID, Offset (muss in der Regel nicht geändert werden)

