LeRobot 文件

Reachy 2

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

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。

  1. 安裝 Docker Engine
  2. 執行(針對 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 遠端操作:

我們建議使用兩台電腦:一台用於遠端操作(需要 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_basel_armr_armneckantennas。這決定了該部件是否被記錄在觀察資料(observations)中。若未設定則預設為 true。

預設情況下,所有部件都會被錄製

同樣的部件管理機制也適用於 reachy2_teleoperator

--teleop.with\_<part>

其中 <part> 可以是:mobile_basel_armr_armneckantennas。這決定了該部件是否被記錄在動作(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
在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.