Reachy 2 是由 Pollen Robotics 制造的开源仿人机器人,专为具身 AI 和现实世界应用而设计。 查看 Pollen Robotics 网站,或访问 Reachy 2 文档 获取有关该平台的更多信息!
目前有两种 teleoperation Reachy 2 的方式:
(仅限 Linux) 你可以使用提供的 Docker 镜像 在 simulation 中(Gazebo 或 MuJoCo)运行 Reachy 2。
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 运行缓慢(simulation 频率较低),请在上一条命令后追加
-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
然后,如果你想使用 VR teleoperation:
我们建议使用两台电脑:一台用于 teleoperation(需要 Windows),另一台用于使用 LeRobot 录制。
按照 安装说明 安装 LeRobot。
安装带 Reachy 2 依赖的 LeRobot:
pip install -e ".[reachy2]"在开始 teleoperation 和数据录制之前,请先找到机器人的 IP 地址。 我们强烈建议通过以太网连接所有设备(PC 和机器人)。
使用 LeRobot 的 lerobot-record 命令管理录制会话。此前在本文档中记录的 pollen_data_acquisition_server 工作流已不再可用。
使用 Reachy 2 VR teleoperation 应用程序时,请选择“标准会话”。VR 应用程序控制机器人的运动,而 lerobot-record 负责管理 dataset 并开始和停止 episode。
LeRobot 的录制功能完全支持 Reachy 2。
示例:不带移动底座启动录制: 首先将 reachy2 和 reachy2_teleoperator 添加到录制脚本的导入中。然后你可以使用以下命令:
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.rgb_encoder.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.rgb_encoder.vcodec=auto \
--display_data=true决定 LeRobot 的 robot.send_action() 是否向机器人发送指令。 使用 VR teleoperation 应用程序时必须设置为 false,因为该应用已经发送指令了。
决定 teleoperation 器读取机器人的目标位置还是当前位置。 如果用一台 Reachy 2 控制另一台,必须设置为 true。
根据我们最初的测试,在只有部分关节运动时记录所有关节可能会降低某些 policy 的模型质量。 为避免这种情况,你可以使用以下方式将特定部件从录制和重放中排除:
--robot.with_<part>=false其中 <part> 可以是:mobile_base、l_arm、r_arm", neck , antennas`。
它决定相应部件是否被记录在 observation 中。如果未设置,则为 True。
默认情况下,所有部件都会被录制。
同样的按部件机制也适用于 reachy2_teleoperator。
--teleop.with\_<part>
其中 <part> 可以是:mobile_base、l_arm、r_arm", neck , antennas`。
决定相应部件是否被记录在 action 中。如果未设置,则为 True。
重要提示: 在同一会话中,机器人和 teleoperation 器上的启用部件必须一致。 例如,如果机器人以
--robot.with_mobile_base=false运行,teleoperation 器必须禁用同一部件--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}}" \确保机器人的配置与 dataset 使用相同的部件:
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=0lerobot-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_policylerobot-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已移动的章节:
[ (可选但推荐)安装 pollen_data_acquisition_server ]
[ 选项 1:使用 Pollen 数据采集服务器(推荐用于 VR teleoperation) ]
在 GitHub 上更新