From fc598ba2622bedc86565bb15179366d103d1b5d5 Mon Sep 17 00:00:00 2001 From: GitHub Action Bot Date: Wed, 11 Mar 2026 10:03:35 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=8D=20=E8=87=AA=E5=8A=A8=E7=BF=BB?= =?UTF-8?q?=E8=AF=91=E6=96=87=E6=A1=A3=20for=20#4234?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Languages: ja es Base: docusaurus-version Source PR: #4234 [TRANSLATION_COMMIT]: true --- .../Lerobot/es_Lerobot_SO100Arm_New.md | 623 +++++++++++---- .../Lerobot/ja_Lerobot_SO100Arm_New.md | 743 +++++++++++++----- 2 files changed, 998 insertions(+), 368 deletions(-) diff --git a/sites/es/docs/Robotics/Robot_Kits/Lerobot/es_Lerobot_SO100Arm_New.md b/sites/es/docs/Robotics/Robot_Kits/Lerobot/es_Lerobot_SO100Arm_New.md index 847447be9650f..35df5b95d4a1a 100644 --- a/sites/es/docs/Robotics/Robot_Kits/Lerobot/es_Lerobot_SO100Arm_New.md +++ b/sites/es/docs/Robotics/Robot_Kits/Lerobot/es_Lerobot_SO100Arm_New.md @@ -1,26 +1,26 @@ --- -description: Este wiki proporciona el tutorial de ensamblaje y depuración para el SO ARM100 y permite la recopilación de datos y el entrenamiento dentro de la última versión del framework Lerobot. +description: Este wiki proporciona el tutorial de ensamblaje y depuración para la SO ARM100 y permite la recopilación de datos y el entrenamiento dentro de la última versión del framework Lerobot. title: SoArm en Lerobot keywords: - Lerobot - Huggingface - Arm - - Robotics + - Robótica image: https://files.seeedstudio.com/wiki/robotics/projects/lerobot/Arm_kit.webp slug: /lerobot_so100m_new sku: 114993666,114993667,114993668,101090144 last_update: - date: 3/2/2026 + date: 3/11/2026 author: ZhangJiaQuan translation: skip: - zh-CN -createdAt: '2025-09-03' -updatedAt: '2026-03-05' +createdAt: '2025-06-05' +updatedAt: '2026-03-03' url: https://wiki.seeedstudio.com/es/lerobot_so100m_new/ --- -# Introducción al brazo robótico SO-ARM100 y SO-ARM101 con LeRobot +# Primeros pasos con los brazos robóticos SO-ARM100 y SO-ARM101 con LeRobot :::tip El mantenimiento de este tutorial se ha actualizado a la última versión de [lerobot](https://huggingface.co/docs/lerobot/index); si deseas consultar el tutorial de la versión anterior, haz clic [aquí](https://wiki.seeedstudio.com/es/lerobot_so100m/). @@ -28,7 +28,7 @@ El mantenimiento de este tutorial se ha actualizado a la última versión de [le ## Introducción -El [SO-10xARM](https://github.com/TheRobotStudio/SO-ARM100) es un proyecto de brazo robótico totalmente de código abierto lanzado por [TheRobotStudio](https://www.therobotstudio.com/). Incluye el brazo seguidor y el brazo robótico líder, y también proporciona archivos detallados de impresión 3D y guías de operación. [LeRobot](https://github.com/huggingface/lerobot/tree/main) se compromete a proporcionar modelos, conjuntos de datos y herramientas para robótica en el mundo real en PyTorch. Su objetivo es reducir la barrera de entrada a la robótica, permitiendo que todos contribuyan y se beneficien compartiendo conjuntos de datos y modelos preentrenados. LeRobot integra metodologías de vanguardia validadas para aplicaciones en el mundo real, centrándose en el aprendizaje por imitación. Ha proporcionado un conjunto de modelos preentrenados, conjuntos de datos con demostraciones recopiladas por humanos y entornos de simulación, lo que permite a los usuarios comenzar sin necesidad de ensamblar robots. En las próximas semanas, la intención es aumentar el soporte para robótica en el mundo real en los robots más rentables y competentes disponibles actualmente. +El [SO-10xARM](https://github.com/TheRobotStudio/SO-ARM100) es un proyecto de brazo robótico totalmente de código abierto lanzado por [TheRobotStudio](https://www.therobotstudio.com/). Incluye el brazo seguidor y el brazo robótico líder, y también proporciona archivos detallados de impresión 3D y guías de operación. [LeRobot](https://github.com/huggingface/lerobot/tree/main) se compromete a proporcionar modelos, conjuntos de datos y herramientas para robótica en el mundo real en PyTorch. Su objetivo es reducir la barrera de entrada a la robótica, permitiendo que todos contribuyan y se beneficien del intercambio de conjuntos de datos y modelos preentrenados. LeRobot integra metodologías de vanguardia validadas para aplicaciones en el mundo real, centrándose en el aprendizaje por imitación. Ha proporcionado un conjunto de modelos preentrenados, conjuntos de datos con demostraciones recopiladas por humanos y entornos de simulación, lo que permite a los usuarios comenzar sin necesidad de ensamblar robots. En las próximas semanas, la intención es aumentar el soporte para robótica en el mundo real en los robots más rentables y competentes disponibles actualmente.
@@ -36,8 +36,8 @@ El [SO-10xARM](https://github.com/TheRobotStudio/SO-ARM100) es un proyecto de br ## Introducción a los proyectos -El kit de robot inteligente SO-ARM10x y reComputer Jetson AI combina a la perfección el control de brazo robótico de alta precisión con una potente plataforma de computación de IA, proporcionando una solución integral de desarrollo de robots. Este kit se basa en la plataforma Jetson Orin o AGX Orin, combinada con el brazo robótico SO-ARM10x y el framework de IA LeRobot, ofreciendo a los usuarios un sistema de robot inteligente aplicable a múltiples escenarios como educación, investigación y automatización industrial. -Este wiki proporciona el tutorial de ensamblaje y depuración para el SO ARM10x y permite la recopilación de datos y el entrenamiento dentro del framework Lerobot. +El kit de robot inteligente SO-ARM10x y reComputer Jetson AI combina a la perfección el control de brazo robótico de alta precisión con una potente plataforma de computación de IA, proporcionando una solución integral de desarrollo robótico. Este kit se basa en la plataforma Jetson Orin o AGX Orin, combinada con el brazo robótico SO-ARM10x y el framework de IA LeRobot, ofreciendo a los usuarios un sistema robótico inteligente aplicable a múltiples escenarios como educación, investigación y automatización industrial. +Este wiki proporciona el tutorial de ensamblaje y depuración para la SO ARM10x y permite la recopilación de datos y el entrenamiento dentro del framework Lerobot.
-## Especificación +## Especificaciones @@ -162,40 +162,40 @@ Si compras la versión Arm Kit, ambas fuentes de alimentación son de 5V. Si com **Para Jetson Orin:** -- Jetson JetPack 6.0 y 6.1, no soporta 6.1 +- Jetson JetPack 6.0 y 6.1, no compatible con 6.1 - Python 3.10 - Torch 2.3+ ## Tabla de contenidos - [A. Guía de impresión 3D](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#guía-de-impresión-3d) + [A. Guía de impresión 3D](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#Guía-de-impresión-3D) - [B. Install LeRobot](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#install-lerobot) + [B. Instalar LeRobot](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#Instalar-LeRobot) - [C. Configure the motors](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#configure-the-motors) + [C. Configurar los motores](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#Configurar-los-motores) - [D. Assembly](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#assembly) + [D. Ensamblaje](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#Ensamblaje) - [E. Calibrate](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#calibrate) + [E. Calibrar](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#Calibrar) - [F. Teleoperate](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#teleoperate) + [F. Teleoperar](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#Teleoperar) - [G. Add cameras](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#add-cameras) + [G. Añadir cámaras](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#Añadir-cámaras) - [H. Record the dataset](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#record-the-dataset) + [H. Registrar el conjunto de datos](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#Registrar-el-conjunto-de-datos) - [I. Visualize the dataset](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#visualize-the-dataset) + [I. Visualizar el conjunto de datos](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#Visualizar-el-conjunto-de-datos) - [J. Replay an episode](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#replay-an-episode) + [J. Reproducir un episodio](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#Reproducir-un-episodio) - [K. Train a policy](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#train-a-policy) + [K. Entrenar una política](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#Entrenar-una-política) - [L. Evaluate your policy](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#evaluate-your-policy) + [L. Evaluar tu política](https://wiki.seeedstudio.com/es/lerobot_so100m_new/#Evaluar-tu-política) ## Guía de impresión 3D :::caution -Tras la actualización oficial de SO101, SO100 ya no será compatible y los archivos fuente se eliminarán según lo indicado oficialmente, pero aún se pueden encontrar los archivos fuente en nuestro [Makerworld](https://makerworld.com/zh/models/908660). Sin embargo, para los usuarios que hayan comprado previamente SO100, los tutoriales y métodos de instalación siguen siendo compatibles. La impresión de SO101 es totalmente compatible con la instalación del kit de motor de SO100. +Tras la actualización oficial de SO101, SO100 dejará de recibir soporte y los archivos fuente se eliminarán según lo indicado oficialmente, pero los archivos fuente aún pueden encontrarse en nuestro [Makerworld](https://makerworld.com/zh/models/908660). Sin embargo, para los usuarios que hayan comprado previamente SO100, los tutoriales y métodos de instalación siguen siendo compatibles. La impresión de SO101 es totalmente compatible con la instalación del kit de motor de SO100. ::: ### Paso 1: Elegir una impresora @@ -212,13 +212,13 @@ Los archivos STL proporcionados están listos para imprimirse en muchas impresor - Limpia la cama de impresión, asegurándote de que esté libre de polvo o grasa. Si limpias la cama con agua u otro líquido, sécala. - Si tu impresora lo recomienda, utiliza un pegamento en barra estándar y aplica una capa fina y uniforme de pegamento en toda el área de impresión de la cama. Evita los grumos o una aplicación desigual. - Carga el filamento de la impresora siguiendo las instrucciones específicas de la impresora. -- Asegúrate de que la configuración de la impresora coincida con la sugerida anteriormente (la mayoría de las impresoras tienen múltiples configuraciones, así que elige las que más se acerquen). -- Configura soportes en todas partes, pero ignora las pendientes mayores de 45 grados con respecto a la horizontal. +- Asegúrate de que la configuración de la impresora coincida con la sugerida arriba (la mayoría de las impresoras tienen múltiples configuraciones, así que elige las que más se acerquen). +- Configura soportes en todas partes, pero ignora las pendientes mayores de 45 grados respecto a la horizontal. - No debe haber soportes en los orificios de los tornillos con ejes horizontales. ### Paso 3: Imprimir las piezas -Todas las piezas para el líder o el seguidor están preparadas para una fácil impresión 3D en un solo archivo, correctamente orientadas con el eje z hacia arriba para minimizar los soportes. +Todas las piezas para el líder o el seguidor están preparadas para una fácil impresión 3D en un único archivo, correctamente orientadas con z hacia arriba para minimizar los soportes. - Para camas de impresión de 220mmx220mm (como la Ender), imprime estos archivos: - [Follower](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Follower/Ender_Follower_SO101.stl) @@ -230,7 +230,7 @@ Todas las piezas para el líder o el seguidor están preparadas para una fácil ## Instalar LeRobot -Entornos como pytorch y torchvision deben instalarse en función de tu CUDA. +Entornos como pytorch y torchvision deben instalarse en función de tu versión de CUDA. 1. Instalar Miniconda: Para Jetson: @@ -254,7 +254,7 @@ source ~/miniconda3/bin/activate conda init --all ``` -2. Crear y activar un entorno conda nuevo para lerobot +2. Crea y activa un entorno conda nuevo para lerobot ```bash conda create -y -n lerobot python=3.10 && conda activate lerobot @@ -266,7 +266,7 @@ conda create -y -n lerobot python=3.10 && conda activate lerobot git clone https://github.com/Seeed-Projects/lerobot.git ~/lerobot ``` -4. Al usar miniconda, instala ffmpeg en tu entorno: +4. Cuando uses miniconda, instala ffmpeg en tu entorno: ```bash conda install ffmpeg -c conda-forge @@ -298,7 +298,7 @@ Si encuentras un error como este, también puedes usar este comando. cd ~/lerobot && pip install -e ".[feetech]" ``` -Para dispositivos Jetson Jetpack 6.0+ (asegúrate de instalar [Pytorch-gpu and Torchvision](https://github.com/Seeed-Projects/reComputer-Jetson-for-Beginners/tree/main/3-Basic-Tools-and-Getting-Started/3.5-Pytorch) desde el paso 5 antes de ejecutar este paso): +Para dispositivos Jetson Jetpack 6.0+ (asegúrate de instalar [Pytorch-gpu y Torchvision](https://github.com/Seeed-Projects/reComputer-Jetson-for-Beginners/tree/main/3-Basic-Tools-and-Getting-Started/3.5-Pytorch) desde el paso 5 antes de ejecutar este paso): ```bash conda install -y -c conda-forge "opencv>=4.10.0.84" # Install OpenCV and other dependencies through conda, this step is only for Jetson Jetpack 6.0+ @@ -311,7 +311,7 @@ pip3 install numpy==1.26.0 # This should match torchvision 6. Comprobar Pytorch y Torchvision -Dado que instalar el entorno lerobot mediante pip desinstalará el Pytorch y Torchvision originales e instalará las versiones de CPU de Pytorch y Torchvision, necesitas realizar una comprobación en Python. +Dado que instalar el entorno lerobot mediante pip desinstalará las versiones originales de Pytorch y Torchvision e instalará las versiones de CPU de Pytorch y Torchvision, necesitas realizar una comprobación en Python. ```python import torch @@ -331,9 +331,9 @@ import TabItem from '@theme/TabItem'; -El proceso de calibración e inicialización del servo para SO-ARM101 es el mismo que el de SO-ARM100 tanto en método como en código. Sin embargo, ten en cuenta que las relaciones de engranajes de las tres primeras articulaciones del brazo líder SO-ARM101 difieren de las de SO-ARM100, por lo que es importante distinguirlas y calibrarlas cuidadosamente. +El proceso de calibración e inicialización del servo para el SO-ARM101 es el mismo que el del SO-ARM100 tanto en método como en código. Sin embargo, ten en cuenta que las relaciones de engranajes de las tres primeras articulaciones del brazo líder SO-ARM101 difieren de las del SO-ARM100, por lo que es importante distinguirlas y calibrarlas cuidadosamente. -Para configurar los motores, asigna un adaptador de bus servo y 6 motores para tu brazo líder, y de manera similar el otro adaptador de bus servo y 6 motores para el brazo seguidor. Es conveniente etiquetarlos y escribir en cada motor si es para el seguidor F o para el líder L y su ID de 1 a 6. Usamos **F1–F6** para representar las articulaciones 1 a 6 del **Follower Arm**, y **L1–L6** para representar las articulaciones 1 a 6 del **Leader Arm**. El modelo de servo correspondiente, las asignaciones de articulaciones y los detalles de la relación de engranajes son los siguientes: +Para configurar los motores, asigna un adaptador de bus servo y 6 motores para tu brazo líder, y de forma similar el otro adaptador de bus servo y 6 motores para el brazo seguidor. Es conveniente etiquetarlos y escribir en cada motor si es para el seguidor F o para el líder L y su ID de 1 a 6. Usamos **F1–F6** para representar las articulaciones 1 a 6 del **Brazo Seguidor**, y **L1–L6** para representar las articulaciones 1 a 6 del **Brazo Líder**. El modelo de servo correspondiente, las asignaciones de articulaciones y los detalles de la relación de engranajes son los siguientes: | Modelo de servo | Relación de engranajes | Articulaciones correspondientes | |----------------------------------------|------------|------------------------------| @@ -344,7 +344,7 @@ Para configurar los motores, asigna un adaptador de bus servo y 6 motores para t | ST-3215-C001(7.4V) / C018(12V) / C047(12V) | 1:345 | F1–F6 | :::danger -Ahora debes conectar la fuente de alimentación de 5V o 12V al bus del motor. 5V para los motores STS3215 de 7.4V y 12V para los motores STS3215 de 12V. Ten en cuenta que el brazo líder siempre usa los motores de 7.4V, así que asegúrate de conectar la fuente de alimentación correcta si tienes motores de 12V y 7.4V, ¡de lo contrario podrías quemar tus motores! Ahora, conecta el bus del motor a tu ordenador mediante USB. Ten en cuenta que el USB no proporciona alimentación, y tanto la fuente de alimentación como el USB deben estar conectados. +Ahora debes conectar la fuente de alimentación de 5V o 12V al bus de motores. 5V para los motores STS3215 de 7.4V y 12V para los motores STS3215 de 12V. Ten en cuenta que el brazo líder siempre usa los motores de 7.4V, así que asegúrate de conectar la fuente de alimentación correcta si tienes motores de 12V y 7.4V, ¡de lo contrario podrías quemar tus motores! Ahora, conecta el bus de motores a tu ordenador mediante USB. Ten en cuenta que el USB no proporciona alimentación, y tanto la fuente de alimentación como el USB deben estar conectados. :::
@@ -389,13 +389,13 @@ sudo chmod 666 /dev/ttyACM0 sudo chmod 666 /dev/ttyACM1 ``` -**Configurar tus motores** +**Configura tus motores** :::danger -Utiliza una fuente de alimentación de 5V para calibrar los motores del Leader (ST-3215-C046, C044, 001). +Utiliza una fuente de alimentación de 5V para calibrar los motores del Líder (ST-3215-C046, C044, 001). ::: -| **Calibración de la articulación 6 del Leader Arm** | **Calibración de la articulación 5 del Leader Arm** | **Calibración de la articulación 4 del Leader Arm** | **Calibración de la articulación 3 del Leader Arm** | **Calibración de la articulación 2 del Leader Arm** | **Calibración de la articulación 1 del Leader Arm** | +| **Calibración de la articulación 6 del Brazo Líder** | **Calibración de la articulación 5 del Brazo Líder** | **Calibración de la articulación 4 del Brazo Líder** | **Calibración de la articulación 3 del Brazo Líder** | **Calibración de la articulación 2 del Brazo Líder** | **Calibración de la articulación 1 del Brazo Líder** | |:---------:|:---------:|:---------:|:---------:|:---------:|:---------:| | ![fig1](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_L6.jpg) | ![fig2](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_L5.jpg) | ![fig3](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_L4.jpg) |![fig4](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_L3.jpg) |![fig5](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_L2.jpg) |![fig6](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_L1.jpg) | @@ -403,12 +403,12 @@ Utiliza una fuente de alimentación de 5V para calibrar los motores del Leader ( Si compras la versión Arm Kit (ST-3215-C001), utiliza una fuente de alimentación de 5V. Si compras la versión Arm Kit Pro, utiliza una fuente de alimentación de 12V para calibrar el servo (ST-3215-C047/ST-3215-C018). ::: -| **Calibración de la articulación 6 del Follower Arm** | **Calibración de la articulación 5 del Follower Arm** | **Calibración de la articulación 4 del Follower Arm** | **Calibración de la articulación 3 del Follower Arm** | **Calibración de la articulación 2 del Follower Arm** | **Calibración de la articulación 1 del Follower Arm** | +| **Calibración de la articulación 6 del Brazo Seguidor** | **Calibración de la articulación 5 del Brazo Seguidor** | **Calibración de la articulación 4 del Brazo Seguidor** | **Calibración de la articulación 3 del Brazo Seguidor** | **Calibración de la articulación 2 del Brazo Seguidor** | **Calibración de la articulación 1 del Brazo Seguidor** | |:---------:|:---------:|:---------:|:---------:|:---------:|:---------:| | ![fig1](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_F6.jpg) | ![fig2](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_F5.jpg) | ![fig3](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_F4.jpg) |![fig4](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_F3.jpg) |![fig5](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_F2.jpg) |![fig6](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_F1.jpg) | :::tip -Nuevamente, asegúrate de que los ID de las articulaciones de los servos y las relaciones de engranajes correspondan estrictamente a las del SO-ARM101. +Nuevamente, asegúrate de que los IDs de las articulaciones de los servos y las relaciones de engranajes correspondan estrictamente a las del SO-ARM101. ::: Conecta el cable USB desde tu ordenador y la fuente de alimentación a la placa controladora del brazo seguidor. Luego, ejecuta el siguiente comando. @@ -449,7 +449,7 @@ Repite la operación para cada motor según se indique. Comprueba el cableado en cada paso antes de pulsar Enter. Por ejemplo, el cable de la fuente de alimentación podría desconectarse mientras manipulas la placa. ::: -Cuando termines, el script simplemente finalizará, momento en el cual los motores estarán listos para usarse. Ahora puedes conectar el cable de 3 pines de cada motor al siguiente, y el cable del primer motor (el “shoulder pan” con id=1) a la placa controladora, que ahora puede fijarse a la base del brazo. +Cuando termines, el script simplemente finalizará, momento en el cual los motores estarán listos para usarse. Ahora puedes conectar el cable de 3 pines de cada motor al siguiente, y el cable del primer motor (el “giro de hombro” con id=1) a la placa controladora, que ahora puede fijarse a la base del brazo. Realiza los mismos pasos para el brazo líder. @@ -467,12 +467,12 @@ lerobot-setup-motors \ -## Montaje +## Ensamblaje :::tip -- El proceso de montaje de doble brazo del SO-ARM101 es el mismo que el del SO-ARM100. Las únicas diferencias son la adición de clips para cables en el SO-ARM101 y las diferentes relaciones de engranajes de los servos de las articulaciones en el Leader Arm. Por lo tanto, tanto el SO100 como el SO101 pueden instalarse haciendo referencia al siguiente contenido. -- Antes del montaje, vuelve a comprobar el modelo de tu motor y la relación de reducción. Si has comprado el SO100, puedes ignorar este paso. Si has comprado el SO101, consulta la siguiente tabla para distinguir F1 a F6 y L1 a L6. +- El proceso de ensamblaje de doble brazo del SO-ARM101 es el mismo que el del SO-ARM100. Las únicas diferencias son la adición de clips para cables en el SO-ARM101 y las diferentes relaciones de engranajes de los servos de las articulaciones en el Brazo Líder. Por lo tanto, tanto el SO100 como el SO101 pueden instalarse haciendo referencia al siguiente contenido. +- Antes del ensamblaje, vuelve a comprobar el modelo de tu motor y la relación de reducción. Si has comprado el SO100, puedes ignorar este paso. Si has comprado el SO101, consulta la siguiente tabla para distinguir F1 a F6 y L1 a L6. ::: @@ -485,10 +485,10 @@ lerobot-setup-motors \ | ST-3215-C001(7.4V) / C018(12V) / C047(12V) | 1:345 | F1–F6 | :::danger -Si compraste el **SO101 Arm Kit Standard Edition**, todas las fuentes de alimentación son de 5V. Si compraste el **SO101 Arm Kit Pro Edition**, el Leader Arm debe calibrarse y operarse en cada paso utilizando una fuente de alimentación de 5V, mientras que el Follower Arm debe calibrarse y operarse en cada paso utilizando una fuente de alimentación de 12V. +Si compraste el **SO101 Arm Kit Standard Edition**, todas las fuentes de alimentación son de 5V. Si compraste el **SO101 Arm Kit Pro Edition**, el Brazo Líder debe calibrarse y operarse en cada paso utilizando una fuente de alimentación de 5V, mientras que el Brazo Seguidor debe calibrarse y operarse en cada paso utilizando una fuente de alimentación de 12V. ::: -**Montar Leader Arm** +**Ensamblar Brazo Líder** | **Paso 1** | **Paso 2** | **Paso 3** | **Paso 4** | **Paso 5** | **Paso 6** | |:---------:|:---------:|:---------:|:---------:|:---------:|:---------:| @@ -500,11 +500,11 @@ Si compraste el **SO101 Arm Kit Standard Edition**, todas las fuentes de aliment | **Paso 19** | **Paso 20** | | ![fig1](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/install_L22.jpg) | ![fig2](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/install_L23.jpg) | -**Montar Follower Arm** +**Ensamblar Brazo Seguidor** :::tip -- Los pasos para montar el Follower Arm son, en general, los mismos que para el Leader Arm. La única diferencia radica en el método de instalación del efector final (garra y empuñadura) después del Paso 12. +- Los pasos para ensamblar el Brazo Seguidor son, en general, los mismos que para el Brazo Líder. La única diferencia radica en el método de instalación del efector final (garra y empuñadura) después del Paso 12. ::: @@ -519,22 +519,22 @@ Si compraste el **SO101 Arm Kit Standard Edition**, todas las fuentes de aliment ## Calibración :::tip -Los códigos de SO100 y SO101 son compatibles. Los usuarios de SO100 pueden utilizar directamente los parámetros y el código de SO101 para su funcionamiento. +Los códigos de SO100 y SO101 son compatibles. Los usuarios de SO100 pueden utilizar directamente los parámetros y el código de SO101 para la operación. ::: :::danger -Si compraste el **SO101 Arm Kit Standard Edition**, todas las fuentes de alimentación son de 5V. Si compraste el **SO101 Arm Kit Pro Edition**, el Leader Arm debe calibrarse y operarse en cada paso utilizando una fuente de alimentación de 5V, mientras que el Follower Arm debe calibrarse y operarse en cada paso utilizando una fuente de alimentación de 12V. +Si compraste el **SO101 Arm Kit Standard Edition**, todas las fuentes de alimentación son de 5V. Si compraste el **SO101 Arm Kit Pro Edition**, el Brazo Líder debe calibrarse y operarse en cada paso utilizando una fuente de alimentación de 5V, mientras que el Brazo Seguidor debe calibrarse y operarse en cada paso utilizando una fuente de alimentación de 12V. ::: -A continuación, debes conectar la fuente de alimentación y el cable de datos a tu robot SO-10x para la calibración, a fin de garantizar que los brazos líder y seguidor tengan los mismos valores de posición cuando se encuentren en la misma posición física. Esta calibración es esencial porque permite que una red neuronal entrenada en un robot SO-10x funcione en otro. Si necesitas recalibrar el brazo robótico, elimina los archivos en `~/.cache/huggingface/lerobot/calibration/robots` o `~/.cache/huggingface/lerobot/calibration/teleoperators` y vuelve a calibrar el brazo robótico. De lo contrario, aparecerá un mensaje de error. La información de calibración del brazo robótico se almacenará en los archivos JSON de este directorio. +A continuación, debes conectar la fuente de alimentación y el cable de datos a tu robot SO-10x para la calibración, a fin de garantizar que los brazos líder y seguidor tengan los mismos valores de posición cuando estén en la misma posición física. Esta calibración es esencial porque permite que una red neuronal entrenada en un robot SO-10x funcione en otro. Si necesitas recalibrar el brazo robótico, elimina los archivos en `~/.cache/huggingface/lerobot/calibration/robots` o `~/.cache/huggingface/lerobot/calibration/teleoperators` y vuelve a calibrar el brazo robótico. De lo contrario, aparecerá un mensaje de error. La información de calibración del brazo robótico se almacenará en los archivos JSON de este directorio. :::tip -En PC (Linux) y dispositivos Jetson, el primer dispositivo USB que conectas normalmente se asigna a `ttyACM0`, y el segundo se asigna a `ttyACM1`. Verifica dos veces qué puerto está asignado al líder y al seguidor antes de ejecutar comandos. +En PC (Linux) y dispositivos Jetson, el primer dispositivo USB que conectas normalmente se asigna a `ttyACM0`, y el segundo se asigna a `ttyACM1`. Verifica dos veces qué puerto está asignado al líder y al seguidor antes de ejecutar los comandos. ::: **Calibración manual del brazo seguidor** -Conecta las interfaces de los 6 servomotores del robot mediante un cable de 3 pines y conecta el servo del chasis a la placa de control de servos, luego ejecuta el siguiente comando o ejemplo de API para calibrar el brazo robótico: +Conecta las interfaces de los 6 servomotores del robot mediante un cable de 3 pines y conecta el servomotor del chasis a la placa de accionamiento de servos, luego ejecuta el siguiente comando o ejemplo de API para calibrar el brazo robótico: ***Primero se otorgan los permisos de la interfaz*** @@ -551,7 +551,7 @@ lerobot-calibrate \ --robot.id=my_awesome_follower_arm # <- Give the robot a unique name ``` -El siguiente video muestra cómo realizar la calibración. Primero debes mover el robot a la posición en la que todas las articulaciones estén en el centro de sus rangos. Luego, después de pulsar Enter, tienes que mover cada articulación a lo largo de todo su rango de movimiento. +El siguiente video muestra cómo realizar la calibración. Primero debes mover el robot a la posición en la que todas las articulaciones estén en el centro de sus rangos. Luego, después de presionar Enter, debes mover cada articulación a lo largo de todo su rango de movimiento. **Calibración manual del brazo líder** @@ -568,13 +568,13 @@ lerobot-calibrate \
-### (Opcional) Calibración de posición central con la herramienta rápida SoARM de Seeed Studio +### (Opcional) Calibración de posición media con la herramienta rápida Seeed Studio SoARM Al calibrar o ejecutar el robot, si ves errores como: `Magnitude 30841 exceeds 2047 (max for sign_bit_index=11)` -Esto normalmente significa que la posición actual / desplazamiento de cero de un servo es anormal, lo que hace que el ángulo leído exceda el rango esperado. En ese caso, puedes usar la herramienta SoARM de Seeed Studio para hacer una **calibración de posición central** (escribir la posición actual en el valor central **2048**) y luego repetir la calibración de todo el brazo. +Esto generalmente significa que la posición actual / el desplazamiento de cero de un servomotor es anormal, lo que hace que el ángulo leído exceda el rango esperado. En ese caso, puedes usar la herramienta SoARM de Seeed Studio para hacer una **calibración de posición media** (escribir la posición actual en el valor medio **2048**), y luego repetir la calibración de todo el brazo. #### 1) Clonar la herramienta desde GitHub e instalar dependencias @@ -584,15 +584,15 @@ cd Seeed_RoboController pip install -r requirements.txt ``` -#### 2) Calibración de posición central y verificación +#### 2) Calibración de posición media y verificación Ubicación de los scripts: -- `src/tools/servo_middle_calibration.py`: calibración de posición central (escribe la posición actual como **2048**) -- `src/tools/servo_disable.py`: desactivar el par del servo (más fácil girar las articulaciones a mano) +- `src/tools/servo_middle_calibration.py`: calibración de posición media (escribe la posición actual como **2048**) +- `src/tools/servo_disable.py`: desactivar el par del servomotor (más fácil girar las articulaciones a mano) - `src/tools/servo_center_test.py`: mover a **2048** para verificar el resultado de la calibración -Ejecuta en orden (los comandos te pedirán de forma interactiva que selecciones un puerto): +Ejecuta en orden (los comandos te pedirán interactivamente que selecciones un puerto): 1. (Opcional) Desactiva el par para ajustar las articulaciones manualmente: @@ -600,26 +600,26 @@ Ejecuta en orden (los comandos te pedirán de forma interactiva que selecciones python -m src.tools.servo_disable ``` -2. Realiza la calibración de posición central (establece la posición actual en 2048): +2. Realiza la calibración de posición media (establece la posición actual en 2048): ```bash python -m src.tools.servo_middle_calibration ``` -3. Verifica: mueve el servo a 2048 y comprueba si vuelve a la posición central esperada: +3. Verifica: mueve el servomotor a 2048 y comprueba si vuelve a la posición media esperada: ```bash python -m src.tools.servo_center_test ``` -Después de la calibración de posición central, vuelve a los pasos de `lerobot-calibrate` anteriores y repite la calibración de todo el brazo. +Después de la calibración de posición media, vuelve a los pasos de `lerobot-calibrate` anteriores y repite la calibración de todo el brazo. ## Teleoperar **Teleoperación simple** -Entonces ya estás listo para teleoperar tu robot. Ejecuta este script sencillo (no conectará ni mostrará las cámaras): +Entonces ya estás listo para teleoperar tu robot. Ejecuta este script sencillo (no se conectará ni mostrará las cámaras): -Ten en cuenta que el id asociado a un robot se utiliza para almacenar el archivo de calibración. Es importante usar el mismo id al teleoperar, registrar y evaluar cuando se utiliza la misma configuración. +Ten en cuenta que el id asociado a un robot se utiliza para almacenar el archivo de calibración. Es importante usar el mismo id al teleoperar, grabar y evaluar cuando uses la misma configuración. ```bash sudo chmod 666 /dev/ttyACM* @@ -658,7 +658,7 @@ El comando de teleoperación hará automáticamente lo siguiente: Consigue uno ahora 🖱️ -- 🚀 Paso 1: Instalar el entorno de dependencias del Orbbec SDK +- 🚀 Paso 1: Instalar el entorno de dependencias del SDK de Orbbec 1. Clona el repositorio `pyorbbec` @@ -690,14 +690,14 @@ El comando de teleoperación hará automáticamente lo siguiente: Se pueden ignorar los mensajes de error en rojo. -4. Clona el Orbbec SDK en el directorio `~/lerobot/src/lerobot/cameras` +4. Clona el SDK de Orbbec en el directorio `~/lerobot/src/lerobot/cameras` ```bash cd ~/lerobot/src/lerobot/cameras git clone https://github.com/ZhuYaoHui1998/orbbec.git ``` -5. Modifica utils.py y **init**.py +5. Modificar utils.py y **init**.py - Busca `utils.py` en el directorio `~/lerobot/src/lerobot/cameras` y añade el siguiente código aproximadamente en la línea 45: @@ -724,7 +724,7 @@ from .orbbec.configuration_orbbec import OrbbecCameraConfig src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/init.png" /> -- 🚀 Paso 2: Llamada de funciones y ejemplos +- 🚀 Paso 2: Llamada de función y ejemplos En todos los ejemplos siguientes, reemplaza `so101_follower` con el modelo real del brazo robótico que estés usando (por ejemplo, `so100` / `so101`). @@ -759,7 +759,7 @@ También puedes añadir posteriormente una cámara RGB monocular adicional. :::tip -Los códigos de SO100 y SO101 son compatibles. Los usuarios de SO100 pueden utilizar directamente los parámetros y el código de SO101 para su funcionamiento. +Los códigos de SO100 y SO101 son compatibles. Los usuarios de SO100 pueden utilizar directamente los parámetros y el código de SO101 para la operación. ::: Para instanciar una cámara, necesitas un identificador de cámara. Este identificador puede cambiar si reinicias tu ordenador o vuelves a conectar tu cámara, un comportamiento que depende principalmente de tu sistema operativo. @@ -791,10 +791,10 @@ Camera #0: Puedes encontrar las imágenes tomadas por cada cámara en el directorio `outputs/captured_images`. :::warning -Al usar cámaras Intel RealSense en macOS, podrías obtener este error: , esto se puede resolver ejecutando el mismo comando con permisos. Ten en cuenta que usar cámaras RealSense en macOS es inestable. +Al usar cámaras Intel RealSense en , podrías obtener este error: , esto se puede resolver ejecutando el mismo comando con permisos. Ten en cuenta que usar cámaras RealSense en es inestable.macOSError finding RealSense cameras: failed to set power statesudomacOS. ::: -Entonces podrás mostrar las cámaras en tu ordenador mientras teleoperas ejecutando el siguiente código. Esto es útil para preparar tu configuración antes de registrar tu primer conjunto de datos. +Entonces podrás mostrar las cámaras en tu ordenador mientras teleoperas ejecutando el siguiente código. Esto es útil para preparar tu configuración antes de grabar tu primer conjunto de datos. ```bash lerobot-teleoperate \ @@ -808,14 +808,13 @@ lerobot-teleoperate \ --display_data=true ``` -Si tienes más cámaras, puedes cambiar `--robot.cameras` para añadir cámaras. Debes tener en cuenta el formato de index_or_path, que viene determinado por el último dígito del ID de la cámara que muestra `python -m lerobot.find_cameras opencv`. +Si tienes más cámaras, puedes cambiar `--robot.cameras` para añadir cámaras. Debes tener en cuenta el formato de index_or_path, que viene determinado por el último dígito del ID de la cámara que se obtiene con `python -m lerobot.find_cameras opencv`. :::tip -Las imágenes en el formato `fourcc: "MJPG"` están comprimidas. Puedes probar resoluciones más altas y también puedes intentar el formato `YUYV`. Sin embargo, este último reducirá la resolución de la imagen y los FPS, lo que provocará retrasos en el funcionamiento del brazo robótico. Actualmente, con el formato `MJPG`, se pueden soportar 3 cámaras a una resolución de `1920*1080` manteniendo `30FPS`. Dicho esto, sigue sin recomendarse conectar 2 cámaras a un ordenador a través del mismo HUB USB. +Las imágenes en formato `fourcc: "MJPG"` están comprimidas. Puedes probar resoluciones más altas y también puedes intentar el formato `YUYV`. Sin embargo, este último reducirá la resolución de la imagen y los FPS, lo que provocará retrasos en el funcionamiento del brazo robótico. Actualmente, con el formato `MJPG`, se pueden soportar 3 cámaras a una resolución de `1920*1080` manteniendo `30FPS`. Aun así, no se recomienda conectar 2 cámaras a un ordenador a través del mismo HUB USB. ::: - -Por ejemplo, si quieres añadir una cámara lateral: +Por ejemplo, quieres añadir una cámara lateral: ```bash lerobot-teleoperate \ @@ -830,12 +829,11 @@ lerobot-teleoperate \ ``` :::tip -Las imágenes en el formato `fourcc: "MJPG"` están comprimidas. Puedes probar resoluciones más altas y también puedes intentar el formato `YUYV`. Sin embargo, este último reducirá la resolución de la imagen y los FPS, lo que provocará retrasos en el funcionamiento del brazo robótico. Actualmente, con el formato `MJPG`, se pueden soportar 3 cámaras a una resolución de `1920*1080` manteniendo `30FPS`. Dicho esto, sigue sin recomendarse conectar 2 cámaras a un ordenador a través del mismo HUB USB. +Las imágenes en formato `fourcc: "MJPG"` están comprimidas. Puedes probar resoluciones más altas y también puedes intentar el formato `YUYV`. Sin embargo, este último reducirá la resolución de la imagen y los FPS, lo que provocará retrasos en el funcionamiento del brazo robótico. Actualmente, con el formato `MJPG`, se pueden soportar 3 cámaras a una resolución de `1920*1080` manteniendo `30FPS`. Aun así, no se recomienda conectar 2 cámaras a un ordenador a través del mismo HUB USB. ::: - :::tip -Si encuentras un bug como este. +Si encuentras un error como este.
[ACT](https://huggingface.co/docs/lerobot/act) @@ -1060,7 +1057,6 @@ Para entrenar una política para controlar tu robot, utiliza el script [lerobot- **Entrenar** - ```bash lerobot-train \ --dataset.repo_id=${HF_USER}/so101_test \ @@ -1086,14 +1082,13 @@ lerobot-train \ --steps=300000 ``` -Expliquémoslo: +Vamos a explicarlo: - **Especificación del conjunto de datos**: Proporcionamos el conjunto de datos mediante el parámetro `--dataset.repo_id=${HF_USER}/so101_test`. -- **Pasos de entrenamiento**: Modificamos el número de pasos de entrenamiento usando `--steps=300000`. El algoritmo usa por defecto 800000 pasos, y puedes ajustarlo según la dificultad de tu tarea y observando la pérdida durante el entrenamiento. -- **Tipo de política**: Proporcionamos la política con `policy.type=act`. Del mismo modo, puedes cambiar entre políticas como [`act`, `diffusion`, `pi0`, `pi0fast`, `pi0fast`, `sac`, `smolvla`], lo que cargará la configuración desde `configuration_act.py`. Es importante destacar que esta política se adaptará automáticamente a los estados de los motores, acciones de los motores y número de cámaras de tu robot (por ejemplo, `laptop` y `phone`), ya que esta información ya está almacenada en tu conjunto de datos. -- **Selección de dispositivo**: Usamos `policy.device=cuda` porque estamos entrenando en una GPU Nvidia, pero puedes usar `policy.device=mps` para entrenar en Apple Silicon. -- **Herramienta de visualización**: Usamos `wandb.enable=true` para visualizar las gráficas de entrenamiento usando [Weights and Biases](https://docs.wandb.ai/quickstart). Esto es opcional, pero si lo utilizas, asegúrate de haber iniciado sesión ejecutando `wandb login`. - +- **Pasos de entrenamiento**: Modificamos el número de pasos de entrenamiento usando `--steps=300000`. El algoritmo usa por defecto 800000 pasos, y puedes ajustarlo en función de la dificultad de tu tarea y observando la pérdida durante el entrenamiento. +- **Tipo de política**: Proporcionamos la política con `policy.type=act`. Del mismo modo, puedes cambiar entre políticas como [`act`, `diffusion`, `pi0`, `pi0fast`, `pi0fast`, `sac`, `smolvla`], lo que cargará la configuración desde `configuration_act.py`. Es importante destacar que esta política se adaptará automáticamente a los estados de los motores, las acciones de los motores y el número de cámaras de tu robot (por ejemplo, `laptop` y `phone`), ya que esta información ya está almacenada en tu conjunto de datos. +- **Selección de dispositivo**: Proporcionamos `policy.device=cuda` porque estamos entrenando en una GPU Nvidia, pero puedes usar `policy.device=mps` para entrenar en Apple Silicon. +- **Herramienta de visualización**: Proporcionamos `wandb.enable=true` para visualizar las gráficas de entrenamiento usando [Weights and Biases](https://docs.wandb.ai/quickstart). Esto es opcional, pero si lo utilizas, asegúrate de haber iniciado sesión ejecutando `wandb login`. **Evaluar** @@ -1131,9 +1126,9 @@ lerobot-record \ 1. El parámetro `--policy.path` indica la ruta al archivo de pesos de los resultados de tu entrenamiento de política (por ejemplo, `outputs/train/act_so101_test/checkpoints/last/pretrained_model`). Si subes el archivo de pesos del resultado del entrenamiento del modelo a Hub, también puedes usar el repositorio del modelo (por ejemplo, `${HF_USER}/act_so100_test`). -2. El nombre del conjunto de datos `dataset.repo_id` comienza con `eval_`. Esta operación registrará por separado vídeos y datos durante la evaluación, que se guardarán en la carpeta que comience con `eval_`, como `seeed/eval_test123`. +2. El nombre del conjunto de datos `dataset.repo_id` comienza con `eval_`. Esta operación registrará por separado vídeos y datos durante la evaluación, que se guardarán en la carpeta que comienza con `eval_`, como `seeed/eval_test123`. -3. Si encuentras `File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/seeed/eval_xxxx'` durante la fase de evaluación, elimina primero la carpeta que comience con `eval_` y luego ejecuta de nuevo el programa. +3. Si encuentras `File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/seeed/eval_xxxx'` durante la fase de evaluación, elimina primero la carpeta que comienza con `eval_` y luego ejecuta de nuevo el programa. 4. Cuando te encuentres con `mean is infinity. You should either initialize with stats as an argument or use a pretrained model`, ten en cuenta que palabras clave como front y side en el parámetro `--robot.cameras` deben ser estrictamente coherentes con las utilizadas al recopilar el conjunto de datos. @@ -1141,10 +1136,8 @@ lerobot-record \
- -
SmolVLA @@ -1158,9 +1151,9 @@ Instala las dependencias de SmolVLA ejecutando: pip install -e ".[smolvla]" ``` -**Ajusta SmolVLA con tus datos** +**Ajusta finamente SmolVLA con tus datos** -Usa [smolvla_base](https://hf.co/lerobot/smolvla_base), nuestro modelo preentrenado de 450M, y ajústalo con tus datos. Entrenar el modelo durante 20k pasos llevará aproximadamente ~4 horas en una sola GPU A100. Debes ajustar el número de pasos en función del rendimiento y de tu caso de uso. +Usa [smolvla_base](https://hf.co/lerobot/smolvla_base), nuestro modelo preentrenado de 450M, y ajústalo finamente con tus datos. Entrenar el modelo durante 20k pasos llevará aproximadamente ~4 horas en una sola GPU A100. Debes ajustar el número de pasos en función del rendimiento y de tu caso de uso. Si no tienes un dispositivo GPU, puedes entrenar usando nuestro cuaderno en [Google Colab](https://colab.research.google.com/github/huggingface/notebooks/blob/main/lerobot/training-smolvla.ipynb). @@ -1188,9 +1181,9 @@ El ajuste fino es un arte. Para una visión completa de las opciones de ajuste f lerobot-train --help ``` -**Evalúa el modelo ajustado y ejecútalo en tiempo real** +**Evalúa el modelo ajustado finamente y ejecútalo en tiempo real** -De forma similar a cuando grabas un episodio, se recomienda que hayas iniciado sesión en HuggingFace Hub. Puedes seguir los pasos correspondientes: [Record a dataset](https://huggingface.co/docs/lerobot/il_robots). Una vez que hayas iniciado sesión, puedes ejecutar la inferencia en tu configuración haciendo: +De forma similar a cuando se graba un episodio, se recomienda que hayas iniciado sesión en HuggingFace Hub. Puedes seguir los pasos correspondientes: [Grabar un conjunto de datos](https://huggingface.co/docs/lerobot/il_robots). Una vez que hayas iniciado sesión, puedes ejecutar inferencia en tu configuración haciendo: ```bash lerobot-record \ @@ -1216,7 +1209,7 @@ Según tu configuración de evaluación, puedes configurar la duración y el nú
LIBERO -[LIBERO](https://huggingface.co/docs/lerobot/libero) es un benchmark diseñado para estudiar el aprendizaje robótico de por vida. La idea es que los robots no solo se preentrenen una vez en una fábrica, sino que necesiten seguir aprendiendo y adaptándose junto con sus usuarios humanos a lo largo del tiempo. Esta adaptación continua se denomina aprendizaje de por vida en la toma de decisiones (LLDM), y es un paso clave hacia la construcción de robots que se conviertan en ayudantes verdaderamente personalizados. +[LIBERO](https://huggingface.co/docs/lerobot/libero) es un benchmark diseñado para estudiar el aprendizaje continuo de robots. La idea es que los robots no solo se preentrenarán una vez en una fábrica, sino que necesitarán seguir aprendiendo y adaptándose junto con sus usuarios humanos a lo largo del tiempo. Esta adaptación continua se denomina aprendizaje continuo en la toma de decisiones (LLDM), y es un paso clave hacia la construcción de robots que se conviertan en ayudantes verdaderamente personalizados. - 📄 [Artículo de LIBERO](https://arxiv.org/abs/2306.03310) - 💻 [Repositorio original de LIBERO](https://github.com/Lifelong-Robot-Learning/LIBERO) @@ -1225,7 +1218,7 @@ Según tu configuración de evaluación, puedes configurar la duración y el nú En **LeRobot**, portamos LIBERO a nuestro framework y lo usamos principalmente para **evaluar** [SmolVLA](https://huggingface.co/docs/lerobot/en/smolvla), nuestro modelo ligero de Visión-Lenguaje-Acción. -LIBERO es ahora parte de nuestra **simulación con evaluación múltiple**, lo que significa que puedes evaluar tus políticas en un **solo conjunto de tareas** o en **múltiples conjuntos a la vez** con solo una bandera. +LIBERO es ahora parte de nuestra **simulación con evaluación múltiple**, lo que significa que puedes evaluar tus políticas en un **único conjunto de tareas** o en **múltiples conjuntos a la vez** con solo una bandera. Para instalar LIBERO, después de seguir las instrucciones oficiales de LeRobot, simplemente ejecuta: `pip install -e ".[libero]"` @@ -1282,23 +1275,23 @@ lerobot-train \ **Nota sobre el renderizado** -LeRobot usa MuJoCo para la simulación. Debes configurar el backend de renderizado antes del entrenamiento o la evaluación: +LeRobot utiliza MuJoCo para la simulación. Debes configurar el backend de renderizado antes del entrenamiento o la evaluación: - `export MUJOCO_GL=egl` → para servidores sin pantalla (por ejemplo, HPC, nube)
-
[Pi0](https://huggingface.co/docs/lerobot/pi0) -Consulta [Pi0](https://huggingface.co/docs/lerobot/pi0) +Consulta [Pi0](https://huggingface.co/docs/lerobot/pi0) ```bash pip install -e ".[pi]" ``` **Entrenar** + ```bash lerobot-train \ --policy.type=pi0 \ @@ -1329,20 +1322,19 @@ lerobot-record \ --policy.path=outputs/pi0_training/checkpoints/last/pretrained_model ``` -
-
[Pi0.5](https://huggingface.co/docs/lerobot/pi05) -Consulta [Pi0.5](https://huggingface.co/docs/lerobot/pi05) +Consulta [Pi0.5](https://huggingface.co/docs/lerobot/pi05) ```bash pip install -e ".[pi]" ``` **Entrenar** + ```bash lerobot-train \ --dataset.repo_id=seeed/eval_test123 \ @@ -1373,28 +1365,25 @@ lerobot-record \ --policy.path=outputs/pi05_training/checkpoints/last/pretrained_model ``` -
- -
[GR00T N1.5](https://huggingface.co/docs/lerobot/groot) Consulta la documentación oficial: [GR00T N1.5](https://huggingface.co/docs/lerobot/groot). -GR00T N1.5 es un modelo base abierto de NVIDIA para un razonamiento robótico y aprendizaje de habilidades más generales. Es un modelo **cross-embodiment**: puede tomar entradas multimodales como **language** e **images**, y ejecutar tareas de manipulación en diferentes entornos. +GR00T N1.5 es un modelo base abierto de NVIDIA para un razonamiento robótico y aprendizaje de habilidades más generales. Es un modelo **multi-cuerpo**: puede tomar entradas multimodales como **lenguaje** e **imágenes**, y ejecutar tareas de manipulación en diferentes entornos. -En LeRobot, la clave es establecer el tipo de política a `--policy.type=groot`. Ten en cuenta que GR00T N1.5 tiene mayores requisitos de entorno (depende de FlashAttention y requiere una GPU CUDA). Se recomienda primero hacer que ACT / Pi0 funcionen de extremo a extremo y luego probar GR00T. +En LeRobot, la clave es establecer el tipo de política a `--policy.type=groot`. Ten en cuenta que GR00T N1.5 tiene requisitos de entorno más altos (depende de FlashAttention y requiere una GPU CUDA). Se recomienda primero hacer que ACT / Pi0 funcionen de extremo a extremo y luego probar GR00T. **Instalación (importante)** -Según la documentación oficial actual, GR00T N1.5 requiere `flash-attn` y solo puede usarse en hardware compatible con CUDA. +Según la documentación oficial actual, GR00T N1.5 requiere `flash-attn` y solo puede utilizarse en hardware compatible con CUDA. Orden recomendado: -1. Prepara primero tu entorno base (Python, CUDA, controladores, etc.). **No** instales `lerobot` todavía. -2. Instala PyTorch para tu versión de CUDA (diferentes versiones de CUDA pueden requerir un `--index-url` diferente; sigue la página de instalación de PyTorch). +1. Prepara primero tu entorno base (Python, CUDA, controladores, etc.). **No** instales aún `lerobot`. +2. Instala PyTorch para tu versión de CUDA (las diferentes versiones de CUDA pueden requerir un `--index-url` distinto; sigue la página de instalación de PyTorch). ```bash pip install "torch>=2.2.1,<2.8.0" "torchvision>=0.21.0,<0.23.0" @@ -1415,12 +1404,12 @@ pip install "lerobot[groot]" ``` :::tip -Si la instalación de `flash-attn` falla, normalmente se debe a (1) una incompatibilidad entre PyTorch y CUDA, (2) dependencias de compilación faltantes o (3) un entorno demasiado nuevo/demasiado antiguo. Primero contrasta la documentación oficial de GR00T y las instrucciones de instalación de PyTorch. +Si la instalación de `flash-attn` falla, normalmente se debe a (1) una incompatibilidad entre PyTorch y CUDA, (2) dependencias de compilación que faltan o (3) un entorno demasiado nuevo/demasiado antiguo. Primero contrasta la documentación oficial de GR00T y las instrucciones de instalación de PyTorch. ::: **Entrenamiento (fine-tuning)** -La documentación oficial proporciona un ejemplo multi-GPU con `accelerate launch --multi_gpu ...`. Si solo tienes una GPU, aún puedes empezar haciendo que primero funcione una ejecución de un solo proceso (la compatibilidad/argumentos exactos dependen de la documentación oficial). +La documentación oficial proporciona un ejemplo multi-GPU con `accelerate launch --multi_gpu ...`. Si solo tienes una GPU, aún puedes empezar haciendo que funcione primero una ejecución de un solo proceso (la compatibilidad/argumentos exactos dependen de la documentación oficial). ```bash accelerate launch \ @@ -1463,14 +1452,14 @@ lerobot-record \ --dataset.reset_time_s=10 ``` -Licencia: Apache 2.0 (la misma que el repositorio original de GR00T). +Licencia: Apache 2.0 (igual que el repositorio original de GR00T).
(Opcional) Fine-tuning eficiente en parámetros (PEFT) -PEFT (Parameter-Efficient Fine-Tuning) es una familia de métodos y herramientas que ayudan a que un gran modelo preentrenado se adapte a nuevas tareas **sin actualizar todos los parámetros**. Para políticas LeRobot preentrenadas (por ejemplo, SmolVLA, Pi0), a menudo puedes entrenar solo un pequeño conjunto de parámetros “adaptadores” (por ejemplo, LoRA) para reducir el uso de VRAM y el coste de entrenamiento, manteniendo al mismo tiempo un rendimiento cercano al del fine-tuning completo. +PEFT (Parameter-Efficient Fine-Tuning) es una familia de métodos y herramientas que ayudan a que un modelo grande preentrenado se adapte a nuevas tareas **sin actualizar todos los parámetros**. Para políticas LeRobot preentrenadas (por ejemplo, SmolVLA, Pi0), a menudo puedes entrenar solo un pequeño conjunto de parámetros “adaptadores” (por ejemplo, LoRA) para reducir el uso de VRAM y el coste de entrenamiento, manteniendo un rendimiento cercano al del fine-tuning completo. **Instalar** @@ -1484,7 +1473,7 @@ pip install -e ".[peft]" pip install "lerobot[peft]" ``` -Más conceptos y métodos: [🤗 documentación de PEFT](https://huggingface.co/docs/peft/index). +Más conceptos y métodos: [🤗 Documentación de PEFT](https://huggingface.co/docs/peft/index). **Ejemplo: hacer fine-tuning de SmolVLA con LoRA (subtarea LIBERO `libero_spatial`)** @@ -1540,7 +1529,7 @@ Si quieres que algunos módulos se entrenen completamente (en lugar de solo inye **Sugerencia de tasa de aprendizaje (regla general)** -Las tasas de aprendizaje de LoRA suelen ser ~10× más altas que en el fine-tuning completo. Por ejemplo, si el fine-tuning completo usa comúnmente `1e-4`, LoRA puede empezar desde `1e-3`. Si usas un programador de tasa de aprendizaje, la tasa de aprendizaje final suele estar alrededor de `1e-4` como referencia. +Las tasas de aprendizaje de LoRA suelen ser ~10× más altas que en el fine-tuning completo. Por ejemplo, si el fine-tuning completo usa comúnmente `1e-4`, LoRA puede empezar en `1e-3`. Si utilizas un programador de tasa de aprendizaje, la tasa de aprendizaje final suele estar alrededor de `1e-4` como referencia.
@@ -1549,7 +1538,7 @@ Las tasas de aprendizaje de LoRA suelen ser ~10× más altas que en el fine-tuni **Pasos de entrenamiento** -Método 1: usar flags de CLI. +Método 1: usar flags de la CLI. 1. Instala `accelerate` en tu entorno de `lerobot`. @@ -1591,30 +1580,30 @@ Flags clave de `accelerate`: - `--num_processes`: Número de GPUs a usar (normalmente igual al número de GPUs disponibles en la máquina). - `--mixed_precision=fp16`: Usa precisión mixta fp16 (si tu hardware lo soporta, también puedes usar bf16). -Ten en cuenta: **bf16 requiere soporte de hardware** y no está disponible en todas las GPU. +Ten en cuenta: **bf16 requiere compatibilidad de hardware** y no está disponible en todas las GPU. -| Precisión | Soporte de hardware | +| Precisión | Compatibilidad de hardware | |--|--| | fp16 | Compatible con casi todas las GPU de NVIDIA | | bf16 | Solo compatible con algunas GPU más recientes (Ampere y posteriores) | -Si tu GPU no admite bf16, elige fp16 en la configuración de Accelerate o especifica fp16 explícitamente. +Si tu GPU no es compatible con bf16, elige fp16 en la configuración de Accelerate o especifica fp16 explícitamente. Método 2: Usa un archivo de configuración de `accelerate` (opcional). -Si entrenas con varias GPU con frecuencia, puedes guardar la configuración para evitar escribir repetidamente las mismas banderas. +Si entrenas con múltiples GPU con frecuencia, puedes guardar la configuración para evitar escribir repetidamente las mismas banderas. -`accelerate config` guarda tu configuración de hardware (número de GPU, precisión mixta, etc.) en un archivo de configuración, de modo que no tengas que volver a introducir esas opciones cuando ejecutes `accelerate launch` más tarde. No cambia la lógica de entrenamiento de LeRobot; solo reduce las entradas repetidas en la CLI. +`accelerate config` guarda tu configuración de hardware (número de GPU, precisión mixta, etc.) en un archivo de configuración, de modo que no tengas que volver a introducir esas opciones cuando ejecutes `accelerate launch` más tarde. No cambia la lógica de entrenamiento de LeRobot; solo reduce las entradas repetitivas en la CLI. Si solo usas varias GPU ocasionalmente (o es tu primera vez), omitir esto está perfectamente bien. -En la configuración interactiva, para el escenario común de “una sola máquina + varias GPU”, las opciones típicas son: +En la configuración interactiva, para el escenario común de “una sola máquina + múltiples GPU”, las opciones típicas son: -- Compute environment: This machine -- Number of machines: 1 -- Number of processes: Number of GPUs you want to use -- GPU ids to use: press Enter (use all GPUs) -- Mixed precision: prefer fp16; choose bf16 only if you know your GPU supports it +- Entorno de cómputo: Esta máquina +- Número de máquinas: 1 +- Número de procesos: Número de GPU que quieres usar +- IDs de GPU a usar: pulsa Enter (usar todas las GPU) +- Precisión mixta: se prefiere fp16; elige bf16 solo si sabes que tu GPU lo admite ```bash @@ -1640,13 +1629,13 @@ accelerate launch $(which lerobot-train) \ ``` -**Cómo el uso de varias GPU afecta a los hiperparámetros (y cómo ajustarlos)** +**Cómo el uso de múltiples GPU afecta a los hiperparámetros (y cómo ajustarlos)** LeRobot no ajusta automáticamente la tasa de aprendizaje ni los pasos de entrenamiento en función del número de GPU, para evitar cambiar silenciosamente el comportamiento del entrenamiento. Esto es diferente de algunos otros frameworks de entrenamiento distribuido. -Si quieres ajustar los hiperparámetros para varias GPU, un enfoque común es: +Si quieres ajustar los hiperparámetros para múltiples GPU, un enfoque común es: -- **Pasos**: el tamaño de lote efectivo aumenta (batch_size × num_gpus), por lo que puedes reducir los pasos aproximadamente de forma proporcional a `1 / num_gpus` para mantener un número similar de muestras vistas en total. +- **Pasos**: el tamaño de lote efectivo aumenta (batch_size × num_gpus), por lo que puedes reducir los pasos aproximadamente de forma proporcional a `1 / num_gpus` para mantener un número total similar de muestras vistas. ```bash @@ -1683,7 +1672,335 @@ Para configuración avanzada y resolución de problemas, consulta la documentaci
+
+ +(Opcional) Inferencia asíncrona + +Cuando la inferencia asíncrona no está habilitada, el flujo de control de LeRobot puede entenderse como **inferencia secuencial / síncrona convencional**: la política primero predice un segmento de acciones, luego ejecuta ese segmento y solo después espera la siguiente predicción. + +Para modelos más grandes, esto puede hacer que el robot haga una pausa notable mientras espera el siguiente bloque de acciones. + +El objetivo de la inferencia asíncrona es permitir que el robot ejecute el bloque de acciones actual mientras calcula por adelantado el siguiente, reduciendo así el tiempo de inactividad y mejorando la capacidad de respuesta. + +La inferencia asíncrona es aplicable a las políticas compatibles con LeRobot, incluidas las **políticas de acciones basadas en bloques** como **ACT, OpenVLA, Pi0 y SmolVLA**. + +Dado que la inferencia está desacoplada del control real, la inferencia asíncrona también ayuda a aprovechar máquinas con mayores recursos de cómputo para realizar la inferencia del robot. + +Puedes leer más sobre inferencia asíncrona en el [blog de Hugging Face](https://huggingface.co/blog/async-robot-inference) + +Primero presentemos algunos conceptos básicos: + +- **Cliente**: se conecta al brazo robótico y a las cámaras, recopila datos de observación (como imágenes y poses del robot), envía estas observaciones al servidor y recibe los bloques de acciones devueltos por el servidor y los ejecuta en orden. + +- **Servidor**: el dispositivo que proporciona recursos de cómputo. Recibe datos de la cámara y del brazo robótico, realiza la inferencia (es decir, el cómputo) para producir bloques de acciones y los envía de vuelta al cliente. Puede ser el mismo dispositivo conectado al brazo robótico y a las cámaras, otro ordenador en la misma red local o un servidor en la nube alquilado en Internet. + +- **Bloque de acciones**: una secuencia de comandos de acción del brazo robótico obtenida mediante la inferencia de la política en el lado del servidor. + +Tres escenarios de despliegue para la inferencia asíncrona + +1. Despliegue en una sola máquina + +El robot, las cámaras, el cliente y el servidor están todos en el mismo dispositivo. + +Este es el caso más sencillo: el servidor puede escuchar en 127.0.0.1 y el cliente también puede conectarse a 127.0.0.1:port. El ejemplo de comando en la documentación oficial es para este escenario. + +2. Despliegue en LAN + +El robot y las cámaras están conectados a un dispositivo ligero, mientras que el servidor de políticas se ejecuta en otra máquina de alto cómputo en la misma red local. + +En este caso, el servidor debe escuchar en una dirección accesible por otras máquinas, y el cliente también debe conectarse a la IP de la LAN del servidor, en lugar de 127.0.0.1. + +3. Despliegue entre redes / en la nube + +El servidor de políticas se ejecuta en un host en la nube accesible públicamente, y el cliente se conecta a él a través de Internet pública. + +Este enfoque puede aprovechar la GPU más potente del host en la nube. Cuando las condiciones de red son buenas, el tiempo de ida y vuelta de la red (latencia de red) a veces puede ser relativamente pequeño en comparación con el tiempo de inferencia, pero esto depende de tu entorno de red real. + +Nota de seguridad: la canalización de inferencia asíncrona de LeRobot tiene un riesgo relacionado con gRPC sin autenticación + deserialización con pickle. Si hay información o servicios importantes en el servidor, no se recomienda exponer el servicio directamente a Internet en un despliegue público. Un enfoque más seguro es usar VPN o túneles SSH, o al menos restringir las IP de origen permitidas en el grupo de seguridad a la IP pública de tu propio cliente. + +### Introducción al despliegue de inferencia asíncrona + +#### Paso 1: Configuración del entorno + +Primero, usa pip para instalar las dependencias adicionales necesarias para la inferencia asíncrona. Tanto el cliente como el servidor deben tener lerobot instalado junto con las dependencias extra: + +```bash +pip install -e ".[async]" +``` + +#### Paso 2: Configuración y comprobaciones de red + +1. **Problemas de proxy** + +Si tu terminal actual está configurado para usar un proxy y la conexión se comporta de forma anómala, puedes desactivar temporalmente las variables de entorno del proxy: + +```bash +unset http_proxy https_proxy ftp_proxy all_proxy HTTP_PROXY HTTPS_PROXY FTP_PROXY ALL_PROXY +``` + +Nota: el comando anterior solo afecta a la sesión de terminal actual. Si abres otra ventana de terminal, necesitas ejecutarlo de nuevo. + +2. **Abrir el puerto en el firewall / grupo de seguridad** + +Despliegue en una sola máquina: normalmente se puede omitir. + +Despliegue en LAN: necesitas abrir el puerto de escucha en el lado del servidor. + +Ejemplo para abrir el puerto de escucha en una configuración de LAN (ejecutar en el lado del servidor): + +```bash +sudo ufw allow 8080/tcp +``` + +Despliegue en la nube: necesitas abrir este puerto en el grupo de seguridad del servidor en la nube, y se recomienda restringir las IP de origen tanto como sea posible. + +Si estás ejecutando en un servidor en la nube: + +Abre el puerto 8080 en el grupo de seguridad de la consola de gestión del servidor, o usa otro puerto que ya esté abierto. Las diferentes plataformas de servicios en la nube manejan esto de manera diferente; consulta la documentación de tu proveedor de nube. + +3. **Confirmar la dirección IP** + +Este paso se puede omitir para el despliegue en una sola máquina (la dirección IP para una sola máquina siempre es 127.0.0.1). + +Si se trata de un despliegue en LAN: + +Necesitas confirmar y recordar la dirección IP de la LAN del lado del servidor. Cuando el cliente se conecte, lo que debe rellenarse es la IP de la LAN de la máquina que ejecuta policy_server, no la IP propia del cliente. + +Linux / Jetson / Raspberry Pi: + +```bash +hostname -I +``` + +Si se muestran varias direcciones, generalmente elige la que corresponde a la interfaz de red de la LAN actual, por ejemplo 192.168.x.x. + +También puedes usar: + +```bash +ip addr +``` + +para ver el campo inet bajo la interfaz de red actualmente conectada. + +Windows: + +```shell +ipconfig +``` + +Busca un campo como Dirección IPv4 . . . . . . . . . . . : 192.168.14.140; esa es la dirección IP de la LAN de esa máquina. + +macOS: + +```bash +ifconfig +``` + +Busca el campo inet correspondiente a la interfaz de red actualmente conectada; esa es la dirección IP de la LAN. + +Necesitamos recordar la dirección IP de la LAN del lado del servidor. Usaremos `` para referirnos a ella. + +Si se trata de un despliegue en un servidor en la nube: + +Busca la IP pública en el panel de control del servidor. Normalmente se llama de una de las siguientes maneras: + +Public IPv4 + +External IP + +Public IP address + +EIP +Public IP + +Necesitamos recordar la dirección IP pública. Usaremos` `para referirnos a ella. + +4. **Prueba de conexión** + +Despliegue en una sola máquina: este paso se puede omitir + +Despliegue en LAN / nube: se recomienda probar desde el lado del cliente si el puerto del servidor es accesible. Los ejemplos de prueba son los siguientes: + +Ejemplo de LAN: ejecutar en el lado del cliente + +```bash +nc -vz 8080 +``` + +Ejemplo en la nube: ejecutar en el lado del cliente + +```bash +nc -vz 8080 +``` + +#### Paso 3: Iniciar el servicio + +**Escenario A: Despliegue en una sola máquina** + +Inicia el servicio local en una terminal: + +```bash +python -m lerobot.async_inference.policy_server \ +--host=127.0.0.1 \ +--port=8080 +``` + +Después de que se inicie correctamente, debes mantener esta terminal abierta. Necesitarás abrir una nueva terminal para ejecutar otros comandos. + +**Escenario B: Despliegue en LAN** + +Ejecutar en el lado del servidor: + +```bash +python -m lerobot.async_inference.policy_server \ +--host=0.0.0.0 \ +--port=8080 +``` + +En este caso, cuando el cliente se conecta, `--server_address` debe ser la dirección IP de la LAN del servidor, es decir, `:8080`. + +**Escenario C: Implementación en servidor en la nube** + +Ejecutar en el lado del servidor: + +```bash +python -m lerobot.async_inference.policy_server \ +--host=0.0.0.0 \ +--port=8080 +``` + +En este caso, cuando el cliente se conecta, `--server_address` debe ser la dirección IP pública del servidor, es decir, `:8080`. + +#### Paso 4: Elegir parámetros de inferencia + +Ejecutar en el lado del cliente: + +```bash +python -m lerobot.async_inference.robot_client \ +--server_address=:8080 \ +--robot.type=so100_follower \ +--robot.port=/dev/tty.usbmodem585A0076841 \ +--robot.id=follower_so100 \ +--robot.cameras="{ laptop: {type: opencv, index_or_path: 0, width: 1920, height: 1080, fps: 30}, phone: {type: opencv, index_or_path: 0, width: 1920, height: 1080, fps: 30}}" \ +--task="dummy" \ +--policy_type=your_policy_type \ +--pretrained_name_or_path=user/model \ +--policy_device=cuda \ +--actions_per_chunk=50 \ +--chunk_size_threshold=0.5 \ +--aggregate_fn_name=weighted_average \ +--debug_visualize_queue_size=True +``` + +Explicación de parámetros: + +- `--server_address` + +Especifica la dirección y el puerto del servidor de políticas. `` debe sustituirse por 127.0.0.1 (máquina local), `` (LAN), o `` (servidor en la nube). + +- `--robot.type, --robot.port, --robot.id, --robot.cameras` + +Parámetros del dispositivo de hardware. Deben mantenerse coherentes con los parámetros usados durante la recopilación del conjunto de datos. + +- `--task` + +La descripción de la tarea. Las políticas de visión y lenguaje como SmolVLA pueden determinar el objetivo de la acción basándose en el texto de la tarea. + +- `--policy_type` + +Sustituye esto por el nombre específico de la política, por ejemplo: + +- smolvla + +- act + +- `--pretrained_name_or_path` + +Este valor debe sustituirse por la ruta del modelo en el lado del servidor, o una ruta de modelo en Hugging Face. + +- `--policy_device` + +Especifica el dispositivo de inferencia utilizado en el lado del servidor. + +Puede ser cuda, mps o cpu. + +- `--actions_per_chunk=50` + +Especifica cuántas acciones se generan en cada inferencia. + +Cuanto mayor sea este valor: + +Ventaja: el búfer de acciones es más abundante, por lo que es menos probable que se agote +Desventaja: el horizonte de predicción es más largo, por lo que el error de control puede acumularse de forma más notable + +- `--chunk_size_threshold=0.5` + +Especifica cuándo solicitar el siguiente bloque de acciones al servidor. + +Este es un umbral, normalmente en el rango de 0 a 1. + +Se puede entender como: cuando la proporción restante de la cola de acciones actual cae por debajo de este umbral, el cliente enviará por adelantado una nueva observación y solicitará el siguiente bloque de acciones. + +Configurar aquí el valor 0.5 significa: + +cuando el bloque de acciones actual se ha consumido aproximadamente a la mitad + +el cliente comienza a solicitar el siguiente bloque de acciones + +Cuanto mayor sea este valor, con más frecuencia se enviarán solicitudes y más receptivo será el sistema, pero también aumentará la carga en el servidor. + +Cuanto menor sea este valor, más se acercará el comportamiento a la inferencia síncrona. + +- `--aggregate_fn_name=weighted_average` + +Especifica el método de agregación para intervalos de acciones superpuestos. + +En la inferencia asíncrona, cuando el bloque de acciones antiguo aún no se ha ejecutado por completo, es posible que el nuevo bloque de acciones ya haya llegado. + +En ese caso, los dos bloques se superponen en parte del intervalo de tiempo, y se necesita una función de agregación para combinarlos en la acción final ejecutada. + +El significado de weighted_average es: + +usar un promedio ponderado para fusionar la parte superpuesta. + +Esto normalmente hace que el cambio de acciones sea más suave y reduce los cambios bruscos. + +- `--debug_visualize_queue_size=True` + +Indica si se visualiza el tamaño de la cola de acciones en tiempo de ejecución. + +Cuando está activado, te permite ver de forma más directa si la cola toca el fondo con frecuencia, lo que te ayuda a ajustar actions_per_chunk y chunk_size_threshold. + +#### Paso 5: Ajustar parámetros según el comportamiento del robot + +En la inferencia asíncrona, hay dos parámetros adicionales que necesitan ajuste y que no existen en la inferencia síncrona: + +Parámetro Valor inicial sugerido Descripción + +actions_per_chunk 50 Cuántas acciones genera la política de una sola vez. Valores típicos: 10–50. + +chunk_size_threshold 0.5 Cuando la proporción restante de la cola de acciones es ≤ chunk_size_threshold, el cliente envía una nueva solicitud de bloque de acciones. El rango de valores es [0, 1]. + +Cuando `--debug_visualize_queue_size=True`, el cambio en el tamaño de la cola de acciones se representará gráficamente en tiempo de ejecución. + +Lo que la inferencia asíncrona necesita equilibrar es: la velocidad a la que el servidor genera bloques de acciones debe ser mayor o igual que la velocidad a la que el cliente consume bloques de acciones. De lo contrario, la cola de acciones se vaciará y el robot comenzará a tartamudear de nuevo (esto puede verse como la curva tocando el fondo en la visualización de la cola). + +La velocidad a la que el servidor genera bloques de acciones se ve afectada por factores como el tamaño del modelo, el tipo de dispositivo, la VRAM / memoria y la potencia de cálculo de la GPU. + +La velocidad a la que el cliente consume bloques de acciones se ve afectada por los fps de ejecución configurados. + +Si la cola se vacía con frecuencia, necesitas aumentar actions_per_chunk, aumentar chunk_size_threshold o reducir los fps. + +Si la curva de la cola fluctúa con frecuencia pero las acciones restantes en la cola siempre son suficientes, puedes disminuir chunk_size_threshold de forma adecuada. + +En general: + +el rango empírico de actions_per_chunk es 10–50 + +el rango empírico de chunk_size_threshold es 0.5–0.7; al ajustar, se recomienda comenzar desde 0.5 e incrementarlo gradualmente + +
Si encuentras el siguiente error: @@ -1725,13 +2042,11 @@ huggingface-cli upload ${HF_USER}/act_so101_test${CKPT} \ outputs/train/act_so101_test/checkpoints/${CKPT}/pretrained_model ``` - - ## Preguntas frecuentes (FAQ) - Si estás siguiendo esta documentación/tutorial, por favor haz git clone del repositorio de GitHub recomendado `https://github.com/Seeed-Projects/lerobot.git`. El repositorio recomendado en esta documentación es una versión estable verificada; el repositorio oficial de Lerobot se actualiza continuamente a la última versión, lo que puede causar problemas imprevistos como diferentes versiones de conjuntos de datos, diferentes comandos, etc. -- Si encuentras el siguiente error al calibrar los ID de los servos: +- Si encuentras el siguiente error al calibrar los IDs de los servos: ```bash `Motor ‘gripper’ was not found, Make sure it is connected` @@ -1766,7 +2081,7 @@ huggingface-cli upload ${HF_USER}/act_so101_test${CKPT} \ ConnectionError: Failed to sync read 'Present_Position' on ids=[1,2,3,4,5,6] after 1 tries. [TxRxResult] There is no status packet! ``` - Debes comprobar si el brazo robótico en el puerto correspondiente está encendido y si los cables de datos de los servos de bus están sueltos o desconectados. Si la luz de un servo no está encendida, significa que el cable del servo anterior está suelto. + Necesitas comprobar si el brazo robótico en el puerto correspondiente está encendido y si los cables de datos de los servos de bus están sueltos o desconectados. Si la luz de un servo no está encendida, significa que el cable del servo anterior está suelto. - Si encuentras el siguiente error al calibrar el brazo robótico: @@ -1792,29 +2107,29 @@ huggingface-cli upload ${HF_USER}/act_so101_test${CKPT} \ Ten en cuenta que palabras clave como "front" y "side" en el parámetro `--robot.cameras` deben ser estrictamente coherentes con las utilizadas al recopilar el conjunto de datos. -- Si has reparado o reemplazado partes del brazo robótico, por favor elimina completamente los archivos en `~/.cache/huggingface/lerobot/calibration/robots` o `~/.cache/huggingface/lerobot/calibration/teleoperators` y recalibra el brazo robótico. De lo contrario, pueden aparecer mensajes de error, ya que la información de calibración se almacena en archivos JSON en estos directorios. +- Si has reparado o reemplazado partes del brazo robótico, por favor elimina completamente los archivos bajo `~/.cache/huggingface/lerobot/calibration/robots` o `~/.cache/huggingface/lerobot/calibration/teleoperators` y recalibra el brazo robótico. De lo contrario, pueden aparecer mensajes de error, ya que la información de calibración se almacena en archivos JSON en estos directorios. -- Entrenar ACT con 50 conjuntos de datos lleva aproximadamente 6 horas en un portátil con una RTX 3060 (8GB), y alrededor de 2-3 horas en ordenadores con GPU RTX 4090 o A100. +- Entrenar ACT con 50 conjuntos de datos lleva aproximadamente 6 horas en un portátil con una RTX 3060 (8GB), y alrededor de 2–3 horas en ordenadores con GPUs RTX 4090 o A100. - Durante la recopilación de datos, asegúrate de que la posición de la cámara, el ángulo y la iluminación ambiental sean estables. Reduce la cantidad de fondo inestable y de peatones capturados por la cámara, ya que cambios excesivos en el entorno de despliegue pueden hacer que el brazo robótico no pueda agarrar correctamente. -- Para el comando de recopilación de datos, asegúrate de que el parámetro `num-episodes` esté configurado para recopilar suficientes datos. No pauses manualmente a mitad de camino, ya que la media y la varianza de los datos se calculan solo después de que la recopilación de datos se haya completado, y son necesarias para el entrenamiento. +- Para el comando de recopilación de datos, asegúrate de que el parámetro `num-episodes` esté configurado para recopilar suficientes datos. No pauses manualmente a mitad de camino, ya que la media y la varianza de los datos se calculan solo después de que la recopilación de datos se haya completado, lo cual es necesario para el entrenamiento. -- Si el programa indica que no puede leer datos de imagen de la cámara USB, asegúrate de que la cámara USB no esté conectada a través de un hub. La cámara USB debe estar conectada directamente al dispositivo para garantizar una alta velocidad de transmisión de imágenes. +- Si el programa indica que no puede leer datos de imagen desde la cámara USB, asegúrate de que la cámara USB no esté conectada a través de un hub. La cámara USB debe estar conectada directamente al dispositivo para garantizar una alta velocidad de transmisión de imágenes. -- Si encuentras un bug como `AttributeError: module 'rerun' has no attribute 'scalar'. Did you mean: 'scalars'?`, puedes hacer un downgrade de la versión de rerun para resolver el problema. +- Si encuentras un bug como `AttributeError: module 'rerun' has no attribute 'scalar'. Did you mean: 'scalars'?`, puedes degradar la versión de rerun para resolver el problema. ```bash pip3 install rerun-sdk==0.23 ``` :::tip -Si encuentras problemas de software o de dependencias del entorno que no se puedan resolver, además de consultar la sección de Preguntas frecuentes (FAQ) al final de este tutorial, informa del problema de inmediato en la [plataforma LeRobot](https://github.com/huggingface/lerobot) o en el [canal de Discord de LeRobot](https://discord.gg/8TnwDdjFGU). +Si encuentras problemas de software o de dependencias del entorno que no se puedan resolver, además de revisar la sección de Preguntas Frecuentes al final de este tutorial, informa el problema de inmediato en la [plataforma LeRobot](https://github.com/huggingface/lerobot) o en el [canal de Discord de LeRobot](https://discord.gg/8TnwDdjFGU). ::: -## Citas +## Cita -[Documento en chino](https://wiki.seeedstudio.com/cn/lerobot_so100m_new/) +[Chinese Document](https://wiki.seeedstudio.com/cn/lerobot_so100m_new/) Proyecto TheRobotStudio: [SO-ARM10x](https://github.com/TheRobotStudio/SO-ARM100) diff --git a/sites/ja/docs/Robotics/Robot_Kits/Lerobot/ja_Lerobot_SO100Arm_New.md b/sites/ja/docs/Robotics/Robot_Kits/Lerobot/ja_Lerobot_SO100Arm_New.md index e2067f590e9f6..1092c699570ee 100644 --- a/sites/ja/docs/Robotics/Robot_Kits/Lerobot/ja_Lerobot_SO100Arm_New.md +++ b/sites/ja/docs/Robotics/Robot_Kits/Lerobot/ja_Lerobot_SO100Arm_New.md @@ -1,5 +1,5 @@ --- -description: このWikiでは、SO ARM100 の組み立てとデバッグのチュートリアルを提供し、最新バージョンの Lerobot フレームワーク内でのデータ収集と学習を実現します。 +description: このWikiでは、SO ARM100の組み立てとデバッグのチュートリアルを提供し、最新バージョンのLerobotフレームワーク内でのデータ収集とトレーニングを実現します。 title: Lerobot における SoArm keywords: - Lerobot @@ -10,25 +10,25 @@ image: https://files.seeedstudio.com/wiki/robotics/projects/lerobot/Arm_kit.webp slug: /lerobot_so100m_new sku: 114993666,114993667,114993668,101090144 last_update: - date: 3/2/2026 + date: 3/11/2026 author: ZhangJiaQuan translation: skip: - zh-CN -createdAt: '2025-09-12' -updatedAt: '2026-03-05' +createdAt: '2025-06-05' +updatedAt: '2026-03-03' url: https://wiki.seeedstudio.com/ja/lerobot_so100m_new/ --- -# SO-ARM100 および SO-ARM101 ロボットアームと LeRobot の入門 +# LeRobot を使った SO-ARM100 および SO-ARM101 ロボットアーム入門 :::tip -このチュートリアルのメンテナンスは、最新バージョンの [lerobot](https://huggingface.co/docs/lerobot/index) に更新されています。以前のバージョンのチュートリアルを参照したい場合は、[here](https://wiki.seeedstudio.com/ja/lerobot_so100m/) をクリックしてください。 +このチュートリアルのメンテナンスは、最新バージョンの[lerobot](https://huggingface.co/docs/lerobot/index)に更新されています。以前のバージョンのチュートリアルを参照したい場合は、[こちら](https://wiki.seeedstudio.com/ja/lerobot_so100m/)をクリックしてください。 ::: ## はじめに -[SO-10xARM](https://github.com/TheRobotStudio/SO-ARM100) は、[TheRobotStudio](https://www.therobotstudio.com/) によって立ち上げられた、完全オープンソースのロボットアームプロジェクトです。フォロワーアームとリーダーロボットアームを含み、詳細な 3D プリント用ファイルと操作ガイドも提供しています。[LeRobot](https://github.com/huggingface/lerobot/tree/main) は、PyTorch 上で実世界ロボティクス向けのモデル、データセット、ツールを提供することに注力しています。その目的は、ロボティクスの参入障壁を下げ、誰もがデータセットや事前学習済みモデルを共有することで貢献し、恩恵を受けられるようにすることです。LeRobot は、模倣学習を中心に、実世界で検証された最先端の手法を統合しています。人間によるデモンストレーションを含むデータセット、事前学習済みモデル群、シミュレーション環境を備えており、ユーザーはロボットの組み立てを行わなくてもすぐに開始できます。今後数週間で、現在入手可能な最もコストパフォーマンスに優れたロボットに対して、実世界ロボティクスのサポートをさらに拡充していく予定です。 +[SO-10xARM](https://github.com/TheRobotStudio/SO-ARM100) は、[TheRobotStudio](https://www.therobotstudio.com/) によって立ち上げられた完全オープンソースのロボットアームプロジェクトです。フォロワーアームとリーダーロボットアームが含まれており、詳細な3Dプリント用ファイルと操作ガイドも提供されています。[LeRobot](https://github.com/huggingface/lerobot/tree/main) は、PyTorch 上で実世界ロボティクス向けのモデル、データセット、ツールを提供することに注力しています。その目的は、ロボティクスの参入障壁を下げ、誰もがデータセットや事前学習済みモデルを共有することで貢献し、恩恵を受けられるようにすることです。LeRobot は、模倣学習を中心に、実世界で検証された最先端の手法を統合しています。人間が収集したデモンストレーションを含むデータセット、事前学習済みモデル群、およびシミュレーション環境を提供しており、ユーザーはロボットを組み立てることなくすぐに開始できます。今後数週間で、現在入手可能な中で最も低コストかつ高性能なロボットに対する実世界ロボティクスのサポートをさらに拡充する予定です。
@@ -36,8 +36,8 @@ url: https://wiki.seeedstudio.com/ja/lerobot_so100m_new/ ## プロジェクト概要 -SO-ARM10x と reComputer Jetson AI インテリジェントロボットキットは、高精度なロボットアーム制御と強力な AI コンピューティングプラットフォームをシームレスに統合し、包括的なロボット開発ソリューションを提供します。このキットは Jetson Orin または AGX Orin プラットフォームをベースに、SO-ARM10x ロボットアームと LeRobot AI フレームワークを組み合わせることで、教育、研究、産業オートメーションなど複数のシナリオに適用可能なインテリジェントロボットシステムをユーザーに提供します。 -このWikiでは、SO ARM10x の組み立てとデバッグのチュートリアルを提供し、Lerobot フレームワーク内でのデータ収集と学習を実現します。 +SO-ARM10x と reComputer Jetson AI インテリジェントロボットキットは、高精度なロボットアーム制御と強力なAIコンピューティングプラットフォームをシームレスに組み合わせ、包括的なロボット開発ソリューションを提供します。このキットは Jetson Orin または AGX Orin プラットフォームをベースに、SO-ARM10x ロボットアームと LeRobot AI フレームワークを組み合わせることで、教育、研究、産業オートメーションなど複数のシナリオに適用可能なインテリジェントロボットシステムをユーザーに提供します。 +このWikiでは、SO ARM10x の組み立てとデバッグのチュートリアルを提供し、Lerobot フレームワーク内でのデータ収集とトレーニングを実現します。
- - - + + + - - + + @@ -111,13 +111,13 @@ Seeed Studio はハードウェア自体の品質にのみ責任を負います - + @@ -136,66 +136,66 @@ Seeed Studio はハードウェア自体の品質にのみ責任を負います :::danger -Arm Kit バージョンを購入した場合、両方の電源は 5V です。Arm Kit Pro バージョンを購入した場合は、リーダーロボットアームのキャリブレーションおよび各ステップには 5V 電源を、フォロワーロボットアームのキャリブレーションおよび各ステップには 12V 電源を使用してください。 +Arm Kit バージョンを購入した場合、両方の電源は 5V です。Arm Kit Pro バージョンを購入した場合は、リーダーロボットアームのキャリブレーションおよびすべての手順には 5V 電源を使用し、フォロワーロボットアームのキャリブレーションおよびすべての手順には 12V 電源を使用してください。 ::: -## 部品表 (BOM) +## 部品表(BOM) -| 部品 | 数量 | 同梱 | +| 部品 | 数量 | 同梱| |--|--|--| | サーボモーター | 12 | ✅ | | モーター制御ボード | 2 | ✅ | -| USB-C Cable 2 pcs | 1 | ✅ | -| Power Supply2 | 2 | ✅ | -| テーブルクランプ | 4 | ✅ | -| アームの 3D プリント部品 | 1 | Option | +| USB-C ケーブル 2 本 | 1 | ✅ | +| 電源2 | 2 | ✅ | +| テーブルクランプ| 4 | ✅ | +| アームの3Dプリント部品 | 1 | オプション | ## 初期システム環境 **Ubuntu x86 の場合:** - Ubuntu 22.04 -- CUDA 12+ +- CUDA 12 以上 - Python 3.10 -- Torch 2.6+ +- Torch 2.6 以上 **Jetson Orin の場合:** - Jetson JetPack 6.0 および 6.1、6.1 はサポートされていません - Python 3.10 -- Torch 2.3+ +- Torch 2.3 以上 ## 目次 [A. 3D プリントガイド](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#3d-プリントガイド) - [B. Install LeRobot](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#install-lerobot) + [B. LeRobot のインストール](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#install-lerobot) - [C. Configure the motors](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#configure-the-motors) + [C. モーターの設定](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#モーターの設定) - [D. Assembly](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#assembly) + [D. 組み立て](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#組み立て) - [E. Calibrate](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#calibrate) + [E. キャリブレーション](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#キャリブレーション) - [F. Teleoperate](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#teleoperate) + [F. テレオペレーション](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#テレオペレーション) - [G. Add cameras](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#add-cameras) + [G. カメラの追加](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#カメラの追加) - [H. Record the dataset](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#record-the-dataset) + [H. データセットの記録](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#データセットの記録) - [I. Visualize the dataset](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#visualize-the-dataset) + [I. データセットの可視化](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#データセットの可視化) - [J. Replay an episode](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#replay-an-episode) + [J. エピソードのリプレイ](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#エピソードのリプレイ) - [K. Train a policy](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#train-a-policy) + [K. ポリシーのトレーニング](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#ポリシーのトレーニング) - [L. Evaluate your policy](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#evaluate-your-policy) + [L. ポリシーの評価](https://wiki.seeedstudio.com/ja/lerobot_so100m_new/#ポリシーの評価) ## 3D プリントガイド :::caution -SO101 の公式アップデートに伴い、SO100 は今後サポートされず、公式の方針によりソースファイルは削除されますが、ソースファイルは引き続き当社の [Makerworld](https://makerworld.com/zh/models/908660) で見つけることができます。ただし、以前に SO100 を購入したユーザー向けには、チュートリアルとインストール方法は引き続き互換性があります。SO101 のプリントは、SO100 のモーターキットの取り付けと完全に互換性があります。 +SO101 の公式アップデートに伴い、SO100 は今後サポートされず、公式の方針によりソースファイルは削除されますが、ソースファイルは引き続き当社の[Makerworld](https://makerworld.com/zh/models/908660)で見つけることができます。ただし、以前に SO100 を購入したユーザーについては、チュートリアルと取り付け方法は引き続き互換性があります。SO101 のプリントは、SO100 のモーターキットの取り付けと完全に互換性があります。 ::: ### ステップ 1: プリンタを選ぶ @@ -208,23 +208,23 @@ SO101 の公式アップデートに伴い、SO100 は今後サポートされ ### ステップ 2: プリンタをセットアップする -- プリンタ固有の手順に従って、プリンタが適切にキャリブレーションされており、ベッドレベルが正しく設定されていることを確認します。 -- プリントベッドを清掃し、ほこりや油分が付着していないことを確認します。水やその他の液体でベッドを清掃した場合は、ベッドを乾かしてください。 +- プリンタ固有の手順に従ってプリンタをキャリブレーションし、ベッドレベリングが正しく設定されていることを確認します。 +- プリントベッドを清掃し、ほこりや油分が付着していないことを確認します。水やその他の液体でベッドを清掃した場合は、必ず乾かしてください。 - プリンタで推奨されている場合は、標準的なスティックのりを使用し、ベッドのプリント領域全体に薄く均一な層を塗布します。ダマになったり、ムラが出たりしないように注意してください。 -- プリンタ固有の手順に従ってフィラメントをロードします。 +- プリンタ固有の手順に従ってプリンタフィラメントを装填します。 - プリンタ設定が上記で提案した設定と一致していることを確認します(ほとんどのプリンタには複数の設定があるため、最も近いものを選択してください)。 -- サポートは「everywhere」に設定しますが、水平方向に対して 45 度を超える傾斜は無視します。 -- 水平軸を持つネジ穴の中にはサポートがあってはなりません。 +- サポートは「すべての場所」に設定しますが、水平方向に対して 45 度を超える傾斜は無視するように設定します。 +- 水平軸を持つネジ穴の中にはサポートが入らないようにしてください。 ### ステップ 3: パーツを印刷する -リーダーまたはフォロワー用のすべてのパーツは、サポートを最小限に抑えるために z 方向が上になるよう正しく向きを揃えた単一ファイル内に、簡単に 3D プリントできる形で既に含まれています。 +リーダーまたはフォロワー用のすべてのパーツは、サポートを最小限に抑えるために z 方向が上になるよう正しく向きを揃えた単一ファイル内に、3D プリントしやすい形で既にまとめられています。 -- ベッドサイズが 220mm x 220mm(Ender など)のプリンタの場合、次のファイルを印刷します: +- Ender など、プリンタベッドサイズが 220mm x 220mm の場合は、次のファイルを印刷します: - [Follower](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Follower/Ender_Follower_SO101.stl) - [Leader](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Leader/Ender_Leader_SO101.stl) -- ベッドサイズが 205mm x 250mm(Prusa/Up など)のプリンタの場合: +- Prusa/Up など、プリンタベッドサイズが 205mm x 250mm の場合: - [Follower](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Follower/Prusa_Follower_SO101.stl) - [Leader](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Leader/Prusa_Leader_SO101.stl) @@ -275,13 +275,13 @@ conda install ffmpeg -c conda-forge :::tip これは通常、libsvtav1 エンコーダでコンパイルされた、プラットフォーム用の ffmpeg 7.X をインストールします。libsvtav1 がサポートされていない場合(`ffmpeg -encoders` でサポートされているエンコーダを確認)、次のことができます: -- [任意のプラットフォームで] 次を使用して ffmpeg 7.X を明示的にインストールします: +- [任意のプラットフォーム] 次のコマンドを使用して、明示的に ffmpeg 7.X をインストールします: ```bash conda install ffmpeg=7.1.1 -c conda-forge ``` -- [Linux のみ] ffmpeg のビルド依存関係をインストールし、libsvtav1 を有効にしてソースから ffmpeg をコンパイルし、`which ffmpeg` で確認できるインストール先に対応する ffmpeg バイナリを使用していることを確認します。 +- [Linux のみ] ffmpeg のビルド依存関係をインストールし、libsvtav1 を有効にしてソースから ffmpeg をコンパイルし、`which ffmpeg` で確認できる、インストールに対応した ffmpeg バイナリを使用していることを確認します。 このようなエラーが発生した場合は、このコマンドも使用できます。 @@ -298,7 +298,7 @@ conda install ffmpeg=7.1.1 -c conda-forge cd ~/lerobot && pip install -e ".[feetech]" ``` -Jetson Jetpack 6.0+ デバイスの場合(このステップを実行する前に、ステップ 5 から [Pytorch-gpu and Torchvision](https://github.com/Seeed-Projects/reComputer-Jetson-for-Beginners/tree/main/3-Basic-Tools-and-Getting-Started/3.5-Pytorch) を必ずインストールしてください): +Jetson Jetpack 6.0+ デバイスの場合(このステップを実行する前に、ステップ 5 から [Pytorch-gpu と Torchvision](https://github.com/Seeed-Projects/reComputer-Jetson-for-Beginners/tree/main/3-Basic-Tools-and-Getting-Started/3.5-Pytorch) を必ずインストールしてください): ```bash conda install -y -c conda-forge "opencv>=4.10.0.84" # Install OpenCV and other dependencies through conda, this step is only for Jetson Jetpack 6.0+ @@ -311,16 +311,16 @@ pip3 install numpy==1.26.0 # This should match torchvision 6. Pytorch と Torchvision を確認する -pip を介して lerobot 環境をインストールすると、元の Pytorch と Torchvision がアンインストールされ、CPU 版の Pytorch と Torchvision がインストールされるため、Python で確認を行う必要があります。 +pip で lerobot 環境をインストールすると、元の Pytorch と Torchvision がアンインストールされ、CPU 版の Pytorch と Torchvision がインストールされるため、Python で確認を行う必要があります。 ```python import torch print(torch.cuda.is_available()) ``` -出力結果が False の場合は、[公式サイトのチュートリアル](https://pytorch.org/index.html)に従って Pytorch と Torchvision を再インストールする必要があります。 +出力結果が False の場合は、[公式サイトのチュートリアル](https://pytorch.org/index.html) に従って Pytorch と Torchvision を再インストールする必要があります。 -Jetson デバイスを使用している場合は、[このチュートリアル](https://github.com/Seeed-Projects/reComputer-Jetson-for-Beginners/blob/main/3-Basic-Tools-and-Getting-Started/3.3-Pytorch-and-Tensorflow/README.md#installing-pytorch-on-recomputer-nvidia-jetson)に従って Pytorch と Torchvision をインストールしてください。 +Jetson デバイスを使用している場合は、[このチュートリアル](https://github.com/Seeed-Projects/reComputer-Jetson-for-Beginners/blob/main/3-Basic-Tools-and-Getting-Started/3.3-Pytorch-and-Tensorflow/README.md#installing-pytorch-on-recomputer-nvidia-jetson) に従って Pytorch と Torchvision をインストールしてください。 ## モーターを設定する @@ -331,9 +331,9 @@ import TabItem from '@theme/TabItem'; -SO-ARM101 のサーボのキャリブレーションおよび初期化プロセスは、方法とコードの両方の点で SO-ARM100 と同じです。ただし、SO-ARM101 の Leader Arm の最初の 3 つの関節のギア比は SO-ARM100 とは異なるため、それらを区別して慎重にキャリブレーションすることが重要です。 +SO-ARM101 のサーボのキャリブレーションおよび初期化プロセスは、方法とコードの両方の点で SO-ARM100 と同じです。ただし、SO-ARM101 のリーダーアームの最初の 3 つの関節のギア比は SO-ARM100 とは異なるため、それらを区別して慎重にキャリブレーションすることが重要です。 -モーターを設定するには、1 つのバスサーボアダプタと 6 個のモーターをリーダーアーム用に割り当て、同様にもう 1 つのバスサーボアダプタと 6 個のモーターをフォロワーアーム用に割り当てます。どのモーターがフォロワー F 用か、リーダー L 用か、そして ID が 1 から 6 のいずれであるかを各モーターに記入してラベル付けしておくと便利です。**Follower Arm** の関節 1〜6 を表すために **F1–F6** を使用し、**Leader Arm** の関節 1〜6 を表すために **L1–L6** を使用します。対応するサーボモデル、関節の割り当て、およびギア比の詳細は次のとおりです: +モーターを設定するには、1 つのバスサーボアダプタと 6 個のモーターをリーダーアーム用に割り当て、同様にもう一方のバスサーボアダプタと 6 個のモーターをフォロワーアーム用に割り当てます。どのモーターがフォロワー F 用か、リーダー L 用か、そして ID が 1 から 6 のいくつであるかを各モーターに書き込んでラベル付けしておくと便利です。**F1–F6** を **Follower Arm** の関節 1〜6、**L1–L6** を **Leader Arm** の関節 1〜6 を表すものとして使用します。対応するサーボモデル、関節の割り当て、およびギア比の詳細は次のとおりです: | サーボモデル | ギア比 | 対応する関節 | |----------------------------------------|------------|------------------------------| @@ -344,7 +344,7 @@ SO-ARM101 のサーボのキャリブレーションおよび初期化プロセ | ST-3215-C001(7.4V) / C018(12V) / C047(12V) | 1:345 | F1–F6 | :::danger -ここで、5V または 12V の電源をモーターバスに接続する必要があります。STS3215 7.4V モーターには 5V、STS3215 12V モーターには 12V を使用します。リーダーアームは常に 7.4V モーターを使用するため、12V と 7.4V のモーターが混在している場合は、誤ってモーターを焼損させないよう、正しい電源を接続していることに注意してください。次に、モーターバスを USB 経由でコンピュータに接続します。USB は電源を供給しないため、電源と USB の両方を接続する必要があることに注意してください。 +ここで、5V または 12V の電源をモーターバスに接続する必要があります。STS3215 7.4V モーターには 5V、STS3215 12V モーターには 12V を使用します。リーダーアームは常に 7.4V モーターを使用するため、12V と 7.4V のモーターが混在している場合は、誤った電源を接続してモーターを焼損させないよう十分注意してください。次に、モーターバスを USB 経由でコンピュータに接続します。USB からは電源が供給されないため、電源と USB の両方を接続する必要があることに注意してください。 :::
@@ -392,7 +392,7 @@ sudo chmod 666 /dev/ttyACM1 **モーターを設定する** :::danger -Leader モーター(ST-3215-C046, C044, 001)のキャリブレーションには 5V 電源を使用してください。 +リーダーモーター(ST-3215-C046, C044, 001)のキャリブレーションには 5V 電源を使用してください。 ::: | **Leader Arm 関節 6 のキャリブレーション** | **Leader Arm 関節 5 のキャリブレーション** | **Leader Arm 関節 4 のキャリブレーション** | **Leader Arm 関節 3 のキャリブレーション** | **Leader Arm 関節 2 のキャリブレーション** | **Leader Arm 関節 1 のキャリブレーション** | @@ -408,7 +408,7 @@ Arm Kit バージョン(ST-3215-C001)を購入した場合は 5V 電源を | ![fig1](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_F6.jpg) | ![fig2](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_F5.jpg) | ![fig3](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_F4.jpg) |![fig4](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_F3.jpg) |![fig5](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_F2.jpg) |![fig6](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/cal_F1.jpg) | :::tip -もう一度、サーボジョイントのIDとギア比が、SO-ARM101 のものと厳密に一致していることを必ず確認してください。 +繰り返しになりますが、サーボジョイントのIDと減速比が、SO-ARM101 のものと厳密に一致していることを必ず確認してください。 ::: コンピュータからフォロワーアームのコントローラボードへ USB ケーブルを接続し、電源も接続します。その後、次のコマンドを実行します。 @@ -419,13 +419,13 @@ lerobot-setup-motors \ --robot.port=/dev/ttyACM0 # <- paste here the port found at previous step ``` -次の指示が表示されるはずです。 +次の指示が表示されます。 ```bash Connect the controller board to the 'gripper' motor only and press enter. ``` -指示に従い、グリッパーのモーターを接続します。そのモーターだけがボードに接続されており、かつそのモーター自体がまだ他のモーターとデイジーチェーン接続されていないことを確認してください。[Enter] を押すと、スクリプトがそのモーターの id とボーレートを自動的に設定します。 +指示どおりに、グリッパーのモーターを接続します。このとき、ボードに接続されているモーターがそのモーターだけであること、またそのモーター自体がまだ他のモーターとデイジーチェーン接続されていないことを確認してください。[Enter] を押すと、スクリプトがそのモーターの ID とボーレートを自動的に設定します。 その後、次のメッセージが表示されます。 @@ -433,23 +433,23 @@ Connect the controller board to the 'gripper' motor only and press enter. 'gripper' motor id set to 6 ``` -続いて次の指示が表示されます。 +続いて、次の指示が表示されます。 ```bash Connect the controller board to the 'wrist_roll' motor only and press enter. ``` -コントローラボードから 3 ピンケーブルを取り外して構いませんが、反対側のグリッパーモーターには接続したままで問題ありません。すでに正しい位置にあるためです。次に、別の 3 ピンケーブルを手首ロールモーターに接続し、それをコントローラボードに接続します。前のモーターと同様に、そのモーターだけがボードに接続されており、かつそのモーター自体が他のどのモーターとも接続されていないことを確認してください。 +コントローラボードから 3 ピンケーブルを外して構いませんが、反対側のグリッパーモーターには接続したままで問題ありません。すでに正しい位置にあります。次に、別の 3 ピンケーブルを手首ロールモーターに接続し、それをコントローラボードに接続します。前のモーターと同様に、ボードに接続されているモーターがそのモーターだけであり、そのモーター自体が他のモーターに接続されていないことを確認してください。 :::caution -指示されたとおりに、各モーターに対してこの操作を繰り返してください。 +指示に従って、各モーターに対して同じ操作を繰り返してください。 ::: :::tip Enter を押す前に、各ステップで配線を確認してください。例えば、ボードを操作している間に電源ケーブルが外れてしまうことがあります。 ::: -完了するとスクリプトは単に終了し、その時点でモーターは使用可能な状態になります。各モーターから次のモーターへ 3 ピンケーブルを接続し、最初のモーター(id=1 の「shoulder pan」)からのケーブルをコントローラボードに接続します。コントローラボードはアームのベースに取り付けることができます。 +完了するとスクリプトは終了し、その時点でモーターは使用可能な状態になります。各モーターから次のモーターへ 3 ピンケーブルを接続し、最初のモーター(id=1 の「shoulder pan」)からのケーブルをコントローラボードに接続します。コントローラボードはアームのベースに取り付けることができます。 リーダーアームについても同じ手順を実行します。 @@ -471,12 +471,12 @@ lerobot-setup-motors \ :::tip -- SO-ARM101 のデュアルアーム組み立て手順は SO-ARM100 と同じです。唯一の違いは、SO-ARM101 ではケーブルクリップが追加されていることと、リーダーアームのジョイントサーボのギア比が異なることです。そのため、SO100 と SO101 のどちらも、以下の内容を参照して組み立てることができます。 +- SO-ARM101 のデュアルアーム組み立て手順は SO-ARM100 と同じです。唯一の違いは、SO-ARM101 ではケーブルクリップが追加されていることと、リーダーアームのジョイントサーボの減速比が異なることです。そのため、SO100 と SO101 のどちらも、以下の内容を参照して組み立てることができます。 - 組み立て前に、モーターモデルと減速比をもう一度確認してください。SO100 を購入した場合は、このステップは無視して構いません。SO101 を購入した場合は、以下の表を確認して F1〜F6 と L1〜L6 を区別してください。 ::: - | サーボモデル | ギア比 | 対応するジョイント | + | サーボモデル | 減速比 | 対応するジョイント | |----------------------------------------|------------|------------------------------| | ST-3215-C044(7.4V) | 1:191 | L1 | | ST-3215-C001(7.4V) | 1:345 | L2 | @@ -526,7 +526,7 @@ SO100 と SO101 のコードは互換性があります。SO100 のユーザー **SO101 Arm Kit Standard Edition** を購入した場合、すべての電源は 5V です。**SO101 Arm Kit Pro Edition** を購入した場合、リーダーアームは各ステップで 5V 電源を使用してキャリブレーションおよび動作させる必要があり、フォロワーアームは各ステップで 12V 電源を使用してキャリブレーションおよび動作させる必要があります。 ::: -次に、SO-10x ロボットに電源とデータケーブルを接続してキャリブレーションを行い、同じ物理位置にあるときにリーダーアームとフォロワーアームが同じ位置値を持つようにする必要があります。このキャリブレーションは、ある SO-10x ロボットで学習したニューラルネットワークを別の SO-10x ロボットでも動作させるために不可欠です。ロボットアームを再キャリブレーションする必要がある場合は、`~/.cache/huggingface/lerobot/calibration/robots` または `~/.cache/huggingface/lerobot/calibration/teleoperators` 配下のファイルを削除してから、ロボットアームを再キャリブレーションしてください。そうしないと、エラーのプロンプトが表示されます。ロボットアームのキャリブレーション情報は、このディレクトリ配下の JSON ファイルに保存されます。 +次に、SO-10x ロボットに電源とデータケーブルを接続してキャリブレーションを行い、同じ物理位置にあるときにリーダーアームとフォロワーアームの位置値が同じになるようにする必要があります。このキャリブレーションは、ある SO-10x ロボットで学習したニューラルネットワークを別の SO-10x ロボットでも動作させるために不可欠です。ロボットアームを再キャリブレーションする必要がある場合は、`~/.cache/huggingface/lerobot/calibration/robots` または `~/.cache/huggingface/lerobot/calibration/teleoperators` 配下のファイルを削除してから、ロボットアームを再キャリブレーションしてください。そうしないと、エラーのプロンプトが表示されます。ロボットアームのキャリブレーション情報は、このディレクトリ配下の JSON ファイルに保存されます。 :::tip PC(Linux)および Jetson デバイスでは、最初に接続した USB デバイスは通常 `ttyACM0` に、2 番目は `ttyACM1` にマッピングされます。コマンドを実行する前に、どのポートがリーダーとフォロワーにマッピングされているかを必ず再確認してください。 @@ -534,7 +534,7 @@ PC(Linux)および Jetson デバイスでは、最初に接続した USB デ **フォロワーアームの手動キャリブレーション** -6つのロボットサーボのインターフェースを3ピンケーブルで接続し、シャーシサーボをサーボドライブプレートに接続してから、次のコマンドまたはAPIサンプルを実行してロボットアームをキャリブレーションします: +6つのロボットサーボのインターフェースを3ピンケーブルで接続し、シャーシサーボをサーボドライブプレートに接続してから、次のコマンドまたは API の例を実行してロボットアームをキャリブレーションします: ***まずインターフェース権限を付与します*** @@ -551,11 +551,11 @@ lerobot-calibrate \ --robot.id=my_awesome_follower_arm # <- Give the robot a unique name ``` -以下のビデオはキャリブレーションの方法を示しています。まず、すべての関節が可動範囲の中央になる位置にロボットを移動させる必要があります。その後、Enterキーを押したら、各関節を可動範囲全体にわたって動かします。 +以下の動画はキャリブレーションの方法を示しています。まず、すべての関節が可動範囲の中央になる位置にロボットを移動させる必要があります。その後、Enter キーを押したら、各関節を可動範囲いっぱいまで動かしてください。 **リーダーアームの手動キャリブレーション** -同じ手順でリーダーアームをキャリブレーションし、次のコマンドまたはAPIサンプルを実行します: +同じ手順でリーダーアームをキャリブレーションします。次のコマンドまたは API の例を実行してください: ```python lerobot-calibrate \ @@ -568,13 +568,13 @@ lerobot-calibrate \
-### (オプション)Seeed Studio SoARM クイックツールによる中立位置キャリブレーション +### (オプション)Seeed Studio SoARM クイックツールによる中央位置キャリブレーション ロボットのキャリブレーションや動作中に、次のようなエラーが表示される場合があります: `Magnitude 30841 exceeds 2047 (max for sign_bit_index=11)` -これは通常、サーボの現在位置/ゼロオフセットが異常で、読み取られる角度が想定範囲を超えていることを意味します。その場合、Seeed Studio の SoARM ツールを使用して**中立位置キャリブレーション**(現在位置を書き込み値 **2048** の中央に設定)を行い、その後にアーム全体のキャリブレーションをやり直すことができます。 +これは通常、サーボの現在位置/ゼロオフセットが異常で、読み取った角度が想定範囲を超えていることを意味します。その場合、Seeed Studio の SoARM ツールを使用して**中央位置キャリブレーション**(現在位置を中央値 **2048** として書き込み)を行い、その後にアーム全体のキャリブレーションをやり直してください。 #### 1) GitHub からツールをクローンし、依存関係をインストールする @@ -584,11 +584,11 @@ cd Seeed_RoboController pip install -r requirements.txt ``` -#### 2) 中立位置キャリブレーションと検証 +#### 2) 中央位置キャリブレーションと検証 スクリプトの場所: -- `src/tools/servo_middle_calibration.py`:中立位置キャリブレーション(現在位置を **2048** として書き込み) +- `src/tools/servo_middle_calibration.py`:中央位置キャリブレーション(現在位置を **2048** として書き込み) - `src/tools/servo_disable.py`:サーボトルクを無効化(手で関節を回しやすくする) - `src/tools/servo_center_test.py`:**2048** に移動してキャリブレーション結果を検証 @@ -600,26 +600,26 @@ pip install -r requirements.txt python -m src.tools.servo_disable ``` -2. 中立位置キャリブレーションを行う(現在位置を 2048 に設定): +2. 中央位置キャリブレーションを行う(現在位置を 2048 に設定): ```bash python -m src.tools.servo_middle_calibration ``` -3. 検証:サーボを 2048 に移動し、想定される中立位置に戻るか確認する: +3. 検証:サーボを 2048 に移動し、想定どおり中央位置に戻るか確認する: ```bash python -m src.tools.servo_center_test ``` -中立位置キャリブレーションが完了したら、上記の `lerobot-calibrate` 手順に戻り、アーム全体のキャリブレーションをやり直します。 +中央位置キャリブレーションが完了したら、上記の `lerobot-calibrate` の手順に戻り、アーム全体のキャリブレーションをやり直してください。 ## テレオペレーション **シンプルなテレオペ** これでロボットをテレオペレーションする準備が整いました!次のシンプルなスクリプトを実行します(カメラには接続せず、表示もしません): -ロボットに関連付けられた id はキャリブレーションファイルを保存するために使用されます。同じ構成を使用する場合、テレオペレーション、記録、評価の際には同じ id を使用することが重要です。 +ロボットに関連付けられた id はキャリブレーションファイルの保存に使用されます。同じ構成を使用する場合、テレオペレーション、記録、評価の際には同じ id を使用することが重要です。 ```bash sudo chmod 666 /dev/ttyACM* @@ -688,7 +688,7 @@ teleoperate コマンドは自動的に次のことを行います: pip install numpy==1.26.0 ``` - 赤いエラーメッセージは無視して構いません。 + 赤いエラーメッセージは無視してかまいません。 4. Orbbec SDK を `~/lerobot/src/lerobot/cameras` ディレクトリにクローンする @@ -699,7 +699,7 @@ teleoperate コマンドは自動的に次のことを行います: 5. utils.py と **init**.py を修正する -- `~/lerobot/src/lerobot/cameras` ディレクトリ内の `utils.py` を見つけ、45行目付近に次のコードを追加します: +- `~/lerobot/src/lerobot/cameras` ディレクトリ内の `utils.py` を見つけ、45 行目前後に次のコードを追加します: ```python elif cfg.type == "orbbec": @@ -713,7 +713,7 @@ elif cfg.type == "orbbec": src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/utils.png" /> -- `~/lerobot/src/lerobot/cameras` ディレクトリ内の `__init__.py` を見つけ、18行目に次のコードを追加します: +- `~/lerobot/src/lerobot/cameras` ディレクトリ内の `__init__.py` を見つけ、18 行目に次のコードを追加します: ```python from .orbbec.configuration_orbbec import OrbbecCameraConfig @@ -726,9 +726,9 @@ from .orbbec.configuration_orbbec import OrbbecCameraConfig - 🚀 ステップ 2: 関数呼び出しとサンプル -以下のすべてのサンプルにおいて、`so101_follower` を使用しているロボットアームの実際のモデル(例:`so100` / `so101`)に置き換えてください。 +以下のすべての例で、`so101_follower` を使用しているロボットアームの実際のモデル(例:`so100` / `so101`)に置き換えてください。 -`focus_area` ハイパーパラメータを追加しました。ロボットアームにとって遠すぎる深度データは意味がない(到達・把持できない)ため、`focus_area` より小さいまたは大きい深度データは黒で表示されます。デフォルトの `focus_area` は (20, 600) です。 +`focus_area` ハイパーパラメータを追加しました。ロボットアームにとって遠すぎる深度データは意味がない(到達も把持もできない)ため、`focus_area` より小さいまたは大きい深度データは黒で表示されます。デフォルトの `focus_area` は (20, 600) です。 現在サポートされている解像度は、幅:640、高さ:880 のみです。 ```bash @@ -748,7 +748,7 @@ lerobot-teleoperate \ src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/orbbec_result.png" /> -データ収集、学習、評価などの後続タスクについては、通常の RGB コマンドと手順は同じです。通常の RGB コマンド内の該当部分を次のように置き換えるだけで構いません: +データ収集、学習、評価などの後続タスクについては、通常の RGB コマンドと手順は同じです。通常の RGB コマンド内の該当部分を次のように置き換えるだけでかまいません: ```bash --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \ @@ -762,7 +762,7 @@ lerobot-teleoperate \ SO100 と SO101 のコードは互換性があります。SO100 のユーザーは、SO101 のパラメータとコードをそのまま利用して動作させることができます。 ::: -カメラをインスタンス化するには、カメラ識別子が必要です。この識別子は、コンピュータを再起動したりカメラを再接続したりすると変更される場合があり、この挙動は主にオペレーティングシステムに依存します。 +カメラをインスタンス化するには、カメラ識別子が必要です。この識別子は、コンピュータを再起動したりカメラを再接続したりすると変更される場合があり、主にオペレーティングシステムに依存する挙動です。 システムに接続されているカメラのインデックスを見つけるには、次のスクリプトを実行します: @@ -791,10 +791,10 @@ Camera #0: 各カメラで撮影された画像は、`outputs/captured_images` ディレクトリで確認できます。 :::warning -Intel RealSense カメラを使用する際、次のようなエラーが発生する場合があります:これは、同じコマンドを権限付きで実行することで解決できます。なお、RealSense カメラを macOS で使用する場合は不安定です。OSError finding RealSense cameras: failed to set power statesudo +Intel RealSense カメラを macOS で使用する際に、次のようなエラーが発生することがあります:`OSError finding RealSense cameras: failed to set power state`。これは同じコマンドを sudo 権限で実行することで解決できます。なお、macOS で RealSense カメラを使用する場合は動作が不安定です。 ::: -その後、次のコードを実行することで、テレオペレーション中にコンピュータ上でカメラ映像を表示できるようになります。これは、最初のデータセットを記録する前にセットアップを準備するのに役立ちます。 +その後、次のコードを実行することで、テレオペレーション中にコンピュータ上にカメラ映像を表示できるようになります。これは、最初のデータセットを記録する前にセットアップを準備するのに役立ちます。 ```bash lerobot-teleoperate \ @@ -808,14 +808,13 @@ lerobot-teleoperate \ --display_data=true ``` -カメラをさらに追加する場合は、`--robot.cameras` を変更してカメラを追加できます。`python -m lerobot.find_cameras opencv` を実行した際に出力されるカメラ ID の末尾の数字によって `index_or_path` の形式が決まる点に注意してください。 +複数のカメラがある場合は、`--robot.cameras` を変更してカメラを追加できます。`python -m lerobot.find_cameras opencv` を実行した際に出力されるカメラ ID の末尾の数字によって決まる、index_or_path の形式に注意してください。 :::tip -`fourcc: "MJPG"` 形式の画像は圧縮されています。より高い解像度を試すことができ、`YUYV` 形式を試すことも可能です。ただし後者は画像解像度と FPS を低下させ、ロボットアームの動作にラグが発生します。現在、`MJPG` 形式では `1920*1080` の解像度で 3 台のカメラを `30FPS` を維持したままサポートできます。とはいえ、同じ USB HUB を介して 2 台のカメラを 1 台のコンピュータに接続することは依然として推奨されません。 +`fourcc: "MJPG"` 形式の画像は圧縮されています。より高い解像度を試すことができ、`YUYV` 形式を試すこともできます。ただし後者は画像の解像度と FPS を低下させ、ロボットアームの動作にラグが発生します。現在、`MJPG` 形式では `1920*1080` の解像度で 3 台のカメラを `30FPS` を維持したままサポートできます。とはいえ、同じ USB HUB を介して 2 台のカメラを 1 台のコンピュータに接続することは依然として推奨されません。 ::: - -例えば、サイドカメラを追加したい場合は次のようにします: +例えば、サイドカメラを追加したい場合: ```bash lerobot-teleoperate \ @@ -830,12 +829,11 @@ lerobot-teleoperate \ ``` :::tip -`fourcc: "MJPG"` 形式の画像は圧縮されています。より高い解像度を試すことができ、`YUYV` 形式を試すことも可能です。ただし後者は画像解像度と FPS を低下させ、ロボットアームの動作にラグが発生します。現在、`MJPG` 形式では `1920*1080` の解像度で 3 台のカメラを `30FPS` を維持したままサポートできます。とはいえ、同じ USB HUB を介して 2 台のカメラを 1 台のコンピュータに接続することは依然として推奨されません。 +`fourcc: "MJPG"` 形式の画像は圧縮されています。より高い解像度を試すことができ、`YUYV` 形式を試すこともできます。ただし後者は画像の解像度と FPS を低下させ、ロボットアームの動作にラグが発生します。現在、`MJPG` 形式では `1920*1080` の解像度で 3 台のカメラを `30FPS` を維持したままサポートできます。とはいえ、同じ USB HUB を介して 2 台のカメラを 1 台のコンピュータに接続することは依然として推奨されません。 ::: - :::tip -このようなバグが発生した場合。 +このようなバグを見つけた場合。
[ACT](https://huggingface.co/docs/lerobot/act) @@ -1060,7 +1057,6 @@ lerobot-replay \ **学習(Train)** - ```bash lerobot-train \ --dataset.repo_id=${HF_USER}/so101_test \ @@ -1086,14 +1082,13 @@ lerobot-train \ --steps=300000 ``` -説明すると、次のとおりです。 - -- **データセットの指定**: パラメータ `--dataset.repo_id=${HF_USER}/so101_test` を使ってデータセットを指定します。 -- **学習ステップ数**: `--steps=300000` を使って学習ステップ数を変更します。アルゴリズムのデフォルトは 800000 ステップであり、タスクの難易度や学習中の loss を観察しながら調整できます。 -- **ポリシータイプ**: `policy.type=act` でポリシーを指定します。同様に、[`act`, `diffusion`, `pi0`, `pi0fast`, `pi0fast`, `sac`, `smolvla`] などのポリシーを切り替えることができ、その場合は `configuration_act.py` から設定が読み込まれます。重要な点として、このポリシーは、ロボット(例: `laptop` や `phone`)のモータ状態、モータアクション、カメラ数に自動的に適応します。これらの情報はすでにデータセット内に保存されているためです。 -- **デバイスの選択**: Nvidia GPU 上で学習しているため `policy.device=cuda` を指定していますが、Apple Silicon で学習する場合は `policy.device=mps` を使用できます。 -- **可視化ツール**: [Weights and Biases](https://docs.wandb.ai/quickstart) を使って学習チャートを可視化するために `wandb.enable=true` を指定します。これは任意ですが、使用する場合は `wandb login` を実行してログインしていることを確認してください。 +説明すると、次のとおりです: +- **データセットの指定**:パラメータ `--dataset.repo_id=${HF_USER}/so101_test` を使ってデータセットを指定します。 +- **学習ステップ数**:`--steps=300000` を使って学習ステップ数を変更します。アルゴリズムのデフォルトは 800000 ステップであり、タスクの難易度や学習中の loss を観察しながら調整できます。 +- **ポリシータイプ**:`policy.type=act` によってポリシーを指定します。同様に、[`act`, `diffusion`, `pi0`, `pi0fast`, `pi0fast`, `sac`, `smolvla`] などのポリシーを切り替えることができ、その場合は `configuration_act.py` から設定が読み込まれます。重要な点として、このポリシーは、ロボット(例:`laptop` や `phone`)のモータ状態、モータアクション、カメラ数に自動的に適応します。これらの情報はすでにデータセット内に保存されているためです。 +- **デバイスの選択**:Nvidia GPU 上で学習しているため `policy.device=cuda` を指定していますが、Apple Silicon で学習する場合は `policy.device=mps` を使用できます。 +- **可視化ツール**:`wandb.enable=true` を指定することで、[Weights and Biases](https://docs.wandb.ai/quickstart) を使って学習チャートを可視化できます。これは任意ですが、使用する場合は `wandb login` を実行してログインしていることを確認してください。 **評価(Evaluate)** @@ -1101,7 +1096,7 @@ lerobot-train \ SO100 と SO101 のコードは互換性があります。SO100 のユーザーは、SO101 のパラメータとコードをそのまま利用して動作させることができます。 ::: -ポリシーのチェックポイントを入力として、[`lerobot/record.py`](https://github.com/huggingface/lerobot/blob/main/lerobot/record.py) の `record` 関数を使用できます。例えば、次のコマンドを実行して 10 エピソード分の評価を記録します。 +ポリシーのチェックポイントを入力として、[`lerobot/record.py`](https://github.com/huggingface/lerobot/blob/main/lerobot/record.py) の `record` 関数を使用できます。例えば、次のコマンドを実行して 10 エピソード分の評価を記録します: ```bash lerobot-record \ @@ -1115,7 +1110,7 @@ lerobot-record \ --policy.path=${HF_USER}/my_policy ``` -例えば次のようになります。 +例えば次のようになります: ```bash lerobot-record \ @@ -1129,22 +1124,20 @@ lerobot-record \ --policy.path=outputs/train/act_so101_test/checkpoints/last/pretrained_model ``` -1. `--policy.path` パラメータは、ポリシー学習結果の重みファイルへのパスを示します(例: `outputs/train/act_so101_test/checkpoints/last/pretrained_model`)。モデル学習結果の重みファイルを Hub にアップロードした場合は、モデルリポジトリ(例: `${HF_USER}/act_so100_test`)を使用することもできます。 +1. `--policy.path` パラメータは、ポリシー学習結果の重みファイルへのパスを示します(例:`outputs/train/act_so101_test/checkpoints/last/pretrained_model`)。モデル学習結果の重みファイルを Hub にアップロードした場合は、モデルリポジトリ(例:`${HF_USER}/act_so100_test`)を使用することもできます。 2. データセット名 `dataset.repo_id` は `eval_` で始まります。この操作により、評価中の動画とデータが別々に記録され、`seeed/eval_test123` のような `eval_` で始まるフォルダに保存されます。 -3. 評価フェーズ中に `File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/seeed/eval_xxxx'` に遭遇した場合は、まず `eval_` で始まるフォルダを削除してから、再度プログラムを実行してください。 +3. 評価フェーズ中に `File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/seeed/eval_xxxx'` というメッセージが表示された場合は、まず `eval_` で始まるフォルダを削除してから、再度プログラムを実行してください。 -4. `mean is infinity. You should either initialize with stats as an argument or use a pretrained model` が発生した場合、`--robot.cameras` パラメータ内の front や side などのキーワードは、データセット収集時に使用したものと厳密に一致している必要があることに注意してください。 +4. `mean is infinity. You should either initialize with stats as an argument or use a pretrained model` というメッセージが表示された場合は、`--robot.cameras` パラメータ内の front や side といったキーワードが、データセット収集時に使用したものと厳密に一致している必要があることに注意してください。
- -
SmolVLA @@ -1152,7 +1145,7 @@ lerobot-record \ **環境をセットアップする** -次のコマンドを実行して SmolVLA の依存関係をインストールします。 +次のコマンドを実行して SmolVLA の依存関係をインストールします: ```bash pip install -e ".[smolvla]" @@ -1179,10 +1172,10 @@ lerobot-train \ ``` :::tip -GPU に余裕があり、ロード時間が短いままであれば、小さいバッチサイズから始めて徐々に増やしていくことができます。 +GPU に余裕があり、かつロード時間が短いままであれば、小さいバッチサイズから始めて徐々に増やしていくことができます。 ::: -ファインチューニングは一種のアートです。ファインチューニング用オプションの全体像を確認するには、次を実行してください。 +ファインチューニングは一種のアートです。ファインチューニング用オプションの全体像を確認するには、次を実行してください: ```bash lerobot-train --help @@ -1190,7 +1183,7 @@ lerobot-train --help **ファインチューニング済みモデルを評価し、リアルタイムで動かす** -エピソードを記録する場合と同様に、HuggingFace Hub にログインしておくことを推奨します。対応する手順は [Record a dataset](https://huggingface.co/docs/lerobot/il_robots) を参照してください。ログイン後は、次のようにして自分のセットアップで推論を実行できます。 +エピソードを記録する場合と同様に、HuggingFace Hub にログインしておくことを推奨します。対応する手順は [Record a dataset](https://huggingface.co/docs/lerobot/il_robots) を参照してください。ログイン後は、次のようにして自分の環境で推論を実行できます: ```bash lerobot-record \ @@ -1216,7 +1209,7 @@ lerobot-record \
LIBERO -[LIBERO](https://huggingface.co/docs/lerobot/libero) は、生涯ロボット学習を研究するために設計されたベンチマークです。ロボットは工場で一度だけ事前学習されて終わりではなく、時間とともに人間のユーザーと一緒に学習と適応を続ける必要があります。この継続的な適応は、意思決定における生涯学習(lifelong learning in decision making, LLDM)と呼ばれ、真にパーソナライズされたヘルパーロボットを構築するための重要なステップです。 +[LIBERO](https://huggingface.co/docs/lerobot/libero) は、生涯ロボット学習を研究するために設計されたベンチマークです。ロボットは工場で一度だけ事前学習されて終わりではなく、時間とともに人間ユーザーと一緒に学習と適応を続ける必要があります。この継続的な適応は、意思決定における生涯学習(lifelong learning in decision making, LLDM)と呼ばれ、真にパーソナライズされたヘルパーロボットを構築するための重要なステップです。 - 📄 [LIBERO 論文](https://arxiv.org/abs/2306.03310) - 💻 [オリジナルの LIBERO リポジトリ](https://github.com/Lifelong-Robot-Learning/LIBERO) @@ -1225,13 +1218,13 @@ lerobot-record \ **LeRobot** では、LIBERO をフレームワークに移植し、主に軽量 Vision-Language-Action モデルである [SmolVLA](https://huggingface.co/docs/lerobot/en/smolvla) の**評価**に使用しました。 -LIBERO は現在、**マルチ評価対応シミュレーション**の一部となっており、フラグを 1 つ付けるだけで、**単一のタスクスイート**または**複数スイート横断**でポリシーをベンチマークできます。 +LIBERO は現在、**マルチ評価対応シミュレーション**の一部となっており、フラグを 1 つ指定するだけで、**単一のタスクスイート**または**複数スイート横断**でポリシーをベンチマークできます。 -LeRobot の公式手順に従った後、LIBERO をインストールするには、次を実行するだけです: `pip install -e ".[libero]"` +LeRobot の公式手順に従った後、LIBERO をインストールするには、次を実行するだけです:`pip install -e ".[libero]"` ***単一スイート評価*** -1 つの LIBERO スイート上でポリシーを評価します。 +1 つの LIBERO スイート上でポリシーを評価します: ```bash lerobot-eval \ @@ -1244,11 +1237,11 @@ lerobot-eval \ - `--env.task` はスイート(`libero_object`、`libero_spatial` など)を選択します。 - `--eval.batch_size` は並列実行する環境数を制御します。 -- `--eval.n_episodes` は実行するエピソード総数を設定します。 +- `--eval.n_episodes` は実行するエピソードの総数を設定します。 ***マルチスイート評価*** -複数のスイートにまたがってポリシーを一度にベンチマークします。 +複数のスイートにまたがってポリシーを一度にベンチマークします: ```bash lerobot-eval \ @@ -1288,17 +1281,17 @@ LeRobot はシミュレーションに MuJoCo を使用します。学習や評
-
[Pi0](https://huggingface.co/docs/lerobot/pi0) -[Pi0](https://huggingface.co/docs/lerobot/pi0) を参照してください +[Pi0](https://huggingface.co/docs/lerobot/pi0) を参照してください ```bash pip install -e ".[pi]" ``` **学習** + ```bash lerobot-train \ --policy.type=pi0 \ @@ -1329,20 +1322,19 @@ lerobot-record \ --policy.path=outputs/pi0_training/checkpoints/last/pretrained_model ``` -
-
[Pi0.5](https://huggingface.co/docs/lerobot/pi05) -[Pi0.5](https://huggingface.co/docs/lerobot/pi05) を参照してください +[Pi0.5](https://huggingface.co/docs/lerobot/pi05) を参照してください ```bash pip install -e ".[pi]" ``` **学習** + ```bash lerobot-train \ --dataset.repo_id=seeed/eval_test123 \ @@ -1373,28 +1365,25 @@ lerobot-record \ --policy.path=outputs/pi05_training/checkpoints/last/pretrained_model ``` -
- -
[GR00T N1.5](https://huggingface.co/docs/lerobot/groot) 公式ドキュメントを参照してください: [GR00T N1.5](https://huggingface.co/docs/lerobot/groot)。 -GR00T N1.5 は、より汎用的なロボットの推論とスキル学習のための、NVIDIA によるオープンな基盤モデルです。これは**クロスエンボディメント**モデルであり、**言語**や**画像**などのマルチモーダル入力を受け取り、異なる環境にまたがってマニピュレーションタスクを実行できます。 +GR00T N1.5 は、より汎用的なロボット推論とスキル学習のための、NVIDIA によるオープンな基盤モデルです。これは**クロスエンボディメント**モデルであり、**言語**や**画像**などのマルチモーダル入力を受け取り、異なる環境にまたがってマニピュレーションタスクを実行できます。 LeRobot では、ポリシータイプを `--policy.type=groot` に設定することが重要です。GR00T N1.5 は環境要件が高く(FlashAttention に依存し、CUDA GPU が必要)、まず ACT / Pi0 をエンドツーエンドで動作させてから GR00T を試すことを推奨します。 **インストール(重要)** -現時点の公式ドキュメントによると、GR00T N1.5 には `flash-attn` が必要であり、CUDA 対応ハードウェアでのみ使用できます。 +現在の公式ドキュメントによると、GR00T N1.5 には `flash-attn` が必要であり、CUDA 対応ハードウェアでのみ使用できます。 推奨される手順: -1. まずベースとなる環境(Python、CUDA、ドライバなど)を準備します。この時点では `lerobot` をインストールしないでください。 -2. 自身の CUDA バージョンに対応した PyTorch をインストールします(CUDA のバージョンによっては異なる `--index-url` が必要になる場合があります。PyTorch のインストールページに従ってください)。 +1. まずベース環境(Python、CUDA、ドライバなど)を準備します。この時点では `lerobot` をインストールしないでください。 +2. 自分の CUDA バージョンに対応した PyTorch をインストールします(CUDA のバージョンによっては異なる `--index-url` が必要になる場合があります。PyTorch のインストールページに従ってください)。 ```bash pip install "torch>=2.2.1,<2.8.0" "torchvision>=0.21.0,<0.23.0" @@ -1415,12 +1404,12 @@ pip install "lerobot[groot]" ``` :::tip -`flash-attn` のインストールに失敗する場合、多くは (1) PyTorch と CUDA の不整合、(2) ビルド依存関係の不足、(3) 環境が新しすぎる/古すぎる、のいずれかが原因です。まず公式の GR00T ドキュメントと PyTorch のインストール手順を突き合わせて確認してください。 +もし `flash-attn` のインストールに失敗する場合、多くは (1) PyTorch と CUDA の不整合、(2) ビルド依存関係の不足、(3) 環境が新しすぎる/古すぎる、のいずれかが原因です。まず公式の GR00T ドキュメントと PyTorch のインストール手順を突き合わせて確認してください。 ::: **学習(ファインチューニング)** -公式ドキュメントには、`accelerate launch --multi_gpu ...` を用いたマルチ GPU の例が掲載されています。GPU が 1 枚しかない場合でも、まずは単一プロセスの実行を動作させることから始められます(正確なサポート内容や引数は公式ドキュメントに依存します)。 +公式ドキュメントには、`accelerate launch --multi_gpu ...` を用いたマルチ GPU の例が掲載されています。GPU が 1 枚しかない場合でも、まずは単一プロセスの実行を動かすところから始めることができます(正確なサポート内容や引数は公式ドキュメントに依存します)。 ```bash accelerate launch \ @@ -1468,13 +1457,13 @@ lerobot-record \
-(Optional) Parameter-Efficient Fine-Tuning (PEFT) +(オプション)パラメータ効率の良いファインチューニング(PEFT) -PEFT(Parameter-Efficient Fine-Tuning)は、大規模な事前学習済みモデルを**すべてのパラメータを更新することなく**新しいタスクに適応させるための手法とツールの総称です。事前学習済みの LeRobot ポリシー(例:SmolVLA、Pi0)では、多くの場合、「アダプタ」パラメータ(例:LoRA)のみを学習することで VRAM 使用量と学習コストを削減しつつ、フルファインチューニングに近い性能を達成できます。 +PEFT(Parameter-Efficient Fine-Tuning)は、大規模な事前学習済みモデルを、新しいタスクに適応させる際に**すべてのパラメータを更新せずに**済むようにする手法とツールの総称です。事前学習済みの LeRobot ポリシー(例:SmolVLA、Pi0)では、多くの場合、「アダプタ」パラメータ(例:LoRA)の小さな集合だけを学習することで、VRAM 使用量と学習コストを削減しつつ、フルファインチューニングに近い性能を達成できます。 **インストール** -LeRobot を `peft` のオプション依存関係付きでインストールすると、学習時に PEFT 関連の引数を使用できるようになります。 +LeRobot を `peft` のオプション依存関係付きでインストールした後、学習時に PEFT 関連の引数を使用できます。 ```bash pip install -e ".[peft]" @@ -1484,7 +1473,7 @@ pip install -e ".[peft]" pip install "lerobot[peft]" ``` -より詳しい概念と手法については、[🤗 PEFT documentation](https://huggingface.co/docs/peft/index) を参照してください。 +より詳しい概念と手法については、[🤗 PEFT ドキュメント](https://huggingface.co/docs/peft/index) を参照してください。 **例: SmolVLA を LoRA でファインチューニングする(LIBERO `libero_spatial` サブタスク)** @@ -1512,9 +1501,9 @@ lerobot-train \ - `--peft.method_type`: 使用する PEFT 手法を選択します。LoRA(Low-Rank Adapter)は最も一般的な選択肢の 1 つです。 - `--peft.r`: LoRA のランク。ランクを高くすると通常は表現力が増しますが、パラメータ数と VRAM 使用量も増加します。 -**LoRA を挿入する層/モジュールの選択(任意)** +**LoRA を挿入するレイヤー/モジュールの選択(オプション)** -デフォルトでは、PEFT は通常、最も重要な射影層(例:attention の `q_proj`、`v_proj`)に LoRA を挿入し、状態/アクションの射影も対象に含める場合があります。カスタマイズしたい場合は、`--peft.target_modules` を使用します。 +デフォルトでは、PEFT は通常、最も重要な射影レイヤー(例:attention の `q_proj`、`v_proj`)に LoRA を挿入し、状態/行動の射影も対象に含める場合があります。カスタマイズしたい場合は、`--peft.target_modules` を使用します。 一般的なパターン: @@ -1524,15 +1513,15 @@ lerobot-train \ --peft.target_modules="['q_proj', 'v_proj']" ``` -2) 正規表現を指定する(例。モデル内の実際のモジュール名に合わせて調整してください): +2) 正規表現を指定する(例:モデル内の実際のモジュール名に合わせて調整してください): ```bash --peft.target_modules='(model\\.vlm_with_expert\\.lm_expert\\..*\\.(down|gate|up)_proj|.*\\.(state_proj|action_in_proj|action_out_proj|action_time_mlp_in|action_time_mlp_out))' ``` -**一部のモジュールをフル学習する(任意)** +**一部のモジュールをフル学習させる(オプション)** -一部のモジュールを LoRA のみ挿入するのではなくフルに学習させたい場合は、`--peft.full_training_modules` を使用します。例えば、`state_proj` のみをフル学習させるには次のようにします: +特定のモジュールを、LoRA の挿入だけでなくフルに学習させたい場合は、`--peft.full_training_modules` を使用します。例えば、`state_proj` のみをフル学習させるには次のようにします: ```bash --peft.full_training_modules="['state_proj']" @@ -1540,12 +1529,12 @@ lerobot-train \ **学習率の目安(経験則)** -LoRA の学習率は、フルファインチューニングよりもおおよそ 10 倍高く設定されることが多いです。例えば、フルファインチューニングで一般的に `1e-4` を用いる場合、LoRA では `1e-3` から始めることができます。学習率スケジューラを使用する場合、最終的な学習率は目安として `1e-4` 前後になることが多いです。 +LoRA の学習率は、フルファインチューニングよりもおおよそ 10 倍高く設定されることが多いです。例えば、フルファインチューニングで一般的に `1e-4` を使う場合、LoRA では `1e-3` から始めることができます。学習率スケジューラを使用する場合、最終的な学習率は目安として `1e-4` 前後になることが多いです。
-(Optional) Multi-GPU training with Accelerate +(オプション)Accelerate を用いたマルチ GPU 学習 **学習手順** @@ -1585,7 +1574,7 @@ $(which lerobot-train) \ ``` -主要な `accelerate` フラグ: +主な `accelerate` フラグ: - `--multi_gpu`: マルチ GPU 学習を有効にします。 - `--num_processes`: 使用する GPU の数(通常はマシン上で利用可能な GPU の数と同じにします)。 @@ -1602,19 +1591,19 @@ GPU が bf16 をサポートしていない場合は、Accelerate の設定で f 方法 2:`accelerate` の設定ファイルを使う(任意)。 -複数 GPU で頻繁に学習する場合は、設定を保存して、同じフラグを何度も入力しなくて済むようにできます。 +複数 GPU で頻繁に学習する場合は、設定を保存して同じフラグを毎回入力しなくて済むようにできます。 -`accelerate config` はハードウェア構成(GPU 数、混合精度など)を設定ファイルに保存するため、後で `accelerate launch` を実行するときにそれらのオプションを再入力する必要がなくなります。これは LeRobot の学習ロジックを変更するものではなく、CLI での繰り返し入力を減らすだけです。 +`accelerate config` はハードウェア構成(GPU 数、混合精度など)を設定ファイルに保存するため、後で `accelerate launch` を実行するときにそれらのオプションを再入力する必要がなくなります。これは LeRobot の学習ロジック自体は変更せず、CLI 入力の繰り返しを減らすだけです。 -複数 GPU をたまにしか使わない場合(または今回が初めての場合)は、これをスキップしてもまったく問題ありません。 +複数 GPU をたまにしか使わない場合(あるいは今回が初めての場合)は、これをスキップしてもまったく問題ありません。 -対話的な設定において、一般的な「単一マシン + 複数 GPU」のシナリオでは、典型的な選択肢は次のとおりです: +対話的な設定では、一般的な「単一マシン + 複数 GPU」のシナリオに対して、典型的な選択肢は次のとおりです: -- Compute environment: This machine -- Number of machines: 1 -- Number of processes: 使用したい GPU の数 -- GPU ids to use: Enter キーを押す(すべての GPU を使用) -- Mixed precision: 可能であれば fp16 を推奨。GPU が bf16 をサポートしていると分かっている場合のみ bf16 を選択 +- 計算環境:このマシン +- マシン数:1 +- プロセス数:使用したい GPU の数 +- 使用する GPU ID:Enter キーを押す(すべての GPU を使用) +- 混合精度:fp16 を推奨;GPU が bf16 をサポートしていると分かっている場合のみ bf16 を選択 ```bash @@ -1640,13 +1629,13 @@ accelerate launch $(which lerobot-train) \ ``` -**マルチ GPU がハイパーパラメータに与える影響(および調整方法)** +**マルチ GPU がハイパーパラメータに与える影響(とその調整方法)** -LeRobot は、学習挙動を暗黙的に変更しないように、GPU の数に基づいて学習率や学習ステップ数を自動調整しません。これは、他の一部の分散学習フレームワークとは異なります。 +LeRobot は、トレーニング動作が暗黙のうちに変わってしまうのを避けるため、GPU 数に応じて学習率や学習ステップ数を自動調整しません。この点は、他のいくつかの分散学習フレームワークとは異なります。 マルチ GPU 用にハイパーパラメータを調整したい場合、一般的なアプローチは次のとおりです: -- **Steps**:有効バッチサイズが増加します(batch_size × num_gpus)。そのため、同程度の総サンプル数を維持するには、ステップ数をおおよそ `1 / num_gpus` に比例して減らすことができます。 +- **ステップ数**:有効バッチサイズは(batch_size × num_gpus)だけ増加するため、見ているサンプル総数を同程度に保つには、ステップ数をおおよそ `1 / num_gpus` に比例するように減らすことができます。 ```bash @@ -1662,7 +1651,7 @@ accelerate launch --num_processes=2 $(which lerobot-train) \ ``` -- **Learning rate**:各ステップで使用されるサンプル数が増えるため、多くの場合、学習率を GPU の数に対して線形にスケーリングできます: +- **学習率**:各ステップで使用されるサンプル数が増えるため、多くの場合、学習率を GPU 数に対して線形にスケールできます: new_lr = single_gpu_lr × num_gpus ```bash @@ -1683,9 +1672,337 @@ accelerate launch --num_processes=2 $(which lerobot-train) \
+
+ +(オプション)非同期推論 + +非同期推論が有効になっていない場合、LeRobot の制御フローは**従来型の逐次 / 同期推論**として理解できます:ポリシーはまず一連のアクションチャンクを予測し、それを実行し終えてから次の予測を待ちます。 + +大きなモデルでは、次のアクションチャンクを待っている間にロボットが目に見えて一時停止してしまうことがあります。 + +非同期推論の目的は、現在のアクションチャンクをロボットに実行させている間に、次のチャンクを先行して計算し、待ち時間を減らして応答性を高めることです。 + +非同期推論は、**ACT、OpenVLA、Pi0、SmolVLA** などの**チャンクベースのアクションポリシー**を含む、LeRobot がサポートするポリシーに適用できます。 + +推論が実際の制御から切り離されるため、非同期推論は、より強力な計算リソースを持つマシンを使ってロボットの推論を行うのにも役立ちます。 + +非同期推論の詳細については、[Hugging Face のブログ](https://huggingface.co/blog/async-robot-inference)を参照してください。 + +まず、いくつかの基本概念を紹介します: + +- **クライアント**:ロボットアームとカメラに接続し、観測データ(画像やロボットの姿勢など)を収集してサーバーに送信し、サーバーから返ってきたアクションチャンクを受け取って順番に実行します。 + +- **サーバー**:計算リソースを提供するデバイスです。カメラデータとロボットアームのデータを受け取り、推論(すなわち計算)を行ってアクションチャンクを生成し、それをクライアントに送り返します。ロボットアームとカメラに接続された同じデバイスでも、同一ローカルネットワーク上の別のコンピュータでも、インターネット上でレンタルしたクラウドサーバーでも構いません。 + +- **アクションチャンク**:サーバー側でのポリシー推論によって得られる、一連のロボットアームのアクションコマンドです。 + +非同期推論の 3 つのデプロイシナリオ + +1. 単一マシンでのデプロイ + +ロボット、カメラ、クライアント、サーバーがすべて同じデバイス上にあります。 + +これは最も単純なケースです:サーバーは 127.0.0.1 で待ち受けでき、クライアントも 127.0.0.1:port に接続できます。公式ドキュメントのコマンド例はこのシナリオを想定しています。 + +2. LAN 内でのデプロイ + +ロボットとカメラは軽量なデバイスに接続され、ポリシーサーバーは同じローカルネットワーク内の別の高性能マシン上で動作します。 + +この場合、サーバーは他のマシンからアクセス可能なアドレスで待ち受ける必要があり、クライアントも 127.0.0.1 ではなくサーバーの LAN IP に接続する必要があります。 + +3. ネットワーク越し / クラウドでのデプロイ + +ポリシーサーバーはパブリックにアクセス可能なクラウドホスト上で動作し、クライアントはインターネット経由でそれに接続します。 + +この方法では、クラウドホストのより強力な GPU を利用できます。ネットワーク環境が良好な場合、往復のネットワーク時間(ネットワークレイテンシ)は推論時間と比べて相対的に小さい場合もありますが、これは実際のネットワーク環境に依存します。 + +セキュリティに関する注意:LeRobot の非同期推論パイプラインには、認証されていない gRPC + pickle デシリアライズに関連するリスクがあります。サーバー上に重要な情報や重要なサービスがある場合、パブリックなデプロイでサービスをインターネットに直接公開することは推奨されません。より安全な方法は、VPN や SSH トンネリングを使用するか、少なくともセキュリティグループで許可する送信元 IP を自分のクライアントのパブリック IP にできるだけ制限することです。 + +### 非同期推論デプロイの始め方 + +#### ステップ 1:環境構築 + +まず、非同期推論に必要な追加の依存関係を pip でインストールします。クライアントとサーバーの両方に、追加の依存関係付きで lerobot をインストールする必要があります: + +```bash +pip install -e ".[async]" +``` + +#### ステップ 2:ネットワーク設定と確認 + +1. **プロキシの問題** + +現在のターミナルでプロキシが設定されていて接続の挙動がおかしい場合は、一時的にプロキシ用の環境変数を解除できます: + +```bash +unset http_proxy https_proxy ftp_proxy all_proxy HTTP_PROXY HTTPS_PROXY FTP_PROXY ALL_PROXY +``` + +注意:上記のコマンドは現在のターミナルセッションにのみ影響します。別のターミナルウィンドウを開いた場合は、再度実行する必要があります。 + +2. **ファイアウォール / セキュリティグループでポートを開く** + +単一マシンでのデプロイ:通常はスキップできます。 + +LAN デプロイ:サーバー側で待ち受けポートを開く必要があります。 + +LAN 構成で待ち受けポートを開く例(サーバー側で実行): + +```bash +sudo ufw allow 8080/tcp +``` + +クラウドデプロイ:クラウドサーバーのセキュリティグループでこのポートを開く必要があり、送信元 IP は可能な限り制限することを推奨します。 + +クラウドサーバーで実行している場合: + +サーバー管理コンソールのセキュリティグループでポート 8080 を開くか、すでに開いている別のポートを使用します。クラウドサービスプラットフォームごとに操作方法は異なるため、利用しているクラウドプロバイダのドキュメントを参照してください。 + +3. **IP アドレスの確認** + +単一マシンでのデプロイでは、このステップはスキップできます(単一マシンの IP アドレスは常に 127.0.0.1 です)。 + +LAN デプロイの場合: + +サーバー側の LAN IP アドレスを確認して覚えておく必要があります。クライアントが接続するときに入力すべきなのは、policy_server を実行しているマシンの LAN IP であり、クライアント自身の IP ではありません。 + +Linux / Jetson / Raspberry Pi: + +```bash +hostname -I +``` + +複数のアドレスが表示される場合は、一般的に現在接続している LAN のネットワークインターフェースに対応するもの(例:192.168.x.x)を選びます。 + +次のコマンドを使うこともできます: + +```bash +ip addr +``` + +を実行して、現在接続しているネットワークインターフェースの inet フィールドを確認します。 + +Windows: + +```shell +ipconfig +``` + +IPv4 Address . . . . . . . . . . . : 192.168.14.140 のようなフィールドを探します。それがそのマシンの LAN IP アドレスです。 + +macOS: + +```bash +ifconfig +``` + +現在接続しているネットワークインターフェースに対応する inet フィールドを探します。それが LAN IP アドレスです。 + +サーバー側の LAN IP アドレスを覚えておく必要があります。ここではそれを `` と表記します。 + +クラウドサーバーでのデプロイの場合: + +サーバーのコントロールパネルでパブリック IP を探します。通常、次のいずれかの名称になっています: + +Public IPv4 + +External IP + +Public IP address + +EIP + +Public IP +パブリック IP アドレスを覚えておく必要があります。ここではそれを ` ` と表記します。 -次のエラーが発生した場合: +4. **接続テスト** + +単一マシンでのデプロイ:このステップはスキップできます + +LAN / クラウドデプロイ:クライアント側からサーバーポートに到達できるかをテストすることを推奨します。テスト例は次のとおりです: + +LAN 例:クライアント側で実行 + +```bash +nc -vz 8080 +``` + +クラウド例:クライアント側で実行 + +```bash +nc -vz 8080 +``` + +#### ステップ 3:サービスを起動する + +**シナリオ A:単一マシンでのデプロイ** + +1 つのターミナルでローカルサービスを起動します: + +```bash +python -m lerobot.async_inference.policy_server \ +--host=127.0.0.1 \ +--port=8080 +``` + +正常に起動したら、このターミナルは開いたままにしておく必要があります。別のコマンドを実行するには、新しいターミナルを開きます。 + +**シナリオ B:LAN デプロイ** + +サーバー側で実行: + +```bash +python -m lerobot.async_inference.policy_server \ +--host=0.0.0.0 \ +--port=8080 +``` + +この場合、クライアントが接続する際の --server_address にはサーバー側の LAN IP アドレス、つまり `:8080` を指定する必要があります。 + +**シナリオ C: クラウドサーバーへのデプロイ** + +サーバー側で実行します: + +```bash +python -m lerobot.async_inference.policy_server \ +--host=0.0.0.0 \ +--port=8080 +``` + +この場合、クライアントが接続する際の --server_address にはサーバーのパブリック IP アドレス、つまり `:8080` を指定する必要があります。 + +#### ステップ 4: 推論パラメータを選択する + +クライアント側で実行します: + +```bash +python -m lerobot.async_inference.robot_client \ +--server_address=:8080 \ +--robot.type=so100_follower \ +--robot.port=/dev/tty.usbmodem585A0076841 \ +--robot.id=follower_so100 \ +--robot.cameras="{ laptop: {type: opencv, index_or_path: 0, width: 1920, height: 1080, fps: 30}, phone: {type: opencv, index_or_path: 0, width: 1920, height: 1080, fps: 30}}" \ +--task="dummy" \ +--policy_type=your_policy_type \ +--pretrained_name_or_path=user/model \ +--policy_device=cuda \ +--actions_per_chunk=50 \ +--chunk_size_threshold=0.5 \ +--aggregate_fn_name=weighted_average \ +--debug_visualize_queue_size=True +``` + +パラメータの説明: + +- `--server_address` + +ポリシーサーバーのアドレスとポートを指定します。`` は 127.0.0.1(ローカルマシン)、``(LAN)、または ``(クラウドサーバー)に置き換えてください。 + +- `--robot.type, --robot.port, --robot.id, --robot.cameras` + +ハードウェアデバイスのパラメータです。これらはデータセット収集時に使用したパラメータと一致させる必要があります。 + +- `--task` + +タスクの説明です。SmolVLA のようなビジョン・ランゲージポリシーは、このタスクテキストに基づいて行動のターゲットを判断します。 + +- `--policy_type` + +ここを具体的なポリシー名に置き換えます。例えば: + +- smolvla + +- act + +- `--pretrained_name_or_path` + +この値はサーバー側のモデルパス、または Hugging Face 上のモデルパスに置き換えてください。 + +- `--policy_device` + +サーバー側で使用する推論デバイスを指定します。 + +cuda、mps、cpu のいずれかを指定できます。 + +- `--actions_per_chunk=50` + +1 回の推論で出力されるアクション数を指定します。 + +この値が大きいほど: + +利点:アクションバッファに十分な余裕ができ、枯渇しにくくなります +欠点:予測ホライズンが長くなるため、制御誤差がより顕著に蓄積する可能性があります + +- `--chunk_size_threshold=0.5` + +次のアクションチャンクをサーバーに要求するタイミングを指定します。 + +これはしきい値で、通常 0〜1 の範囲です。 + +次のように理解できます:現在のアクションキューの残りの割合がこのしきい値を下回ったとき、クライアントは事前に新しい観測を送信し、次のアクションチャンクを要求します。 + +ここで 0.5 に設定するということは: + +現在のアクションチャンクが約半分消費されたときに + +クライアントが次のアクションチャンクの要求を開始することを意味します + +この値が大きいほど、リクエスト送信の頻度が高くなり、システムの応答性は向上しますが、サーバーへの負荷も増加します。 + +この値が小さいほど、挙動は同期推論に近づきます。 + +- `--aggregate_fn_name=weighted_average` + +重なり合うアクション区間を集約する方法を指定します。 + +非同期推論では、古いアクションチャンクがまだ完全に実行されていないうちに、新しいアクションチャンクがすでに到着している場合があります。 + +その場合、2 つのチャンクは時間区間の一部で重なり合うため、それらを最終的に実行されるアクションに統合するための集約関数が必要になります。 + +weighted_average の意味は: + +重なっている部分を重み付き平均で融合する、ということです。 + +これにより、通常はアクションの切り替えがよりスムーズになり、急激な変化が減少します。 + +- `--debug_visualize_queue_size=True` + +実行時にアクションキューのサイズを可視化するかどうかを指定します。 + +有効にすると、キューが頻繁に底をついていないかをより直接的に確認でき、actions_per_chunk や chunk_size_threshold のチューニングに役立ちます。 + +#### ステップ 5: ロボットの挙動に基づいてパラメータを調整する + +非同期推論では、同期推論には存在しない、調整が必要な追加パラメータが 2 つあります: + +パラメータ 推奨初期値 説明 + +actions_per_chunk 50 ポリシーが一度に出力するアクション数。典型的な値:10〜50。 + +chunk_size_threshold 0.5 アクションキューの残りの割合が chunk_size_threshold 以下になったとき、クライアントが新しいアクションチャンクを要求します。値の範囲は [0, 1] です。 + +--debug_visualize_queue_size=True の場合、実行時にアクションキューサイズの変化がプロットされます。 + +非同期推論でバランスを取るべきなのは、サーバーがアクションチャンクを生成する速度が、クライアントがアクションチャンクを消費する速度以上であることです。そうでない場合、アクションキューが空になり、ロボットは再びカクつき始めます(これはキューの可視化で曲線が底に張り付く形で確認できます)。 + +サーバーがアクションチャンクを生成する速度は、モデルサイズ、デバイスタイプ、VRAM / メモリ、GPU の計算性能などの要因に影響されます。 + +クライアントがアクションチャンクを消費する速度は、設定された実行 fps の影響を受けます。 + +キューが頻繁に空になる場合は、actions_per_chunk を増やす、chunk_size_threshold を増やす、または fps を下げる必要があります。 + +キューの曲線が頻繁に変動していても、キュー内の残りアクションが常に十分である場合は、chunk_size_threshold を適切に下げることができます。 + +一般的には: + +actions_per_chunk の経験的な範囲は 10〜50 + +chunk_size_threshold の経験的な範囲は 0.5〜0.7 であり、チューニングの際は 0.5 から始めて徐々に増やしていくことを推奨します + +
+ +次のようなエラーが発生した場合:
-- 次のような状況が発生した場合: +- 次のようなエラーが発生した場合: ```bash ConnectionError: Failed to sync read 'Present_Position' on ids=[1,2,3,4,5,6] after 1 tries. [TxRxResult] There is no status packet! ``` - 対応するポート上のロボットアームの電源が入っているか、バスサーボのデータケーブルが緩んでいたり外れていたりしないかを確認する必要があります。あるサーボのランプが点灯していない場合は、その 1 つ前のサーボのケーブルが緩んでいることを意味します。 + 対応するポート上のロボットアームの電源が入っているか、バスサーボのデータケーブルが緩んでいたり外れていたりしないかを確認する必要があります。もしあるサーボのランプが点灯していない場合は、その 1 つ前のサーボのケーブルが緩んでいることを意味します。 - ロボットアームのキャリブレーション時に次のエラーが発生した場合: @@ -1774,9 +2089,9 @@ huggingface-cli upload ${HF_USER}/act_so101_test${CKPT} \ Magnitude 30841 exceeds 2047 (max for sign_bit_index=11) ``` - ロボットアームの電源を切って再起動し、再度キャリブレーションを試してください。この方法は、キャリブレーション中に MAX 角度が数万という値に達した場合にも有効です。これでも解決しない場合は、該当するサーボを再キャリブレーションする必要があります(中央値のキャリブレーションと ID の書き込みを含む)。 + ロボットアームの電源を切って再起動し、再度キャリブレーションを試してください。この方法は、キャリブレーション中に MAX 角度が数万という値に達した場合にも使用できます。これでも解決しない場合は、該当するサーボを再キャリブレーションする必要があります(中央値のキャリブレーションと ID 書き込みを含みます)。 -- 評価フェーズ中に次のような状況が発生した場合: +- 評価フェーズ中に次のようなエラーが発生した場合: ```bash File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/seeed/eval_xxxx' @@ -1784,21 +2099,21 @@ huggingface-cli upload ${HF_USER}/act_so101_test${CKPT} \ まず `eval_` で始まるフォルダを削除してから、プログラムを再実行してください。 -- 評価フェーズ中に次のような状況が発生した場合: +- 評価フェーズ中に次のようなエラーが発生した場合: ```bash `mean` is infinity. You should either initialize with `stats` as an argument or use a pretrained model ``` - `--robot.cameras` パラメータ内の "front" や "side" などのキーワードは、データセット収集時に使用したものと厳密に一致している必要があることに注意してください。 + `--robot.cameras` パラメータ内の "front" や "side" といったキーワードは、データセット収集時に使用したものと厳密に一致している必要があることに注意してください。 -- ロボットアームの一部を修理または交換した場合は、`~/.cache/huggingface/lerobot/calibration/robots` または `~/.cache/huggingface/lerobot/calibration/teleoperators` 配下のファイルを完全に削除し、ロボットアームを再キャリブレーションしてください。そうしないと、これらのディレクトリ内の JSON ファイルにキャリブレーション情報が保存されているため、エラーメッセージが表示される可能性があります。 +- ロボットアームの部品を修理または交換した場合は、`~/.cache/huggingface/lerobot/calibration/robots` または `~/.cache/huggingface/lerobot/calibration/teleoperators` 配下のファイルを完全に削除し、ロボットアームを再キャリブレーションしてください。そうしないと、これらのディレクトリ内の JSON ファイルにキャリブレーション情報が保存されているため、エラーメッセージが表示される場合があります。 - 50 セットのデータで ACT を学習する場合、RTX 3060(8GB)を搭載したノート PC では約 6 時間、RTX 4090 や A100 GPU を搭載した PC では約 2〜3 時間かかります。 -- データ収集中は、カメラの位置、角度、および周囲の照明が安定していることを確認してください。カメラに映り込む不安定な背景や歩行者の量を減らしてください。デプロイ環境が大きく変化しすぎると、ロボットアームがうまく把持できなくなる可能性があります。 +- データ収集中は、カメラの位置、角度、および周囲の照明が安定していることを確認してください。カメラに写り込む不安定な背景や歩行者の量を減らしてください。展開環境が大きく変化しすぎると、ロボットアームが正しく把持できなくなる可能性があります。 -- データ収集コマンドでは、十分なデータを収集できるように `num-episodes` パラメータを設定してください。途中で手動で一時停止しないでください。データ収集が完了した後にのみデータの平均値と分散が計算され、これらは学習に必要です。 +- データ収集コマンドでは、十分なデータを収集できるように `num-episodes` パラメータが設定されていることを確認してください。途中で手動で一時停止しないでください。データの平均値と分散はデータ収集完了後にのみ計算され、これらは学習に必要です。 - プログラムが USB カメラから画像データを読み取れないと表示する場合は、USB カメラがハブ経由で接続されていないことを確認してください。USB カメラは、画像伝送速度を確保するためにデバイスへ直接接続する必要があります。 @@ -1809,18 +2124,18 @@ pip3 install rerun-sdk==0.23 ``` :::tip -ソフトウェアの問題や環境依存関係の問題が解決できない場合は、このチュートリアルの最後にある FAQ セクションを確認するだけでなく、速やかに [LeRobot platform](https://github.com/huggingface/lerobot) または [LeRobot Discord channel](https://discord.gg/8TnwDdjFGU) に問題を報告してください。 +ソフトウェアの問題や環境依存関係の問題が発生し、解決できない場合は、このチュートリアルの最後にある FAQ セクションを確認することに加えて、速やかに [LeRobot platform](https://github.com/huggingface/lerobot) または [LeRobot Discord channel](https://discord.gg/8TnwDdjFGU) に問題を報告してください。 ::: ## 引用 [Chinese Document](https://wiki.seeedstudio.com/cn/lerobot_so100m_new/) -TheRobotStudio プロジェクト:[SO-ARM10x](https://github.com/TheRobotStudio/SO-ARM100) +TheRobotStudio プロジェクト: [SO-ARM10x](https://github.com/TheRobotStudio/SO-ARM100) -Huggingface プロジェクト:[Lerobot](https://github.com/huggingface/lerobot/tree/main) +Huggingface プロジェクト: [Lerobot](https://github.com/huggingface/lerobot/tree/main) -Dnsty:[Jetson Containers](https://github.com/dusty-nv/jetson-containers/tree/master/packages/robots/lerobot) +Dnsty: [Jetson Containers](https://github.com/dusty-nv/jetson-containers/tree/master/packages/robots/lerobot) [Jetson AI Lab](https://www.jetson-ai-lab.com/lerobot.html) @@ -1834,7 +2149,7 @@ Dnsty:[Jetson Containers](https://github.com/dusty-nv/jetson-containers/tree/m ## 技術サポート & 製品ディスカッション -当社の製品をお選びいただきありがとうございます。私たちは、製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お好みやニーズに応じて選べる複数のコミュニケーションチャネルをご用意しています。 +弊社製品をお選びいただきありがとうございます。私たちは、製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お好みやニーズに応じて選択いただけるよう、複数のコミュニケーションチャネルを用意しています。
Leader Arm12x ST-3215- C001 (7.4V) motors with 1:345 gear ratio for all joints12x ST-3215-C018/ST-3215-C047 (12V) motors with 1:345 gear ratio for all jointsリーダーアーム全関節に 1:345 のギア比を持つ 12x ST-3215- C001 (7.4V) モーター全関節に 1:345 のギア比を持つ 12x ST-3215-C018/ST-3215-C047 (12V) モーター - 1x ST-3215- C001 (7.4V) motor with 1:345 gear ratio for joint 2 only
- 2x ST-3215-C044 (7.4V) motors with 1:191 gear ratio for joints 1 and 3
- 3x ST-3215-C046 (7.4V) motors with 1:147 gear ratio for joints 4, 5, and gripper (joint 6) + ジョイント2専用の 1:345 のギア比を持つ 1x ST-3215- C001 (7.4V) モーター
+ ジョイント1および3用の 1:191 のギア比を持つ 2x ST-3215-C044 (7.4V) モーター
+ ジョイント4、5、およびグリッパー(ジョイント6)用の 1:147 のギア比を持つ 3x ST-3215-C046 (7.4V) モーター
Follower ArmSame as SO-ARM100フォロワーアームSO-ARM100 と同じ
電源5.5 mm × 2.1 mm DC 12 V 2 A 5.5 mm × 2.1 mm DC 5 V 4 A - 5.5 mm × 2.1 mm DC 12 V 2 A (Follower Arm)
- 5.5 mm × 2.1 mm DC 5 V 4 A (Leader Arm) + 5.5 mm × 2.1 mm DC 12 V 2 A(フォロワーアーム)
+ 5.5 mm × 2.1 mm DC 5 V 4 A(リーダーアーム)
角度センサー12-bit magnetic encoder12ビット磁気エンコーダ
推奨動作温度