このリポジトリは、Apple Vision Pro を使用して Unitree ヒューマノイドロボット を遠隔操作するためのものです。
サポートされるロボットは以下の通りです。
🤖 ロボット | ⚪ ステータス | 📝 備考 |
---|---|---|
G1 (29DoF) + Dex3-1 | ✅ 完了 | |
H1 (アーム 4DoF) | ⏱ 進行中 | このブランチのikを一時的に参照 |
H1_2 (アーム 7DoF) + Inspire | ✅ 完了 | このブランチを参照 |
··· | ··· | ··· |
必要なデバイスと配線図は以下の通りです。
私たちは Ubuntu 20.04 と Ubuntu 22.04 でコードをテストしました。他のオペレーティングシステムでは異なる設定が必要かもしれません。
詳細については、公式ドキュメント および OpenTeleVision を参照してください。
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
p.s. コマンドの前にあるすべての識別子は、どのデバイスとディレクトリでコマンドを実行するべきかを示すためのものです。
Ubuntu システムの ~/.bashrc
ファイルでは、デフォルトの設定は次の通りです: PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
例として、
(tv) unitree@Host:~$ pip install meshcat
コマンドを取り上げます。
(tv)
はシェルが conda 環境tv
にあることを示します。unitree@Host:~
はユーザー\u
unitree
がデバイス\h
Host
にログインしており、現在の作業ディレクトリ\w
が$HOME
であることを示します。$
は現在のシェルが Bash であることを示します(非ルートユーザーの場合)。pip install meshcat
はunitree
がHost
で実行したいコマンドです。詳細については、Harley Hahn's Guide to Unix and Linux および Conda User Guide を参照してください。
# 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 .
(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
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 関連機能を有効にします。
このステップは、環境が正しくインストールされているかを確認するためのものです。
-
Isaac Gym をダウンロードします: https://developer.nvidia.com/isaac-gym/download
現在のディレクトリに解凍し、
IsaacGym_Preview_4_Package/isaacgym/python
ディレクトリに移動して、次のコマンドを実行します:(tv) unitree@Host:~/IsaacGym_Preview_4_Package/isaacgym/python$ pip install -e .
-
上記の手順に従ってローカルでストリーミングを設定した後、Isaac Gym で 2 つのロボットハンドを遠隔操作してみてください:
(tv) unitree@Host:~/avp_teleoperate$ cd teleop (tv) unitree@Host:~/avp_teleoperate/teleop$ python teleop_test_gym.py
-
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 セッションを開始します。 -
3D で手を確認します!
このプログラムを開始する前に、公式ドキュメント を少なくとも一度は読んでください。
avp_teleoperate/teleop/image_server
ディレクトリにある image_server.py
を Unitree ロボット (G1/H1/H1_2 など) の 開発用コンピューティングユニット PC2 にコピーし、PC2 で次のコマンドを実行します:
# p.s.1 scp コマンドを使用して image_server.py を PC2 に転送し、ssh を使用して PC2 にリモートログインして実行できます。
# p.s.2 画像転送プログラムは現在、双眼 RGB カメラ用に設定されています。
# 現在、Unitree ロボット PC2 端末にいます
unitree@PC2:~/image_server$ python image_server.py
# 端末に次のように出力されます:
# Image server has started, waiting for client connections...
# Image Resolution: width is 640, height is 480
画像サービスが開始された後、ホスト 端末で image_client.py
を使用して通信が成功したかどうかをテストできます:
(tv) unitree@Host:~/avp_teleoperate/teleop/image_server$ python image_client.py
注意: 選択したロボット構成に 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
プログラムを閉じます。
すべての人は、潜在的な危険を防ぐためにロボットから安全な距離を保つ必要があります!
このプログラムを実行する前に、公式ドキュメント を少なくとも一度は読んでください。
常にロボットが デバッグモード (L2+R2) に入っていることを確認し、モーションコントロールプログラムを停止して、潜在的なコマンドの競合問題を回避します。
このプログラムを実行するには、オペレーター A と オペレーター B と呼ばれる 2 人のオペレーターがいるのが最適です。
今、オペレーター B は ホストマシン で次のコマンドを実行します:
(tv) unitree@Host:~/avp_teleoperate/teleop$ python teleop_hand_and_arm.py --record
そして、オペレーター 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 セッションを開始します。
ホスト端末が "Please enter the start signal (enter 'r' to start the subsequent program):" と出力したら、オペレーター B は端末で r キーを押して遠隔操作プログラムを開始できます。
この時点で、オペレーター A はロボットのアームとデクスタラスハンドを遠隔操作できます。
次に、オペレーター B は開いている "record image" ウィンドウで s キーを押してデータの記録を開始し、再度 s キーを押して停止できます。必要に応じてこれを繰り返すことができます。
p.s. 記録されたデータはデフォルトで
avp_teleoperate/teleop/utils/data
に保存されます。使用方法については、このリポジトリを参照してください: unitree_IL_lerobot。
プログラムを終了するには、オペレーター B は 'record image' ウィンドウで q キーを押すことができます。
ロボットを損傷しないようにするために、オペレーター A がロボットのアームを自然に下げた位置または適切な位置に配置した後、オペレーター B が q を押して終了するのが最適です。
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 [遠隔操作の起動実行コード]
| |——teleop_test_gym.py [環境が正しくインストールされているかを確認するために使用できます]
注意: 太字のアイテムは遠隔操作タスクに必要な機器であり、他のアイテムは データセット を記録するためのオプション機器です。
アイテム | シミュレーション | 実物 | ||
---|---|---|---|---|
ヘッド | ヘッドマウント | 組み立ての側面図 | 組み立ての正面図 | |
リスト | リストリングとカメラマウント | 左手の組み立て | 右手の組み立て |
注意: リストリングマウントは、画像の赤い円で示されているように、ロボットのリストのシームと一致する必要があります。
このコードは、以下のオープンソースコードベースに基づいて構築されています。各ライセンスを確認するには、以下の 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