23 KiB
📺 ビデオデモ
0. 📖 イントロダクション
このリポジトリは、Apple Vision Pro を使用して Unitree ヒューマノイドロボット を遠隔操作するためのものです。
以下は、このリポジトリがサポートするロボットの種類です:
| ロボット | ステータス | 備考 |
|---|---|---|
| G1 (29自由度) + Dex3-1 | ✅ 完了 | mainブランチ |
| H1 (アーム4自由度) | ⏳ 進行中 | この一時ブランチのIKソルバーを参照 |
| H1_2 (アーム7自由度) + Inspire | ✅ 完了 | 元のh1_2ブランチは古くなり、元のg1ブランチがmainブランチに改名され、mainブランチは現在g1とh1_2の両方をサポート |
| ... | ... | ... |
以下は、必要なデバイスと配線図です:
1. 📦 前提条件
私たちは Ubuntu 20.04 と Ubuntu 22.04 でコードをテストしました。他のオペレーティングシステムでは異なる設定が必要かもしれません。
詳細については、公式ドキュメント および OpenTeleVision を参照してください。
1.1 🦾 逆運動学
unitree@Host:~$ conda create -n tv python=3.8
unitree@Host:~$ conda activate tv
# `pip install` を使用する場合、pinocchio のバージョンが 3.1.0 であることを確認してください
(tv) unitree@Host:~$ conda install pinocchio -c conda-forge
(tv) unitree@Host:~$ pip install meshcat
(tv) unitree@Host:~$ pip install casadi
注意:コマンドの前にあるすべての識別子は、どのデバイスとディレクトリでコマンドを実行するべきかを示すためのものです。
Ubuntu システムの ~/.bashrc ファイルでは、デフォルトの設定は次の通りです: PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
例として、
(tv) unitree@Host:~$ pip install meshcatコマンドを取り上げます。
(tv)はシェルが conda 環境tvにあることを示します。unitree@Host:~はユーザー\uunitreeがデバイス\hHostにログインしており、現在の作業ディレクトリ\wが$HOMEであることを示します。$は現在のシェルが Bash であることを示します(非ルートユーザーの場合)。pip install meshcatはunitreeがHostで実行したいコマンドです。詳細については、Harley Hahn's Guide to Unix and Linux および Conda User Guide を参照してください。
1.2 🕹️ unitree_sdk2_python
# unitree_sdk2_python をインストールします。
(tv) unitree@Host:~$ git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
(tv) unitree@Host:~$ cd unitree_sdk2_python
(tv) unitree@Host:~$ pip install -e .
注意:元の h1_2 ブランチの unitree_dds_wrapper は一時的なバージョンであり、現在は公式の Python 版制御通信ライブラリ unitree_sdk2_python に完全に移行されています。
2. ⚙️ TeleVision と Apple Vision Pro の設定
2.1 📥 基本
(tv) unitree@Host:~$ cd ~
(tv) unitree@Host:~$ git clone https://github.com/unitreerobotics/avp_teleoperate.git
(tv) unitree@Host:~$ cd ~/avp_teleoperate
(tv) unitree@Host:~$ pip install -r requirements.txt
2.2 🔌 ローカルストリーミング
Apple は非 HTTPS 接続での WebXR を許可していません。アプリケーションをローカルでテストするには、自己署名証明書を作成し、クライアントにインストールする必要があります。Ubuntu マシンとルーターが必要です。Apple Vision Pro と Ubuntu ホストマシン を同じルーターに接続します。
- mkcert をインストールします: https://github.com/FiloSottile/mkcert
- ホストマシン のローカル IP アドレスを確認します:
(tv) unitree@Host:~/avp_teleoperate$ ifconfig | grep inet
ホストマシン のローカル IP アドレスが 192.168.123.2 であると仮定します。
p.s.
ifconfigコマンドを使用して ホストマシン の IP アドレスを確認できます。
- 証明書を作成します:
(tv) unitree@Host:~/avp_teleoperate$ mkcert -install && mkcert -cert-file cert.pem -key-file key.pem 192.168.123.2 localhost 127.0.0.1
生成された cert.pem と key.pem ファイルを teleop に配置します。
(tv) unitree@Host:~/avp_teleoperate$ cp cert.pem key.pem ~/avp_teleoperate/teleop/
- サーバーでファイアウォールを開きます:
(tv) unitree@Host:~/avp_teleoperate$ sudo ufw allow 8012
- Apple Vision Pro に ca-certificates をインストールします:
(tv) unitree@Host:~/avp_teleoperate$ mkcert -CAROOT
rootCA.pem を AirDrop 経由で Apple Vision Pro にコピーし、インストールします。
設定 > 一般 > 情報 > 証明書信頼設定。「ルート証明書の完全な信頼を有効にする」の下で、証明書の信頼をオンにします。
設定 > アプリ > Safari > 高度な設定 > 機能フラグ > WebXR 関連機能を有効にします。
注意:新しい Vision OS 2 システムでは、この手順が異なります。証明書を AirDrop 経由で Apple Vision Pro デバイスにコピーした後、設定アプリの左上のアカウント欄の下に証明書関連情報欄が表示されます。それをクリックして、証明書の信頼を有効にします。
2.3 🔎 ユニットテスト
このステップは、環境が正しくインストールされているかを確認するためのものです。
近日公開。
3. 🚀 使用方法
このプログラムを開始する前に、公式ドキュメント を少なくとも一度は読んでください。
3.1 🖼️ 画像サーバー
avp_teleoperate/teleop/image_server ディレクトリにある image_server.py を Unitree ロボット (G1/H1/H1_2 など) の 開発用コンピューティングユニット PC2 にコピーし、PC2 で次のコマンドを実行します:
# 注意1:scp コマンドを使用して image_server.py を PC2 に転送し、ssh を使用して PC2 にリモートログインして実行できます。
# 開発用コンピューティングユニット PC2 の IP アドレスが 192.168.123.164 であると仮定すると、転送プロセスは以下のようになります:
# まず ssh で PC2 にログインし、画像サーバーのフォルダを作成します
(tv) unitree@Host:~$ ssh unitree@192.168.123.164 "mkdir -p ~/image_server"
# ローカルの image_server.py を PC2 の ~/image_server ディレクトリにコピーします
(tv) unitree@Host:~$ scp ~/avp_teleoperate/teleop/image_server/image_server.py unitree@192.168.123.164:~/image_server/
# 注意2:現在、この画像転送プログラムは OpenCV と Realsense SDK の 2 つの画像読み取り方法をサポートしています。image_server.py の ImageServer クラスのコメントを読んで、カメラハードウェアに応じて画像転送サービスを設定してください。
# 現在、Unitree ロボット PC2 端末にいます
unitree@PC2:~/image_server$ python image_server.py
# 端末に次のように出力されます:
# {'fps': 30, 'head_camera_type': 'opencv', 'head_camera_image_shape': [480, 1280], 'head_camera_id_numbers': [0]}
# [Image Server] Head camera 0 resolution: 480.0 x 1280.0
# [Image Server] Image server has started, waiting for client connections...
画像サービスが開始された後、ホスト 端末で image_client.py を使用して通信が成功したかどうかをテストできます:
(tv) unitree@Host:~/avp_teleoperate/teleop/image_server$ python image_client.py
3.2 ✋ Inspire ハンドサーバー(オプション)
注意: 選択したロボット構成に Inspire デクスタラスハンドが使用されていない場合、このセクションは無視してください。
関連する環境を設定し、制御プログラムをコンパイルするには、デクスタラスハンド開発 を参照できます。まず、このリンク を使用してデクスタラスハンド制御インターフェースプログラムをダウンロードし、Unitree ロボットの PC2 にコピーします。
Unitree ロボットの PC2 で次のコマンドを実行します:
unitree@PC2:~$ sudo apt install libboost-all-dev libspdlog-dev
# プロジェクトをビルドします
unitree@PC2:~$ cd h1_inspire_service & mkdir build & cd build
unitree@PC2:~/h1_inspire_service/build$ cmake .. -DCMAKE_BUILD_TYPE=Release
unitree@PC2:~/h1_inspire_service/build$ make
# ターミナル 1. h1 inspire ハンドサービスを実行します
unitree@PC2:~/h1_inspire_service/build$ sudo ./inspire_hand -s /dev/ttyUSB0
# ターミナル 2. サンプルを実行します
unitree@PC2:~/h1_inspire_service/build$ ./h1_hand_example
2 つの手が連続して開閉する場合、成功を示します。成功したら、ターミナル 2 で ./h1_hand_example プログラムを閉じます。
3.3 🚀 スタート
すべての人は、潜在的な危険を防ぐためにロボットから安全な距離を保つ必要があります!
このプログラムを実行する前に、公式ドキュメント を少なくとも一度は読んでください。
常にロボットが デバッグモード (L2+R2) に入っていることを確認し、モーションコントロールプログラムを停止して、潜在的なコマンドの競合問題を回避します。
このプログラムを実行するには、オペレーター A と オペレーター B と呼ばれる 2 人のオペレーターがいるのが最適です。
まず、オペレーター B は次の手順を実行する必要があります:
~/avp_teleoperate/teleop/teleop_hand_and_arm.pyのif __name__ == '__main__':コードの下にあるimg_config画像クライアント設定を変更します。これは、3.1 節で PC2 に設定した画像サーバーパラメータと同じである必要があります。- ロボット構成に応じて異なる起動パラメータを選択します
# 1. G1(29自由度) ロボット + Dex3-1 デクスタラスハンド(実際には、G1_29 は --arm のデフォルトパラメータなので、省略可能)
(tv) unitree@Host:~/avp_teleoperate/teleop$ python teleop_hand_and_arm.py --arm=G1_29 --hand=dex3
# 2. G1(29自由度) ロボットのみ
(tv) unitree@Host:~/avp_teleoperate/teleop$ python teleop_hand_and_arm.py
# 3. H1_2 ロボット(Inspire デクスタラスハンドは一時的に H1_2 ブランチでのみサポートされ、Main ブランチは後で更新されます)
(tv) unitree@Host:~/avp_teleoperate/teleop$ python teleop_hand_and_arm.py --arm=H1_2
# 4. データの可視化と記録を有効にする場合は、--record オプションを追加します
(tv) unitree@Host:~/avp_teleoperate/teleop$ python teleop_hand_and_arm.py --record
- プログラムが正常に起動すると、端末の最後の行に "Please enter the start signal (enter 'r' to start the subsequent program):" というメッセージが表示されます。
次に、オペレーター A は次の手順を実行します:
-
Apple Vision Pro デバイスを装着します。
-
Apple Vision Pro で Safari を開き、次の URL にアクセスします: https://192.168.123.2:8012?ws=wss://192.168.123.2:8012
p.s. この IP アドレスは ホストマシン の IP アドレスと一致する必要があります。
-
Enter VRをクリックし、Allowを選択して VR セッションを開始します。 -
Apple Vision Pro でロボットの一人称視点が表示されます。
次に、オペレーター B は端末で r キーを押して遠隔操作プログラムを開始します。
この時点で、オペレーター A はロボットのアーム(およびデクスタラスハンド)を遠隔操作できます。
--record パラメータを使用した場合、オペレーター B は開いている "record image" ウィンドウで s キーを押してデータの記録を開始し、再度 s キーを押して停止できます。必要に応じてこれを繰り返すことができます。
注意1:記録されたデータはデフォルトで
avp_teleoperate/teleop/utils/dataに保存されます。使用方法については、このリポジトリを参照してください: unitree_IL_lerobot。注意2:データ記録時にはディスク容量に注意してください。
3.4 🔚 終了
プログラムを終了するには、オペレーター B は 'record image' ウィンドウで q キーを押すことができます。
ロボットを損傷しないようにするために、オペレーター A がロボットのアームを自然に下げた位置または適切な位置に配置した後、オペレーター B が q を押して終了するのが最適です。
4. 🗺️ コードベースチュートリアル
avp_teleoperate/
│
├── assets [ロボット URDF 関連ファイルの保存]
│
├── teleop
│ ├── image_server
│ │ ├── image_client.py [ロボット画像サーバーから画像データを受信するために使用]
│ │ ├── image_server.py [カメラから画像をキャプチャし、ネットワーク経由で送信(ロボットのオンボードコンピュータで実行)]
│ │
│ ├── open_television
│ │ ├── television.py [Apple Vision Pro から Vuer を使用して手首と手のデータをキャプチャ]
│ │ ├── tv_wrapper.py [キャプチャされたデータの後処理]
│ │
│ ├── robot_control
│ │ ├── robot_arm_ik.py [アームの逆運動学]
│ │ ├── robot_arm.py [デュアルアームジョイントを制御し、他の部分をロック]
│ │ ├── robot_hand_inspire.py [Inspire ハンドジョイントを制御]
│ │ ├── robot_hand_unitree.py [Unitree ハンドジョイントを制御]
│ │
│ ├── utils
│ │ ├── episode_writer.py [模倣学習のデータを記録するために使用]
│ │ ├── mat_tool.py [いくつかの小さな数学ツール]
│ │ ├── weighted_moving_filter.py [ジョイントデータをフィルタリングするため]
│ │
│ │──teleop_hand_and_arm.py [遠隔操作の起動実行コード]
5. 🛠️ ハードウェア
5.1 📋 リスト
注意: 太字のアイテムは遠隔操作タスクに必要な機器であり、他のアイテムは データセット を記録するためのオプション機器です。
5.2 🔨 インストール図
| アイテム | シミュレーション | 実物 | ||
|---|---|---|---|---|
| ヘッド |
|
|
|
|
| リスト |
|
|
|
|
注意: リストリングマウントは、画像の赤い円で示されているように、ロボットのリストのシームと一致する必要があります。
6. 🙏 謝辞
このコードは、以下のオープンソースコードベースに基づいて構築されています。各ライセンスを確認するには、以下の URL を訪れてください。
- https://github.com/OpenTeleVision/TeleVision
- https://github.com/dexsuite/dex-retargeting
- https://github.com/vuer-ai/vuer
- https://github.com/stack-of-tasks/pinocchio
- https://github.com/casadi/casadi
- https://github.com/meshcat-dev/meshcat-python
- https://github.com/zeromq/pyzmq
- https://github.com/unitreerobotics/unitree_dds_wrapper
- https://github.com/tonyzhaozh/act
- https://github.com/facebookresearch/detr
- https://github.com/Dingry/BunnyVisionPro
- https://github.com/unitreerobotics/unitree_sdk2_python