Linux(Ubuntu)ワンクリックデプロイ実行
AmazingHand-main.zip
本チュートリアルは AmazingHand(Pollen Robotics の器用なハンド)公式 Demo に基づいており、ワンクリックデプロイスクリプトを用意済みです。 番号順に実行するだけです。すべてのスクリプトは Demo/Linux(Ubuntu)一键部署脚本/ フォルダ下にあり、ターミナルで ./脚本名 を実行します。
ハードウェアの準備
モデルファイルは Onshape で閲覧またはご自身でダウンロードできます(URDF を含む)。
スクリプトの実行権限の取得(重要)
スクリプトを Windows / 圧縮パッケージから Linux にコピーすると、実行権限(+x)が失われます、そのまま実行すると Permission denied が報告されます。初めて使用する前に必ず実行してください:
cd "AmazingHand-main/Demo/Linux(Ubuntu)一键部署脚本"chmod +x *.shその後、各スクリプトは ./脚本名 で実行できます。2 つのステップを 1 つにまとめることもできます:
cd "AmazingHand-main/Demo/Linux(Ubuntu)一键部署脚本" && chmod +x *.sh && ./1-安装环境.shヒント:
AmazingHand-mainを Linux にコピーする際、tar で権限を保持するのが最も確実です:tar czf AmazingHand-main.tar.gz AmazingHand-main(Windows/Linux どちら側でパッケージしてもよく、Linux 側で解凍します)、 または解凍後に一度chmod +x *.shをまとめて実行するだけです。
環境のインストール(スクリプト 1)
ターミナルでスクリプトディレクトリに入り、実行します(上記の手順 2 の chmod +x を済ませておいてください):
cd "Demo/Linux(Ubuntu)一键部署脚本"./1-安装环境.sh自動で以下を実行します:
Rust のインストール(rustup + stable ツールチェーン)
cargo の清華ミラー源の設定(
~/.cargo/config.toml)、crate のダウンロードを高速化uv のインストール(Python パッケージマネージャー)
dora-cli 0.5.0 のインストール(
cargo install、初回コンパイルは約 10~20 分、気長にお待ちください)dora-rs pip パッケージのインストール(任意)
重要:スクリプト終了後にターミナルを閉じて開き直し、環境変数を反映させてください。バージョン番号が空で表示される場合は、以下のパスを
~/.bashrcに追加してください:export PATH="$HOME/.cargo/bin:$HOME/.local/bin:$PATH"
手動インストールの代替(スクリプトが使えない場合)
- 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 清華ミラーの設定(~/.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 = falsesparse 疎インデックス(上記)を使用し、git リポジトリミラーは使用しないでください——git 方式は初回に約 1GB のインデックスをダウンロードする必要があり、
Updating 'tuna' indexでスタックしやすいです。
配線方法
サーボドライバ基板の USB をパソコンに接続、外部 5V4A 電源
ポート番号の確認:
ls /dev/ttyUSB* /dev/ttyACM*- 通常は
/dev/ttyACM0
シリアルポートの設定(スクリプト 2)
./2-配置串口.sh を実行:
「サーボドライバ基板をパソコンに接続してください」と表示 → Enter で検出開始
検出されたシリアルポートを自動で一覧表示(
/dev/ttyACM*//dev/ttyUSB*)ポートが 1 つの場合は Enter で確定、複数の場合は番号を入力
3 つの dataflow yml の
--serialportとAHControl/src/main.rsの既定ポートを自動で書き込みシリアルポートの権限を自動設定:
sudo chmod 666 /dev/ttyACM0- 現在のユーザーを dialout グループに追加することを推奨します(毎回パスワードを入力せずに済み、ログアウトと再ログインが必要):
sudo usermod -aG dialout $USER仮想マシン内で
ls /dev/ttyUSB* /dev/ttyACM*に結果がない場合は、仮想マシンの設定で USB デバイスを仮想マシンに接続してください。
コードのデプロイ(スクリプト 3)
./3-部署代码.sh を実行、自動で以下を実行します:
dora デーモンを起動(
dora up)Python 3.12 仮想環境を作成(
uv venv --python 3.12)仮想環境をアクティブ化
AHControl Rust ノードをコンパイル(
cargo build --release、初回約 10 分)AHSimulation、HandTracking の依存関係を同期(
uv sync)mediapipe==0.10.14 を強制インストール(チュートリアル既知の落とし穴、フォールバック)
デプロイは 1 回だけ実行すれば十分です。その後繰り返し実行すると、仮想環境を再作成するか確認されます。
コードの実行(スクリプト 4)
./4-运行代码.sh を実行、対話メニューが表示されます:
============================================
请选择运行模式:
============================================
1 - 模拟仿真(摄像头手势追踪)
2 - 真实硬件
q - 退出
============================================
请输入序号 [1/2/q]:1 を選択:シミュレーション環境、カメラのジェスチャーで 2 体のシミュレーションハンドを駆動
2 を選択:サブメニューに入り、右手 / 左手 / 両手を選択
============================================
真实硬件 - 请选择灵巧手:
============================================
1 - 右手
2 - 左手
3 - 左右双手
b - 返回上级菜单
============================================選択後、自動で dora build + dora run が実行されます。カメラウィンドウが開き、カメラに向かってジェスチャーを行うと、器用なハンドがリアルタイムに追従します。Ctrl+C で停止、データフロー終了後に Enter を押すとメインメニューに戻り、他のモードを選択するか q で終了できます。
Linux デスクトップではカメラの権限が必要です(例 Ubuntu のプライバシー設定 → カメラ)。また、カメラが他のアプリに占有されていないことを確認してください。 仮想マシンでカメラが開けない場合は 9.6 カメラの権限 / 仮想マシンでカメラが開けない を参照してください。
プロジェクトのクリーンアップ(スクリプト 0)
./0-清理项目.sh を実行、Y を入力して確定すると自動でクリーンアップします:
dora デーモンを停止
3 つの仮想環境(
.venv)を削除Rust のコンパイル生成物(
Demo/target)を削除__pycache__、.bakバックアップ、ログ、Demo/out(dora ログディレクトリ)を削除既定ポートを復元(
--serialport /dev/ttyACM0)、本機のシリアルポートの残留を除去
クリーンアップ後は
AmazingHand-mainフォルダ全体を他人にコピーでき、きれいで残留がありません。新しいマシンでは 1 → 2 → 3 → 4 の順に実行するだけです。
よくある問題と注意事項
9.1 Permission denied(スクリプトに実行権限がない)
症状:
./1-安装环境.shを実行するとbash: ./1-安装环境.sh: Permission deniedが報告される原因:スクリプトを Windows / 圧縮パッケージから Linux にコピーすると実行ビットが失われる
解決:すべてのスクリプトに実行権限を付与
chmod +x *.sh- その後
./脚本名で実行します(bash 脚本名は使用しないでください。本チュートリアル手順 2 の対話プロンプトをスキップします)
9.2 cargo が Updating 'tuna' index で止まる
原因:ミラー設定が git リポジトリ方式(
.../git/crates.io-index.git)になっており、初回に 1GB+ のインデックスをダウンロードする解決:
~/.cargo/config.tomlを sparse 疎インデックスに変更(3.2 節参照)、または1-安装环境.shを再実行
9.3 mediapipe に solutions サブモジュールが欠落 / インストール破損
uv pip uninstall mediapipeuv pip install mediapipe==0.10.14必ず仮想環境をアクティブ化した状態で実行してください(
Demoディレクトリ内)3-部署代码.shが自動でこのステップをフォールバックとして行います
9.4 dora のバージョン非互換(message v0.8.0 vs v0.7.0)
症状:
version mismatch: message format v0.8.0 is not compatible with expected message format v0.7.0原因:dora-cli のバージョンと dora-node-api が一致していません。必ず 0.5.0 に統一する必要があります
確認:
dora --versionはdora-cli 0.5.0、dora-message: 0.8.0を出力するはずです1-安装环境.shは現在バージョンを自動検出します:0.5.0 でなければクリーンアップして強制再インストールします
システムに旧版 dora(例 0.4.1)が残留している場合は、先に手動でクリーンアップしてから再インストールしてください:
# 1. 旧バージョンの dora がどこにあるか特定
which dora
ls -la ~/.cargo/bin/dora ~/.dora/bin/dora ~/.local/bin/dora 2>/dev/null
# 2. 見つかった旧バージョンを削除(実際のパスに従って削除、複数可)
rm -f ~/.cargo/bin/dora ~/.dora/bin/dora ~/.local/bin/dora
# 3. 0.5.0 を強制インストール(~/.cargo/bin にインストール)
cargo install dora-cli --version 0.5.0 --force
# 4. バージョンを確認(dora-cli 0.5.0 / dora-message: 0.8.0 が出力されるはず)
dora --version
dora --versionが依然として旧版を表示する場合は、PATH に他の場所に旧 dora が隠れていることを示します。which doraで 1 つずつ確認して削除し、~/.cargo/binが PATH の前の方にあることを確認してください。
9.5 シリアルポートの権限がない(Permission denied)
sudo chmod 666 /dev/ttyACM*抜き差しするたびに権限がリセットされる場合があります
根本解決:
sudo usermod -aG dialout $USER、ログアウトして再ログイン
9.6 カメラの権限 / 仮想マシンでカメラが開けない
実機ホスト:
Ubuntu:設定 → プライバシー → カメラ → アプリのアクセスを許可
カメラが他のアプリ(カメラアプリ、Zoom など)に占有されていないことを確認
仮想マシン(VMware)でカメラが開けない:
症状:open VIDEOIO(V4L2:/dev/video0): can't open camera by index または select() timeout、 一方 ls /dev/video0 は存在し、v4l2-ctl はフレームを取得できるのに、OpenCV の cap.read() は ret = False のままです。
調査と解決(順番に):
カメラを仮想マシンに転送する:メニュー → 仮想マシン → リムーバブルデバイス → カメラ → 接続
USB コントローラのバージョンを切り替える(VMware でよくある解決法、最も有効):
仮想マシン → 設定 → USB コントローラ →
USB 2.0/USB 3.1を切り替え切り替え後に仮想マシンを再起動して再試行
デバイスの存在を検証:
ls -l /dev/video0
sudo usermod -aG video $USER # video グループに追加し、ログアウトして再ログイン- v4l2 でカメラが本当にフレームを出力できるか検証(出力できれば = ドライバは正常、問題は OpenCV の互換性):
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 # 数十~数百KB あれば = 正常に出力されている9.7 ポート番号が毎回変わる
- USB を抜き差しするとデバイス番号が変わる場合があり、
2-配置串口.shを再実行
9.8 openCV が不足
python -m pip install opencv-contrib-python numpy mediapipe -i https://mirrors.aliyun.com/pypi/simple/(HandTracking ディレクトリで、仮想環境をアクティブ化した後に実行)
コード構成の説明
Demo ディレクトリ
各 dataflow の対応関係
データフローの原理
カメラ → HandTracking(MediaPipe でジェスチャー認識)
↓ 手部キーポイント座標
AHSimulation(MuJoCo シミュレーション + 逆運動学)
↓ 関節目標角度
AHControl(シリアルポート → サーボドライバ基板 → 器用なハンド)ポート設定の場所
3 つの
dataflow_tracking_real_*.ymlのargs:行:--serialport /dev/ttyACMxAHControl/src/main.rsのdefault_value = "/dev/ttyACM0"(シリアルポートパラメータの既定値)AHControl/config/*.toml:サーボ型番、ID、オフセット(通常は変更不要)

