LeRobot 文件
Reachy 2
並獲得增強的文件體驗
開始使用
Reachy 2
Reachy 2 是由 Pollen Robotics 開發的開源人形機器人,專為具身智慧(Embodied AI)的開發及現實世界應用而設計。請參閱 Pollen Robotics 網站,或存取 Reachy 2 文件 以取得關於此平台的更多資訊!
遠端操作 Reachy 2
目前有兩種方式可以遠端操作 Reachy 2:
- Pollen Robotics 的 VR 遠端操作(不包含在 LeRobot 中)。
- 機器人對機器人遠端操作(使用一台 Reachy 2 控制另一台)。
Reachy 2 模擬
(僅限 Linux) 您可以使用提供的 Docker 映像檔 在模擬環境(Gazebo 或 MuJoCo)中執行 Reachy 2。
- 安裝 Docker Engine。
- 執行(針對 MuJoCo):
docker run --rm -it \
--name reachy \
--privileged \
--network host \
--ipc host \
--device-cgroup-rule='c 189:* rwm' \
--group-add audio \
-e ROS_DOMAIN_ID="$ROS_DOMAIN_ID" \
-e DISPLAY="$DISPLAY" \
-e RCUTILS_CONSOLE_OUTPUT_FORMAT="[{severity}]: {message}" \
-e REACHY2_CORE_SERVICE_FAKE="${REACHY2_CORE_SERVICE_FAKE:-true}" \
-v /dev:/dev \
-v "$HOME/.reachy_config":/home/reachy/.reachy_config_override \
-v "$HOME/.reachy.log":/home/reachy/.ros/log \
-v /usr/lib/x86_64-linux-gnu:/opt/host-libs \
--entrypoint /package/launch.sh \
pollenrobotics/reachy2_core:1.7.5.9_deploy \
start_rviz:=true start_sdk_server:=true mujoco:=true如果 MuJoCo 執行速度緩慢(模擬頻率過低),請在之前的指令後附加
-e LD_LIBRARY_PATH="/opt/host-libs:$LD_LIBRARY_PATH" \以提升效能。docker run --rm -it \ --name reachy \ --privileged \ --network host \ --ipc host \ --device-cgroup-rule='c 189:* rwm' \ --group-add audio \ -e ROS_DOMAIN_ID="$ROS_DOMAIN_ID" \ -e DISPLAY="$DISPLAY" \ -e RCUTILS_CONSOLE_OUTPUT_FORMAT="[{severity}]: {message}" \ -e REACHY2_CORE_SERVICE_FAKE="${REACHY2_CORE_SERVICE_FAKE:-true}" \ -e LD_LIBRARY_PATH="/opt/host-libs:$LD_LIBRARY_PATH" \ -v /dev:/dev \ -v "$HOME/.reachy_config":/home/reachy/.reachy_config_override \ -v "$HOME/.reachy.log":/home/reachy/.ros/log \ -v /usr/lib/x86_64-linux-gnu:/opt/host-libs \ --entrypoint /package/launch.sh \ pollenrobotics/reachy2_core:1.7.5.9_deploy \ start_rviz:=true start_sdk_server:=true mujoco:=true
設定
先修條件
- 在您的機器人上,檢查服務映像檔(service images)是否符合最低版本要求:
- reachy2-core >= 1.7.5.2
- webrtc >= 2.0.1.1
接著,如果您想要使用 VR 遠端操作:
- 安裝 Reachy 2 遠端操作應用程式。請使用 >=v1.2.0 版本。
我們建議使用兩台電腦:一台用於遠端操作(需要 Windows),另一台用於透過 LeRobot 進行錄製。
安裝 LeRobot
請按照 安裝說明 來安裝 LeRobot。
安裝帶有 Reachy 2 依賴項的 LeRobot。
pip install -e ".[reachy2]"(選用但推薦)安裝 pollen_data_acquisition_server
您可以自行決定如何管理 Reachy 2 的錄製作業階段,但最簡單的方法是使用此伺服器,這樣您就可以直接從 VR 遠端操作應用程式中控制作業階段。
注意:目前僅有 VR 遠端操作應用程式可作為此伺服器的用戶端,因此此步驟主要針對遠端操作。您可以自由開發自定義用戶端來根據需求管理作業階段。
在您的 LeRobot 環境中,從原始碼安裝此伺服器。
git clone https://github.com/pollen-robotics/pollen_data_acquisition_server.git
cd pollen_data_acquisition_server
pip install -e .點擊此處查閱 pollen_data_acquisition_server 文件。
步驟 1:錄製
取得 Reachy 2 IP 位址
在開始遠端操作和資料錄製之前,請先找到機器人的 IP 位址。我們強烈建議透過乙太網路(Ethernet)連接所有設備(PC 和機器人)。
啟動錄製
在使用 Reachy 2 VR 遠端操作應用程式時,有兩種方式可以管理錄製作業階段:
- 使用資料擷取伺服器(推薦用於 VR 遠端操作):VR 應用程式會協調作業階段(透過伺服器告訴 LeRobot 何時建立資料集、開始/停止劇集),同時控制機器人的動作。
- 使用 LeRobot 的錄製指令碼:由 LeRobot 負責控制作業階段,並決定何時開始/停止劇集。如果您同時使用 VR 遠端操作應用程式,它將僅用於動作控制。
選項 1:使用 Pollen 資料擷取伺服器(推薦用於 VR 遠端操作)
請確保已按照「設定」章節中的說明安裝了 pollen_data_acquisition_server。
啟動資料擷取伺服器,以便能直接從遠端操作應用程式管理您的作業階段。
python -m pollen_data_acquisition_server.server
然後進入遠端操作應用程式並選擇「Data acquisition session」(資料擷取作業階段)。最後,您可以依照畫面上顯示的內容設定您的作業階段。
即使沒有 VR 應用程式,您也可以使用
pollen_data_acquisition_server搭配您自己的用戶端實作。
選項 2:使用 lerobot.record
Reachy 2 完全支援 LeRobot 的錄製功能。如果您選擇此選項但仍想使用 VR 遠端操作應用程式,請在應用程式中選擇「Standard session」(標準作業階段)。
範例:在沒有行動底座(mobile base)的情況下開始錄製:首先將 reachy2 和 reachy2_teleoperator 加入錄製指令碼的 imports 中。然後您就可以使用以下指令:
lerobot-record \
--robot.type=reachy2 \
--robot.ip_address=192.168.0.200 \
--robot.id=r2-0000 \
--robot.use_external_commands=true \
--robot.with_mobile_base=false \
--teleop.type=reachy2_teleoperator \
--teleop.ip_address=192.168.0.200 \
--teleop.with_mobile_base=false \
--robot.with_torso_camera=true \
--dataset.repo_id=pollen_robotics/record_test \
--dataset.single_task="Reachy 2 recording test" \
--dataset.num_episodes=1 \
--dataset.episode_time_s=5 \
--dataset.fps=15 \
--dataset.push_to_hub=true \
--dataset.private=true \
--dataset.streaming_encoding=true \
--dataset.encoder_threads=2 \
# --dataset.vcodec=auto \
--display_data=true特定選項
擴充設定概述(包含所有選項):
lerobot-record \
--robot.type=reachy2 \
--robot.ip_address=192.168.0.200 \
--robot.use_external_commands=true \
--robot.with_mobile_base=true \
--robot.with_l_arm=true \
--robot.with_r_arm=true \
--robot.with_neck=true \
--robot.with_antennas=true \
--robot.with_left_teleop_camera=true \
--robot.with_right_teleop_camera=true \
--robot.with_torso_camera=false \
--robot.camera_width=640 \
--robot.camera_height=480 \
--robot.disable_torque_on_disconnect=false \
--robot.max_relative_target=5.0 \
--teleop.type=reachy2_teleoperator \
--teleop.ip_address=192.168.0.200 \
--teleop.use_present_position=false \
--teleop.with_mobile_base=false \
--teleop.with_l_arm=true \
--teleop.with_r_arm=true \
--teleop.with_neck=true \
--teleop.with_antennas=true \
--dataset.repo_id=pollen_robotics/record_test \
--dataset.single_task="Reachy 2 recording test" \
--dataset.num_episodes=1 \
--dataset.episode_time_s=5 \
--dataset.fps=15 \
--dataset.push_to_hub=true \
--dataset.private=true \
--dataset.streaming_encoding=true \
--dataset.encoder_threads=2 \
# --dataset.vcodec=auto \
--display_data=true--robot.use_external_commands
決定 LeRobot 的 robot.send_action() 是否發送指令給機器人。在使用 VR 遠端操作應用程式時,此選項必須設為 false,因為該應用程式已在發送指令。
--teleop.use_present_position
決定遠端操作員讀取的是目標位置(goal position)還是目前位置(present position)。如果使用一台具備順應性(compliant)的 Reachy 2 來控制另一台,則必須設為 true。
使用相關部件
根據我們的初步測試,當只有部分關節在移動時,錄製所有關節可能會降低某些模型的品質。為避免這種情況,您可以排除特定部件的錄製和重播:
--robot.with_<part>=false其中 <part> 可以是:mobile_base、l_arm、r_arm、neck、antennas。這決定了該部件是否被記錄在觀察資料(observations)中。若未設定則預設為 true。
預設情況下,所有部件都會被錄製。
同樣的部件管理機制也適用於 reachy2_teleoperator。
--teleop.with\_<part>
其中 <part> 可以是:mobile_base、l_arm、r_arm、neck、antennas。這決定了該部件是否被記錄在動作(actions)中。若未設定則預設為 true。
重要:在同一個作業階段中,機器人和遠端操作端所啟用的部件必須一致。例如,如果機器人以
--robot.with_mobile_base=false執行,遠端操作端也必須停用該部件:--teleoperator.with_mobile_base=false。
使用相關攝影機
您可以對攝影機執行相同的操作。使用預設參數啟用或停用每個攝影機:
--robot.with_left_teleop_camera=<true|false> \
--robot.with_right_teleop_camera=<true|false> \
--robot.with_torso_camera=<true|false>預設情況下,不會錄製任何攝影機,所有攝影機參數均設為 false。如果您需要,可以使用 --robot.camera_width 和 --robot.camera_height 參數,為 Reachy 2 的攝影機設定自定義的 width(寬度)與 height(高度)。
--robot.camera_width=1920 \ --robot.camera_height=1080
這將會變更所有 3 個預設機器人攝影機的解析度(由上述布林值參數啟用)。
如果您想加入機器人內建以外的額外攝影機,可以照常執行:
--robot.cameras="{ extra: {type: opencv, index_or_path: 42, width: 640, height: 480, fps: 30}}" \步驟 2:重播
請確保機器人配置的部件與資料集一致。
lerobot-replay \
--robot.type=reachy2 \
--robot.ip_address=192.168.0.200 \
--robot.use_external_commands=false \
--robot.with_mobile_base=false \
--dataset.repo_id=pollen_robotics/record_test \
--dataset.episode=0步驟 3:訓練
lerobot-train \
--dataset.repo_id=pollen_robotics/record_test \
--policy.type=act \
--output_dir=outputs/train/reachy2_test \
--job_name=reachy2 \
--policy.device=mps \
--wandb.enable=true \
--policy.repo_id=pollen_robotics/record_test_policy步驟 4:評估
lerobot-eval \
--robot.type=reachy2 \
--robot.ip_address=192.168.0.200 \
--dataset.repo_id=pollen_robotics/eval_record_test \
--dataset.single_task="Evaluate reachy2 policy" \
--dataset.num_episodes=10 \
--policy.path=outputs/train/reachy2_test/checkpoints/last/pretrained_model