LeRobot documentation
Reachy 2
Reachy 2
Reachy 2 es un robot humanoide de código abierto creado por Pollen Robotics, diseñado específicamente para el desarrollo de IA encarnada y aplicaciones en el mundo real. Consulta el sitio web de Pollen Robotics o accede a la documentación de Reachy 2 para obtener más información sobre la plataforma.
Teleopere Reachy 2
Actualmente, hay dos formas de teleoperar Reachy 2:
- La teleoperación por VR de Pollen Robotics (no incluida en LeRobot).
- Teleoperación de robot a robot (usar un Reachy 2 para controlar otro).
Simulación de Reachy 2
(Solo Linux) Puedes ejecutar Reachy 2 en simulación (Gazebo o MuJoCo) utilizando la imagen de Docker proporcionada.
- Instale Docker Engine.
- Ejecutar (para 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:=trueSi MuJoCo se ejecuta lentamente (frecuencia de simulación baja), agregue
-e LD_LIBRARY_PATH="/opt/host-libs:$LD_LIBRARY_PATH" \al comando anterior para mejorar el rendimiento: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
Configuración
Prerrequisitos
- En tu robot, comprueba que las imágenes de servicio cumplen las versiones mínimas:
- reachy2-core >= 1.7.5.2
- webrtc >= 2.0.1.1
Luego, si deseas usar teleoperación con VR:
- Instale la aplicación de teleoperación Reachy 2. Use la versión >=v1.2.0
Recomendamos usar dos computadoras: una para la teleoperación (se requiere Windows) y otra para grabar con LeRobot.
Instalar LeRobot
Siga las instrucciones de instalación para instalar LeRobot.
Instale LeRobot con las dependencias de Reachy 2:
pip install -e ".[reachy2]"Paso 1: Grabación
Obtener la dirección IP de Reachy 2
Antes de comenzar la teleoperación y la grabación de datos, busque la dirección IP del robot. Recomendamos encarecidamente conectar todos los dispositivos (PC y robot) mediante Ethernet.
Grabación del lanzamiento
Use el comando lerobot-record de LeRobot para gestionar las sesiones de grabación. El flujo de trabajo pollen_data_acquisition_server documentado anteriormente aquí ya no está disponible.
Al usar la aplicación de teleoperación VR de Reachy 2, elija “Standard session”. La aplicación VR controla el movimiento del robot, mientras que lerobot-record gestiona el conjunto de datos y inicia y detiene los episodios.
Grabar con lerobot-record
Reachy 2 es totalmente compatible con las funciones de grabación de LeRobot.
Ejemplo: iniciar una grabación sin la base móvil: Primero, añade reachy2 y reachy2_teleoperator a las importaciones del script de grabación. Luego, puedes usar el siguiente comando:
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=trueOpciones específicas
Resumen de la configuración extendida (incluidas todas las opciones):
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--robot.use_external_commands
Determine si LeRobot robot.send_action() envía comandos al robot. Debe establecerse en false mientras se utiliza la aplicación de teleoperación con VR, ya que la aplicación ya envía comandos.
--teleop.use_present_position
Determine si el teleoperador lee el objetivo o la posición actual del robot. Debe establecerse en true si se utiliza un Reachy 2 conforme para controlar otro.
Utilice las partes relevantes
En nuestras pruebas iniciales, grabar todos los articulaciones cuando solo se mueven algunas puede reducir la calidad del modelo con ciertas políticas. Para evitarlo, puedes excluir partes específicas de la grabación y la reproducción usando:
--robot.with_<part>=falsedonde <part> es uno de: mobile_base, l_arm, r_arm",neck,antennas`.
Determina si la parte correspondiente se registra en las observaciones. True si no se establece.
Por defecto, se registran todas las partes.
El mismo mecanismo por parte también está disponible en reachy2_teleoperator.
--teleop.with\_<part>
donde <part> es uno de: mobile_base, l_arm, r_arm",neck,antennas`.
Determina si la parte correspondiente está registrada en las acciones. True si no se establece.
Importante: En una sesión dada, las partes habilitadas deben coincidir tanto en el robot como en el teleoperador. Por ejemplo, si el robot se ejecuta con
--robot.with_mobile_base=false, el teleoperador debe deshabilitar la misma parte--teleoperator.with_mobile_base=false.
Utilice las cámaras pertinentes
Puedes hacer lo mismo con las cámaras. Activa o desactiva cada cámara con los parámetros predeterminados usando:
--robot.with_left_teleop_camera=<true|false> \
--robot.with_right_teleop_camera=<true|false> \
--robot.with_torso_camera=<true|false>Por defecto, no se registra ninguna cámara y todos los argumentos de cámara se establecen en false.
Si lo deseas, puedes usar parámetros personalizados de width y height para las cámaras de Reachy 2 mediante el argumento --robot.camera_width & --robot.camera_height:
--robot.camera_width=1920 \ --robot.camera_height=1080
Esto cambiará la resolución de las 3 cámaras de robot predeterminadas (habilitadas por los argumentos bool anteriores).
Si lo deseas, puedes añadir cámaras adicionales además de las del robot de la manera habitual con:
--robot.cameras="{ extra: {type: opencv, index_or_path: 42, width: 640, height: 480, fps: 30}}" \Paso 2: Reproducir
Asegúrate de que el robot esté configurado con las mismas piezas que el conjunto de datos:
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=0Paso 3: Entrenar
lerobot-train \
--dataset.repo_id=pollen_robotics/record_test \
--policy.type=act \
--output_dir=outputs/train/reachy2_test \
--job_name=reachy2 \
--policy.device=mps \
--trackio.enable=true \
--policy.repo_id=pollen_robotics/record_test_policyPaso 4: Evaluar
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_modelSecciones que se movieron:
[ (Opcional pero recomendado) Instalar pollen_data_acquisition_server ]
[ Opción 1: Usar el servidor de adquisición de datos de Pollen (recomendado para teleoperación en RV) ]
[ Opción 2: Usando lerobot.record ]
Update on GitHub