From 0d7d143b4fc34b427a091036d5eb0b51cdd09422 Mon Sep 17 00:00:00 2001 From: GitHub Action Bot Date: Sat, 11 Oct 2025 08:37:51 +0000 Subject: [PATCH 1/2] =?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#3232?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Languages: zh-CN ja es Base: docusaurus-version Source PR: #3232 [TRANSLATION_COMMIT]: true --- .../Lerobot/es_Lerobot_SO100Arm_New.md | 324 +++----- .../Lerobot/es_Lerobot_Starai_Arm.md | 207 ++---- .../Epaper/EE04/es_EE04_with_PlatformIO.md | 694 ++++++++++++++++++ .../es_XIAO_ESP32S3_Getting_Started.md | 20 +- .../es_XIAO_nRF54L15-Sense_MicroPython.md | 92 ++- .../Lerobot/ja_Lerobot_SO100Arm_New.md | 334 +++------ .../Lerobot/ja_Lerobot_Starai_Arm.md | 257 ++----- .../Epaper/EE04/ja_EE04_with_PlatformIO.md | 694 ++++++++++++++++++ .../ja_XIAO_ESP32S3_Getting_Started.md | 54 +- .../ja_XIAO_nRF54L15-Sense_MicroPython.md | 122 ++- .../Epaper/EE04/cn_EE04_with_PlatformIO.md | 694 ++++++++++++++++++ .../cn_XIAO_ESP32S3_Getting_Started.md | 26 +- .../cn_XIAO_nRF54L15-Sense_MicroPython.md | 62 +- 13 files changed, 2595 insertions(+), 985 deletions(-) create mode 100644 docs/es/Sensor/Epaper/EE04/es_EE04_with_PlatformIO.md create mode 100644 docs/ja/Sensor/Epaper/EE04/ja_EE04_with_PlatformIO.md create mode 100644 docs/zh-CN/Sensor/Epaper/EE04/cn_EE04_with_PlatformIO.md diff --git a/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_SO100Arm_New.md b/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_SO100Arm_New.md index acb60a1c3cfcd..0ac9e6b352f1e 100644 --- a/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_SO100Arm_New.md +++ b/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_SO100Arm_New.md @@ -50,7 +50,7 @@ Este wiki proporciona el tutorial de ensamblaje y depuración para el SO ARM10x 4. **Compatible con Nvidia**: Despliega este kit de brazo con reComputer Mini J4012 Orin NX 16 GB. 5. **Aplicación Multi-Escenario**: Es aplicable a campos como educación, investigación científica, producción automatizada y robótica, ayudando a los usuarios a lograr operaciones de robot eficientes y precisas en varias tareas complejas. -## Novedades: +## Novedades - Optimización del cableado: Comparado con SO-ARM100, SO-ARM101 presenta un cableado mejorado que previene problemas de desconexión previamente vistos en la articulación 3. El nuevo diseño de cableado también ya no limita el rango de movimiento de las articulaciones. - Diferentes relaciones de engranajes para el brazo líder: El brazo líder ahora usa motores con relaciones de engranajes optimizadas, mejorando el rendimiento y eliminando la necesidad de cajas de engranajes externas. @@ -58,7 +58,7 @@ Este wiki proporciona el tutorial de ensamblaje y depuración para el SO ARM10x :::caution -Seeed Studio solo es responsable de la calidad del hardware en sí. Los tutoriales se actualizan estrictamente de acuerdo con la documentación oficial. Si encuentras problemas de software o problemas de dependencias del entorno que no se pueden resolver, además de verificar la sección FAQ al final de este tutorial, por favor reporta el problema oportunamente a la [plataforma LeRobot](https://github.com/huggingface/lerobot) o al [canal Discord de LeRobot](https://discord.gg/8TnwDdjFGU). +Seeed Studio solo es responsable de la calidad del hardware en sí. Los tutoriales se actualizan estrictamente de acuerdo con la documentación oficial. Si encuentras problemas de software o problemas de dependencias del entorno que no se pueden resolver, además de verificar la sección de FAQ al final de este tutorial, por favor reporta el problema oportunamente a la [plataforma LeRobot](https://github.com/huggingface/lerobot) o al [canal Discord de LeRobot](https://discord.gg/8TnwDdjFGU). ::: @@ -77,19 +77,19 @@ Seeed Studio solo es responsable de la calidad del hardware en sí. Los tutorial - Arm Kit - Arm Kit Pro - Arm Kit - Arm Kit Pro + Kit de Brazo + Kit de Brazo Pro + Kit de Brazo + Kit de Brazo Pro Brazo Líder - 12x motores ST-3215- C001 (7.4V) con relación de engranajes 1:345 para todas las articulaciones + 12x motores ST-3215-C001 (7.4V) con relación de engranajes 1:345 para todas las articulaciones 12x motores ST-3215-C018/ST-3215-C047 (12V) con relación de engranajes 1:345 para todas las articulaciones - 1x motor ST-3215- C001 (7.4V) con relación de engranajes 1:345 solo para la articulación 2
+ 1x motor ST-3215-C001 (7.4V) con relación de engranajes 1:345 solo para la articulación 2
2x motores ST-3215-C044 (7.4V) con relación de engranajes 1:191 para las articulaciones 1 y 3
3x motores ST-3215-C046 (7.4V) con relación de engranajes 1:147 para las articulaciones 4, 5 y pinza (articulación 6) @@ -142,7 +142,7 @@ Si compras la versión Arm Kit, ambas fuentes de alimentación son de 5V. Si com | Cable USB-C 2 piezas | 1 | ✅ | | Fuente de Alimentación2 | 2 | ✅ | | Abrazadera de Mesa| 4 | ✅ | -| Partes impresas en 3D del brazo | 1 | Opcional | +| Partes impresas en 3D del brazo | 1 | Opción | ## Entorno del Sistema Inicial @@ -214,12 +214,12 @@ Los archivos STL proporcionados están listos para imprimir en muchas impresoras Todas las piezas para el líder o seguidor están ya contenidas en un solo archivo para facilitar la impresión 3D, correctamente orientadas con z hacia arriba para minimizar los soportes. - Para tamaños de cama de impresora de 220mmx220mm (como la Ender), imprima estos archivos: - - [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) + - [Seguidor](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Follower/Ender_Follower_SO101.stl) + - [Líder](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Leader/Ender_Leader_SO101.stl) - Para tamaños de cama de impresora de 205mm x 250mm (como la Prusa/Up): - - [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) + - [Seguidor](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Follower/Prusa_Follower_SO101.stl) + - [Líder](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Leader/Prusa_Leader_SO101.stl) ## Instalar LeRobot @@ -235,7 +235,7 @@ chmod +x Miniconda3-latest-Linux-aarch64.sh source ~/.bashrc ``` -O, para X86 Ubuntu 22.04: +O, Para X86 Ubuntu 22.04: ```bash mkdir -p ~/miniconda3 @@ -266,7 +266,7 @@ conda install ffmpeg -c conda-forge ``` :::tip -Esto usualmente instala ffmpeg 7.X para su plataforma compilado con el codificador libsvtav1. Si libsvtav1 no es compatible (verifique los codificadores compatibles con ffmpeg -encoders), puede: +Esto generalmente instala ffmpeg 7.X para su plataforma compilado con el codificador libsvtav1. Si libsvtav1 no es compatible (verifique los codificadores compatibles con ffmpeg -encoders), puede: - [En cualquier plataforma] Instalar explícitamente ffmpeg 7.X usando: @@ -304,7 +304,7 @@ pip3 install numpy==1.26.0 # This should match torchvision 6. Verificar Pytorch y Torchvision -Dado que instalar el entorno lerobot vía pip desinstalará el Pytorch y Torchvision originales e instalará las versiones CPU de Pytorch y Torchvision, necesita realizar una verificación en Python. +Dado que instalar el entorno lerobot a través de pip desinstalará el Pytorch y Torchvision originales e instalará las versiones CPU de Pytorch y Torchvision, necesita realizar una verificación en Python. ```python import torch @@ -330,11 +330,11 @@ Para configurar los motores, designe un adaptador de servo de bus y 6 motores pa | Modelo de Servo | Relación de Engranajes | Articulaciones Correspondientes | |----------------------------------------|------------|------------------------------| -| ST-3215-C044(7.4V) | 1:191 | L1 | -| ST-3215-C001(7.4V) | 1:345 | L2 | -| ST-3215-C044(7.4V) | 1:191 | L3 | -| ST-3215-C046(7.4V) | 1:147 | L4–L6 | -| ST-3215-C001(7.4V) / C018(12V) / C047(12V) | 1:345 | F1–F6 | +| ST-3215-C044(7.4V) | 1:191 | L1 | +| ST-3215-C001(7.4V) | 1:345 | L2 | +| ST-3215-C044(7.4V) | 1:191 | L3 | +| ST-3215-C046(7.4V) | 1:147 | L4–L6 | +| ST-3215-C001(7.4V) / C018(12V) / C047(12V) | 1:345 | F1–F6 | :::danger Ahora debe conectar la fuente de alimentación de 5V o 12V al bus del motor. 5V para los motores STS3215 7.4V y 12V para los motores STS3215 12V. Tenga en cuenta que el brazo líder siempre usa los motores de 7.4V, así que tenga cuidado de conectar la fuente de alimentación correcta si tiene motores de 12V y 7.4V, ¡de lo contrario podría quemar sus motores! Ahora, conecte el bus del motor a su computadora vía USB. Tenga en cuenta que el USB no proporciona energía, y tanto la fuente de alimentación como el USB deben estar conectados. @@ -345,7 +345,7 @@ Ahora debe conectar la fuente de alimentación de 5V o 12V al bus del motor. 5V src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/all_motos.png" /> -***Los siguientes son los pasos de calibración de código, por favor calibre con el servo de cableado de referencia en la imagen de arriba*** +***Los siguientes son los pasos de calibración del código, por favor calibre con el servo de cableado de referencia en la imagen de arriba*** Encontrar puertos USB asociados a sus brazos Para encontrar los puertos correctos para cada brazo, ejecute el script de utilidad dos veces: @@ -371,9 +371,9 @@ Reconnect the USB cable. Recuerde quitar el usb, de lo contrario la interfaz no será detectada. ::: -Salida de ejemplo al identificar el puerto del brazo seguidor (ej., `/dev/tty.usbmodem575E0031751` en Mac, o posiblemente `/dev/ttyACM0` en Linux): +Salida de ejemplo al identificar el puerto del brazo seguidor (por ejemplo, `/dev/tty.usbmodem575E0031751` en Mac, o posiblemente `/dev/ttyACM0` en Linux): -Salida de ejemplo al identificar el puerto del brazo líder (ej., `/dev/tty.usbmodem575E0032081`, o posiblemente `/dev/ttyACM1` en Linux): +Salida de ejemplo al identificar el puerto del brazo líder (por ejemplo, `/dev/tty.usbmodem575E0032081`, o posiblemente `/dev/ttyACM1` en Linux): Podría necesitar dar acceso a los puertos USB ejecutando: @@ -401,7 +401,7 @@ Si compra la versión Arm Kit (ST-3215-C001), use una fuente de alimentación de | ![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úrese de que los IDs de las articulaciones del servo y las relaciones de engranajes correspondan estrictamente a las del SO-ARM101. +Nuevamente, asegúrese de que los IDs de las articulaciones del servo y las relaciones de engranajes correspondan estrictamente a los del SO-ARM101. ::: Conecte el cable USB de su computadora y la fuente de alimentación a la placa controladora del brazo seguidor. Luego, ejecute el siguiente comando. @@ -418,7 +418,7 @@ Debería ver la siguiente instrucción. Connect the controller board to the 'gripper' motor only and press enter. ``` -Como se indica, conecte el motor de la pinza. Asegúrese de que sea el único motor conectado a la placa, y que el motor en sí no esté aún conectado en cadena a ningún otro motor. Al presionar [Enter], el script configurará automáticamente el ID y la velocidad de transmisión para ese motor. +Como se indica, conecte el motor de la pinza. Asegúrese de que sea el único motor conectado a la placa, y que el motor en sí no esté aún conectado en cadena a ningún otro motor. Al presionar [Enter], el script configurará automáticamente el ID y la velocidad de baudios para ese motor. Luego debería ver el siguiente mensaje: @@ -444,7 +444,7 @@ Verifique su cableado en cada paso antes de presionar Enter. Por ejemplo, el cab Cuando haya terminado, el script simplemente finalizará, momento en el cual los motores estarán listos para ser utilizados. Ahora puede conectar el cable de 3 pines de cada motor al siguiente, y el cable del primer motor (el 'giro del hombro' con id=1) a la placa controladora, que ahora puede ser fijada a la base del brazo. -Realice los mismos pasos para el brazo líder. +Haga los mismos pasos para el brazo líder. ```bash lerobot-setup-motors \ @@ -589,122 +589,6 @@ El comando teleoperate automáticamente: ## Agregar cámaras - -
- Si usas la Cámara de Profundidad Orbbec Gemini2 - -
- -
- - - -- 🚀 Paso 1: Instalar el Entorno Dependiente del SDK de Orbbec - -1. Clona el repositorio `pyorbbec` - ```bash - cd ~/ - git clone https://github.com/orbbec/pyorbbecsdk.git - ``` - -2. Descarga e instala el **archivo .whl** correspondiente para el SDK - Ve a [pyorbbecsdk Releases](https://github.com/orbbec/pyorbbecsdk/releases), - selecciona e instala basándote en tu versión de Python. Por ejemplo: - ```bash - pip install pyorbbecsdk-x.x.x-cp310-cp310-linux_x86_64.whl - ``` - -3. Instala las dependencias en el directorio `pyorbbec` - ```bash - cd ~/pyorbbecsdk - pip install -r requirements.txt - ``` - - Fuerza la degradación de la versión de `numpy` a `1.26.0` - ```bash - pip install numpy==1.26.0 - ``` - Los mensajes de error rojos pueden ser ignorados. - -4. Clona el SDK de Orbbec en el directorio `~/lerobot/src/cameras` - - ```bash - cd ~/lerobot/src/cameras - git clone https://github.com/ZhuYaoHui1998/orbbec.git - ``` - -5. Modifica utils.py y __init__.py -- Encuentra `utils.py` en el directorio `~/lerobot/src/lerobot/cameras`, y agrega el siguiente código en la línea 40: - -```python -elif cfg.type == "orbbec": - from .realsense.camera_orbbec import OrbbecCamera - - cameras[key] = OrbbecCamera(cfg) -``` - -
- -
- -- Encuentra `__init__.py` en el directorio `~/lerobot/src/lerobot/cameras`, y agrega el siguiente código en la línea 18: - -```python -from .orbbec.configuration_orbbec import OrbbecCameraConfig -``` - -
- -
- - -- 🚀 Paso 2: Llamada de Función y Ejemplos - -En todos los siguientes ejemplos, reemplaza `so101_follower` con el modelo real del brazo robótico que estés usando (ej., `so100` / `so101`). - - -Hemos agregado el hiperparámetro `focus_area`. Dado que los datos de profundidad que están demasiado lejos no tienen sentido para el brazo robótico (no puede alcanzar o agarrar objetos), los datos de profundidad menores o mayores que el `focus_area` se mostrarán en negro. El `focus_area` predeterminado es (20, 600). -Actualmente, la única resolución soportada es ancho: 640, alto: 880. - -```bash -lerobot-teleoperate \ - --robot.type=so101_follower \ - --robot.port=/dev/ttyACM0 \ - --robot.id=my_awesome_follower_arm \ - --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \ - --teleop.type=so101_leader \ - --teleop.port=/dev/ttyACM1 \ - --teleop.id=my_awesome_leader_arm \ - --display_data=true -``` - - -
- -
- - - -Para tareas posteriores como recolección de datos, entrenamiento y evaluación, el proceso es el mismo que para comandos RGB regulares. Solo necesitas reemplazar la parte relevante en el comando RGB regular con: - -```bash - --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \ -``` - -También puedes agregar una cámara RGB monocular adicional después. - - -
- - - :::tip Los códigos SO100 y SO101 son compatibles. Los usuarios de SO100 pueden utilizar directamente los parámetros y código de SO101 para la operación. ::: @@ -738,7 +622,7 @@ 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: Error finding RealSense cameras: failed to set power state, esto se puede resolver ejecutando el mismo comando con permisos sudo. 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 computadora mientras teleoperás ejecutando el siguiente código. Esto es útil para preparar tu configuración antes de grabar tu primer conjunto de datos. @@ -813,9 +697,9 @@ lerobot-record \ --dataset.reset_time_s=30 ``` -Entre ellos, `repo_id` se puede modificar de forma personalizada, y `push_to_hub=false`. Finalmente, el conjunto de datos se guardará en el directorio `~/.cache/huggingface/lerobot` en la carpeta de inicio, donde se creará la carpeta `seeedstudio123/test` mencionada anteriormente. +Entre ellos, `repo_id` se puede modificar de forma personalizada, y `push_to_hub=false`. Finalmente, el conjunto de datos se guardará en el directorio `~/.cache/huggingface/lerobot` en la carpeta home, donde se creará la carpeta `seeedstudio123/test` mencionada anteriormente. -- Si deseas usar las funciones del hub de Hugging Face para subir tu conjunto de datos y no lo has hecho anteriormente, asegúrate de haber iniciado sesión usando un token de acceso de escritura, que se puede generar desde la [configuración de Hugging Face](https://huggingface.co/settings/tokens): +- Si quieres usar las funciones del hub de Hugging Face para subir tu conjunto de datos y no lo has hecho previamente, asegúrate de haber iniciado sesión usando un token de acceso de escritura, que se puede generar desde la [configuración de Hugging Face](https://huggingface.co/settings/tokens): ```bash huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential @@ -854,64 +738,64 @@ Verás muchas líneas apareciendo como esta: INFO 2024-08-10 15:02:58 ol_robot.py:219 dt:33.34 (30.0hz) dtRlead: 5.06 (197.5hz) dtWfoll: 0.25 (3963.7hz) dtRfoll: 6.22 (160.7hz) dtRlaptop: 32.57 (30.7hz) dtRphone: 33.84 (29.5hz) ``` -**Función record** +**Función de grabación** -La función **record** proporciona un conjunto de herramientas para capturar y gestionar datos durante la operación del robot. +La función **record** proporciona un conjunto de herramientas para capturar y gestionar datos durante la operación del robot. -**1. Almacenamiento de Datos** +**1. Almacenamiento de datos** - Los datos se almacenan usando el formato `LeRobotDataset` y se guardan en disco durante la grabación. -- Por defecto, el conjunto de datos se sube a tu página de Hugging Face después de la grabación. +- Por defecto, el conjunto de datos se sube a tu página de Hugging Face después de la grabación. - Para deshabilitar la subida, usa: `--dataset.push_to_hub=False` -**2. Puntos de Control y Reanudación** +**2. Puntos de control y reanudación** -- Los puntos de control se crean automáticamente durante la grabación. +- Los puntos de control se crean automáticamente durante la grabación. - Para reanudar después de una interrupción, vuelve a ejecutar el mismo comando con: `--resume=true` -⚠️ Nota Crítica: Al reanudar, establece `--dataset.num_episodes` al número de episodios adicionales a grabar (no el número total objetivo de episodios en el conjunto de datos). +⚠️ Nota crítica: Al reanudar, establece `--dataset.num_episodes` al número de episodios adicionales a grabar (no el número total objetivo de episodios en el conjunto de datos). - Para comenzar a grabar desde cero, **elimina manualmente** el directorio del conjunto de datos. -**3. Parámetros de Grabación** +**3. Parámetros de grabación** -Configura el flujo de grabación de datos usando argumentos de línea de comandos: +Establece el flujo de grabación de datos usando argumentos de línea de comandos: -| Parámetro | Descripción | Por defecto | -|-----------|-------------|---------| -| --dataset.episode_time_s | Duración por episodio de datos (segundos) | 60 | -| --dataset.reset_time_s | Tiempo de reinicio del entorno después de cada episodio (segundos) | 60 | -| --dataset.num_episodes | Total de episodios a grabar | 50 | +| Parámetro | Descripción | Por defecto | +|-----------|-------------|-------------| +| --dataset.episode_time_s | Duración por episodio de datos (segundos) | 60 | +| --dataset.reset_time_s | Tiempo de reinicio del entorno después de cada episodio (segundos) | 60 | +| --dataset.num_episodes | Total de episodios a grabar | 50 | -**4. Controles de Teclado Durante la Grabación** +**4. Controles de teclado durante la grabación** Controla el flujo de grabación de datos usando atajos de teclado: -| Tecla | Acción | -|-----|--------| -| → (Flecha Derecha) | Detener temprano el episodio actual/reiniciar; pasar al siguiente. | -| ← (Flecha Izquierda) | Cancelar episodio actual; volver a grabarlo. | -| ESC | Detener sesión inmediatamente, codificar videos y subir conjunto de datos. | +| Tecla | Acción | +|-------|--------| +| → (Flecha derecha) | Detener temprano el episodio/reinicio actual; pasar al siguiente. | +| ← (Flecha izquierda) | Cancelar episodio actual; volver a grabarlo. | +| ESC | Detener sesión inmediatamente, codificar videos y subir conjunto de datos. | -**Consejos para Recopilar Datos** +**Consejos para recopilar datos** -- Sugerencia de Tarea: Agarrar objetos en diferentes ubicaciones y colocarlos en un contenedor. -- Escala: Grabar ≥50 episodios (10 episodios por ubicación). -- Consistencia: - - Mantener las cámaras fijas. - - Mantener comportamiento de agarre idéntico. - - Asegurar que los objetos manipulados sean visibles en las transmisiones de la cámara. -- Progresión: - - Comenzar con agarre confiable antes de agregar variaciones (nuevas ubicaciones, técnicas, ajustes de cámara). - - Evitar aumentos rápidos de complejidad para prevenir fallas. +- Sugerencia de tarea: Agarrar objetos en diferentes ubicaciones y colocarlos en un contenedor. +- Escala: Grabar ≥50 episodios (10 episodios por ubicación). +- Consistencia: + - Mantener las cámaras fijas. + - Mantener comportamiento de agarre idéntico. + - Asegurar que los objetos manipulados sean visibles en las transmisiones de cámara. +- Progresión: + - Comenzar con agarre confiable antes de agregar variaciones (nuevas ubicaciones, técnicas, ajustes de cámara). + - Evitar aumentos rápidos de complejidad para prevenir fallas. -💡 Regla General: Deberías poder hacer la tarea tú mismo solo mirando las imágenes de la cámara. +💡 Regla general: Deberías poder hacer la tarea tú mismo solo mirando las imágenes de la cámara. -Si quieres profundizar en este tema importante, puedes consultar la [publicación del blog](https://huggingface.co/blog/lerobot-datasets#what-makes-a-good-dataset) que escribimos sobre qué hace un buen conjunto de datos. +Si quieres profundizar en este tema importante, puedes consultar la [publicación del blog](https://huggingface.co/blog/lerobot-datasets#what-makes-a-good-dataset) que escribimos sobre qué hace que un conjunto de datos sea bueno. -**Solución de Problemas** +**Solución de problemas** -Problema Específico de Linux: +Problema específico de Linux: Si las teclas Flecha Derecha/Flecha Izquierda/ESC no responden durante la grabación: - Verifica que la variable de entorno `$DISPLAY` esté configurada (ver [limitaciones de pynput](https://pynput.readthedocs.io/en/latest/limitations.html)). @@ -959,9 +843,9 @@ lerobot-dataset-viz \ Los códigos SO100 y SO101 son compatibles. Los usuarios de SO100 pueden utilizar directamente los parámetros y código de SO101 para la operación. ::: -Una función útil es la función `replay`, que te permite reproducir cualquier episodio que hayas grabado o episodios de cualquier conjunto de datos disponible. Esta función te ayuda a probar la repetibilidad de las acciones de tu robot y evaluar la transferibilidad entre robots del mismo modelo. +Una característica útil es la función `replay`, que te permite reproducir cualquier episodio que hayas grabado o episodios de cualquier conjunto de datos disponible. Esta función te ayuda a probar la repetibilidad de las acciones de tu robot y evaluar la transferibilidad entre robots del mismo modelo. -Puedes reproducir el primer episodio en tu robot con el comando de abajo o con el ejemplo de API: +Puedes reproducir el primer episodio en tu robot con el comando a continuación o con el ejemplo de API: ```bash lerobot-replay \ @@ -980,7 +864,7 @@ Tu robot debería replicar movimientos similares a los que grabaste. Los códigos SO100 y SO101 son compatibles. Los usuarios de SO100 pueden utilizar directamente los parámetros y código de SO101 para la operación. ::: -Para entrenar una política para controlar tu robot, usa el script [lerobot-train](https://github.com/huggingface/lerobot/blob/main/src/lerobot/scripts/train.py). Se requieren algunos argumentos. Aquí hay un comando de ejemplo: +Para entrenar una política para controlar tu robot, usa el script [lerobot-train](https://github.com/huggingface/lerobot/blob/main/src/lerobot/scripts/train.py). Se requieren algunos argumentos. Aquí tienes un comando de ejemplo: ```bash lerobot-train \ @@ -1062,7 +946,7 @@ huggingface-cli upload ${HF_USER}/act_so101_test${CKPT} \ [SmolVLA](https://huggingface.co/docs/lerobot/smolvla) es el modelo fundacional ligero de Hugging Face para robótica. Diseñado para un ajuste fino fácil en conjuntos de datos de LeRobot, ¡ayuda a acelerar tu desarrollo! -**Configura tu Entorno** +**Configura tu entorno** Instala las dependencias de SmolVLA ejecutando: @@ -1070,13 +954,13 @@ Instala las dependencias de SmolVLA ejecutando: pip install -e ".[smolvla]" ``` -**Ajusta SmolVLA con tus datos** +**Ajusta finamente SmolVLA en 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 tomará aproximadamente ~4 horas en una sola GPU A100. Debes ajustar el número de pasos según el rendimiento y tu caso de uso. +Usa [smolvla_base](https://hf.co/lerobot/smolvla_base), nuestro modelo preentrenado de 450M, y ajústalo finamente en tus datos. Entrenar el modelo por 20k pasos tomará aproximadamente ~4 horas en una sola GPU A100. Deberías ajustar el número de pasos según el rendimiento y tu caso de uso. -Si no tienes un dispositivo GPU, puedes entrenar usando nuestro notebook en [Google Colab](https://colab.research.google.com/github/huggingface/notebooks/blob/main/lerobot/training-smolvla.ipynb). +Si no tienes un dispositivo gpu, puedes entrenar usando nuestro notebook en [Google Colab](https://colab.research.google.com/github/huggingface/notebooks/blob/main/lerobot/training-smolvla.ipynb). -Pasa tu conjunto de datos al script de entrenamiento usando `--dataset.repo_id`. Si quieres probar tu instalación, ejecuta el siguiente comando donde usamos uno de los conjuntos de datos que recopilamos para el [SmolVLA Paper](https://huggingface.co/papers/2506.01844). +Pasa tu conjunto de datos al script de entrenamiento usando `--dataset.repo_id`. Si quieres probar tu instalación, ejecuta el siguiente comando donde usamos uno de los conjuntos de datos que recopilamos para el [Artículo de SmolVLA](https://huggingface.co/papers/2506.01844). ```bash lerobot-train \ @@ -1100,9 +984,9 @@ El ajuste fino es un arte. Para una descripción completa de las opciones para e 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 manera similar a cuando grabas un episodio, se recomienda que hayas iniciado sesión en el 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 manera similar a cuando grabas un episodio, se recomienda que hayas iniciado sesión en el Hub de HuggingFace. 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 \ @@ -1130,20 +1014,20 @@ Dependiendo de tu configuración de evaluación, puedes configurar la duración [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 serán preentrenados una vez en una fábrica, necesitarán seguir aprendiendo y adaptándose con sus usuarios humanos a lo largo del tiempo. Esta adaptación continua se llama 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 verdaderos asistentes personalizados. -- 📄 [LIBERO paper](https://arxiv.org/abs/2306.03310) -- 💻 [Original LIBERO repo](https://github.com/Lifelong-Robot-Learning/LIBERO) +- 📄 [Artículo de LIBERO](https://arxiv.org/abs/2306.03310) +- 💻 [Repositorio original de LIBERO](https://github.com/Lifelong-Robot-Learning/LIBERO) **Evaluando con LIBERO** -En **LeRobot**, portamos LIBERO a nuestro framework y lo usamos principalmente para **evaluar** [SmolVLA](https://huggingface.co/docs/lerobot/en/smolvla), nuestro modelo ligero Vision-Language-Action. +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 ahora es parte de nuestra **simulación multi-eval soportada**, lo que significa que puedes evaluar tus políticas ya sea en una **suite única de tareas** o a través de **múltiples suites a la vez** con solo una bandera. +LIBERO ahora es parte de nuestra **simulación multi-eval soportada**, lo que significa que puedes hacer benchmark de tus políticas ya sea en una **suite única de tareas** o a través de **múltiples suites a la vez** con solo una bandera. -Para instalar LIBERO, después de seguir las instrucciones oficiales de LeRobot, simplemente haz: `pip install -e ".[libero]"` +Para instalar LIBERO, después de seguir las instrucciones oficiales de LeRobot, simplemente ejecuta: `pip install -e ".[libero]"` ***Evaluación de suite única*** -Evalúa una política en una suite LIBERO: +Evalúa una política en una suite de LIBERO: ```bash lerobot-eval \ @@ -1158,9 +1042,9 @@ lerobot-eval \ - `--eval.batch_size` controla cuántos entornos se ejecutan en paralelo. - `--eval.n_episodes` establece cuántos episodios ejecutar en total. -***Evaluación multi-suite*** +***Evaluación de múltiples suites*** -Evalúa una política a través de múltiples suites a la vez: +Evalúa una política en múltiples suites a la vez: ```bash lerobot-eval \ @@ -1171,9 +1055,9 @@ lerobot-eval \ --eval.n_episodes=2 ``` -- Pasa una lista separada por comas a `--env.task` para evaluación multi-suite. +- Pasa una lista separada por comas a `--env.task` para evaluación de múltiples suites. -**Comando de entrenamiento de ejemplo** +**Ejemplo de comando de entrenamiento** ```bash lerobot-train \ @@ -1220,7 +1104,7 @@ lerobot-record \ --policy.path=${HF_USER}/my_policy ``` -como: +como por ejemplo: ```bash lerobot-record \ @@ -1234,13 +1118,13 @@ lerobot-record \ --policy.path=outputs/train/act_so101_test/checkpoints/last/pretrained_model ``` -1. El parámetro `--policy.path` indica la ruta al archivo de pesos de los resultados de entrenamiento de tu política (ej., `outputs/train/act_so101_test/checkpoints/last/pretrained_model`). Si subes el archivo de pesos del resultado del entrenamiento del modelo al Hub, también puedes usar el repositorio del modelo (ej., `${HF_USER}/act_so100_test`). +1. El parámetro `--policy.path` indica la ruta al archivo de pesos de los resultados del entrenamiento de tu política (ej., `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 (ej., `${HF_USER}/act_so100_test`). -2. El nombre del conjunto de datos `dataset.repo_id` comienza con `eval_`. Esta operación grabará por separado videos 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 dataset `dataset.repo_id` comienza con `eval_`. Esta operación grabará por separado videos y datos durante la evaluación, que se guardarán en la carpeta que comience 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, por favor elimina primero la carpeta que comience con `eval_` y luego ejecuta el programa nuevamente. -4. Cuando encuentres `mean is infinity. You should either initialize with stats as an argument or use a pretrained model`, por favor nota que las palabras clave como front y side en el parámetro `--robot.cameras` deben ser estrictamente consistentes con las usadas al recopilar el conjunto de datos. +4. Cuando encuentres `mean is infinity. You should either initialize with stats as an argument or use a pretrained model`, por favor nota que palabras clave como front y side en el parámetro `--robot.cameras` deben ser estrictamente consistentes con las usadas al recopilar el dataset.
@@ -1248,15 +1132,15 @@ lerobot-record \ ## FAQ -- Si estás siguiendo esta documentación/tutorial, por favor clona el 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 estás siguiendo esta documentación/tutorial, por favor clona el 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 datasets, diferentes comandos, etc. -- Si encuentras el siguiente error al calibrar los IDs de servo: +- Si encuentras el siguiente error al calibrar IDs de servo: ```bash `Motor ‘gripper’ was not found, Make sure it is connected` ``` - Por favor verifica cuidadosamente si el cable de comunicación está conectado correctamente al servo y si la fuente de alimentación está proporcionando el voltaje correcto. + Por favor verifica cuidadosamente si el cable de comunicación está correctamente conectado al servo y si la fuente de alimentación está proporcionando el voltaje correcto. - Si encuentras: @@ -1293,45 +1177,45 @@ lerobot-record \ Magnitude 30841 exceeds 2047 (max for sign_bit_index=11) ``` - Apague y reinicie el brazo robótico, luego intente calibrar nuevamente. Este método también se puede usar si el ángulo MAX alcanza un valor de decenas de miles durante la calibración. Si esto no funciona, necesita recalibrar los servos correspondientes, incluyendo la calibración mediana y la escritura de ID. + Apaga y reinicia el brazo robótico, luego intenta calibrar nuevamente. Este método también se puede usar si el ángulo MAX alcanza un valor de decenas de miles durante la calibración. Si esto no funciona, necesitas recalibrar los servos correspondientes, incluyendo calibración mediana y escritura de ID. -- Si encuentra durante la fase de evaluación: +- Si encuentras durante la fase de evaluación: ```bash File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/seeed/eval_xxxx' ``` - Por favor, elimine primero la carpeta que comience con `eval_` y luego ejecute el programa nuevamente. + Por favor elimina primero la carpeta que comience con `eval_` y luego ejecuta el programa nuevamente. -- Si encuentra durante la fase de evaluación: +- Si encuentras durante la fase de evaluación: ```bash `mean` is infinity. You should either initialize with `stats` as an argument or use a pretrained model ``` - Tenga en cuenta que las palabras clave como "front" y "side" en el parámetro `--robot.cameras` deben ser estrictamente consistentes con las utilizadas al recopilar el conjunto de datos. + Por favor nota que palabras clave como "front" y "side" en el parámetro `--robot.cameras` deben ser estrictamente consistentes con las usadas al recopilar el dataset. -- Si ha reparado o reemplazado partes del brazo robótico, por favor elimine completamente los archivos bajo `~/.cache/huggingface/lerobot/calibration/robots` o `~/.cache/huggingface/lerobot/calibration/teleoperators` y recalibre 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 en 50 conjuntos de datos toma aproximadamente 6 horas en una laptop con RTX 3060 (8GB), y alrededor de 2-3 horas en computadoras con GPUs RTX 4090 o A100. -- Durante la recopilación de datos, asegúrese de que la posición de la cámara, el ángulo y la iluminación ambiental sean estables. Reduzca la cantidad de fondo inestable y peatones capturados por la cámara, ya que cambios excesivos en el entorno de implementación pueden causar que el brazo robótico falle al agarrar correctamente. +- 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 peatones capturados por la cámara, ya que cambios excesivos en el entorno de despliegue pueden causar que el brazo robótico falle al agarrar correctamente. -- Para el comando de recopilación de datos, asegúrese de que el parámetro `num-episodes` esté configurado para recopilar datos suficientes. No pause manualmente a la mitad, ya que la media y la varianza de los datos se calculan solo después de que se complete la recopilación de datos, las cuales 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 datos suficientes. No pauses manualmente a la mitad, ya que la media y varianza de los datos se calculan solo después de que se complete la recopilación de datos, que son necesarias para el entrenamiento. -- Si el programa indica que no puede leer datos de imagen de la cámara USB, asegúrese 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 velocidad de transmisión de imagen rápida. +- 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 asegurar una velocidad de transmisión de imagen rápida. -- Si encuentra un error como `AttributeError: module 'rerun' has no attribute 'scalar'. Did you mean: 'scalars'?`, puede degradar la versión de rerun para resolver el problema. +- Si encuentras un error 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 encuentra problemas de software o problemas de dependencias del entorno que no se pueden resolver, además de verificar la sección de FAQ al final de este tutorial, por favor reporte el problema oportunamente a la [plataforma LeRobot](https://github.com/huggingface/lerobot) o al [canal Discord de LeRobot](https://discord.gg/8TnwDdjFGU). +Si encuentras problemas de software o problemas de dependencias del entorno que no se pueden resolver, además de verificar la sección FAQ al final de este tutorial, por favor reporta el problema oportunamente a la [plataforma LeRobot](https://github.com/huggingface/lerobot) o al [canal Discord de LeRobot](https://discord.gg/8TnwDdjFGU). ::: -## Citas +## Cita [中文文档](https://wiki.seeedstudio.com/cn/lerobot_so100m_new/) @@ -1353,7 +1237,7 @@ Dnsty: [Jetson Containers](https://github.com/dusty-nv/jetson-containers/tree/ma ## Soporte Técnico y Discusión de Productos -¡Gracias por elegir nuestros productos! Estamos aquí para brindarle diferentes tipos de soporte para asegurar que su experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades. +¡Gracias por elegir nuestros productos! Estamos aquí para brindarte diferentes tipos de soporte para asegurar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades.
diff --git a/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_Starai_Arm.md b/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_Starai_Arm.md index a1eef14d84230..c0fce26d39d63 100644 --- a/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_Starai_Arm.md +++ b/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_Starai_Arm.md @@ -33,7 +33,7 @@ last_update: 1. **Código Abierto y Amigable para Desarrolladores** Es una solución de brazo robótico de código abierto y amigable para desarrolladores de 6+1 DoF de [Fishion Star Technology Limited](https://fashionrobo.com/). 2. **Integración con LeRobot** - Diseñado para integración con [LeRobot Platform](https://github.com/huggingface/lerobot), que proporciona modelos PyTorch, conjuntos de datos y herramientas para aprendizaje por imitación en tareas robóticas del mundo real — incluyendo recolección de datos, simulación, entrenamiento y despliegue. + Diseñado para integración con [Plataforma LeRobot](https://github.com/huggingface/lerobot), que proporciona modelos PyTorch, conjuntos de datos y herramientas para aprendizaje por imitación en tareas robóticas del mundo real — incluyendo recolección de datos, simulación, entrenamiento y despliegue. 3. **Recursos de Aprendizaje Integrales** Proporciona recursos de aprendizaje de código abierto integrales como guías de ensamblaje y calibración, y ejemplos de tareas de agarre personalizadas para ayudar a los usuarios a comenzar rápidamente y desarrollar aplicaciones robóticas. 4. **Compatible con Nvidia** @@ -41,11 +41,11 @@ last_update: ## Características Principales -- Listo para Usar — Sin Ensamblaje Requerido. Solo Desempaca y Sumérgete en el Mundo de la IA. +- Listo para Usar — No Requiere Ensamblaje. Solo Desempaca y Sumérgete en el Mundo de la IA. - 6+1 Grados de Libertad y un Alcance de 470mm — Construido para Versatilidad y Precisión. - Alimentado por Servos de Bus Sin Escobillas Duales — Suave, Silencioso y Fuerte con hasta 300g de Carga Útil. - Pinza Paralela con Apertura Máxima de 66mm — Puntas de Dedos Modulares para Flexibilidad de Reemplazo Rápido. -- Tecnología Exclusiva Hover Lock — Congela Instantáneamente el Brazo Líder en Cualquier Posición con una Sola Presión. +- Tecnología Exclusiva de Bloqueo Flotante — Congela Instantáneamente el Brazo Líder en Cualquier Posición con una Sola Presión. ## Especificaciones @@ -73,7 +73,7 @@ last_update: | Hub de Comunicación | UC-01 | UC-01 | UC-01 | | Fuente de Alimentación | 12V10A/120w XT30 | 12V10A/120w XT30 |12V25A/300w XT60 | -Para más información sobre los motores servo, por favor visita el siguiente enlace. +Para más información sobre motores servo, por favor visita el siguiente enlace. [RA8-U25H-M](https://fashionrobo.com/actuator-u25/23396/) @@ -100,7 +100,7 @@ Para más información sobre los motores servo, por favor visita el siguiente en ### Instalar LeRobot -Los entornos como pytorch y torchvision necesitan ser instalados basándose en tu CUDA. +Entornos como pytorch y torchvision necesitan ser instalados basándose en tu CUDA. 1. Instalar Miniconda: Para Jetson: @@ -149,7 +149,7 @@ conda install ffmpeg -c conda-forge ``` :::tip -Esto usualmente instala ffmpeg 7.X para tu plataforma compilado con el codificador libsvtav1. Si libsvtav1 no es soportado (verifica los codificadores soportados con ffmpeg -encoders), puedes: +Esto usualmente instala ffmpeg 7.X para tu plataforma compilado con el codificador libsvtav1. Si libsvtav1 no es soportado (verifica codificadores soportados con ffmpeg -encoders), puedes: - [En cualquier plataforma] Instalar explícitamente ffmpeg 7.X usando: @@ -239,7 +239,7 @@ Recuerda remover el usb, de lo contrario la interfaz no será detectada. Por ejemplo: -1. Ejemplo de salida al identificar el puerto del brazo líder (por ejemplo, `/dev/tty.usbmodem575E0031751` en Mac, o posiblemente `/dev/ttyUSB0` en Linux): +1. Salida de ejemplo al identificar el puerto del brazo líder (ej., `/dev/tty.usbmodem575E0031751` en Mac, o posiblemente `/dev/ttyUSB0` en Linux): 2. Ejemplo de salida al identificar el puerto del brazo seguidor (por ejemplo, `/dev/tty.usbmodem575E0032081` en Mac, o posiblemente `/dev/ttyUSB1` en Linux): :::tip @@ -294,24 +294,25 @@ sudo chmod 666 /dev/ttyUSB* ## Calibrar -Para videos que cubren el Brazo Robótico StarAI desde el desempaquetado hasta la teleoperación, puedes consultar: -
- -
+### Para Calibración Inicial -Mueve el brazo robótico a la posición inicial del brazo robótico (como se muestra en la figura a continuación) y colócalo en modo de espera, luego reconecta la fuente de alimentación. Para la posición inicial de la nueva versión del brazo robótico, se debe prestar especial atención a asegurar que los servos de las Articulaciones 3, 4 y 5 se alineen estrictamente con las posiciones en la figura. +Por favor, rota cada articulación hacia la izquierda y derecha a las posiciones correspondientes. +### Para Re-Calibración -| **Brazo Líder Violin** | **Brazo Seguidor Viola** | -|:---------:|:---------:| -| ![fig1](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/violin_rest.jpg) | ![fig2](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/viola_rest.jpg) | +Sigue la indicación en pantalla: ingresa la letra "c" y presiona la tecla Enter. -Posición inicial del brazo robótico de versión anterior (se debe prestar especial atención a asegurar que los servos de las Articulaciones 3, 4 y 5 se alineen estrictamente con las posiciones en la figura; la posición inicial del brazo robótico de nueva versión también puede usarse como referencia): -
- -
+A continuación se muestran los valores de referencia. En circunstancias normales, los valores de referencia de límite reales deberían estar dentro del rango de **±10°** de estas referencias. +| ID del Servo | Límite de Ángulo Inferior (°) | Límite de Ángulo Superior (°) | Notas | +| ------------ | ------------------------------ | ------------------------------ | ---------------------------------------------- | +| motor\_0 | -180° | 180° | Rotar a la posición límite | +| motor\_1 | -90° | 90° | Rotar a la posición límite | +| motor\_2 | -90° | 90° | Rotar a la posición límite | +| motor\_3 | -180° | 180° | Sin límite; rotar a los límites de ángulo de referencia | +| motor\_4 | -90° | 90° | Rotar a la posición límite | +| motor\_5 | -180° | 180° | Sin límite; rotar a los límites de ángulo de referencia | +| motor\_6 | 0° | 100° | Rotar a la posición límite | :::tip Tomando PC (Linux) y placa Jetson como ejemplos, el `primer` dispositivo USB insertado se mapeará a `ttyUSB0`, y el `segundo` dispositivo USB insertado se mapeará a `ttyUSB1`. @@ -327,8 +328,6 @@ Conecta el líder a `/dev/ttyUSB0`, o modifica el parámetro `--teleop.port`, y lerobot-calibrate --teleop.type=starai_violin --teleop.port=/dev/ttyUSB0 --teleop.id=my_awesome_staraiviolin_arm ``` -Después del inicio, verás los valores del codificador de cada articulación. Necesitas calibrar manualmente cada articulación una por una: rota cada articulación a sus posiciones máxima y mínima. Para articulaciones sin topes límite, el rango de rotación no debe exceder 180° en sentido horario o 180° en sentido antihorario. Después de calibrar todas las articulaciones, presiona Enter para guardar la configuración. - #### Brazo Robótico Seguidor Conecta el seguidor a `/dev/ttyUSB1`, o modifica el parámetro `--teleop.port`, y luego ejecuta: @@ -337,7 +336,7 @@ Conecta el seguidor a `/dev/ttyUSB1`, o modifica el parámetro `--teleop.port`, lerobot-calibrate --robot.type=starai_viola --robot.port=/dev/ttyUSB1 --robot.id=my_awesome_staraiviola_arm ``` -Después del inicio, verás los valores del codificador de cada articulación. Necesitas calibrar manualmente cada articulación una por una: rota cada articulación a sus posiciones máxima y mínima. Para articulaciones sin topes límite, el rango de rotación no debe exceder 180° en sentido horario o 180° en sentido antihorario. Después de calibrar todas las articulaciones, presiona Enter para guardar la configuración. +Después de ejecutar el comando, necesitas **mover manualmente el brazo robótico** para permitir que cada articulación alcance su **posición límite**. La terminal mostrará los datos de rango registrados. Una vez completada esta operación, presiona Enter. :::tip Los archivos de calibración se guardarán en las siguientes rutas: `~/.cache/huggingface/lerobot/calibration/robots` y `~/.cache/huggingface/lerobot/calibration/teleoperators`. @@ -356,8 +355,6 @@ Conecta `left_arm_port` a `/dev/ttyUSB0` y `right_arm_port` a `/dev/ttyUSB2`, o lerobot-calibrate --teleop.type=bi_starai_leader --teleop.left_arm_port=/dev/ttyUSB0 --teleop.right_arm_port=/dev/ttyUSB2 --teleop.id=bi_starai_leader ``` -Después del inicio, verás los valores del codificador de cada articulación. Necesitas calibrar manualmente cada articulación una por una: rota cada articulación a sus posiciones máxima y mínima. Para articulaciones sin topes límite, el rango de rotación no debe exceder 180° en sentido horario o 180° en sentido antihorario. Después de calibrar todas las articulaciones, presiona Enter para guardar la configuración. - #### Brazo Robótico Seguidor Conecta `left_arm_port` a `/dev/ttyUSB1` y `right_arm_port` a `/dev/ttyUSB3`, o modifica los parámetros `--robot.left_arm_port` y `--robot.right_arm_port`, y luego ejecuta: @@ -366,13 +363,11 @@ Conecta `left_arm_port` a `/dev/ttyUSB1` y `right_arm_port` a `/dev/ttyUSB3`, o lerobot-calibrate --robot.type=bi_starai_follower --robot.left_arm_port=/dev/ttyUSB1 --robot.right_arm_port=/dev/ttyUSB3 --robot.id=bi_starai_follower ``` -Después del inicio, verás los valores del codificador de cada articulación. Necesitas calibrar manualmente cada articulación una por una: rota cada articulación a sus posiciones máxima y mínima. Para articulaciones sin topes límite, el rango de rotación no debe exceder 180° en sentido horario o 180° en sentido antihorario. Después de calibrar todas las articulaciones, presiona Enter para guardar la configuración. - :::tip -La diferencia entre configuraciones de brazo único y brazo dual radica en los parámetros `--teleop.type` y `--robot.type`. Además, las configuraciones de brazo dual requieren puertos USB separados para los brazos izquierdo y derecho, totalizando cuatro puertos USB: `--teleop.left_arm_port`, `--teleop.right_arm_port`, `--robot.left_arm_port` y `--robot.right_arm_port`. +La diferencia entre configuraciones de brazo único y brazo dual radica en los parámetros `--teleop.type` y `--robot.type`. Además, las configuraciones de brazo dual requieren puertos USB separados para los brazos izquierdo y derecho, totalizando cuatro puertos USB: `--teleop.left_arm_port`, `--teleop.right_arm_port`, `--robot.left_arm_port`, y `--robot.right_arm_port`. -Si usas una configuración de brazo dual, necesitas modificar manualmente los tipos de archivo del brazo robótico `--teleop.type` y `--robot.type`, así como los puertos USB `--teleop.left_arm_port`, `--teleop.right_arm_port`, `--robot.left_arm_port` y `--robot.right_arm_port`, para adaptarse a los comandos de teleoperación, recolección de datos, entrenamiento y evaluación. +Si usas una configuración de brazo dual, necesitas modificar manualmente los tipos de archivo del brazo robótico `--teleop.type` y `--robot.type`, así como los puertos USB `--teleop.left_arm_port`, `--teleop.right_arm_port`, `--robot.left_arm_port`, y `--robot.right_arm_port`, para adaptarse a los comandos de teleoperación, recolección de datos, entrenamiento y evaluación. ::: @@ -381,7 +376,7 @@ Si usas una configuración de brazo dual, necesitas modificar manualmente los ti ## Teleoperar
- +
Mueve el brazo a la posición mostrada en el diagrama y ponlo en espera. @@ -425,126 +420,14 @@ El comando de operación remota detectará automáticamente los siguientes pará 1. Identificar cualquier calibración faltante e iniciar el procedimiento de calibración. 2. Conectar el robot y el dispositivo de operación remota e iniciar la operación remota. -Después de que el programa inicie, la Tecnología Hover Lock permanece funcional. +Después de que el programa inicie, la Tecnología de Bloqueo Flotante permanece funcional. ## Agregar cámaras -
- Si usas la Cámara de Profundidad Orbbec Gemini2 - -
- -
- - - -- 🚀 Paso 1: Instalar el Entorno Dependiente del SDK de Orbbec - -1. Clonar el repositorio `pyorbbec` - ```bash - cd ~/ - git clone https://github.com/orbbec/pyorbbecsdk.git - ``` - -2. Descargar e instalar el **archivo .whl** correspondiente para el SDK - Ve a [pyorbbecsdk Releases](https://github.com/orbbec/pyorbbecsdk/releases), - selecciona e instala basándote en tu versión de Python. Por ejemplo: - ```bash - pip install pyorbbecsdk-x.x.x-cp310-cp310-linux_x86_64.whl - ``` - -3. Instalar dependencias en el directorio `pyorbbec` - ```bash - cd ~/pyorbbecsdk - pip install -r requirements.txt - ``` - - Forzar la degradación de la versión de `numpy` a `1.26.0` - ```bash - pip install numpy==1.26.0 - ``` - Los mensajes de error rojos pueden ser ignorados. - -4. Clonar el SDK de Orbbec en el directorio `~/lerobot/src/cameras` - - ```bash - cd ~/lerobot/src/cameras - git clone https://github.com/ZhuYaoHui1998/orbbec.git - ``` - -5. Modificar utils.py y __init__.py -- Encuentra `utils.py` en el directorio `~/lerobot/src/lerobot/cameras`, y añade el siguiente código en la línea 40: - -```python -elif cfg.type == "orbbec": - from .realsense.camera_orbbec import OrbbecCamera - - cameras[key] = OrbbecCamera(cfg) -``` - -
- -
- -- Encuentra `__init__.py` en el directorio `~/lerobot/src/lerobot/cameras`, y añade el siguiente código en la línea 18: - -```python -from .orbbec.configuration_orbbec import OrbbecCameraConfig -``` - -
- -
- - -- 🚀 Paso 2: Llamada de Función y Ejemplos - -En todos los siguientes ejemplos, reemplaza `starai_viola` con el modelo real del brazo robótico que estés usando (por ejemplo, `so100` / `so101`). - - -Hemos añadido el hiperparámetro `focus_area`. Dado que los datos de profundidad que están demasiado lejos no tienen sentido para el brazo robótico (no puede alcanzar o agarrar objetos), los datos de profundidad menores o mayores que el `focus_area` se mostrarán en negro. El `focus_area` predeterminado es (20, 600). -Actualmente, la única resolución soportada es ancho: 640, alto: 880. - -```bash -lerobot-teleoperate \ - --robot.type=starai_viola \ - --robot.port=/dev/ttyUSB1 \ - --robot.id=my_awesome_staraiviola_arm \ - --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \ - --teleop.type=starai_violin \ - --teleop.port=/dev/ttyUSB0 \ - --teleop.id=my_awesome_staraiviolin_arm \ - --display_data=true -``` - - -
- -
- - -Para tareas posteriores como recolección de datos, entrenamiento y evaluación, el proceso es el mismo que para comandos RGB regulares. Solo necesitas reemplazar la parte relevante en el comando RGB regular con: - ``` - --robot.cameras="{ front: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:(20,600)}}" \ - ``` -También puedes añadir una cámara RGB monocular adicional después. - - -
-
- - Después de insertar tus dos cámaras USB, ejecuta el siguiente script para verificar los números de puerto de las cámaras. Es importante recordar que la cámara no debe estar conectada a un Hub USB; en su lugar, debe estar conectada directamente al dispositivo. La velocidad más lenta de un Hub USB puede resultar en la incapacidad de leer datos de imagen. ```bash @@ -640,9 +523,9 @@ pip3 install rerun-sdk==0.23
-Una vez que estés familiarizado con la teleoperación, puedes grabar tu primer conjunto de datos. +Una vez que te familiarices con la teleoperación, puedes grabar tu primer conjunto de datos. -Si quieres usar las funciones del hub de Hugging Face para subir tu conjunto de datos y no lo has hecho previamente, asegúrate de haber iniciado sesión usando un token de acceso de escritura, que se puede generar desde la [configuración de Hugging Face](https://huggingface.co/settings/tokens): +Si quieres usar las funciones del hub de Hugging Face para subir tu conjunto de datos y no lo has hecho anteriormente, asegúrate de haber iniciado sesión usando un token de acceso de escritura, que se puede generar desde la [configuración de Hugging Face](https://huggingface.co/settings/tokens): ```bash huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential @@ -705,10 +588,10 @@ Para diferenciar entre configuraciones de brazo único y brazo dual, el `--datas :::tip -Si no quieres usar la función de subida de conjuntos de datos del Hub de Hugging Face, puedes elegir `--dataset.push_to_hub=false`. También, reemplaza `--dataset.repo_id=${HF_USER}/starai` con un nombre de carpeta local personalizado, por ejemplo, `--dataset.repo_id=starai/record-test`. Los datos se almacenarán en `~/.cache/huggingface/lerobot` bajo el directorio home del sistema. +Si no quieres usar la función de subida de conjuntos de datos del Hub de Hugging Face, puedes elegir `--dataset.push_to_hub=false`. Además, reemplaza `--dataset.repo_id=${HF_USER}/starai` con un nombre de carpeta local personalizado, por ejemplo, `--dataset.repo_id=starai/record-test`. Los datos se almacenarán en `~/.cache/huggingface/lerobot` bajo el directorio home del sistema. ::: -No subir al Hub: +Sin subir al Hub: **(Recomendado, los siguientes tutoriales se enfocarán en datos locales)** ```bash @@ -753,7 +636,7 @@ lerobot-record \ ``` :::tip -Para diferenciar entre configuraciones de un solo brazo y doble brazo, el `--dataset.repo_id` aquí se llama `starai/record-test_bi_arm`. +Para diferenciar entre configuraciones de brazo único y brazo dual, el `--dataset.repo_id` aquí se llama `starai/record-test_bi_arm`. ::: @@ -768,7 +651,7 @@ Para diferenciar entre configuraciones de un solo brazo y doble brazo, el `--dat - Los puntos de control se crean automáticamente durante la grabación. - Si ocurre un problema, puedes reanudar ejecutando el mismo comando con `--resume=true`. Al reanudar la grabación, debes establecer `--dataset.num_episodes` al **número adicional de episodios a grabar**, ¡no al número total objetivo de episodios en el conjunto de datos! -- Para comenzar la grabación desde cero, **elimina manualmente** el directorio del conjunto de datos. +- Para comenzar a grabar desde cero, **elimina manualmente** el directorio del conjunto de datos. #### 3. Parámetros de Grabación @@ -811,7 +694,7 @@ lerobot-replay \ ```
- Doble Brazo + Brazo Dual ```bash lerobot-replay \ @@ -842,7 +725,7 @@ lerobot-train \ ```
- Doble Brazo + Brazo Dual ```bash lerobot-train \ @@ -858,7 +741,7 @@ lerobot-train \
-1. `policy.type` admite entrada `diffusion,pi0,pi0fast` +1. `policy.type` soporta entrada `diffusion,pi0,pi0fast` 1. Proporcionamos el conjunto de datos como parámetro: `dataset.repo_id=starai/record-test`. 2. Cargaremos la configuración desde [`configuration_act.py`](https://github.com/huggingface/lerobot/blob/main/src/lerobot/policies/act/configuration_act.py). Importante, esta política se adaptará automáticamente a los estados del motor del robot, acciones del motor y el número de cámaras, y se guardará en tu conjunto de datos. 3. Proporcionamos `wandb.enable=true` para usar [Weights and Biases](https://docs.wandb.ai/quickstart) para visualizar gráficos de entrenamiento. Esto es opcional, pero si lo usas, asegúrate de haber iniciado sesión ejecutando `wandb login`. @@ -917,7 +800,7 @@ lerobot-record \
Si entrenas comando de [política Libero](https://huggingface.co/docs/lerobot/libero): -LIBERO es un benchmark diseñado para estudiar el aprendizaje robótico de por vida. La idea es que los robots no solo serán preentrenados una vez en una fábrica, necesitarán seguir aprendiendo y adaptándose con sus usuarios humanos a lo largo del tiempo. Esta adaptación continua se llama aprendizaje de por vida en toma de decisiones (LLDM), y es un paso clave hacia la construcción de robots que se conviertan en verdaderos asistentes personalizados. +LIBERO es un benchmark diseñado para estudiar el aprendizaje robótico de por vida. La idea es que los robots no solo serán preentrenados una vez en una fábrica, sino que necesitarán seguir aprendiendo y adaptándose con sus usuarios humanos a lo largo del tiempo. Esta adaptación continua se llama 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 verdaderos asistentes personalizados. - [Artículo de LIBERO](https://arxiv.org/abs/2306.03310) - [Repositorio original de LIBERO](https://github.com/Lifelong-Robot-Learning/LIBERO) @@ -934,7 +817,7 @@ LIBERO incluye cinco suites de tareas: - LIBERO-Long (libero_10) – 10 tareas de horizonte largo de la colección LIBERO-100. -En conjunto, estas suites cubren 130 tareas, que van desde manipulaciones simples de objetos hasta escenarios complejos de múltiples pasos. LIBERO está destinado a crecer con el tiempo, y a servir como un benchmark compartido donde la comunidad puede probar y mejorar algoritmos de aprendizaje de por vida. +En conjunto, estas suites cubren 130 tareas, que van desde manipulaciones simples de objetos hasta escenarios complejos de múltiples pasos. LIBERO está destinado a crecer con el tiempo y servir como un benchmark compartido donde la comunidad puede probar y mejorar algoritmos de aprendizaje de por vida. ## Entrenamiento con LIBERO @@ -989,7 +872,7 @@ lerobot-eval \
-## Evaluar tu política +## Evalúa tu política Ejecuta el siguiente comando para grabar 10 episodios de evaluación: @@ -1010,7 +893,7 @@ lerobot-record \ ```
- Doble Brazo + Brazo Dual ```bash lerobot-record \ @@ -1027,7 +910,7 @@ lerobot-record \
-Como puedes ver, esto es casi lo mismo que el comando utilizado previamente para grabar el conjunto de datos de entrenamiento, con algunos cambios: +Como puedes ver, esto es casi lo mismo que el comando usado previamente para grabar el conjunto de datos de entrenamiento, con algunos cambios: 1. El parámetro `--policy.path`, que indica la ruta a tu archivo de pesos de política entrenada (por ejemplo, `outputs/train/act_viola_test/checkpoints/last/pretrained_model`). Si has subido los pesos de tu modelo al Hub, también puedes usar el repositorio del modelo (por ejemplo, `${HF_USER}/starai`). @@ -1035,7 +918,7 @@ Como puedes ver, esto es casi lo mismo que el comando utilizado previamente para 3. Si encuentras `File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/starai/eval_xxxx'` durante la fase de evaluación, por favor elimina la carpeta que comience con `eval_` y ejecuta el programa nuevamente. -4. Cuando encuentres `mean is infinity. You should either initialize with stats as an argument or use a pretrained model`, por favor asegúrate de que las palabras clave como `up` y `front` en el parámetro `--robot.cameras` sean estrictamente consistentes con las utilizadas durante la fase de recolección de datos. +4. Cuando encuentres `mean is infinity. You should either initialize with stats as an argument or use a pretrained model`, por favor asegúrate de que las palabras clave como `up` y `front` en el parámetro `--robot.cameras` sean estrictamente consistentes con las usadas durante la fase de recolección de datos. ## FAQ @@ -1057,9 +940,9 @@ Como puedes ver, esto es casi lo mismo que el comando utilizado previamente para - Durante la recolección de datos, asegura la estabilidad de la posición y ángulo de la cámara, así como la iluminación ambiental, y minimiza el fondo inestable y los peatones capturados por la cámara. De lo contrario, cambios significativos en el entorno de despliegue pueden causar que el brazo robótico falle al agarrar objetos normalmente. -- El `num-episodes` en el comando de recolección de datos debe asegurar una recolección de datos suficiente y no debe pausarse manualmente a la mitad. Esto es porque la media y varianza de los datos se calculan solo después de que se completa la recolección de datos, lo cual es necesario para el entrenamiento. +- El `num-episodes` en el comando de recolección de datos debe asegurar suficiente recolección de datos y no debe pausarse manualmente a la mitad. Esto es porque la media y varianza de los datos se calculan solo después de que se completa la recolección de datos, lo cual es necesario para el entrenamiento. -- Si el programa indica que no puede leer los datos de imagen de la cámara USB, por favor 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 asegurar velocidades de transmisión de imagen rápidas. +- Si el programa indica que no puede leer los datos de imagen de la cámara USB, por favor 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 asegurar velocidades rápidas de transmisión de imágenes. ## Cita @@ -1071,9 +954,9 @@ STEP: [STEP](https://github.com/Welt-liu/star-arm-moveit2/tree/main/hardware) URDF: [URDF](https://github.com/Welt-liu/star-arm-moveit2/tree/main/src/cello_description) -Huggingface Project: [Lerobot](https://github.com/huggingface/lerobot/tree/main) +Proyecto Huggingface: [Lerobot](https://github.com/huggingface/lerobot/tree/main) -ACT or ALOHA: [Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware](https://tonyzhaozh.github.io/aloha/) +ACT o ALOHA: [Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware](https://tonyzhaozh.github.io/aloha/) VQ-BeT: [VQ-BeT: Behavior Generation with Latent Actions](https://sjlee.cc/vq-bet/) diff --git a/docs/es/Sensor/Epaper/EE04/es_EE04_with_PlatformIO.md b/docs/es/Sensor/Epaper/EE04/es_EE04_with_PlatformIO.md new file mode 100644 index 0000000000000..3fe6750a1903f --- /dev/null +++ b/docs/es/Sensor/Epaper/EE04/es_EE04_with_PlatformIO.md @@ -0,0 +1,694 @@ +--- +description: PlatfromIO con EE04 +title: XIAO ePaper Display Board EE04 con PlatfromIO +keywords: + - epaper +image: https://files.seeedstudio.com/wiki/bus_servo_driver_board/10.webp +sidebar_position: 1 +slug: /es/e04_with_platformio +last_update: + date: 10/10/2025 + author: Zeller +--- + +
+ +## Introducción a PlatformIO + +PlatformIO se presenta como un ecosistema de desarrollo potente y altamente extensible diseñado para sistemas embebidos. Integra sin problemas el soporte para una amplia gama de placas de desarrollo y microcontroladores, ofreciendo una flexibilidad sin igual. Lo que distingue a PlatformIO es su notable escalabilidad: incluso si tu placa específica no está soportada nativamente, su arquitectura permite definiciones de placas personalizadas de manera sencilla. + +Crucialmente, PlatformIO cierra la brecha para los desarrolladores familiarizados con Arduino, permitiendo la compilación e implementación de código estilo Arduino simplemente incluyendo las librerías relevantes. + +### Preparación del Hardware + +Necesitas preparar una XIAO ePaper Display Board EE04 junto con pantallas del tamaño soportado. +
+ + + + + + + +
XIAO ePaper Display Board EE04
+
+
+ +La XIAO ePaper Display Board EE04 soporta pantallas de diferentes tamaños y números de pines. La pantalla de tinta de 7.5 pulgadas de 800×480 con 24 pines utilizada en este tutorial es un ejemplo.
+ +**Enlace**: [Enlace de pantallas soportadas](https://wiki.seeedstudio.com/es/epaper_ee04/#supported-eink) + +### Descargar Vscode + +Descarga según el sistema que estés usando[Vscode](https://code.visualstudio.com/download) + +
+ +### Instalar PlatformIO + +Abre VSCode, haz clic en Extensions, luego busca PlatformIO y selecciona instalar. Después de que se complete la instalación, reinicia VSCode. + +
+ +### Nuevo Proyecto + +- Abre la interfaz PIO Home y selecciona `New Project` + +
+ +- Name: Nombra tu proyecto +- Board: Selecciona Seeed Studio XIAO ESP32S3 +- Framework: Selecciona Ardunio +- Location: La ruta de los archivos del proyecto puede establecerse como una ruta personalizada o se puede seleccionar la ruta predeterminada. +- Haz clic en "Finish" y espera a que se complete la creación. Luego, abre el archivo del proyecto en el espacio de trabajo. + +
+ +### Agregar la librería Seeed GFX + +:::tip +Esta librería tiene la misma función que la librería TFT y no es compatible con ella. Si has instalado la librería TFT u otras librerías de pantalla similares, por favor desinstálalas primero. +::: + +Usaremos la librería Seeed_GFX, que proporciona soporte integral para varios dispositivos de pantalla de Seeed Studio. + +**Paso 1.** Descarga la librería Seeed_GFX desde GitHub: + +
+ +**Paso 2.** Mueve los archivos extraídos al directorio `lib` de los archivos del proyecto. + +
+ +**Paso 3.** Agregar archivo `driver.h` + +[Herramienta de Configuración Seeed GFX](https://seeed-studio.github.io/Seeed_GFX/) + +- En la página de la herramienta, selecciona la especificación de pantalla que estás usando. Aquí, la opción seleccionada es una pantalla de papel electrónico monocromática de 7.5 pulgadas. +- Selecciona la XIAO ePaper Display Board EE04 para la placa controladora, y luego se generará el código del controlador correspondiente. + +```cpp +#define BOARD_SCREEN_COMBO 502 // 7.5 inch monochrome ePaper Screen (UC8179) +#define USE_XIAO_EPAPER_DISPLAY_BOARD_EE04 +``` + +:::tip +Si haces la elección incorrecta, la pantalla no mostrará nada. +Así que por favor asegúrate del tipo de tus dispositivos o componentes. +::: + +
+ +- Crea una nueva carpeta `driver` bajo el directorio `lib` del archivo del proyecto PlatfromIO, luego agrega el archivo `driver.h`. Copia el código del archivo de encabezado generado y presiona Ctrl + S para guardar. + +
+ +### Cargar + +Copia el código a `main.cpp`, haz clic en `Build`, y después de completarse, carga. + +```cpp +#include "TFT_eSPI.h" + +#ifdef EPAPER_ENABLE // Only compile this code if the EPAPER_ENABLE is defined in User_Setup.h +EPaper epaper; +#endif + +void setup() +{ +#ifdef EPAPER_ENABLE + epaper.begin(); + epaper.fillScreen(TFT_WHITE); + + epaper.fillCircle(25, 25, 15, TFT_BLACK); + epaper.fillRect(epaper.width() - 40, 10, 30, 30, TFT_BLACK); + + for (int i = 0; i < epaper.height() / 80; i++) + { + epaper.setTextSize(i + 1); + epaper.drawLine(10, 70 + 60 * i, epaper.width() - 10, 70 + 60 * i, TFT_BLACK); + epaper.drawString("Hello EE04", 10, 80 + 60 * i); + } + + epaper.update(); // update the display + +#endif +} + +void loop() +{ + // put your main code here, to run repeatedly: +} +``` + +
+ +- Demostración del efecto + +
+ +### Botón de usuario + +La EE04 cuenta con tres botones programables por el usuario que pueden utilizarse para varios propósitos de control. Esta sección demuestra cómo leer los estados de los botones y responder a las pulsaciones de botones usando Arduino. + +En la EE04, los tres botones están conectados al ESP32-S3: + +- KEY1 (GPIO2_D1/A1) +- KEY2 (GPIO3_D2/A2) +- KEY3 (GPIO5_D4/A4) + +Todos los botones son activos en bajo, lo que significa que leen LOW cuando se presionan y HIGH cuando se liberan. + +Ejemplo Básico de Lectura de Botones + +Este ejemplo demuestra cómo detectar pulsaciones de botones e imprimir mensajes en el monitor serie. + +
+ +

+ +```cpp +#include +// reTerminal E Series - Button Test +// Based on hardware schematic + +// Define button pins according to schematic +const int BUTTON_KEY0 = 2; // KEY0 - GPIO2 +const int BUTTON_KEY1 = 3; // KEY1 - GPIO3 +const int BUTTON_KEY2 = 5; // KEY2 - GPIO5 + +// Button state variables +bool lastKey0State = HIGH; +bool lastKey1State = HIGH; +bool lastKey2State = HIGH; + +void setup() { + // Initialize serial communication + Serial.begin(115200); + while (!Serial) { + delay(10); // Wait for serial port to connect + } + + Serial.println("================================="); + Serial.println("Press any button to see output"); + Serial.println(); + + // Configure button pins as inputs + // Hardware already has pull-up resistors, so use INPUT mode + pinMode(BUTTON_KEY0, INPUT_PULLUP); + pinMode(BUTTON_KEY1, INPUT_PULLUP); + pinMode(BUTTON_KEY2, INPUT_PULLUP); + + // Read initial states + lastKey0State = digitalRead(BUTTON_KEY0); + lastKey1State = digitalRead(BUTTON_KEY1); + lastKey2State = digitalRead(BUTTON_KEY2); + + Serial.println("Setup complete. Ready to detect button presses..."); +} + +void loop() { + // Read current button states + bool key0State = digitalRead(BUTTON_KEY0); + bool key1State = digitalRead(BUTTON_KEY1); + bool key2State = digitalRead(BUTTON_KEY2); + + // Check KEY1 + if (key0State != lastKey0State) { + if (key0State == LOW) { + Serial.println("KEY0 (GPIO2) pressed!"); + } else { + Serial.println("KEY0 (GPIO2) released!"); + } + lastKey0State = key0State; + delay(50); // Debounce delay + } + + // Check KEY2 + if (key1State != lastKey1State) { + if (key1State == LOW) { + Serial.println("KEY1 (GPIO3) pressed!"); + } else { + Serial.println("KEY1 (GPIO3) released!"); + } + lastKey1State = key1State; + delay(50); // Debounce delay + } + + // Check KEY3 + if (key2State != lastKey2State) { + if (key2State == LOW) { + Serial.println("KEY2 (GPIO5) pressed!"); + } else { + Serial.println("KEY2 (GPIO5) released!"); + } + lastKey2State = key2State; + delay(50); // Debounce delay + } + + delay(10); // Small delay to prevent excessive CPU usage +} +``` + +Explicación del código: + +- **Análisis de funciones principales** + +1. **`pinMode(pin, mode)`** + - Función: Configura el modo del pin. + - El modo `INPUT_PULLUP` se utiliza aquí para habilitar la resistencia pull-up interna. Esto hace que el pin produzca un nivel alto (HIGH) por defecto cuando el botón no está presionado, y produzca un nivel bajo (LOW) cuando el botón está presionado (ya que se conecta a tierra). + +2. **`digitalRead(pin)`** + - Función: Lee el estado del nivel (HIGH o LOW) del pin especificado. + - Se utiliza en el bucle para obtener el estado actual del botón en tiempo real, lo que ayuda a determinar si el botón ha sido activado. + +3. **`Serial.begin(baud)`** y **`Serial.println()`** + - El primero inicializa la comunicación serie (con una velocidad de baudios de 115200), mientras que el segundo envía información de texto al puerto serie. Esto se utiliza para mostrar el estado del botón en el monitor. + +4. **`delay(ms)`** + - Función: Pausa el programa durante un número específico de milisegundos. + - Se utiliza en dos escenarios aquí: primero, para esperar la conexión del puerto serie en `setup()`; segundo, para retrasar 50ms después de que cambie el estado del botón. Esto logra el anti-rebote por hardware "esperando a que desaparezca la vibración", evitando activaciones falsas. + +- **Análisis de lógica principal** + +1. **Detección por comparación de estados** + - Registra el "estado anterior" de cada botón (como `lastKey0State`), y lee el "estado actual" en el bucle. + - Si el "estado actual ≠ estado anterior", indica que el botón ha sido activado (presionado o liberado). + +2. **Juicio de acción del botón** + - Cuando el estado cambia de HIGH a LOW: se determina como "presionado" (muestra "pressed"). + - Cuando el estado cambia de LOW a HIGH: se determina como "liberado" (muestra "released"). + - Después de cada cambio de estado, actualiza el "estado anterior" al estado actual, que sirve como referencia para la siguiente comparación. + +3. **Ejecución del bucle** + - La función `loop()` se ejecuta en un bucle infinito, ejecutando repetidamente el proceso de "leer el estado → comparar el estado → mostrar el resultado" para lograr detección en tiempo real. + +- Demostración del efecto: + +El Monitor Serie puede mostrar el estado del puerto serie. + +
+ +### Voltaje de la batería + +- La placa de pantalla ePaper XIAO EE04 está alimentada por una batería de litio de 3.7V - 4.2V. Además, hay una interfaz ADC para que puedas medir el voltaje y monitorear el voltaje de la batería en tiempo real. +- El pin de medición ADC es `A0 (GPIO1)`, y el pin de habilitación ADC es `D5 (GPIO_6)`. + +Conectar: + +

+ +El programa para monitorear el voltaje de la batería. Es solo para referencia. + +```cpp +#include + +#define BATTERY_ADC A0 // Battery voltage ADC pin +#define ADC_EN 6 // ADC enable pin +#define VOLTAGE_DIVIDER_RATIO 2.0 // Voltage divider ratio (adjust based on your resistor values) ((R1+R2)/R2) + +// Function to read battery voltage +static float readBatteryVoltage() { + int sum = 0; + // Read multiple samples for better accuracy + for (int i = 0; i < 10; i++) { + sum += analogRead(BATTERY_ADC); + delay(2); + } + int adcValue = sum / 10; + + // Calculate actual battery voltage + // Formula: voltage = (ADC_value / 4095) * 3.3V * divider_ratio + float voltage = (adcValue / 4095.0) * 3.3 * VOLTAGE_DIVIDER_RATIO; + + return voltage; +} + +void setup() { + Serial.begin(115200); + delay(1000); + + analogReadResolution(12); // Set ADC resolution to 12 bits + pinMode(BATTERY_ADC, INPUT); + + pinMode(ADC_EN, OUTPUT); + digitalWrite(ADC_EN, HIGH); // Enable ADC +} + +void loop() { + float batteryVoltage = readBatteryVoltage(); + + Serial.print("Battery Voltage: "); + Serial.print(batteryVoltage, 2); + Serial.println(" V"); + + delay(500); // Read every 0.5 seconds +} +``` + +Explicación del código: + +- Funciones principales: + + - **Adquisición de voltaje de batería**: Leer el voltaje de batería dividido por resistencias a través del pin ADC (el voltaje de la batería puede exceder el voltaje de referencia ADC de Arduino, requiriendo división primero). + - **Optimización de precisión**: Reducir la interferencia de ruido del circuito promediando múltiples muestras. + - **Conversión de voltaje**: Convertir la señal digital del ADC al voltaje real de la batería (considerando la relación de división de voltaje y el voltaje de referencia). + - **Salida serie**: Imprimir periódicamente el voltaje medido a través del puerto serie para que dispositivos externos (ej., computadora) puedan verlo. + +- Funciones principales y roles + + - `setup()` (Función de inicialización) + + - **Rol**: Se ejecuta una vez al inicio del programa para configurar hardware y parámetros. + - **Operaciones clave**: + - `Serial.begin(115200)`: Inicializar comunicación serie (velocidad de baudios 115200) para salida de datos de voltaje. + - `analogReadResolution(12)`: Establecer resolución ADC a 12-bit (rango de lectura: 0~4095) para mayor precisión. + - `pinMode(BATTERY_ADC, INPUT)`: Establecer pin de detección de batería (A0) en modo entrada para señales analógicas. + - `pinMode(ADC_EN, OUTPUT)` & `digitalWrite(ADC_EN, HIGH)`: Habilitar módulo ADC (para uso de bajo consumo: encender solo al medir). + + - `loop()` (Función de bucle principal) + + - **Rol**: Se ejecuta repetidamente después de la inicialización para detección periódica de voltaje y salida. + - **Operaciones clave**: + - Llamar `readBatteryVoltage()` para obtener el voltaje actual de la batería. + - Usar `Serial.print()`/`Serial.println()` para imprimir voltaje formateado (2 decimales, ej., "Battery Voltage: 3.82 V"). + - `delay(500)`: Establecer intervalo de 0.5 segundos entre mediciones. + + - `readBatteryVoltage()` (Función de medición principal) + + - **Rol**: Leer señales ADC, optimizar resultados y convertir a voltaje real. + - **Operaciones clave**: + - **Muestreo promedio**: Leer ADC 10 veces, sumar, luego promediar (reducir ruido). + - `analogRead(BATTERY_ADC)`: Leer voltaje analógico del pin A0 (devuelve 0~4095). + - `delay(2)`: Intervalo de 2ms entre muestras para estabilidad. + - **Cálculo de voltaje**: Usar fórmula `(adcValue / 4095.0) * 3.3 * VOLTAGE_DIVIDER_RATIO` para obtener voltaje real de batería. + - Devolver el voltaje calculado (tipo float) para que `loop()` lo use. + +- Demostración del efecto: + +
+ +## Demo de panel de control + +EE04 te permite realizar varios diseños creativos, como paneles de control y visualización de imágenes. Al combinarse con botones, permite cambiar entre múltiples páginas. Aquí hay un ejemplo de un panel de control. + +:::tip +En esta rutina, la operación de dibujar el panel de control se lleva a cabo basándose en la biblioteca LVGL. + +Documentación oficial de LVGL: [LVGL docs](https://docs.lvgl.io/master/examples.html#get-started) +::: + +### Hardware + +Necesitas preparar una placa de pantalla ePaper XIAO EE04 y una pantalla de 7.5 pulgadas con una resolución de 800*480. + +
+ + + + + + + +
Placa de pantalla ePaper XIAO EE04
+
+
+ +**Enlace**: [Enlace de pantalla](https://wiki.seeedstudio.com/es/epaper_ee04/#supported-eink) + +### Software + +- Agregar la biblioteca LVGL. En la herramienta Library de la interfaz PIO Home, busca LVGL, y luego selecciona agregar la biblioteca al proyecto actual. Se recomienda que elijas una versión de LVGL 9.0 o superior. + +
+ +- En el directorio **lib** + - Crear una carpeta **dashboard** luego crear los archivos `dashboard_ui.cpp` y `dashboard_ui.h`. Estos archivos se utilizan principalmente para almacenar el código de dibujo para LGVL. + - Crear la carpeta **e1001_display**, y agregar los archivos del controlador de pantalla `e1001_display.c` y `e1001_display.h` + - Crear la carpeta **lvgl_conf** y agregar el archivo de configuración `lv_conf.h` de LVGL. + +

+ +Código de referencia completo: [EE04_Dashboard_ui.zip](https://files.seeedstudio.com/wiki/Epaper/EE04/EE04_dashboard_ui.zip) + +
+ +Código main.cpp + +```cpp +/* + * Seeed reTerminal E1001 Multi-UI Demo + * - All hardware I/O and e-paper driver work happens here. + * - All runtime parameters and debug logs live here. + * - dashboard_ui.cpp is a pure LVGL UI layer (no driver calls, no runtime params). + * + * UI switching: + * KEY0 (GPIO2) → Vehicle Dashboard + * KEY1 (GPIO3) → Smart Home + * KEY2 (GPIO5) → Super Mario (default) + */ + +#include +#include + +#include "dashboard_ui.h" // Pure UI layer +#include "e1001_display.h" // E1001 e-paper driver (init/refresh in this file only) + +/* ============ Global driver object ============ */ +static e1001_driver_t e1001_driver; + +/* ============ Current UI ============ */ +static UIType current_ui = UI_SUPER_MARIO; + +/* ============ Smart Home runtime parameters (tuned here) ============ */ +static String smh_location = "New York"; +static String smh_weather = "Sunny"; +static float smh_temperature = 22.5f; +static int smh_humidity = 45; +static float smh_batt_voltage = 12.4f; +static int smh_batt_capacity = 85; +static int smh_wifi_signal = 4; // 0..4 + +/* ============ Vehicle runtime parameters (tuned here) ============ */ +static int veh_speed = 85; // km/h +static int veh_rpm = 2800; // RPM +static int veh_fuel = 75; // % +static int veh_engine_temp = 82; // °C +static char veh_gear = 'D'; // gear char +static long veh_odometer = 86531; // km +static bool veh_seatbelt = true; // indicator example + +/* --------------------------------------------------------------- + * LVGL periodic tick (moved here from dashboard_ui.cpp) + * --------------------------------------------------------------- */ +void ui_update_loop() +{ + lv_timer_handler(); + delay(50); +} + +/* --------------------------------------------------------------- + * Rebuild the active screen for a given UI type (moved here) + * --------------------------------------------------------------- */ +void load_ui(UIType type) +{ + lv_obj_clean(lv_scr_act()); + current_ui = type; + + switch (type) + { + case UI_VEHICLE_DASHBOARD: + create_vehicle_dashboard_ui(); + break; + case UI_SMART_HOME: + create_smarthome_ui(); + break; + case UI_SUPER_MARIO: + default: + create_supermario_ui(); + break; + } +} + +/* --------------------------------------------------------------- + * Helper to apply Smart Home params to the active UI (if loaded) + * --------------------------------------------------------------- */ +static void apply_smarthome_params() +{ + update_temperature(smh_temperature); + update_humidity(smh_humidity); + update_battery_voltage(smh_batt_voltage); + update_battery_capacity(smh_batt_capacity); + update_wifi_signal(smh_wifi_signal); + update_weather_status(smh_weather.c_str()); + update_location(smh_location.c_str()); + + // Example to-do placeholders (UI has checkboxes already) + add_todo_item("Water plants"); + add_todo_item("Check security"); + add_todo_item("Update firmware"); + add_todo_item("Check smart plugs"); +} + +/* ------------------------------------------------------------- + * Helper to apply Vehicle params to the active UI (if loaded) + * ------------------------------------------------------------- */ +static void apply_vehicle_params() +{ + update_speed_gauge(veh_speed); + update_rpm_gauge(veh_rpm); + update_fuel_level(veh_fuel); + update_engine_temp(veh_engine_temp); + update_gear_position(veh_gear); + update_odometer(veh_odometer); + set_warning_indicator(0, veh_seatbelt); +} + +/* ------------------------------------------------------------- + * Switch UI (rebuilds the UI and applies current parameters) + * ------------------------------------------------------------- */ +static void switch_ui(UIType next_ui) +{ + if (next_ui == current_ui) + return; + + current_ui = next_ui; + load_ui(current_ui); + + if (current_ui == UI_VEHICLE_DASHBOARD) + { + Serial.println("[UI] Loaded Vehicle Dashboard"); + apply_vehicle_params(); + } + else if (current_ui == UI_SMART_HOME) + { + Serial.println("[UI] Loaded Smart Home"); + apply_smarthome_params(); + } + else + { + Serial.println("[UI] Loaded Super Mario"); + } + + // Trigger an e-paper refresh immediately after rebuilding UI + e1001_display_refresh(&e1001_driver); +} + +/* ------------------------------------------------------------- + * Setup + * ------------------------------------------------------------- */ +void setup() +{ + Serial.begin(115200); + Serial.println("LVGL Multi-UI + E1001 e-paper demo starting..."); + + // Configure keys (active LOW due to INPUT_PULLUP) + pinMode(BUTTON_KEY0, INPUT_PULLUP); + pinMode(BUTTON_KEY1, INPUT_PULLUP); + pinMode(BUTTON_KEY2, INPUT_PULLUP); + + // Initialize e-paper (includes LVGL/timer/display config handled by your driver) + Serial.println("Initializing E1001 e-paper driver..."); + e1001_display_init(&e1001_driver); + Serial.println("E1001 init done."); + + // Default UI: Super Mario + current_ui = UI_SUPER_MARIO; + load_ui(current_ui); + Serial.println("Default UI created: Super Mario"); + + e1001_display_refresh(&e1001_driver); +} + +/* ------------------------------------------------------------- + * Loop: button-based UI switching + LVGL ticks + e-paper refresh + * ------------------------------------------------------------- */ +void loop() +{ + // Handle UI switching (debounced) + if (digitalRead(BUTTON_KEY0) == LOW) + { // Vehicle + switch_ui(UI_VEHICLE_DASHBOARD); + delay(300); + } + else if (digitalRead(BUTTON_KEY1) == LOW) + { // Smart Home + switch_ui(UI_SMART_HOME); + delay(300); + } + else if (digitalRead(BUTTON_KEY2) == LOW) + { // Super Mario + switch_ui(UI_SUPER_MARIO); + delay(300); + } + + // Drive LVGL internal timers only (no driver I/O in UI layer) + ui_update_loop(); + + // Check if e-paper refresh is needed (driver logic stays here) + if (e1001_display_should_refresh(&e1001_driver)) + { + Serial.println("Refreshing e-paper display..."); + e1001_display_refresh(&e1001_driver); + Serial.println("Display refresh complete."); + } +} +``` + +
+ +### Demostración del Efecto: + +Presionar los botones en la placa EE04 puede cambiar a la interfaz de usuario correspondiente: + +- KEY1: Panel de Control del Vehículo +- KEY2: Panel de Control SmartHome +- KEY3: Super Mario +- Por defecto: Super Mario + +
+ + + + + + + + + + + +
Super MarioVehículoSmartHome
+
+ +Haz clic en el enlace, busca el título **Resources** y selecciona el archivo de carcasa 3D que deseas imprimir.
+[Recursos de archivos de carcasa 3D](https://wiki.seeedstudio.com/cn/trmnl_7inch5_diy_kit_main_page/) + + + +## Soporte Técnico y Discusión del Producto + +¡Gracias por elegir nuestros productos! Estamos aquí para brindarte diferentes tipos de soporte para asegurar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades. + +
+ + +
+ +
+ + +
diff --git a/docs/es/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/es_XIAO_ESP32S3_Getting_Started.md b/docs/es/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/es_XIAO_ESP32S3_Getting_Started.md index a77406be78ea7..2b99ee514992a 100644 --- a/docs/es/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/es_XIAO_ESP32S3_Getting_Started.md +++ b/docs/es/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/es_XIAO_ESP32S3_Getting_Started.md @@ -386,7 +386,7 @@ Asegúrate de que tu dispositivo esté apagado y desconectado de cualquier fuent ***Nota de Compra:*** Al comprar tu XIAO ESP32S3 Sense, es importante tener en cuenta que solo **los modelos equipados con cámara** vienen con un disipador de calor incluido. Si tienes una versión del ESP32S3 que no incluye cámara, necesitarás comprar un disipador de calor por separado. -***Consejo de Instalación:*** Prioriza cubrir el PAD Térmico con el disipador de calor, ya que está directamente sobre el chip ESP32S3, la fuente principal de calor. La alineación adecuada asegura una disipación óptima del calor, y ten en cuenta mantener los pines BAT lo más despejados posible. +***Consejo de Instalación:*** Prioriza cubrir el PAD Térmico con el disipador de calor, ya que está directamente sobre el chip ESP32S3, la fuente principal de calor. La alineación adecuada asegura una disipación óptima del calor, y nota mantener los pines BAT lo más despejados posible. ::: Ahora, comencemos el proceso de instalación: @@ -400,14 +400,14 @@ Comienza removiendo la cubierta protectora del disipador de calor para exponer e ***Paso 2. Ensamblar el Disipador de Calor:*** - + Esta opción más pequeña y compacta es suficiente para uso regular y permite acceso completo a todos los pines GPIO.
- + La opción más grande proporciona refrigeración superior, que es ideal para tareas de alto rendimiento pero puede limitar el acceso a algunos pines GPIO. @@ -432,7 +432,7 @@ La herramienta de programación recomendada para el XIAO ESP32S3 es el Arduino I Si esta es tu primera vez usando Arduino, te recomendamos encarecidamente que consultes [Getting Started with Arduino](https://wiki.seeedstudio.com/es/Getting_Started_with_Arduino/). ::: -- **Paso 1.** Descarga e instala la versión estable del Arduino IDE según tu sistema operativo. +- **Paso 1.** Descarga e instala la versión estable de Arduino IDE según tu sistema operativo.
Descargar Arduino IDE @@ -445,7 +445,7 @@ Si esta es tu primera vez usando Arduino, te recomendamos encarecidamente que co -Navega a **File > Preferences**, y completa **"Additional Boards Manager URLs"** con la URL de abajo: +Navega a **File > Preferences**, y completa **"Additional Boards Manager URLs"** con la url de abajo: ``` https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json @@ -468,7 +468,7 @@ En la parte superior del Arduino IDE, puedes seleccionar el puerto directamente. -Navega a **Arduino IDE > Preferences**, y completa **"Additional Boards Manager URLs"** con la URL de abajo: +Navega a **Arduino IDE > Preferences**, y completa **"Additional Boards Manager URLs"** con la url de abajo: ``` https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json @@ -537,14 +537,14 @@ After you have downloaded the above zip, please unzip it and you will see two fi - **Step 4.** Close the Arduino IDE and reopen it.--> - + También, busca **xiao** en la placa de desarrollo de la izquierda. selecciona **XIAO_ESP32S3**.
- + Se lanzará pronto; mantente atento a futuras actualizaciones. @@ -661,7 +661,7 @@ Conecta el XIAO a tu computadora y ejecuta el script **boot_uf2.bat**. El XIAO a **Paso 4**: Copiar el Archivo UF2 al XIAO ESP32S3 -Accede a la unidad USB del XIAO ESP32S3 y copia el archivo UF2 convertido a ella. Una vez que se complete la copia, la unidad USB del XIAO desaparecerá automáticamente, y el programa comenzará a ejecutarse. +Accede a la unidad USB del XIAO ESP32S3 y copia el archivo UF2 convertido a ella. Una vez que se complete la copia, la unidad USB del XIAO desaparecerá automáticamente y el programa comenzará a ejecutarse. :::tip @@ -697,7 +697,7 @@ El proyecto está compuesto por personalizar el bootloader de segunda etapa de I Si encuentras el problema anterior, se recomienda que primero intentes presionar el botón de reset en el XIAO ESP32S3 para tratar de hacer que el programa funcione nuevamente. Si el problema persiste, por favor revisa nuevamente tu programa y lee los métodos proporcionados en **[Modo BootLoader](#bootloader-mode)** para restaurar el dispositivo. -### P2: ¿Por qué mi XIAO tiene el problema de no estar alineado en las esquinas redondeadas? ¿Es esto un problema de calidad? +### P2: ¿Por qué mi XIAO tiene el problema de no estar al ras en las esquinas redondeadas? ¿Es esto un problema de calidad?
diff --git a/docs/es/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF54L15-Sense/es_XIAO_nRF54L15-Sense_MicroPython.md b/docs/es/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF54L15-Sense/es_XIAO_nRF54L15-Sense_MicroPython.md index 39b3109d4d888..741dde00d0f24 100644 --- a/docs/es/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF54L15-Sense/es_XIAO_nRF54L15-Sense_MicroPython.md +++ b/docs/es/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF54L15-Sense/es_XIAO_nRF54L15-Sense_MicroPython.md @@ -5,7 +5,7 @@ keywords: - nRF54L15 - xiao - MicroPython -image: https://files.seeedstudio.com/wiki/XIAO_nRF54L15/Getting_Start/1-101991422-XIAO-nRF54L15-Sense.webp +image: https://files.seeedstudio.com/wiki/XIAO_nRF54L15/Getting_Start/epaper_1.webp slug: /es/xiao_nrf54l15_sense_micropython last_update: date: 9/23/2025 @@ -46,7 +46,7 @@ Prepara un XIAO nRF54L15. [Thonny IDE](https://thonny.org/) -Elige la versión apropiada para la instalación. Aquí, lo estoy instalando en un sistema Windows, así que he seleccionado la versión de Windows. +Elige la versión apropiada para la instalación. Aquí, la estoy instalando en un sistema Windows, así que he seleccionado la versión de Windows. Sigue las instrucciones para la versión de Python deseada. @@ -83,14 +83,10 @@ git clone https://github.com/Seeed-Studio/micropython-seeed-boards.git Este script tiene comandos de cadena de herramientas de flasheo preconfigurados. Si lo estás usando por primera vez, puede tomar un poco de tiempo. ::: -**Paso 2.** Abre Thonny IDE, luego haz clic en la esquina inferior derecha de la interfaz para configurar las opciones del intérprete. Selecciona MicroPython (generic) y Puerto +**Paso 2.** Abre Thonny IDE, luego haz clic en la esquina inferior derecha de la interfaz para configurar las opciones del intérprete. Selecciona MicroPython (generic) y Port
-:::tip -Este firmware tiene preestablecidas las instrucciones de la cadena de herramientas de flasheo. Si esta es la primera vez que lo usas, podría tomar un poco de tiempo. -::: - **Paso 3.** Subir el archivo de placas - Abre la vista, selecciona "File", y la ruta del administrador de archivos se mostrará en la barra lateral izquierda. @@ -211,7 +207,8 @@ Explicación del Código: - `Xiao Pin` Importa la clase de control de pines para la placa de desarrollo Seeed Xiao desde el módulo boards.xiao, que se usa para operar los pines en la placa. - **Definir Pines** - - `button = "sw"` Especifica que el botón está conectado al pin "sw" de la placa de desarrollo (aquí, el pin BOOT) - `relay = 0` Especifica que el relé está conectado al pin digital D0. + - `button = "sw"` Especifica que el botón está conectado al pin "sw" de la placa de desarrollo (aquí, el pin BOOT) + - `relay = 0` Especifica que el relé está conectado al pin digital D0. - **Lógica Principal (bloque try)** - Cuando se presiona el botón (estado es 0) → El relé se activa (salida es 1). @@ -241,22 +238,22 @@ Explicación del Código: @@ -349,7 +346,7 @@ Explicación del Código: - Leer Voltaje: Lee el voltaje de salida del potenciómetro a través del ADC (convierte la unidad a voltios). - Limitación de Rango: Asegura que el voltaje esté dentro de 0~3.3V (rango de seguridad del hardware). - Cálculo del Ciclo de Trabajo: Convierte linealmente el voltaje a un ciclo de trabajo de 0~1 (por ejemplo, 1.65V corresponde a un ciclo de trabajo del 50%). - - Manejo de Zona Muerta: Ignora fluctuaciones menores de voltaje (como ligeras vibraciones de la perilla) para prevenir cambios frecuentes en el LED. + - Manejo de Zona Muerta: Ignora las fluctuaciones menores de voltaje (como ligeras vibraciones de la perilla) para evitar cambios frecuentes en el LED. - Controlar LED: Ajusta el brillo del LED a través del ciclo de trabajo PWM (cuanto mayor sea el ciclo de trabajo, más brillante será el LED). ### Resultado @@ -373,12 +370,12 @@ Explicación del Código: @@ -392,6 +389,7 @@ Explicación del Código: Descargar la Librería

+
código @@ -615,14 +613,14 @@ finally: - `transformLat(x, y)` & `transformLon(x, y)` — Funciones auxiliares que implementan parte del algoritmo de conversión WGS-84 → GCJ-02 (usado en China para ofuscación de mapas). - `bd_encrypt(gg)` — Convierte coordenadas GCJ-02 al sistema de coordenadas BD-09 de Baidu aplicando desplazamiento y rotación adicionales. - `transform(gps)` — Función principal que convierte coordenadas WGS-84 (GPS crudo) a GCJ-02 usando fórmulas trigonométricas complejas basadas en el modelo elíptico de la Tierra. - - `L76X_Baidu_Coordinates(gps)` — Envoltorio que convierte GPS crudo (WGS-84) → GCJ-02 → BD-09 (formato de Mapas Baidu). + - `L76X_Baidu_Coordinates(gps)` — Envoltorio que convierte GPS crudo (WGS-84) → GCJ-02 → BD-09 (formato de Baidu Maps). - `L76X_Google_Coordinates(gps)` — Envoltorio que convierte GPS crudo (WGS-84) → GCJ-02 (formato de Google Maps en China). - **Analizar Sentencia GNRMC** - `parse_gnrmc(nmea_sentence)` — Analiza una cadena NMEA `$GNRMC` o `$PNRMC` cruda en un objeto `GNRMC` estructurado. - Extrae tiempo (convierte de UTC a GMT+8). - Verifica estado (`A` = activo/posición válida, `V` = inválido). - - Analiza latitud/longitud desde formato DDMM.MMMMM → grados decimales. + - Analiza latitud/longitud del formato DDMM.MMMMM → grados decimales. - Devuelve objeto `GNRMC` poblado o uno vacío por defecto si el análisis falla. - **Mostrar Datos GPS Formateados** @@ -644,7 +642,7 @@ finally: - Maneja excepciones: - `KeyboardInterrupt`: Sale elegantemente con Ctrl+C. - `Exception` general: Captura e imprime cualquier error inesperado. - - Finalmente, llama a `uart.deinit()` para limpiar recursos UART antes de salir. + - Finalmente, llama `uart.deinit()` para limpiar recursos UART antes de salir. ### Resultado @@ -891,36 +889,36 @@ ssd1306_draw_text("HELLO WORLD", 20, 4)
-Explicación del Código: +Explicación del código: -- **Importar Módulos** +- **Importar módulos** - `time` Importa el módulo time para habilitar funciones relacionadas con el tiempo como retrasos. - `XiaoI2C` Importa la clase de comunicación I2C para la placa de desarrollo Seeed Xiao desde el módulo `boards.xiao`, utilizada para inicializar y controlar periféricos I2C. -- **Definir Configuración I2C** +- **Definir configuración I2C** - `sda = 4` Especifica que la línea SDA (datos) del bus I2C está conectada al pin digital D4. - `scl = 5` Especifica que la línea SCL (reloj) del bus I2C está conectada al pin digital D5. - `i2c = "i2c0"` Especifica la instancia del controlador I2C a usar — aquí, es `i2c0`. - `frq = 400000` Establece la frecuencia del bus I2C a 400 kHz (modo rápido estándar). - `i2c = XiaoI2C(i2c, sda, scl, frq)` Inicializa la interfaz I2C con los parámetros especificados. -- **Definir Constantes SSD1306** +- **Definir constantes SSD1306** - `SSD1306_I2C_ADDR = 0x3C` La dirección I2C predeterminada de la pantalla OLED SSD1306. - Varias constantes de comando (`SSD1306_SET_CONTRAST`, `SSD1306_DISPLAY_ON`, etc.) definen comandos de control para configurar y controlar el hardware de la pantalla. - `SSD1306_WIDTH = 128`, `SSD1306_HEIGHT = 64`, `SSD1306_PAGES = 8` Definen la resolución de la pantalla y la estructura de páginas (cada página tiene 8 filas de altura). -- **Definir Datos de Fuente** +- **Definir datos de fuente** - `font_data` Un diccionario que mapea caracteres ASCII a sus representaciones de mapa de bits de píxeles de 8x8. Cada carácter se representa como una lista de 8 bytes, donde cada byte corresponde a una fila de píxeles (LSB = píxel más a la izquierda). -- **Funciones Auxiliares** - - `ssd1306_write_command(cmd)` Envía un solo byte de comando al SSD1306 vía I2C usando el byte de control `0x00`. +- **Funciones auxiliares** + - `ssd1306_write_command(cmd)` Envía un solo byte de comando al SSD1306 a través de I2C usando el byte de control `0x00`. - `ssd1306_write_commands(cmds)` Envía múltiples bytes de comando en una transacción. - `ssd1306_write_data(data)` Envía bytes de datos de pantalla al SSD1306 usando el byte de control `0x40` (modo de datos). - - `ssd1306_clear()` Limpia toda la pantalla escribiendo bytes cero a todas las páginas y columnas. - - `ssd1306_init()` Inicializa la pantalla SSD1306 con configuraciones recomendadas incluyendo contraste, relación multiplex, modo de memoria, y encender la pantalla. - - `ssd1306_draw_text(text, x, y)` Dibuja texto comenzando en la columna `x` y página `y`. Convierte cada carácter a su mapa de bits de fuente 8x8, lo rota 90° en sentido horario (para coincidir con la orientación de la pantalla), y escribe los datos de píxeles al buffer de la pantalla. + - `ssd1306_clear()` Limpia toda la pantalla escribiendo bytes cero en todas las páginas y columnas. + - `ssd1306_init()` Inicializa la pantalla SSD1306 con configuraciones recomendadas incluyendo contraste, relación multiplex, modo de memoria y encender la pantalla. + - `ssd1306_draw_text(text, x, y)` Dibuja texto comenzando en la columna `x` y página `y`. Convierte cada carácter a su mapa de bits de fuente de 8x8, lo rota 90° en sentido horario (para coincidir con la orientación de la pantalla), y escribe los datos de píxeles al búfer de la pantalla. -- **Lógica Principal (Inicialización y Pantalla)** +- **Lógica principal (Inicialización y pantalla)** - `i2c.scan()` Escanea el bus I2C para detectar dispositivos conectados. - Si el SSD1306 no se encuentra en la dirección `0x3C`, se genera una excepción; de lo contrario, se imprime un mensaje de éxito. - `ssd1306_init()` Inicializa el hardware de la pantalla. @@ -939,7 +937,7 @@ Explicación del Código: - + @@ -948,12 +946,12 @@ Explicación del Código: @@ -964,7 +962,7 @@ Explicación del Código:
@@ -1169,19 +1167,19 @@ if __name__ == "__main__": -Explicación del Código: +Explicación del código: -- **Importación de Módulos** +- **Importación de módulos** - `time`: Habilita funciones relacionadas con el tiempo como retrasos. - `XiaoPin y XiaoSPI`: Importados desde `boards.xiao`; XiaoPin se usa para controlar pines GPIO, mientras que XiaoSPI maneja la comunicación SPI. -- **Configuración de Pines y SPI** +- **Configuración de pines y SPI** - Definió pines específicos: Reset (RST), Chip Select (CS), Data/Command (DC), y Busy (BUSY). - Configuró pines relacionados con SPI (SCK, MOSI, MISO) y el controlador SPI. - Inicializó el modo de trabajo (entrada/salida) para todos los pines GPIO. - Creó una instancia SPI con una frecuencia establecida de 20 MHz. -- **Funciones Básicas de ePaper** +- **Funciones básicas de ePaper** - `reset()`: Ejecuta una operación de reinicio por hardware en la pantalla. - `send_command(cmd)`: Transmite un comando de un solo byte. - `send_data(data)`: Envía datos, que pueden ser un solo byte o múltiples bytes. @@ -1189,23 +1187,23 @@ Explicación del Código: - `init_display()`: Realiza procedimientos de inicialización para la pantalla. - `clear_screen()`: Limpia la pantalla, estableciéndola en un estado completamente blanco. -- **Parámetros de Pantalla** +- **Parámetros de pantalla** - `WIDTH, HEIGHT = 800, 480`: Especifica la resolución de la pantalla. - `BYTES_PER_ROW`: Indica el número de bytes necesarios para cada fila de píxeles. - `linebuf`: Un búfer de línea que almacena temporalmente datos de píxeles para una sola fila. -- **Sistema de Fuentes** +- **Sistema de fuentes** - Definió una fuente simple de píxeles 5x7, almacenada en el diccionario `G`. - `glyph(ch)`: Recupera los datos de píxeles correspondientes a un carácter dado. - - `text_size()`: Calcula las dimensiones del texto cuando se muestra a una relación de escala especificada. + - `text_size()`: Calcula las dimensiones del texto cuando se muestra con una relación de escalado especificada. - `text_pixel()`: Determina si un píxel debe dibujarse en una posición específica (usado en renderizado de texto). -- **Actualización de Pantalla** +- **Actualización de pantalla** - **epaper_update_lines(lines)**: La función principal para actualizar la pantalla. - Primero, envía datos para establecer un fondo completamente blanco. - Luego, calcula y transmite nuevos datos de imagen fila por fila. - Finalmente, activa una actualización de pantalla para mostrar el nuevo contenido. - - Soporta visualización de texto multilínea, donde cada línea puede tener posiciones y relaciones de escala distintas. + - Soporta visualización de texto multilínea, donde cada línea puede tener posiciones y relaciones de escalado distintas. - **función main()** - Inicializa la pantalla. @@ -1220,7 +1218,7 @@ Explicación del Código: ## Ejecutar automáticamente el programa -Si desea que su programa de abreviación pueda ejecutarse automáticamente, puede seguir estos pasos: +Si desea que su programa abreviado pueda ejecutarse automáticamente, puede seguir estos pasos: **Paso 1.** Cree un nuevo archivo de programa y use Ctrl + S para guardarlo en la memoria flash del dispositivo MicroPython, y nómbrelo main.py. @@ -1228,7 +1226,7 @@ Tomemos el programa de parpadeo como ejemplo aquí
-Luego se mostrará bajo la sección dispositivo MicroPython/flash. +Luego se mostrará bajo la sección MicroPython device/flash.
@@ -1242,16 +1240,16 @@ efecto: 如果您自己自己定义或封装了模块的py文件,也请一并上传 ::: --> -## Soporte Técnico y Discusión de Productos +## Soporte técnico y discusión de productos ¡Gracias por elegir nuestros productos! Estamos aquí para brindarle diferentes tipos de soporte para asegurar que su experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades.
- +
- +
diff --git a/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_SO100Arm_New.md b/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_SO100Arm_New.md index ccfee3a9fee53..991c0baf7d1b0 100644 --- a/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_SO100Arm_New.md +++ b/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_SO100Arm_New.md @@ -13,7 +13,7 @@ last_update: author: LiShanghang --- -# LeRobotを使用したSO-ARM100およびSO-ARM101ロボットアームの入門 +# LeRobotを使用したSO-ARM100およびSO-ARM101ロボットアームの開始 :::tip このチュートリアルのメンテナンスは最新バージョンの[lerobot](https://huggingface.co/docs/lerobot/index)に更新されています。以前のバージョンのチュートリアルを参照したい場合は、[こちら](https://wiki.seeedstudio.com/ja/lerobot_so100m/)をクリックしてください。 @@ -21,7 +21,7 @@ last_update: ## はじめに -[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は、実世界での応用に検証された最先端の方法論を統合し、模倣学習を中心としています。人間が収集したデモンストレーションを特徴とする事前訓練されたモデル、データセット、シミュレーション環境のスイートを提供し、ユーザーがロボットの組み立ての必要なしに開始できるようにしています。今後数週間で、現在利用可能な最も費用対効果が高く有能なロボットでの実世界のロボティクスのサポートを拡張する予定です。
@@ -47,8 +47,8 @@ SO-ARM10xとreComputer Jetson AIインテリジェントロボットキットは 1. **オープンソースで低コスト**:[TheRobotStudio](https://github.com/TheRobotStudio/SO-ARM100)からのオープンソース、低コストのロボットアームソリューションです 2. **LeRobotとの統合**:[LeRobotプラットフォーム](https://github.com/huggingface/lerobot)との統合のために設計されています 3. **豊富な学習リソース**:組み立てとキャリブレーションガイド、テスト、データ収集、トレーニング、デプロイメントのチュートリアルなど、包括的なオープンソース学習リソースを提供し、ユーザーが迅速に開始してロボットアプリケーションを開発できるよう支援します。 -4. **Nvidiaとの互換性**:reComputer Mini J4012 Orin NX 16 GBでこのアームキットをデプロイします。 -5. **マルチシーン応用**:教育、科学研究、自動化生産、ロボティクスなどの分野に適用可能で、ユーザーが様々な複雑なタスクで効率的で精密なロボット操作を実現するのを支援します。 +4. **Nvidiaとの互換性**:このアームキットをreComputer Mini J4012 Orin NX 16 GBでデプロイします。 +5. **マルチシーンアプリケーション**:教育、科学研究、自動化生産、ロボティクスなどの分野に適用可能で、ユーザーがさまざまな複雑なタスクで効率的で精密なロボット操作を実現できるよう支援します。 ## 新機能: @@ -77,21 +77,21 @@ Seeed Studioは、ハードウェア自体の品質についてのみ責任を
- - - - + + + + - - + + @@ -104,8 +104,8 @@ Seeed Studioは、ハードウェア自体の品質についてのみ責任を @@ -129,7 +129,7 @@ Seeed Studioは、ハードウェア自体の品質についてのみ責任を :::danger -Arm Kitバージョンを購入した場合、両方の電源は5Vです。Arm Kit Proバージョンを購入した場合は、リーダーロボットアームのキャリブレーションとすべてのステップに5V電源を使用し、フォロワーロボットアームのキャリブレーションとすべてのステップに12V電源を使用してください。 +アームキットバージョンを購入した場合、両方の電源は5Vです。アームキットProバージョンを購入した場合は、リーダーロボットアームのキャリブレーションとすべてのステップに5V電源を使用し、フォロワーロボットアームのキャリブレーションとすべてのステップに12V電源を使用してください。 ::: @@ -188,7 +188,7 @@ Arm Kitバージョンを購入した場合、両方の電源は5Vです。Arm K ## 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:プリンターを選択する @@ -211,7 +211,7 @@ SO101の公式アップデートに伴い、SO100はもはやサポートされ ### ステップ3:パーツを印刷する -リーダーまたはフォロワーのすべてのパーツは、簡単な3Dプリント用に既に単一ファイルに含まれており、サポートを最小限に抑えるためにz軸上向きに正しく配向されています。 +リーダーまたはフォロワーのすべてのパーツは、簡単な3Dプリンティング用に既に単一ファイルに含まれており、サポートを最小限に抑えるためにz軸上向きに正しく配向されています。 - 220mmx220mmのプリンターベッドサイズ(Enderなど)の場合、これらのファイルを印刷してください: - [Follower](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Follower/Ender_Follower_SO101.stl) @@ -266,7 +266,7 @@ conda install ffmpeg -c conda-forge ``` :::tip -これは通常、libsvtav1エンコーダーでコンパイルされたプラットフォーム用のffmpeg 7.Xをインストールします。libsvtav1がサポートされていない場合(ffmpeg -encodersでサポートされているエンコーダーを確認)、以下を実行できます: +これは通常、libsvtav1エンコーダーでコンパイルされたプラットフォーム用のffmpeg 7.Xをインストールします。libsvtav1がサポートされていない場合(ffmpeg -encodersでサポートされているエンコーダーを確認)、以下のことができます: - [すべてのプラットフォーム] 以下を使用してffmpeg 7.Xを明示的にインストール: @@ -324,9 +324,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つのモーターを指定し、同様にフォロワーアーム用に他のバスサーボアダプターと6つのモーターを指定します。それらにラベルを付け、各モーターがフォロワー用(F)かリーダー用(L)か、そして1から6までのIDを書くと便利です。**Follower Arm**の関節1から6を表すために**F1–F6**を使用し、**Leader Arm**の関節1から6を表すために**L1–L6**を使用します。対応するサーボモデル、関節の割り当て、ギア比の詳細は以下の通りです: +モーターを設定するには、リーダーアーム用に1つのバスサーボアダプターと6つのモーターを指定し、同様にフォロワーアーム用にもう1つのバスサーボアダプターと6つのモーターを指定します。それらにラベルを付け、各モーターがフォロワー用(F)かリーダー用(L)か、そして1から6までのIDを書いておくと便利です。**フォロワーアーム**の関節1から6を表すために**F1–F6**を使用し、**リーダーアーム**の関節1から6を表すために**L1–L6**を使用します。対応するサーボモデル、関節の割り当て、ギア比の詳細は以下の通りです: | サーボモデル | ギア比 | 対応する関節 | |----------------------------------------|------------|------------------------------| @@ -337,7 +337,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の両方を接続する必要があることに注意してください。 :::
@@ -345,7 +345,7 @@ SO-ARM101のサーボ校正と初期化プロセスは、方法とコードの src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/all_motos.png" />
-***以下はコード校正手順です。上記の画像の参照配線サーボで校正してください*** +***以下はコード校正ステップです。上記の画像の参照配線サーボで校正してください*** アームに関連するUSBポートを見つける 各アームの正しいポートを見つけるために、ユーティリティスクリプトを2回実行します: @@ -385,18 +385,18 @@ 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校正** | +| **リーダーアーム関節6校正** | **リーダーアーム関節5校正** | **リーダーアーム関節4校正** | **リーダーアーム関節3校正** | **リーダーアーム関節2校正** | **リーダーアーム関節1校正** | |:---------:|:---------:|:---------:|:---------:|:---------:|:---------:| | ![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) | :::danger -Arm Kitバージョン(ST-3215-C001)を購入した場合は、5V電源を使用してください。Arm Kit Proバージョンを購入した場合は、サーボ(ST-3215-C047/ST-3215-C018)の校正に12V電源を使用してください。 +アームキット版(ST-3215-C001)を購入した場合は、5V電源を使用してください。アームキットプロ版を購入した場合は、サーボ(ST-3215-C047/ST-3215-C018)の校正に12V電源を使用してください。 ::: -| **Follower Arm関節6校正** | **Follower Arm関節5校正** | **Follower Arm関節4校正** | **Follower Arm関節3校正** | **Follower Arm関節2校正** | **Follower Arm関節1校正** | +| **フォロワーアーム関節6校正** | **フォロワーアーム関節5校正** | **フォロワーアーム関節4校正** | **フォロワーアーム関節3校正** | **フォロワーアーム関節2校正** | **フォロワーアーム関節1校正** | |:---------:|:---------:|:---------:|:---------:|:---------:|:---------:| | ![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) | @@ -442,7 +442,7 @@ Connect the controller board to the 'wrist_roll' motor only and press enter. Enterを押す前に、各ステップでケーブル接続を確認してください。例えば、ボードを操作している間に電源ケーブルが外れる可能性があります。 ::: -完了すると、スクリプトは単純に終了し、この時点でモーターは使用準備が整います。これで、各モーターから次のモーターへ3ピンケーブルを接続し、最初のモーター(ID=1の「shoulder pan」)からコントローラーボードへのケーブルを接続できます。コントローラーボードはアームのベースに取り付けることができます。 +完了すると、スクリプトは単純に終了し、この時点でモーターは使用準備が整います。これで、各モーターから次のモーターへ3ピンケーブルを接続し、最初のモーター(ID=1の「ショルダーパン」)からコントローラーボードへのケーブルを接続できます。コントローラーボードはアームのベースに取り付けることができます。 リーダーアームについても同じ手順を実行してください。 @@ -464,7 +464,7 @@ 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を区別してください。 ::: @@ -519,7 +519,7 @@ SO100とSO101のコードは互換性があります。SO100のユーザーは **SO101 Arm Kit Standard Edition**を購入した場合、すべての電源は5Vです。**SO101 Arm Kit Pro Edition**を購入した場合、リーダーアームは各ステップで5V電源を使用してキャリブレーションと操作を行い、フォロワーアームは各ステップで12V電源を使用してキャリブレーションと操作を行う必要があります。 ::: -次に、SO-10xロボットに電源とデータケーブルを接続してキャリブレーションを行い、リーダーアームとフォロワーアームが同じ物理的位置にあるときに同じ位置値を持つようにする必要があります。このキャリブレーションは、1つのSO-10xロボットで訓練されたニューラルネットワークが別のロボットで動作できるようにするために不可欠です。ロボットアームを再キャリブレーションする必要がある場合は、`~/.cache/huggingface/lerobot/calibration/robots`または`~/.cache/huggingface/lerobot/calibration/teleoperators`の下のファイルを削除してから、ロボットアームを再キャリブレーションしてください。そうしないと、エラープロンプトが表示されます。ロボットアームのキャリブレーション情報は、このディレクトリの下のJSONファイルに保存されます。 +次に、SO-10xロボットに電源とデータケーブルを接続してキャリブレーションを行い、リーダーアームとフォロワーアームが同じ物理的位置にあるときに同じ位置値を持つようにする必要があります。このキャリブレーションは、1つのSO-10xロボットで訓練されたニューラルネットワークが別のロボットで動作できるようにするために不可欠です。ロボットアームを再キャリブレーションする必要がある場合は、`~/.cache/huggingface/lerobot/calibration/robots`または`~/.cache/huggingface/lerobot/calibration/teleoperators`の下のファイルを削除してロボットアームを再キャリブレーションしてください。そうしないと、エラープロンプトが表示されます。ロボットアームのキャリブレーション情報は、このディレクトリの下のJSONファイルに保存されます。 **フォロワーアームの手動キャリブレーション** @@ -540,7 +540,7 @@ lerobot-calibrate \ --robot.id=my_awesome_follower_arm # <- Give the robot a unique name ``` -以下の動画はキャリブレーションの実行方法を示しています。まず、すべての関節が可動範囲の中央にある位置にロボットを移動させる必要があります。その後、Enterキーを押してから、各関節を可動範囲全体で動かす必要があります。 +以下の動画はキャリブレーションの実行方法を示しています。まず、すべての関節が可動範囲の中央にある位置にロボットを移動する必要があります。その後、Enterキーを押してから、各関節を可動範囲全体で動かす必要があります。 **リーダーアームの手動キャリブレーション** @@ -562,7 +562,7 @@ lerobot-calibrate \ **シンプルなテレオペレーション** これでロボットをテレオペレーションする準備が整いました!この簡単なスクリプトを実行してください(カメラには接続せず、表示もしません): -ロボットに関連付けられたIDは、キャリブレーションファイルを保存するために使用されることに注意してください。同じセットアップを使用してテレオペレーション、記録、評価を行う際は、同じIDを使用することが重要です。 +ロボットに関連付けられたIDは、キャリブレーションファイルの保存に使用されることに注意してください。同じセットアップを使用する際は、テレオペレーション、記録、評価時に同じIDを使用することが重要です。 ```bash sudo chmod 666 /dev/ttyACM* @@ -589,122 +589,6 @@ lerobot-teleoperate \ ## カメラの追加 - -
- Orbbec Gemini2 Depth Cameraを使用する場合 - -
- -
- - - -- 🚀 ステップ1:Orbbec SDK依存環境のインストール - -1. `pyorbbec`リポジトリをクローンします - ```bash - cd ~/ - git clone https://github.com/orbbec/pyorbbecsdk.git - ``` - -2. 対応する**.whlファイル**をダウンロードしてSDKをインストールします - [pyorbbecsdk Releases](https://github.com/orbbec/pyorbbecsdk/releases)にアクセスし、 - Pythonバージョンに基づいて選択してインストールしてください。例: - ```bash - pip install pyorbbecsdk-x.x.x-cp310-cp310-linux_x86_64.whl - ``` - -3. `pyorbbec`ディレクトリで依存関係をインストールします - ```bash - cd ~/pyorbbecsdk - pip install -r requirements.txt - ``` - - `numpy`バージョンを`1.26.0`に強制ダウングレードします - ```bash - pip install numpy==1.26.0 - ``` - 赤いエラーメッセージは無視できます。 - -4. Orbbec SDKを`~/lerobot/src/cameras`ディレクトリにクローンします - - ```bash - cd ~/lerobot/src/cameras - git clone https://github.com/ZhuYaoHui1998/orbbec.git - ``` - -5. utils.pyと__init__.pyを修正します -- `~/lerobot/src/lerobot/cameras`ディレクトリの`utils.py`を見つけ、40行目に以下のコードを追加してください: - -```python -elif cfg.type == "orbbec": - from .realsense.camera_orbbec import OrbbecCamera - - cameras[key] = OrbbecCamera(cfg) -``` - -
- -
- -- `~/lerobot/src/lerobot/cameras`ディレクトリの`__init__.py`を見つけ、18行目に以下のコードを追加してください: - -```python -from .orbbec.configuration_orbbec import OrbbecCameraConfig -``` - -
- -
- - -- 🚀 ステップ2:関数呼び出しと例 - -以下のすべての例では、`so101_follower`を実際に使用しているロボットアームのモデル(例:`so100` / `so101`)に置き換えてください。 - - -`focus_area`ハイパーパラメータを追加しました。遠すぎる深度データはロボットアームにとって意味がない(到達や把握ができない物体)ため、`focus_area`未満または超過の深度データは黒で表示されます。デフォルトの`focus_area`は(20, 600)です。 -現在サポートされている解像度は幅:640、高さ:880のみです。 - -```bash -lerobot-teleoperate \ - --robot.type=so101_follower \ - --robot.port=/dev/ttyACM0 \ - --robot.id=my_awesome_follower_arm \ - --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \ - --teleop.type=so101_leader \ - --teleop.port=/dev/ttyACM1 \ - --teleop.id=my_awesome_leader_arm \ - --display_data=true -``` - - -
- -
- - - -データ収集、トレーニング、評価などの後続タスクについては、通常のRGBコマンドと同じプロセスです。通常のRGBコマンドの関連部分を以下に置き換えるだけです: - -```bash - --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \ -``` - -その後、追加の単眼RGBカメラを追加することもできます。 - - -
- - - :::tip SO100とSO101のコードは互換性があります。SO100のユーザーは、SO101のパラメータとコードを直接利用して操作できます。 ::: @@ -735,10 +619,10 @@ Camera #0: (more cameras ...) ``` -各カメラで撮影された写真は`outputs/captured_images`ディレクトリで確認できます。 +各カメラで撮影された画像は`outputs/captured_images`ディレクトリで確認できます。 :::warning -macOSでIntel RealSenseカメラを使用する場合、このエラーが発生する可能性があります:Error finding RealSense cameras: failed to set power state。これは同じコマンドをsudo権限で実行することで解決できます。macOSでRealSenseカメラを使用することは不安定であることに注意してください。 +macOSでIntel RealSenseカメラを使用する際、このエラーが発生する可能性があります:`Error finding RealSense cameras: failed to set power state`。これは同じコマンドを`sudo`権限で実行することで解決できます。なお、macOSでRealSenseカメラを使用することは不安定です。 ::: その後、テレオペレーション中にコンピュータでカメラを表示できるようになります。以下のコードを実行してください。これは最初のデータセットを記録する前にセットアップを準備するのに役立ちます。 @@ -779,7 +663,7 @@ lerobot-teleoperate \ src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/rerun-version.png" /> -rerunバージョンをダウングレードして問題を解決できます。 +rerunのバージョンをダウングレードすることで問題を解決できます。 ```bash pip3 install rerun-sdk==0.23 @@ -813,22 +697,22 @@ lerobot-record \ --dataset.reset_time_s=30 ``` -その中で、`repo_id`は慣習的に変更でき、`push_to_hub=false`です。最終的に、データセットはホームフォルダの`~/.cache/huggingface/lerobot`ディレクトリに保存され、前述の`seeedstudio123/test`フォルダが作成されます。 +その中で、`repo_id`は慣例的に変更でき、`push_to_hub=false`です。最終的に、データセットはホームフォルダの`~/.cache/huggingface/lerobot`ディレクトリに保存され、前述の`seeedstudio123/test`フォルダが作成されます。 -- データセットをアップロードするためにHugging Face hubの機能を使用したい場合で、以前に行ったことがない場合は、[Hugging Face設定](https://huggingface.co/settings/tokens)から生成できる書き込みアクセストークンを使用してログインしていることを確認してください: +- データセットをアップロードするためにHugging Face hubの機能を使用したい場合で、以前に実行したことがない場合は、[Hugging Face設定](https://huggingface.co/settings/tokens)から生成できる書き込みアクセストークンを使用してログインしていることを確認してください: ```bash huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential ``` -これらのコマンドを実行するために、Hugging Faceリポジトリ名を変数に保存します: +これらのコマンドを実行するために、Hugging Faceリポジトリ名を変数に保存してください: ```bash HF_USER=$(huggingface-cli whoami | head -n 1) echo $HF_USER ``` -5つのエピソードを記録し、データセットをhubにアップロードします: +5つのエピソードを記録し、データセットをhubにアップロードしてください: ```bash lerobot-record \ @@ -861,13 +745,13 @@ INFO 2024-08-10 15:02:58 ol_robot.py:219 dt:33.34 (30.0hz) dtRlead: 5.06 (197.5h **1. データストレージ** - データは`LeRobotDataset`形式を使用して保存され、記録中にディスクに保存されます。 -- デフォルトでは、データセットは記録後にHugging Faceページにプッシュされます。 -- アップロードを無効にするには、`--dataset.push_to_hub=False`を使用します +- デフォルトでは、記録後にデータセットがHugging Faceページにプッシュされます。 +- アップロードを無効にするには、`--dataset.push_to_hub=False`を使用してください **2. チェックポイントと再開** -- チェックポイントは記録中に自動的に作成されます。 -- 中断後に再開するには、同じコマンドを`--resume=true`で再実行します +- 記録中にチェックポイントが自動的に作成されます。 +- 中断後に再開するには、`--resume=true`を付けて同じコマンドを再実行してください ⚠️ 重要な注意:再開時は、`--dataset.num_episodes`を記録する追加エピソード数に設定してください(データセット内の目標総エピソード数ではありません)。 @@ -883,7 +767,7 @@ INFO 2024-08-10 15:02:58 ol_robot.py:219 dt:33.34 (30.0hz) dtRlead: 5.06 (197.5h | --dataset.reset_time_s | 各エピソード後の環境リセット時間(秒) | 60 | | --dataset.num_episodes | 記録する総エピソード数 | 50 | -**4. 記録中のキーボード制御** +**4. 記録中のキーボード操作** キーボードショートカットを使用してデータ記録フローを制御します: @@ -891,30 +775,30 @@ INFO 2024-08-10 15:02:58 ol_robot.py:219 dt:33.34 (30.0hz) dtRlead: 5.06 (197.5h |-----|--------| | → (右矢印) | 現在のエピソード/リセットを早期停止し、次に移動。 | | ← (左矢印) | 現在のエピソードをキャンセルし、再記録。 | -| ESC | セッションを即座に停止し、ビデオをエンコードし、データセットをアップロード。 | +| ESC | セッションを即座に停止し、動画をエンコードし、データセットをアップロード。 | **データ収集のヒント** - タスクの提案:異なる場所でオブジェクトを掴み、ビンに配置する。 - スケール:≥50エピソードを記録(場所あたり10エピソード)。 - 一貫性: - - カメラを固定に保つ。 + - カメラを固定する。 - 同一の掴み動作を維持する。 - 操作されるオブジェクトがカメラフィードで見えることを確認する。 - 進行: - バリエーション(新しい場所、技術、カメラ調整)を追加する前に、信頼性のある掴みから始める。 - 失敗を防ぐため、急激な複雑さの増加を避ける。 -💡 経験則:カメラ画像だけを見て、自分でタスクを実行できるようにする必要があります。 +💡 経験則:カメラ画像だけを見てタスクを自分で実行できるようにする必要があります。 -この重要なトピックについてより深く掘り下げたい場合は、良いデータセットとは何かについて書いた[ブログ投稿](https://huggingface.co/blog/lerobot-datasets#what-makes-a-good-dataset)をチェックできます。 +この重要なトピックについてより深く学びたい場合は、良いデータセットとは何かについて書いた[ブログ記事](https://huggingface.co/blog/lerobot-datasets#what-makes-a-good-dataset)をご確認ください。 **トラブルシューティング** -Linux固有の問題: -記録中に右矢印/左矢印/ESCキーが応答しない場合: +Linux固有の問題: +記録中に右矢印/左矢印/ESCキーが反応しない場合: -- `$DISPLAY`環境変数が設定されていることを確認してください([pynputの制限](https://pynput.readthedocs.io/en/latest/limitations.html)を参照)。 +- `$DISPLAY`環境変数が設定されていることを確認してください([pynputの制限事項](https://pynput.readthedocs.io/en/latest/limitations.html)を参照)。
@@ -926,20 +810,20 @@ Linux固有の問題: SO100とSO101のコードは互換性があります。SO100のユーザーは、SO101のパラメータとコードを直接利用して操作できます。 ::: -`--control.push_to_hub=true`でデータセットをhubにアップロードした場合、以下で与えられるrepo idをコピー&ペーストして[データセットをオンラインで可視化](https://huggingface.co/spaces/lerobot/visualize_dataset)できます: +`--control.push_to_hub=true`でデータセットをハブにアップロードした場合、以下のコマンドで取得したrepo idをコピー&ペーストして[データセットをオンラインで可視化](https://huggingface.co/spaces/lerobot/visualize_dataset)できます: ```bash echo ${HF_USER}/so101_test ``` -`--dataset.push_to_hub=false`でアップロードしなかった場合も、以下でローカルで可視化できます: +`--dataset.push_to_hub=false`でアップロードしなかった場合は、以下のコマンドでローカルで可視化することもできます: ```bash lerobot-dataset-viz \ --repo-id ${HF_USER}/so101_test \ ``` -`--dataset.push_to_hub=false`でアップロードした場合も、以下でローカルで可視化できます: +`--dataset.push_to_hub=false`でアップロードした場合は、以下のコマンドでローカルで可視化することもできます: ```bash lerobot-dataset-viz \ @@ -959,9 +843,9 @@ lerobot-dataset-viz \ SO100とSO101のコードは互換性があります。SO100のユーザーは、SO101のパラメータとコードを直接利用して操作できます。 ::: -便利な機能として`replay`機能があり、記録したエピソードや外部のデータセットからのエピソードを再生できます。この機能は、ロボットの動作の再現性をテストし、同じモデルのロボット間での転移可能性を評価するのに役立ちます。 +便利な機能として`replay`機能があります。これにより、記録したエピソードや他のデータセットのエピソードを再生できます。この機能は、ロボットの動作の再現性をテストし、同じモデルのロボット間での転移可能性を評価するのに役立ちます。 -以下のコマンドまたはAPI例を使用して、ロボットで最初のエピソードを再生できます: +以下のコマンドまたはAPIの例を使用して、ロボットで最初のエピソードを再生できます: ```bash lerobot-replay \ @@ -972,7 +856,7 @@ lerobot-replay \ --dataset.episode=0 ``` -ロボットは記録した動作と似た動きを再現するはずです。 +ロボットは記録した動作と同様の動きを再現するはずです。 ## ポリシーの訓練 @@ -980,7 +864,7 @@ lerobot-replay \ SO100とSO101のコードは互換性があります。SO100のユーザーは、SO101のパラメータとコードを直接利用して操作できます。 ::: -ロボットを制御するポリシーを訓練するには、[lerobot-train](https://github.com/huggingface/lerobot/blob/main/src/lerobot/scripts/train.py)スクリプトを使用します。いくつかの引数が必要です。以下はコマンド例です: +ロボットを制御するポリシーを訓練するには、[lerobot-train](https://github.com/huggingface/lerobot/blob/main/src/lerobot/scripts/train.py)スクリプトを使用します。いくつかの引数が必要です。以下はコマンドの例です: ```bash lerobot-train \ @@ -1010,8 +894,8 @@ lerobot-train \ 説明しましょう: - **データセット指定**:パラメータ`--dataset.repo_id=${HF_USER}/so101_test`でデータセットを提供します。 -- **訓練ステップ**:`--steps=300000`を使用して訓練ステップ数を変更します。アルゴリズムはデフォルトで800000ステップですが、タスクの難易度と訓練中の損失を観察して調整できます。 -- **ポリシータイプ**:`policy.type=act`でポリシーを提供します。同様に、[`act`, `diffusion`, `pi0`, `pi0fast`, `pi0fast`, `sac`, `smolvla`]などのポリシー間で切り替えることができ、`configuration_act.py`から設定を読み込みます。重要なことに、このポリシーは、この情報がすでにデータセットに保存されているため、ロボット(例:`laptop`と`phone`)のモーター状態、モーターアクション、カメラ数に自動的に適応します。 +- **訓練ステップ**:`--steps=300000`を使用して訓練ステップ数を変更します。アルゴリズムのデフォルトは800000ステップで、タスクの難易度と訓練中の損失を観察して調整できます。 +- **ポリシータイプ**:`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`を実行してログインしていることを確認してください。 @@ -1022,15 +906,15 @@ lerobot-train \ src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/stack_bug.png" />
-以下のコマンドを実行して解決してみてください: +以下のコマンドを実行して解決してください: ```bash pip install datasets==2.19 ``` -訓練には数時間かかります。`outputs/train/act_so100_test/checkpoints`にチェックポイントが見つかります。 +訓練には数時間かかります。チェックポイントは`outputs/train/act_so100_test/checkpoints`にあります。 -チェックポイントから訓練を再開するには、以下は`act_so101_test`ポリシーの`last`チェックポイントから再開するコマンド例です: +チェックポイントから訓練を再開するには、以下は`act_so101_test`ポリシーの`last`チェックポイントから再開するコマンドの例です: ```bash lerobot-train \ @@ -1040,14 +924,14 @@ lerobot-train \ **ポリシーチェックポイントのアップロード** -訓練が完了したら、最新のチェックポイントをアップロードします: +訓練が完了したら、以下のコマンドで最新のチェックポイントをアップロードします: ```bash huggingface-cli upload ${HF_USER}/act_so101_test \ outputs/train/act_so101_test/checkpoints/last/pretrained_model ``` -中間チェックポイントもアップロードできます: +以下のコマンドで中間チェックポイントもアップロードできます: ```bash CKPT=010000 @@ -1060,9 +944,9 @@ huggingface-cli upload ${HF_USER}/act_so101_test${CKPT} \
SmolVLA -[SmolVLA](https://huggingface.co/docs/lerobot/smolvla)は、ロボティクス用のHugging Faceの軽量基盤モデルです。LeRobotデータセットでの簡単なファインチューニング用に設計されており、開発を加速するのに役立ちます! +[SmolVLA](https://huggingface.co/docs/lerobot/smolvla)は、ロボティクス向けのHugging Faceの軽量基盤モデルです。LeRobotデータセットでの簡単なファインチューニング用に設計されており、開発を加速するのに役立ちます! -**環境をセットアップする** +**環境のセットアップ** 以下を実行してSmolVLAの依存関係をインストールします: @@ -1070,13 +954,13 @@ huggingface-cli upload ${HF_USER}/act_so101_test${CKPT} \ pip install -e ".[smolvla]" ``` -**あなたのデータでSmolVLAをファインチューニングする** +**データでSmolVLAをファインチューニング** -事前学習済みの450Mモデルである[smolvla_base](https://hf.co/lerobot/smolvla_base)を使用して、あなたのデータでファインチューニングします。20kステップでモデルを学習するには、単一のA100 GPUで約4時間かかります。パフォーマンスとユースケースに基づいてステップ数を調整する必要があります。 +事前訓練済みの450Mモデルである[smolvla_base](https://hf.co/lerobot/smolvla_base)を使用し、データでファインチューニングします。20kステップでモデルを訓練するには、単一のA100 GPUで約4時間かかります。パフォーマンスとユースケースに基づいてステップ数を調整する必要があります。 -GPUデバイスがない場合は、[Google Colab](https://colab.research.google.com/github/huggingface/notebooks/blob/main/lerobot/training-smolvla.ipynb)のノートブックを使用して学習できます。 +GPUデバイスがない場合は、[Google Colab](https://colab.research.google.com/github/huggingface/notebooks/blob/main/lerobot/training-smolvla.ipynb)のノートブックを使用して訓練できます。 -`--dataset.repo_id`を使用してデータセットを学習スクリプトに渡します。インストールをテストしたい場合は、[SmolVLA Paper](https://huggingface.co/papers/2506.01844)のために収集したデータセットの1つを使用する以下のコマンドを実行してください。 +`--dataset.repo_id`を使用してデータセットを訓練スクリプトに渡します。インストールをテストしたい場合は、[SmolVLA論文](https://huggingface.co/papers/2506.01844)用に収集したデータセットの1つを使用する以下のコマンドを実行してください。 ```bash lerobot-train \ @@ -1091,7 +975,7 @@ lerobot-train \ ``` :::tip -小さなバッチサイズから始めて、GPUが許可し、読み込み時間が短いままである限り、段階的に増やすことができます。 +小さなバッチサイズから始めて、GPUが許可し、読み込み時間が短い限り、段階的に増やすことができます。 ::: ファインチューニングは芸術です。ファインチューニングのオプションの完全な概要については、以下を実行してください: @@ -1100,9 +984,9 @@ lerobot-train \ lerobot-train --help ``` -**ファインチューニングされたモデルを評価してリアルタイムで実行する** +**ファインチューニングされたモデルの評価とリアルタイム実行** -エピソードを記録する場合と同様に、HuggingFace Hubにログインすることをお勧めします。対応する手順に従ってください:[データセットを記録する](https://huggingface.co/docs/lerobot/il_robots)。ログインしたら、以下を実行してセットアップで推論を実行できます: +エピソードを記録する場合と同様に、HuggingFace Hubにログインすることをお勧めします。対応する手順に従うことができます:[データセットの記録](https://huggingface.co/docs/lerobot/il_robots)。ログインしたら、以下を実行してセットアップで推論を実行できます: ```bash lerobot-record \ @@ -1121,29 +1005,29 @@ lerobot-record \ --policy.path=HF_USER/FINETUNE_MODEL_NAME # <- Use your fine-tuned model ``` -評価セットアップに応じて、評価スイートで記録する期間とエピソード数を設定できます。 +評価セットアップに応じて、評価スイート用に記録する期間とエピソード数を設定できます。
LIBERO -[LIBERO](https://huggingface.co/docs/lerobot/libero)は、生涯ロボット学習を研究するために設計されたベンチマークです。ロボットは工場で一度だけ事前学習されるのではなく、時間をかけて人間のユーザーと共に学習し適応し続ける必要があるという考えです。この継続的な適応は意思決定における生涯学習(LLDM)と呼ばれ、真にパーソナライズされたヘルパーとなるロボットを構築するための重要なステップです。 +[LIBERO](https://huggingface.co/docs/lerobot/libero)は、生涯ロボット学習を研究するために設計されたベンチマークです。ロボットは工場で一度だけ事前訓練されるのではなく、時間をかけて人間のユーザーと共に学習し適応し続ける必要があるという考えです。この継続的な適応は意思決定における生涯学習(LLDM)と呼ばれ、真にパーソナライズされたヘルパーとなるロボットの構築に向けた重要なステップです。 - 📄 [LIBERO論文](https://arxiv.org/abs/2306.03310) - 💻 [元のLIBEROリポジトリ](https://github.com/Lifelong-Robot-Learning/LIBERO) **LIBEROでの評価** -**LeRobot**では、LIBEROを私たちのフレームワークに移植し、主に軽量なVision-Language-Actionモデルである[SmolVLA](https://huggingface.co/docs/lerobot/en/smolvla)の**評価**に使用しました。 +**LeRobot**では、LIBEROをフレームワークに移植し、主に軽量Vision-Language-Actionモデルである[SmolVLA](https://huggingface.co/docs/lerobot/en/smolvla)の**評価**に使用しました。 -LIBEROは現在、**マルチ評価対応シミュレーション**の一部であり、**単一のタスクスイート**または**複数のスイートを同時に**フラグ1つでポリシーをベンチマークできます。 +LIBEROは現在、**マルチ評価対応シミュレーション**の一部となっており、**単一のタスクスイート**または**複数のスイートを同時に**フラグ一つでポリシーをベンチマークできます。 -LIBEROをインストールするには、LeRobotの公式手順に従った後、`pip install -e ".[libero]"`を実行してください。 +LIBEROをインストールするには、LeRobot公式の手順に従った後、次のコマンドを実行してください:`pip install -e ".[libero]"` ***単一スイート評価*** -1つのLIBEROスイートでポリシーを評価します: +1つのLIBEROスイートでポリシーを評価する: ```bash lerobot-eval \ @@ -1154,13 +1038,13 @@ lerobot-eval \ --eval.n_episodes=3 ``` -- `--env.task`はスイート(`libero_object`、`libero_spatial`など)を選択します。 -- `--eval.batch_size`は並列実行する環境数を制御します。 -- `--eval.n_episodes`は実行する総エピソード数を設定します。 +- `--env.task`でスイート(`libero_object`、`libero_spatial`など)を選択します。 +- `--eval.batch_size`で並列実行する環境数を制御します。 +- `--eval.n_episodes`で実行する総エピソード数を設定します。 ***マルチスイート評価*** -複数のスイートで同時にポリシーをベンチマークします: +複数のスイートで一度にポリシーをベンチマークする: ```bash lerobot-eval \ @@ -1173,7 +1057,7 @@ lerobot-eval \ - マルチスイート評価には`--env.task`にカンマ区切りのリストを渡します。 -**学習コマンドの例** +**トレーニングコマンドの例** ```bash lerobot-train \ @@ -1194,19 +1078,19 @@ lerobot-train \ **レンダリングに関する注意** -LeRobotはシミュレーションにMuJoCoを使用します。学習または評価の前にレンダリングバックエンドを設定する必要があります: +LeRobotはシミュレーションにMuJoCoを使用します。トレーニングや評価の前にレンダリングバックエンドを設定する必要があります: - `export MUJOCO_GL=egl` → ヘッドレスサーバー用(例:HPC、クラウド)
-## ポリシーを評価する +## ポリシーの評価 :::tip 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 \ @@ -1234,13 +1118,13 @@ 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_`で始まります。この操作により、評価中にビデオとデータが個別に記録され、`eval_`で始まるフォルダ(例:`seeed/eval_test123`)に保存されます。 +2. データセット名`dataset.repo_id`は`eval_`で始まります。この操作により、評価中に動画とデータが個別に記録され、`eval_`で始まるフォルダ(例:`seeed/eval_test123`)に保存されます。 -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などのキーワードが、データセット収集時に使用したものと厳密に一致している必要があることに注意してください。
@@ -1248,25 +1132,25 @@ lerobot-record \ ## FAQ -- このドキュメント/チュートリアルに従っている場合は、推奨されるGitHubリポジトリ`https://github.com/Seeed-Projects/lerobot.git`をgit cloneしてください。このドキュメントで推奨されるリポジトリは検証済みの安定版です。公式のLerobotリポジトリは最新版に継続的に更新されており、異なるデータセットバージョン、異なるコマンドなどの予期しない問題を引き起こす可能性があります。 +- このドキュメント/チュートリアルに従っている場合は、推奨されるGitHubリポジトリ`https://github.com/Seeed-Projects/lerobot.git`をgit cloneしてください。このドキュメントで推奨されるリポジトリは検証済みの安定版です。公式Lerobotリポジトリは最新版に継続的に更新されており、異なるデータセットバージョン、異なるコマンドなどの予期しない問題を引き起こす可能性があります。 -- サーボIDの校正時に以下のエラーが発生した場合: +- サーボIDキャリブレーション時に以下のエラーが発生した場合: ```bash `Motor ‘gripper’ was not found, Make sure it is connected` ``` - 通信ケーブルがサーボに適切に接続されているか、電源が正しい電圧を供給しているかを注意深く確認してください。 + 通信ケーブルがサーボに正しく接続されているか、電源が正しい電圧を供給しているかを慎重に確認してください。 -- 以下が発生した場合: +- 以下のエラーが発生した場合: ```bash Could not connect on port "/dev/ttyACM0" ``` - `ls /dev/ttyACM*`を実行してACM0が存在することを確認できる場合、シリアルポートの権限を付与するのを忘れています。ターミナルで`sudo chmod 666 /dev/ttyACM*`を入力して修正してください。 + `ls /dev/ttyACM*`を実行してACM0が存在することが確認できる場合、シリアルポートの権限付与を忘れています。ターミナルで`sudo chmod 666 /dev/ttyACM*`を入力して修正してください。 -- 以下が発生した場合: +- 以下のエラーが発生した場合: ```bash No valid stream found in input file. Is -1 of the desired media type? @@ -1279,7 +1163,7 @@ lerobot-record \ src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/lekiwi/No valid stream.png" />
-- 以下が発生した場合: +- 以下のエラーが発生した場合: ```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! @@ -1287,13 +1171,13 @@ lerobot-record \ 対応するポートのロボットアームが電源オンになっているか、バスサーボのデータケーブルが緩んでいるか切断されていないかを確認する必要があります。サーボのライトが点灯していない場合は、前のサーボのケーブルが緩んでいることを意味します。 -- ロボットアームの校正時に以下のエラーが発生した場合: +- ロボットアームのキャリブレーション時に以下のエラーが発生した場合: ```bash Magnitude 30841 exceeds 2047 (max for sign_bit_index=11) ``` - ロボットアームの電源を切って再起動し、再度キャリブレーションを試してください。この方法は、キャリブレーション中にMAX角度が数万の値に達した場合にも使用できます。これで解決しない場合は、中央値キャリブレーションやID書き込みを含む、対応するサーボの再キャリブレーションが必要です。 + ロボットアームの電源を切って再起動し、再度キャリブレーションを試してください。この方法は、キャリブレーション中にMAX角度が数万の値に達した場合にも使用できます。これで解決しない場合は、中央値キャリブレーションやID書き込みを含む対応するサーボの再キャリブレーションが必要です。 - 評価フェーズで以下のエラーが発生した場合: @@ -1301,7 +1185,7 @@ lerobot-record \ File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/seeed/eval_xxxx' ``` - まず`eval_`で始まるフォルダを削除してから、プログラムを再実行してください。 + まず`eval_`で始まるフォルダを削除してからプログラムを再実行してください。 - 評価フェーズで以下のエラーが発生した場合: @@ -1309,26 +1193,26 @@ lerobot-record \ `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ファイルにキャリブレーション情報が保存されているため、エラーメッセージが表示される可能性があります。 -- 50セットのデータでACTをトレーニングするには、RTX 3060(8GB)搭載のノートパソコンで約6時間、RTX 4090またはA100 GPU搭載のコンピュータで約2〜3時間かかります。 +- 50セットのデータでACTをトレーニングするには、RTX 3060(8GB)搭載のラップトップで約6時間、RTX 4090またはA100 GPUを搭載したコンピュータで約2-3時間かかります。 -- データ収集中は、カメラの位置、角度、周囲の照明を安定させてください。カメラに映る不安定な背景や歩行者の量を減らしてください。デプロイメント環境の変化が激しすぎると、ロボットアームが適切に把持できなくなる可能性があります。 +- データ収集中は、カメラの位置、角度、周囲の照明を安定させてください。カメラに映る不安定な背景や歩行者の量を減らしてください。展開環境の変化が過度になると、ロボットアームが適切に把握できなくなる可能性があります。 - データ収集コマンドでは、`num-episodes`パラメータが十分なデータを収集するように設定されていることを確認してください。途中で手動で一時停止しないでください。データの平均と分散はデータ収集完了後にのみ計算され、これらはトレーニングに必要です。 -- プログラムがUSBカメラから画像データを読み取れないと表示される場合は、USBカメラがハブを通して接続されていないことを確認してください。USBカメラは高速な画像転送速度を確保するため、デバイスに直接接続する必要があります。 +- プログラムがUSBカメラから画像データを読み取れないと表示される場合は、USBカメラがハブ経由で接続されていないことを確認してください。USBカメラは高速な画像転送速度を確保するため、デバイスに直接接続する必要があります。 -- `AttributeError: module 'rerun' has no attribute 'scalar'. Did you mean: 'scalars'?`のようなバグが見つかった場合は、rerunのバージョンをダウングレードすることで問題を解決できます。 +- `AttributeError: module 'rerun' has no attribute 'scalar'. Did you mean: 'scalars'?`のようなバグが見つかった場合は、rerunのバージョンをダウングレードして問題を解決できます。 ```bash pip3 install rerun-sdk==0.23 ``` :::tip -ソフトウェアの問題や環境依存の問題で解決できない場合は、このチュートリアルの最後にあるFAQセクションを確認することに加えて、[LeRobotプラットフォーム](https://github.com/huggingface/lerobot)または[LeRobot Discordチャンネル](https://discord.gg/8TnwDdjFGU)に速やかに問題を報告してください。 +解決できないソフトウェアの問題や環境依存の問題が発生した場合は、このチュートリアルの最後にあるFAQセクションを確認することに加えて、[LeRobotプラットフォーム](https://github.com/huggingface/lerobot)または[LeRobot Discordチャンネル](https://discord.gg/8TnwDdjFGU)に速やかに問題を報告してください。 ::: ## 引用 @@ -1353,7 +1237,7 @@ Dnsty: [Jetson Containers](https://github.com/dusty-nv/jetson-containers/tree/ma ## 技術サポート & 製品ディスカッション -弊社製品をお選びいただき、ありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供いたします。さまざまな好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。 +弊社製品をお選びいただきありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。
diff --git a/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_Starai_Arm.md b/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_Starai_Arm.md index 9a016d2a05036..9ec8ded70d670 100644 --- a/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_Starai_Arm.md +++ b/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_Starai_Arm.md @@ -1,5 +1,5 @@ --- -description: このwikiは、StarAI Robot ArmのデバッグチュートリアルとLerobotフレームワーク内でのデータ収集とトレーニングの実現方法を提供します。 +description: このwikiは、StarAI Robot ArmのデバッグチュートリアルとLerobotフレームワーク内でのデータ収集とトレーニングの実現を提供します。 title: LeRobotでのStarAI Arm keywords: - Lerobot @@ -35,7 +35,7 @@ last_update: 2. **LeRobotとの統合** [LeRobot Platform](https://github.com/huggingface/lerobot)との統合を目的として設計されており、実世界のロボットタスクにおける模倣学習のためのPyTorchモデル、データセット、ツール(データ収集、シミュレーション、トレーニング、デプロイメントを含む)を提供します。 3. **包括的な学習リソース** - 組み立てと校正ガイド、カスタム把持タスクの例など、包括的なオープンソース学習リソースを提供し、ユーザーが迅速に開始してロボットアプリケーションを開発できるよう支援します。 + 組み立てとキャリブレーションガイド、カスタム把持タスクの例など、包括的なオープンソース学習リソースを提供し、ユーザーが迅速に開始してロボットアプリケーションを開発できるよう支援します。 4. **Nvidiaとの互換性** reComputer Mini J4012 Orin NX 16GBプラットフォームでのデプロイメントをサポートします。 @@ -45,7 +45,7 @@ last_update: - 6+1自由度と470mmのリーチ — 汎用性と精度のために構築されています。 - デュアルブラシレスバスサーボ駆動 — 最大300gのペイロードでスムーズ、静音、強力。 - 66mm最大開口のパラレルグリッパー — クイック交換の柔軟性のためのモジュラーフィンガーチップ。 -- 独自のHover Lock技術 — ワンプレスでリーダーアームを任意の位置で瞬時に固定。 +- 独自のホバーロック技術 — ワンプレスでリーダーアームを任意の位置で瞬時に固定。 ## 仕様 @@ -184,7 +184,7 @@ pip3 install numpy==1.26.0 # This should match torchvision 6. PytorchとTorchvisionの確認 -pipを介してlerobot環境をインストールすると、元のPytorchとTorchvisionがアンインストールされ、PytorchとTorchvisionのCPUバージョンがインストールされるため、Pythonで確認を行う必要があります。 +pipを介してlerobot環境をインストールすると、元のPytorchとTorchvisionがアンインストールされ、CPU版のPytorchとTorchvisionがインストールされるため、Pythonで確認を行う必要があります。 ```python import torch @@ -195,9 +195,9 @@ print(torch.cuda.is_available()) 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をインストールしてください。 -### ロボットアームの開梱 +### ロボットアームの開封 -ロボットアームキットに含まれるもの +ロボットアームキットの内容 - リーダーアーム - フォロワーアーム @@ -239,7 +239,7 @@ usbを取り外すことを忘れないでください。そうしないとイ 例: -1. リーダーアームのポートを識別する際の出力例(例:Macでは `/dev/tty.usbmodem575E0031751`、Linuxでは `/dev/ttyUSB0` の可能性があります): +1. リーダーアームのポートを識別する際の出力例(例:Macでは`/dev/tty.usbmodem575E0031751`、Linuxでは`/dev/ttyUSB0`の可能性があります): 2. フォロワーアームのポートを識別する際の出力例(例:Macでは `/dev/tty.usbmodem575E0032081`、Linuxでは `/dev/ttyUSB1` の可能性があります): :::tip @@ -286,7 +286,7 @@ sudo chmod 777 /dev/ttyUSB* ::: -以下を実行してUSBポートへのアクセス権限を付与する必要がある場合があります: +以下を実行してUSBポートへのアクセス権を付与する必要がある場合があります: ```bash sudo chmod 666 /dev/ttyUSB* @@ -294,27 +294,28 @@ sudo chmod 666 /dev/ttyUSB* ## キャリブレーション -StarAIロボットアームの開封からテレオペレーションまでを扱った動画については、以下を参照してください: -
- -
+### 初期キャリブレーション -ロボットアームを初期位置(下図のとおり)に移動してスタンバイモードにし、電源を再接続してください。新バージョンのロボットアームの初期位置では、ジョイント3、4、5のサーボが図の位置と厳密に一致するよう特に注意してください。 +各関節を左右に対応する位置まで回転させてください。 +### 再キャリブレーション -| **Violin Leader Arm** | **Viola Follower Arm** | -|:---------:|:---------:| -| ![fig1](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/violin_rest.jpg) | ![fig2](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/viola_rest.jpg) | +画面の指示に従って:文字「c」を入力してEnterキーを押してください。 -旧バージョンのロボットアームの初期位置(ジョイント3、4、5のサーボが図の位置と厳密に一致するよう特に注意してください。新バージョンのロボットアームの初期位置も参考として使用できます): -
- -
+以下は参考値です。通常の状況では、実際の制限参考値はこれらの参考値の**±10°**の範囲内に収まるはずです。 +| サーボID | 下限角度 (°) | 上限角度 (°) | 備考 | +| -------- | --------------------- | --------------------- | ---------------------------------------------- | +| motor\_0 | -180° | 180° | 制限位置まで回転 | +| motor\_1 | -90° | 90° | 制限位置まで回転 | +| motor\_2 | -90° | 90° | 制限位置まで回転 | +| motor\_3 | -180° | 180° | 制限なし;参考角度制限まで回転 | +| motor\_4 | -90° | 90° | 制限位置まで回転 | +| motor\_5 | -180° | 180° | 制限なし;参考角度制限まで回転 | +| motor\_6 | 0° | 100° | 制限位置まで回転 | :::tip -PC(Linux)とJetsonボードを例にすると、`最初に`挿入されたUSBデバイスは`ttyUSB0`にマッピングされ、`2番目に`挿入されたUSBデバイスは`ttyUSB1`にマッピングされます。 +PC(Linux)とJetsonボードを例にとると、`最初に`挿入されたUSBデバイスは`ttyUSB0`にマップされ、`2番目に`挿入されたUSBデバイスは`ttyUSB1`にマップされます。 コードを実行する前に、リーダーとフォロワーのマッピングインターフェースに注意してください。 ::: @@ -327,8 +328,6 @@ PC(Linux)とJetsonボードを例にすると、`最初に`挿入されたUS lerobot-calibrate --teleop.type=starai_violin --teleop.port=/dev/ttyUSB0 --teleop.id=my_awesome_staraiviolin_arm ``` -起動後、各ジョイントのエンコーダ値が表示されます。各ジョイントを手動で一つずつキャリブレーションする必要があります:各ジョイントを最大位置と最小位置まで回転させてください。リミットストップのないジョイントの場合、回転範囲は時計回りまたは反時計回りに180°を超えてはいけません。すべてのジョイントをキャリブレーションした後、Enterキーを押して設定を保存してください。 - #### フォロワーロボットアーム フォロワーを`/dev/ttyUSB1`に接続するか、`--teleop.port`パラメータを変更してから実行してください: @@ -337,7 +336,7 @@ lerobot-calibrate --teleop.type=starai_violin --teleop.port=/dev/ttyUSB0 --t lerobot-calibrate --robot.type=starai_viola --robot.port=/dev/ttyUSB1 --robot.id=my_awesome_staraiviola_arm ``` -起動後、各ジョイントのエンコーダ値が表示されます。各ジョイントを手動で一つずつキャリブレーションする必要があります:各ジョイントを最大位置と最小位置まで回転させてください。リミットストップのないジョイントの場合、回転範囲は時計回りまたは反時計回りに180°を超えてはいけません。すべてのジョイントをキャリブレーションした後、Enterキーを押して設定を保存してください。 +コマンドを実行した後、各関節が**制限位置**に到達するように**手動でロボットアームを動かす**必要があります。ターミナルには記録された範囲データが表示されます。この操作が完了したら、Enterキーを押してください。 :::tip キャリブレーションファイルは以下のパスに保存されます:`~/.cache/huggingface/lerobot/calibration/robots`と`~/.cache/huggingface/lerobot/calibration/teleoperators`。 @@ -356,8 +355,6 @@ lerobot-calibrate --robot.type=starai_viola --robot.port=/dev/ttyUSB1 --robo lerobot-calibrate --teleop.type=bi_starai_leader --teleop.left_arm_port=/dev/ttyUSB0 --teleop.right_arm_port=/dev/ttyUSB2 --teleop.id=bi_starai_leader ``` -起動後、各ジョイントのエンコーダ値が表示されます。各ジョイントを手動で一つずつキャリブレーションする必要があります:各ジョイントを最大位置と最小位置まで回転させてください。リミットストップのないジョイントの場合、回転範囲は時計回りまたは反時計回りに180°を超えてはいけません。すべてのジョイントをキャリブレーションした後、Enterキーを押して設定を保存してください。 - #### フォロワーロボットアーム `left_arm_port`を`/dev/ttyUSB1`に、`right_arm_port`を`/dev/ttyUSB3`に接続するか、`--robot.left_arm_port`と`--robot.right_arm_port`パラメータを変更してから実行してください: @@ -366,13 +363,11 @@ lerobot-calibrate --teleop.type=bi_starai_leader --teleop.left_arm_port=/de lerobot-calibrate --robot.type=bi_starai_follower --robot.left_arm_port=/dev/ttyUSB1 --robot.right_arm_port=/dev/ttyUSB3 --robot.id=bi_starai_follower ``` -起動後、各ジョイントのエンコーダ値が表示されます。各ジョイントを手動で一つずつキャリブレーションする必要があります:各ジョイントを最大位置と最小位置まで回転させてください。リミットストップのないジョイントの場合、回転範囲は時計回りまたは反時計回りに180°を超えてはいけません。すべてのジョイントをキャリブレーションした後、Enterキーを押して設定を保存してください。 - :::tip シングルアームとデュアルアーム設定の違いは、`--teleop.type`と`--robot.type`パラメータにあります。さらに、デュアルアーム設定では左右のアーム用に別々のUSBポートが必要で、合計4つのUSBポートが必要です:`--teleop.left_arm_port`、`--teleop.right_arm_port`、`--robot.left_arm_port`、`--robot.right_arm_port`。 -デュアルアーム設定を使用する場合、テレオペレーション、データ収集、トレーニング、評価コマンドに適応するため、ロボットアームファイルタイプ`--teleop.type`と`--robot.type`、およびUSBポート`--teleop.left_arm_port`、`--teleop.right_arm_port`、`--robot.left_arm_port`、`--robot.right_arm_port`を手動で変更する必要があります。 +デュアルアーム設定を使用する場合、テレオペレーション、データ収集、トレーニング、評価コマンドに適応するために、ロボットアームファイルタイプ`--teleop.type`と`--robot.type`、およびUSBポート`--teleop.left_arm_port`、`--teleop.right_arm_port`、`--robot.left_arm_port`、`--robot.right_arm_port`を手動で変更する必要があります。 ::: @@ -381,10 +376,10 @@ lerobot-calibrate --robot.type=bi_starai_follower --robot.left_arm_port=/de ## テレオペレーション
- +
-アームを図に示された位置に移動し、スタンバイに設定してください。 +アームを図に示された位置に移動し、スタンバイ状態に設定してください。
- Orbbec Gemini2 Depth Cameraを使用する場合 - -
- -
- - - -- 🚀 ステップ1:Orbbec SDK依存環境のインストール - -1. `pyorbbec`リポジトリをクローンします - ```bash - cd ~/ - git clone https://github.com/orbbec/pyorbbecsdk.git - ``` - -2. SDK用の対応する**.whlファイル**をダウンロードしてインストールします - [pyorbbecsdk Releases](https://github.com/orbbec/pyorbbecsdk/releases)にアクセスし、 - Pythonバージョンに基づいて選択してインストールしてください。例: - ```bash - pip install pyorbbecsdk-x.x.x-cp310-cp310-linux_x86_64.whl - ``` - -3. `pyorbbec`ディレクトリで依存関係をインストールします - ```bash - cd ~/pyorbbecsdk - pip install -r requirements.txt - ``` - - `numpy`バージョンを`1.26.0`に強制ダウングレードします - ```bash - pip install numpy==1.26.0 - ``` - 赤いエラーメッセージは無視できます。 - -4. Orbbec SDKを`~/lerobot/src/cameras`ディレクトリにクローンします - - ```bash - cd ~/lerobot/src/cameras - git clone https://github.com/ZhuYaoHui1998/orbbec.git - ``` - -5. utils.pyと__init__.pyを変更します -- `~/lerobot/src/lerobot/cameras` ディレクトリの `utils.py` を見つけて、40行目に以下のコードを追加します: - -```python -elif cfg.type == "orbbec": - from .realsense.camera_orbbec import OrbbecCamera - - cameras[key] = OrbbecCamera(cfg) -``` - -
- -
- -- `~/lerobot/src/lerobot/cameras` ディレクトリの `__init__.py` を見つけて、18行目に以下のコードを追加します: - -```python -from .orbbec.configuration_orbbec import OrbbecCameraConfig -``` - -
- -
- - -- 🚀 ステップ 2:関数呼び出しと例 - -以下のすべての例では、`starai_viola` を実際に使用しているロボットアームのモデル(例:`so100` / `so101`)に置き換えてください。 - - -`focus_area` ハイパーパラメータを追加しました。遠すぎる深度データはロボットアームにとって意味がない(到達や把握ができない物体)ため、`focus_area` より小さいまたは大きい深度データは黒で表示されます。デフォルトの `focus_area` は (20, 600) です。 -現在サポートされている解像度は幅:640、高さ:880のみです。 - -```bash -lerobot-teleoperate \ - --robot.type=starai_viola \ - --robot.port=/dev/ttyUSB1 \ - --robot.id=my_awesome_staraiviola_arm \ - --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \ - --teleop.type=starai_violin \ - --teleop.port=/dev/ttyUSB0 \ - --teleop.id=my_awesome_staraiviolin_arm \ - --display_data=true -``` - - -
- -
- - -データ収集、トレーニング、評価などの後続タスクについては、通常のRGBコマンドと同じプロセスです。通常のRGBコマンドの関連部分を以下に置き換えるだけです: - ``` - --robot.cameras="{ front: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:(20,600)}}" \ - ``` -その後、追加の単眼RGBカメラを追加することもできます。 - - - -
- - -2つのUSBカメラを挿入した後、以下のスクリプトを実行してカメラのポート番号を確認します。カメラはUSBハブに接続せず、デバイスに直接接続する必要があることが重要です。USBハブの低速度により、画像データの読み取りができない場合があります。 +2つのUSBカメラを挿入した後、以下のスクリプトを実行してカメラのポート番号を確認してください。カメラはUSBハブに接続してはならず、デバイスに直接接続する必要があることを覚えておくことが重要です。USBハブの低速度により、画像データを読み取れない場合があります。 ```bash lerobot-find-cameras opencv # or realsense for Intel Realsense cameras ``` -ターミナルに以下の情報が出力されます。例えば、ラップトップのカメラは `index 2`、USBカメラは `index 4` です。 +ターミナルには以下の情報が出力されます。例えば、ラップトップカメラは`index 2`、USBカメラは`index 4`です。 ```markdown --- Detected Cameras --- @@ -582,7 +465,7 @@ Finalizing image saving... Image capture finished. Images saved to outputs/captured_images ``` -各カメラで撮影された画像は `outputs/images_from_opencv_cameras` ディレクトリで確認でき、異なる位置のカメラに対応するポートインデックス情報を検証できます。 +`outputs/images_from_opencv_cameras`ディレクトリで各カメラが撮影した画像を確認し、異なる位置のカメラに対応するポートインデックス情報を検証できます。 外部カメラを確認した後、以下のカメラ情報を実際のカメラ情報に置き換えると、リモート操作中にコンピュータでカメラを表示できるようになります: @@ -626,7 +509,7 @@ lerobot-teleoperate \ src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/rerun-version.png" />
-rerunのバージョンをダウングレードして問題を解決できます。 +この問題を解決するために、rerunのバージョンをダウングレードできます。 ```bash pip3 install rerun-sdk==0.23 @@ -642,7 +525,7 @@ pip3 install rerun-sdk==0.23 テレオペレーションに慣れたら、最初のデータセットを記録できます。 -データセットのアップロードにHugging Face hubの機能を使用したい場合で、以前に行ったことがない場合は、[Hugging Face設定](https://huggingface.co/settings/tokens)から生成できる書き込みアクセストークンを使用してログインしていることを確認してください: +データセットをアップロードするためにHugging Face hubの機能を使用したい場合で、以前に行ったことがない場合は、[Hugging Face設定](https://huggingface.co/settings/tokens)から生成できる書き込みアクセストークンを使用してログインしていることを確認してください: ```bash huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential @@ -655,7 +538,7 @@ HF_USER=$(huggingface-cli whoami | head -n 1) echo $HF_USER ``` -10エピソードを記録し、データセットをハブにアップロードします: +10エピソードを記録し、データセットをhubにアップロードします: ```bash lerobot-record \ @@ -699,13 +582,13 @@ lerobot-record \ ``` :::tip -シングルアームとデュアルアームのセットアップを区別するため、ここでの `--dataset.repo_id` は `starai/record-test_bi_arm` と名付けられています。 +シングルアームとデュアルアームのセットアップを区別するために、ここでの`--dataset.repo_id`は`starai/record-test_bi_arm`と名付けられています。 ::: :::tip -Hugging Face Hubデータセットアップロード機能を使用したくない場合は、`--dataset.push_to_hub=false` を選択できます。また、`--dataset.repo_id=${HF_USER}/starai` をカスタムローカルフォルダ名(例:`--dataset.repo_id=starai/record-test`)に置き換えてください。データはシステムのホームディレクトリの `~/.cache/huggingface/lerobot` に保存されます。 +Hugging Face Hubデータセットアップロード機能を使用したくない場合は、`--dataset.push_to_hub=false`を選択できます。また、`--dataset.repo_id=${HF_USER}/starai`をカスタムローカルフォルダ名(例:`--dataset.repo_id=starai/record-test`)に置き換えてください。データはシステムのホームディレクトリの`~/.cache/huggingface/lerobot`に保存されます。 ::: Hubにアップロードしない場合: @@ -753,21 +636,21 @@ lerobot-record \ ``` :::tip -シングルアームとデュアルアームのセットアップを区別するため、ここでの `--dataset.repo_id` は `starai/record-test_bi_arm` という名前になっています。 +シングルアームとデュアルアームのセットアップを区別するために、ここでの`--dataset.repo_id`は`starai/record-test_bi_arm`と名付けられています。 ::: -- `record` は、ロボット操作中にデータをキャプチャして管理するためのツールセットを提供します: +- `record`は、ロボット操作中のデータキャプチャと管理のためのツールセットを提供します: #### 1. データストレージ -- データは `LeRobotDataset` 形式で保存され、記録プロセス中にディスクに保存されます。 +- データは`LeRobotDataset`形式で保存され、記録プロセス中にディスクに保存されます。 #### 2. チェックポイントと再開 - チェックポイントは記録中に自動的に作成されます。 -- 問題が発生した場合、`--resume=true` を指定して同じコマンドを再実行することで再開できます。記録を再開する際は、`--dataset.num_episodes` をデータセット内の**目標総エピソード数ではなく、追加で記録するエピソード数**に設定する必要があります! +- 問題が発生した場合、`--resume=true`で同じコマンドを再実行することで再開できます。記録を再開する際は、`--dataset.num_episodes`をデータセット内の目標総エピソード数ではなく、**記録する追加エピソード数**に設定する必要があります! - 最初から記録を開始するには、データセットディレクトリを**手動で削除**してください。 #### 3. 記録パラメータ @@ -787,14 +670,14 @@ Parameter Description キーボードショートカットを使用してデータ記録ワークフローを制御します: -- **右矢印キー(→)**を押す:現在のエピソードを早期停止するか時間をリセットして、次のエピソードに移動します。 +- **右矢印キー(→)**を押す:現在のエピソードを早期停止するか時間をリセットし、次のエピソードに移動します。 - **左矢印キー(←)**を押す:現在のエピソードをキャンセルして再記録します。 - **ESC**を押す:セッションを即座に停止し、ビデオをエンコードしてデータセットをアップロードします。 :::tip Linuxでは、データ記録中に左右の矢印キーとエスケープキーが効かない場合、$DISPLAY環境変数が設定されていることを確認してください。pynputの制限を参照してください。 -データ記録に慣れたら、トレーニング用により大きなデータセットを作成できます。良い開始タスクは、異なる位置にあるオブジェクトを掴んで小さな箱に置くことです。少なくとも50エピソード、位置ごとに10エピソードを記録することをお勧めします。カメラを固定し、記録全体を通して一貫した掴み動作を維持してください。また、操作しているオブジェクトがカメラに映っていることを確認してください。良い経験則は、カメラ画像だけを見てタスクを完了できることです。 +データ記録に慣れたら、トレーニング用により大きなデータセットを作成できます。良い開始タスクは、異なる位置でオブジェクトを掴み、小さな箱に置くことです。少なくとも50エピソード、場所ごとに10エピソードを記録することをお勧めします。カメラを固定し、記録全体を通して一貫した掴み動作を維持してください。また、操作しているオブジェクトがカメラに映っていることを確認してください。良い経験則は、カメラ画像だけを見てタスクを完了できることです。 ::: ## エピソードの再生 @@ -811,7 +694,7 @@ lerobot-replay \ ```
- Dual-Arm + デュアルアーム ```bash lerobot-replay \ @@ -827,7 +710,7 @@ lerobot-replay \ ## ポリシーのトレーニング -ロボットを制御するポリシーをトレーニングするためのコマンド例は以下の通りです: +ロボットを制御するポリシーをトレーニングするためのコマンド例です: ```bash lerobot-train \ @@ -842,7 +725,7 @@ lerobot-train \ ```
- Dual-Arm + デュアルアーム ```bash lerobot-train \ @@ -858,10 +741,10 @@ lerobot-train \
-1. `policy.type` は `diffusion,pi0,pi0fast` の入力をサポートします +1. `policy.type`は`diffusion,pi0,pi0fast`の入力をサポートします 1. データセットをパラメータとして提供します:`dataset.repo_id=starai/record-test`。 -2. [`configuration_act.py`](https://github.com/huggingface/lerobot/blob/main/src/lerobot/policies/act/configuration_act.py) から設定を読み込みます。重要なことに、このポリシーはロボットのモーター状態、モーターアクション、カメラ数に自動的に適応し、データセットに保存されます。 -3. トレーニングチャートを可視化するために [Weights and Biases](https://docs.wandb.ai/quickstart) を使用する `wandb.enable=true` を提供します。これはオプションですが、使用する場合は `wandb login` を実行してログインしていることを確認してください。 +2. [`configuration_act.py`](https://github.com/huggingface/lerobot/blob/main/src/lerobot/policies/act/configuration_act.py)から設定を読み込みます。重要なことに、このポリシーはロボットのモーター状態、モーターアクション、カメラ数に自動的に適応し、データセットに保存されます。 +3. トレーニングチャートを可視化するために[Weights and Biases](https://docs.wandb.ai/quickstart)を使用する`wandb.enable=true`を提供します。これはオプションですが、使用する場合は`wandb login`を実行してログインしていることを確認してください。 特定のチェックポイントからトレーニングを再開します。 @@ -873,7 +756,7 @@ lerobot-train \ ```
-[SmolVLA policy](https://huggingface.co/docs/lerobot/smolvla) をトレーニングする場合のコマンド: +[SmolVLA policy](https://huggingface.co/docs/lerobot/smolvla)をトレーニングする場合のコマンド: ```bash pip install -e ".[smolvla]" @@ -915,9 +798,9 @@ lerobot-record \
-[Libero policy](https://huggingface.co/docs/lerobot/libero) をトレーニングする場合のコマンド: +[Libero policy](https://huggingface.co/docs/lerobot/libero)をトレーニングする場合のコマンド: -LIBEROは生涯ロボット学習を研究するために設計されたベンチマークです。ロボットは工場で一度だけ事前トレーニングされるのではなく、時間をかけて人間のユーザーと共に学習し適応し続ける必要があるという考えです。この継続的な適応は意思決定における生涯学習(LLDM)と呼ばれ、真にパーソナライズされたヘルパーとなるロボットを構築するための重要なステップです。 +LIBEROは生涯ロボット学習を研究するために設計されたベンチマークです。ロボットは工場で一度だけ事前訓練されるのではなく、時間をかけて人間のユーザーと共に学習し適応し続ける必要があるという考えです。この継続的な適応は意思決定における生涯学習(LLDM)と呼ばれ、真にパーソナライズされたヘルパーとなるロボットを構築するための重要なステップです。 - [LIBERO論文](https://arxiv.org/abs/2306.03310) - [オリジナルLIBEROリポジトリ](https://github.com/Lifelong-Robot-Learning/LIBERO) @@ -934,7 +817,7 @@ LIBEROには5つのタスクスイートが含まれています: - LIBERO-Long (libero_10) – LIBERO-100コレクションからの10の長期間タスク。 -これらのスイートは合わせて130のタスクをカバーし、シンプルなオブジェクト操作から複雑な多段階シナリオまでを含んでいます。LIBEROは時間とともに成長し、コミュニティが生涯学習アルゴリズムをテストし改善できる共有ベンチマークとして機能することを意図しています。 +これらのスイートは合わせて130のタスクをカバーし、シンプルなオブジェクト操作から複雑な多段階シナリオまで幅広く含んでいます。LIBEROは時間とともに成長し、コミュニティが生涯学習アルゴリズムをテストし改善できる共有ベンチマークとして機能することを意図しています。 ## LIBEROでのトレーニング @@ -953,11 +836,11 @@ lerobot-train \ --eval_freq=1000 \ ``` -## LIBEROでの評価 +## LIBEROでの評価 -LIBEROをインストールするには、LeRobotの公式手順に従った後、`pip install -e ".[libero]"` を実行するだけです。 +LIBEROをインストールするには、LeRobotの公式手順に従った後、単に次を実行してください:`pip install -e ".[libero]"` -### 単一スイート評価 +### 単一スイート評価: ```bash lerobot-eval \ @@ -968,11 +851,11 @@ lerobot-eval \ --eval.n_episodes=3 ``` -- `--env.task` はスイート(libero_object、libero_spatial など)を選択します。 +- `--env.task`はスイート(libero_object、libero_spatialなど)を選択します。 -- `--eval.batch_size` は並列実行する環境数を制御します。 +- `--eval.batch_size`は並列実行する環境の数を制御します。 -- `--eval.n_episodes` は実行する総エピソード数を設定します。 +- `--eval.n_episodes`は実行するエピソードの総数を設定します。 ### マルチスイート評価 @@ -985,13 +868,13 @@ lerobot-eval \ --eval.n_episodes=2 ``` -- マルチスイート評価には `--env.task` にカンマ区切りのリストを渡します。 +- マルチスイート評価には`--env.task`にカンマ区切りのリストを渡します。
## ポリシーの評価 -以下のコマンドを実行して10の評価エピソードを記録します: +10回の評価エピソードを記録するには、以下のコマンドを実行してください: ```bash lerobot-record \ @@ -1010,7 +893,7 @@ lerobot-record \ ```
- Dual-Arm + デュアルアーム ```bash lerobot-record \ @@ -1031,11 +914,11 @@ lerobot-record \ 1. `--policy.path`パラメータは、トレーニング済みポリシー重みファイルへのパスを示します(例:`outputs/train/act_viola_test/checkpoints/last/pretrained_model`)。モデル重みをHubにアップロードしている場合は、モデルリポジトリも使用できます(例:`${HF_USER}/starai`)。 -2. 評価データセット`dataset.repo_id`の名前は`eval_`で始まります。この操作により、評価フェーズ専用のビデオとデータが記録され、`starai/eval_record-test`のような`eval_`で始まるフォルダに保存されます。 +2. 評価データセット`dataset.repo_id`の名前は`eval_`で始まります。この操作により、評価フェーズ専用のビデオとデータが記録され、`starai/eval_record-test`などの`eval_`で始まるフォルダに保存されます。 -3. 評価フェーズで`File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/starai/eval_xxxx'`に遭遇した場合は、`eval_`で始まるフォルダを削除してプログラムを再実行してください。 +3. 評価フェーズで`File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/starai/eval_xxxx'`が発生した場合は、`eval_`で始まるフォルダを削除してプログラムを再実行してください。 -4. `mean is infinity. You should either initialize with stats as an argument or use a pretrained model`に遭遇した場合は、`--robot.cameras`パラメータの`up`や`front`などのキーワードがデータ収集フェーズで使用されたものと厳密に一致していることを確認してください。 +4. `mean is infinity. You should either initialize with stats as an argument or use a pretrained model`が発生した場合は、`--robot.cameras`パラメータの`up`や`front`などのキーワードがデータ収集フェーズで使用されたものと厳密に一致していることを確認してください。 ## FAQ @@ -1049,17 +932,17 @@ lerobot-record \ conda install libtiff==4.5.0 # for Ubuntu 22.04, use libtiff==4.5.1 ``` -- LeRobotをインストールした後、PyTorchのGPUバージョンが自動的にアンインストールされる場合があるため、torch-gpuを手動でインストールする必要があります。 +- LeRobotをインストールした後、GPU版のPyTorchが自動的にアンインストールされる場合があるため、torch-gpuを手動でインストールする必要があります。 -- Jetsonの場合は、`conda install -y -c conda-forge ffmpeg`を実行する前に、まず[PyTorchとTorchvision](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)をインストールしてください。そうしないと、torchvisionをコンパイルする際にバージョンの不一致の問題が発生します。 +- Jetsonの場合は、`conda install -y -c conda-forge ffmpeg`を実行する前に、まず[PyTorchとTorchvision](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)をインストールしてください。そうしないと、torchvisionをコンパイルする際にバージョンの不一致問題が発生します。 -- 3060 8GBラップトップでACTデータの50エピソードをトレーニングするには約6時間かかり、4090またはA100コンピュータで50エピソードをトレーニングするには約2-3時間かかります。 +- 3060 8GBラップトップでACTデータの50エピソードをトレーニングするには約6時間かかり、4090またはA100コンピュータでは約2-3時間かかります。 -- データ収集中は、カメラの位置と角度の安定性、環境照明を確保し、カメラに映る不安定な背景や歩行者を最小限に抑えてください。そうしないと、展開環境の大幅な変化により、ロボットアームが正常にオブジェクトを把握できなくなる可能性があります。 +- データ収集中は、カメラの位置と角度の安定性、環境照明を確保し、カメラに映る不安定な背景や歩行者を最小限に抑えてください。そうしないと、デプロイメント環境の大幅な変化により、ロボットアームが正常にオブジェクトを把握できなくなる可能性があります。 - データ収集コマンドの`num-episodes`は十分なデータ収集を確保し、途中で手動で一時停止してはいけません。これは、データの平均と分散がデータ収集完了後にのみ計算され、これがトレーニングに必要だからです。 -- プログラムがUSBカメラの画像データを読み取れないというプロンプトが表示される場合は、USBカメラがHub経由で接続されていないことを確認してください。USBカメラは高速な画像転送レートを確保するために、デバイスに直接接続する必要があります。 +- プログラムがUSBカメラの画像データを読み取れないと表示する場合は、USBカメラがHubを通じて接続されていないことを確認してください。USBカメラは高速画像転送レートを確保するために、デバイスに直接接続する必要があります。 ## 引用 @@ -1083,7 +966,7 @@ TD-MPC: [TD-MPC](https://www.nicklashansen.com/td-mpc/) ## 技術サポート & 製品ディスカッション -弊社製品をお選びいただき、ありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供いたします。さまざまな好みやニーズに対応するため、複数のコミュニケーションチャネルを提供しています。 +弊社製品をお選びいただき、ありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、複数のコミュニケーションチャネルを提供しています。
diff --git a/docs/ja/Sensor/Epaper/EE04/ja_EE04_with_PlatformIO.md b/docs/ja/Sensor/Epaper/EE04/ja_EE04_with_PlatformIO.md new file mode 100644 index 0000000000000..6df7ab90bc6e3 --- /dev/null +++ b/docs/ja/Sensor/Epaper/EE04/ja_EE04_with_PlatformIO.md @@ -0,0 +1,694 @@ +--- +description: PlatfromIO with EE04 +title: XIAO ePaper Display Board EE04 with PlatfromIO +keywords: + - epaper +image: https://files.seeedstudio.com/wiki/bus_servo_driver_board/10.webp +sidebar_position: 1 +slug: /ja/e04_with_platformio +last_update: + date: 10/10/2025 + author: Zeller +--- + +
+ +## PlatformIO の紹介 + +PlatformIO は、組み込みシステム向けに設計された強力で高度に拡張可能な開発エコシステムです。膨大な数の開発ボードとマイクロコントローラーのサポートをシームレスに統合し、比類のない柔軟性を提供します。PlatformIO を際立たせているのは、その優れたスケーラビリティです:特定のボードがネイティブでサポートされていない場合でも、そのアーキテクチャにより簡単にカスタムボード定義を作成できます。 + +重要なことに、PlatformIO は Arduino に慣れ親しんだ開発者のギャップを埋め、関連するライブラリを含めるだけで Arduino スタイルのコードのコンパイルとデプロイを可能にします。 + +### ハードウェアの準備 + +サポートされているサイズのスクリーンと一緒に XIAO ePaper Display Board EE04 を準備する必要があります。 +
+
Seeed Studio XIAO nRF54L15 SensePlaca Controladora ePaper para Seeed Studio XIAOePaper Driver Board for Seeed Studio XIAO
Arm KitArm Kit ProArm KitArm Kit ProアームキットアームキットProアームキットアームキットPro
リーダーアーム全ジョイント用の1:345ギア比を持つ12x ST-3215- C001 (7.4V) モーター全ジョイント用の1:345ギア比を持つ12x ST-3215-C018/ST-3215-C047 (12V) モーター全ジョイント用の1:345ギア比を持つ12x ST-3215-C001(7.4V)モーター全ジョイント用の1:345ギア比を持つ12x ST-3215-C018/ST-3215-C047(12V)モーター - ジョイント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) モーター + ジョイント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)モーター
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 (フォロワーアーム)
- 5.5 mm × 2.1 mm DC 5 V 4 A (リーダーアーム) + 5.5 mm × 2.1 mm DC 12 V 2 A(フォロワーアーム)
+ 5.5 mm × 2.1 mm DC 5 V 4 A(リーダーアーム)
+ + + + + + +
XIAO ePaper Display Board EE04
+
+
+ +XIAO ePaper Display Board EE04 は、異なるサイズとピン数のスクリーンをサポートしています。このチュートリアルでは、24ピン 800×480 7.5インチ電子インクスクリーンを例として使用します。
+ +**リンク**: [サポートされているスクリーンのリンク](https://wiki.seeedstudio.com/ja/epaper_ee04/#supported-eink) + +### Vscode のダウンロード + +使用しているシステムに応じて[Vscode](https://code.visualstudio.com/download)をダウンロードしてください + +
+ +### PlatformIO のインストール + +VSCode を開き、Extensions をクリックし、PlatformIO を検索してインストールを選択します。インストールが完了したら、VSCode を再起動してください。 + +
+ +### 新しいプロジェクト + +- PIO Home インターフェースを開き、`New Project` を選択します + +
+ +- Name: プロジェクト名を入力します +- Board: Seeed Studio XIAO ESP32S3 を選択します +- Framework: Ardunio を選択します +- Location: エンジニアリングファイルのパスは、カスタムパスとして設定するか、デフォルトパスを選択できます。 +- "Finish" をクリックして、作成が完了するまで待ちます。その後、ワークスペースでプロジェクトファイルを開きます。 + +
+ +### Seeed GFX ライブラリの追加 + +:::tip +このライブラリは TFT ライブラリと同じ機能を持ち、互換性がありません。TFT ライブラリまたは他の類似のディスプレイライブラリをインストールしている場合は、まずアンインストールしてください。 +::: + +Seeed Studio の様々なディスプレイデバイスに包括的なサポートを提供する Seeed_GFX ライブラリを使用します。 + +**ステップ 1.** GitHub から Seeed_GFX ライブラリをダウンロードします: + +
+ + Download the Library + +

+ +**ステップ 2.** 抽出したファイルをプロジェクトファイルの `lib` ディレクトリに移動します。 + +
+ +**ステップ 3.** `driver.h` ファイルを追加します + +[Seeed GFX Configuration Tool](https://seeed-studio.github.io/Seeed_GFX/) + +- ツールページで、使用しているスクリーンの仕様を選択します。ここでは、7.5インチモノクロ電子ペーパースクリーンを選択しています。 +- ドライバーボードに XIAO ePaper Display Board EE04 を選択すると、対応するドライバーコードが生成されます。 + +```cpp +#define BOARD_SCREEN_COMBO 502 // 7.5 inch monochrome ePaper Screen (UC8179) +#define USE_XIAO_EPAPER_DISPLAY_BOARD_EE04 +``` + +:::tip +間違った選択をすると、スクリーンには何も表示されません。 +そのため、デバイスやコンポーネントのタイプを確認してください。 +::: + +
+ +- PlatfromIO プロジェクトファイルの `lib` ディレクトリの下に新しい `driver` フォルダを作成し、`driver.h` ファイルを追加します。生成されたヘッダーファイルのコードをコピーし、Ctrl + S を押して保存します。 + +
+ +### アップロード + +コードを `main.cpp` にコピーし、`Build` をクリックし、完了後にアップロードします。 + +```cpp +#include "TFT_eSPI.h" + +#ifdef EPAPER_ENABLE // Only compile this code if the EPAPER_ENABLE is defined in User_Setup.h +EPaper epaper; +#endif + +void setup() +{ +#ifdef EPAPER_ENABLE + epaper.begin(); + epaper.fillScreen(TFT_WHITE); + + epaper.fillCircle(25, 25, 15, TFT_BLACK); + epaper.fillRect(epaper.width() - 40, 10, 30, 30, TFT_BLACK); + + for (int i = 0; i < epaper.height() / 80; i++) + { + epaper.setTextSize(i + 1); + epaper.drawLine(10, 70 + 60 * i, epaper.width() - 10, 70 + 60 * i, TFT_BLACK); + epaper.drawString("Hello EE04", 10, 80 + 60 * i); + } + + epaper.update(); // update the display + +#endif +} + +void loop() +{ + // put your main code here, to run repeatedly: +} +``` + +
+ +- 効果のデモンストレーション + +
+ +### ユーザーボタン + +EE04 には、様々な制御目的に使用できる3つのユーザープログラマブルボタンが搭載されています。このセクションでは、Arduino を使用してボタンの状態を読み取り、ボタンの押下に応答する方法を説明します。 + +EE04 では、3つのボタンが ESP32-S3 に接続されています: + +- KEY1 (GPIO2_D1/A1) +- KEY2 (GPIO3_D2/A2) +- KEY3 (GPIO5_D4/A4) + +すべてのボタンはアクティブローで、押されたときに LOW を読み取り、離されたときに HIGH を読み取ります。 + +基本的なボタン読み取りの例 + +この例では、ボタンの押下を検出し、シリアルモニターにメッセージを出力する方法を説明します。 + +
+ +

+ +```cpp +#include +// reTerminal E Series - Button Test +// Based on hardware schematic + +// Define button pins according to schematic +const int BUTTON_KEY0 = 2; // KEY0 - GPIO2 +const int BUTTON_KEY1 = 3; // KEY1 - GPIO3 +const int BUTTON_KEY2 = 5; // KEY2 - GPIO5 + +// Button state variables +bool lastKey0State = HIGH; +bool lastKey1State = HIGH; +bool lastKey2State = HIGH; + +void setup() { + // Initialize serial communication + Serial.begin(115200); + while (!Serial) { + delay(10); // Wait for serial port to connect + } + + Serial.println("================================="); + Serial.println("Press any button to see output"); + Serial.println(); + + // Configure button pins as inputs + // Hardware already has pull-up resistors, so use INPUT mode + pinMode(BUTTON_KEY0, INPUT_PULLUP); + pinMode(BUTTON_KEY1, INPUT_PULLUP); + pinMode(BUTTON_KEY2, INPUT_PULLUP); + + // Read initial states + lastKey0State = digitalRead(BUTTON_KEY0); + lastKey1State = digitalRead(BUTTON_KEY1); + lastKey2State = digitalRead(BUTTON_KEY2); + + Serial.println("Setup complete. Ready to detect button presses..."); +} + +void loop() { + // Read current button states + bool key0State = digitalRead(BUTTON_KEY0); + bool key1State = digitalRead(BUTTON_KEY1); + bool key2State = digitalRead(BUTTON_KEY2); + + // Check KEY1 + if (key0State != lastKey0State) { + if (key0State == LOW) { + Serial.println("KEY0 (GPIO2) pressed!"); + } else { + Serial.println("KEY0 (GPIO2) released!"); + } + lastKey0State = key0State; + delay(50); // Debounce delay + } + + // Check KEY2 + if (key1State != lastKey1State) { + if (key1State == LOW) { + Serial.println("KEY1 (GPIO3) pressed!"); + } else { + Serial.println("KEY1 (GPIO3) released!"); + } + lastKey1State = key1State; + delay(50); // Debounce delay + } + + // Check KEY3 + if (key2State != lastKey2State) { + if (key2State == LOW) { + Serial.println("KEY2 (GPIO5) pressed!"); + } else { + Serial.println("KEY2 (GPIO5) released!"); + } + lastKey2State = key2State; + delay(50); // Debounce delay + } + + delay(10); // Small delay to prevent excessive CPU usage +} +``` + +コード説明: + +- **コア関数解析** + +1. **`pinMode(pin, mode)`** + - 機能:ピンモードを設定します。 + - ここでは`INPUT_PULLUP`モードを使用して内部プルアップ抵抗を有効にします。これにより、ボタンが押されていない時はピンがデフォルトで高レベル(HIGH)を出力し、ボタンが押された時(グランドに接続されるため)は低レベル(LOW)を出力します。 + +2. **`digitalRead(pin)`** + - 機能:指定されたピンのレベル状態(HIGHまたはLOW)を読み取ります。 + - ループ内でボタンの現在の状態をリアルタイムで取得するために使用され、ボタンがアクティブになったかどうかを判断するのに役立ちます。 + +3. **`Serial.begin(baud)`** と **`Serial.println()`** + - 前者はシリアル通信を初期化し(ボーレート115200)、後者はシリアルポートにテキスト情報を出力します。これはモニターでボタンの状態を表示するために使用されます。 + +4. **`delay(ms)`** + - 機能:指定されたミリ秒数だけプログラムを一時停止します。 + - ここでは2つのシナリオで使用されます:まず、`setup()`でシリアルポート接続を待つため;次に、ボタンの状態が変化した後に50ms遅延させるため。これは「ジッターが消えるのを待つ」ことでハードウェアデバウンシングを実現し、誤トリガーを防ぎます。 + +- **コアロジック解析** + +1. **状態比較検出** + - 各ボタンの「前の状態」(`lastKey0State`など)を記録し、ループ内で「現在の状態」を読み取ります。 + - 「現在の状態 ≠ 前の状態」の場合、ボタンがアクティブになった(押されたまたは離された)ことを示します。 + +2. **ボタンアクション判定** + - 状態がHIGHからLOWに変化した場合:「押された」と判定("pressed"を出力)。 + - 状態がLOWからHIGHに変化した場合:「離された」と判定("released"を出力)。 + - 各状態変化後、「前の状態」を現在の状態に更新し、次の比較の参照として使用します。 + +3. **ループ実行** + - `loop()`関数は無限ループで実行され、「状態を読み取る → 状態を比較する → 結果を出力する」プロセスを繰り返し実行してリアルタイム検出を実現します。 + +- 効果デモンストレーション: + +Serial Monitorでシリアルポートの状態を表示できます。 + +
+ +### バッテリー電圧 + +- XIAO ePaper Display Board EE04は3.7V - 4.2Vリチウムバッテリーで駆動されます。さらに、電圧を測定してバッテリー電圧をリアルタイムで監視するためのADCインターフェースがあります。 +- ADC測定ピンは`A0 (GPIO1)`で、ADC有効ピンは`D5 (GPIO_6)`です。 + +接続: + +

+ +バッテリー電圧を監視するプログラムです。参考用です。 + +```cpp +#include + +#define BATTERY_ADC A0 // Battery voltage ADC pin +#define ADC_EN 6 // ADC enable pin +#define VOLTAGE_DIVIDER_RATIO 2.0 // Voltage divider ratio (adjust based on your resistor values) ((R1+R2)/R2) + +// Function to read battery voltage +static float readBatteryVoltage() { + int sum = 0; + // Read multiple samples for better accuracy + for (int i = 0; i < 10; i++) { + sum += analogRead(BATTERY_ADC); + delay(2); + } + int adcValue = sum / 10; + + // Calculate actual battery voltage + // Formula: voltage = (ADC_value / 4095) * 3.3V * divider_ratio + float voltage = (adcValue / 4095.0) * 3.3 * VOLTAGE_DIVIDER_RATIO; + + return voltage; +} + +void setup() { + Serial.begin(115200); + delay(1000); + + analogReadResolution(12); // Set ADC resolution to 12 bits + pinMode(BATTERY_ADC, INPUT); + + pinMode(ADC_EN, OUTPUT); + digitalWrite(ADC_EN, HIGH); // Enable ADC +} + +void loop() { + float batteryVoltage = readBatteryVoltage(); + + Serial.print("Battery Voltage: "); + Serial.print(batteryVoltage, 2); + Serial.println(" V"); + + delay(500); // Read every 0.5 seconds +} +``` + +コード説明: + +- 主な機能: + + - **バッテリー電圧取得**:ADCピンを介して抵抗分圧されたバッテリー電圧を読み取ります(バッテリー電圧はArduinoのADC基準電圧を超える可能性があるため、まず分圧が必要です)。 + - **精度最適化**:複数のサンプルを平均化することで回路ノイズ干渉を減らします。 + - **電圧変換**:ADCのデジタル信号を実際のバッテリー電圧に変換します(電圧分圧比と基準電圧を考慮)。 + - **シリアル出力**:測定された電圧をシリアルポート経由で定期的に出力し、外部デバイス(例:コンピュータ)で確認できるようにします。 + +- コア関数と役割 + + - `setup()` (初期化関数) + + - **役割**:プログラム開始時に一度実行され、ハードウェアとパラメータを設定します。 + - **主要操作**: + - `Serial.begin(115200)`:シリアル通信を初期化(ボーレート115200)し、電圧データ出力用に設定。 + - `analogReadResolution(12)`:ADC解像度を12ビット(読み取り範囲:0〜4095)に設定し、より高い精度を実現。 + - `pinMode(BATTERY_ADC, INPUT)`:バッテリー検出ピン(A0)をアナログ信号用の入力モードに設定。 + - `pinMode(ADC_EN, OUTPUT)` & `digitalWrite(ADC_EN, HIGH)`:ADCモジュールを有効化(低消費電力用:測定時のみオン)。 + + - `loop()` (メインループ関数) + + - **役割**:初期化後に繰り返し実行され、定期的な電圧検出と出力を行います。 + - **主要操作**: + - `readBatteryVoltage()`を呼び出して現在のバッテリー電圧を取得。 + - `Serial.print()`/`Serial.println()`を使用してフォーマットされた電圧を出力(小数点以下2桁、例:"Battery Voltage: 3.82 V")。 + - `delay(500)`:測定間隔を0.5秒に設定。 + + - `readBatteryVoltage()` (コア測定関数) + + - **役割**:ADC信号を読み取り、結果を最適化し、実際の電圧に変換します。 + - **主要操作**: + - **平均サンプリング**:ADCを10回読み取り、合計してから平均化(ノイズを減らす)。 + - `analogRead(BATTERY_ADC)`:ピンA0からアナログ電圧を読み取り(0〜4095を返す)。 + - `delay(2)`:サンプル間に2msの間隔を設けて安定性を確保。 + - **電圧計算**:式`(adcValue / 4095.0) * 3.3 * VOLTAGE_DIVIDER_RATIO`を使用して実際のバッテリー電圧を取得。 + - 計算された電圧(float型)を返し、`loop()`で使用。 + +- 効果デモンストレーション: + +
+ +## ダッシュボードデモ + +EE04では、ダッシュボードや画像表示など、さまざまなクリエイティブなデザインを実行できます。ボタンと組み合わせることで、複数のページ間の切り替えが可能になります。以下はダッシュボードの例です。 + +:::tip +このルーチンでは、ダッシュボードの描画操作はLVGLライブラリに基づいて実行されます。 + +LVGL公式ドキュメント:[LVGL docs](https://docs.lvgl.io/master/examples.html#get-started) +::: + +### ハードウェア + +XIAO ePaper Display Board EE04と解像度800*480の7.5インチスクリーンを準備する必要があります。 + +
+ + + + + + + +
XIAO ePaper Display Board EE04
+
+
+ +**リンク**:[スクリーンリンク](https://wiki.seeedstudio.com/ja/epaper_ee04/#supported-eink) + +### ソフトウェア + +- LVGLライブラリを追加します。PIO HomeインターフェースのLibraryツールでLVGLを検索し、現在のプロジェクトにライブラリを追加することを選択します。LVGL 9.0以上のバージョンを選択することをお勧めします。 + +
+ +- **lib**ディレクトリ内で + - **dashboard**フォルダを作成し、`dashboard_ui.cpp`と`dashboard_ui.h`ファイルを作成します。これらのファイルは主にLGVLの描画コードを格納するために使用されます。 + - **e1001_display**フォルダを作成し、スクリーンドライバーファイル`e1001_display.c`と`e1001_display.h`を追加します + - **lvgl_conf**フォルダを作成し、LVGLの設定ファイル`lv_conf.h`を追加します。 + +

+ +完全な参考コード:[EE04_Dashboard_ui.zip](https://files.seeedstudio.com/wiki/Epaper/EE04/EE04_dashboard_ui.zip) + +
+ +main.cpp コード + +```cpp +/* + * Seeed reTerminal E1001 Multi-UI Demo + * - All hardware I/O and e-paper driver work happens here. + * - All runtime parameters and debug logs live here. + * - dashboard_ui.cpp is a pure LVGL UI layer (no driver calls, no runtime params). + * + * UI switching: + * KEY0 (GPIO2) → Vehicle Dashboard + * KEY1 (GPIO3) → Smart Home + * KEY2 (GPIO5) → Super Mario (default) + */ + +#include +#include + +#include "dashboard_ui.h" // Pure UI layer +#include "e1001_display.h" // E1001 e-paper driver (init/refresh in this file only) + +/* ============ Global driver object ============ */ +static e1001_driver_t e1001_driver; + +/* ============ Current UI ============ */ +static UIType current_ui = UI_SUPER_MARIO; + +/* ============ Smart Home runtime parameters (tuned here) ============ */ +static String smh_location = "New York"; +static String smh_weather = "Sunny"; +static float smh_temperature = 22.5f; +static int smh_humidity = 45; +static float smh_batt_voltage = 12.4f; +static int smh_batt_capacity = 85; +static int smh_wifi_signal = 4; // 0..4 + +/* ============ Vehicle runtime parameters (tuned here) ============ */ +static int veh_speed = 85; // km/h +static int veh_rpm = 2800; // RPM +static int veh_fuel = 75; // % +static int veh_engine_temp = 82; // °C +static char veh_gear = 'D'; // gear char +static long veh_odometer = 86531; // km +static bool veh_seatbelt = true; // indicator example + +/* --------------------------------------------------------------- + * LVGL periodic tick (moved here from dashboard_ui.cpp) + * --------------------------------------------------------------- */ +void ui_update_loop() +{ + lv_timer_handler(); + delay(50); +} + +/* --------------------------------------------------------------- + * Rebuild the active screen for a given UI type (moved here) + * --------------------------------------------------------------- */ +void load_ui(UIType type) +{ + lv_obj_clean(lv_scr_act()); + current_ui = type; + + switch (type) + { + case UI_VEHICLE_DASHBOARD: + create_vehicle_dashboard_ui(); + break; + case UI_SMART_HOME: + create_smarthome_ui(); + break; + case UI_SUPER_MARIO: + default: + create_supermario_ui(); + break; + } +} + +/* --------------------------------------------------------------- + * Helper to apply Smart Home params to the active UI (if loaded) + * --------------------------------------------------------------- */ +static void apply_smarthome_params() +{ + update_temperature(smh_temperature); + update_humidity(smh_humidity); + update_battery_voltage(smh_batt_voltage); + update_battery_capacity(smh_batt_capacity); + update_wifi_signal(smh_wifi_signal); + update_weather_status(smh_weather.c_str()); + update_location(smh_location.c_str()); + + // Example to-do placeholders (UI has checkboxes already) + add_todo_item("Water plants"); + add_todo_item("Check security"); + add_todo_item("Update firmware"); + add_todo_item("Check smart plugs"); +} + +/* ------------------------------------------------------------- + * Helper to apply Vehicle params to the active UI (if loaded) + * ------------------------------------------------------------- */ +static void apply_vehicle_params() +{ + update_speed_gauge(veh_speed); + update_rpm_gauge(veh_rpm); + update_fuel_level(veh_fuel); + update_engine_temp(veh_engine_temp); + update_gear_position(veh_gear); + update_odometer(veh_odometer); + set_warning_indicator(0, veh_seatbelt); +} + +/* ------------------------------------------------------------- + * Switch UI (rebuilds the UI and applies current parameters) + * ------------------------------------------------------------- */ +static void switch_ui(UIType next_ui) +{ + if (next_ui == current_ui) + return; + + current_ui = next_ui; + load_ui(current_ui); + + if (current_ui == UI_VEHICLE_DASHBOARD) + { + Serial.println("[UI] Loaded Vehicle Dashboard"); + apply_vehicle_params(); + } + else if (current_ui == UI_SMART_HOME) + { + Serial.println("[UI] Loaded Smart Home"); + apply_smarthome_params(); + } + else + { + Serial.println("[UI] Loaded Super Mario"); + } + + // Trigger an e-paper refresh immediately after rebuilding UI + e1001_display_refresh(&e1001_driver); +} + +/* ------------------------------------------------------------- + * Setup + * ------------------------------------------------------------- */ +void setup() +{ + Serial.begin(115200); + Serial.println("LVGL Multi-UI + E1001 e-paper demo starting..."); + + // Configure keys (active LOW due to INPUT_PULLUP) + pinMode(BUTTON_KEY0, INPUT_PULLUP); + pinMode(BUTTON_KEY1, INPUT_PULLUP); + pinMode(BUTTON_KEY2, INPUT_PULLUP); + + // Initialize e-paper (includes LVGL/timer/display config handled by your driver) + Serial.println("Initializing E1001 e-paper driver..."); + e1001_display_init(&e1001_driver); + Serial.println("E1001 init done."); + + // Default UI: Super Mario + current_ui = UI_SUPER_MARIO; + load_ui(current_ui); + Serial.println("Default UI created: Super Mario"); + + e1001_display_refresh(&e1001_driver); +} + +/* ------------------------------------------------------------- + * Loop: button-based UI switching + LVGL ticks + e-paper refresh + * ------------------------------------------------------------- */ +void loop() +{ + // Handle UI switching (debounced) + if (digitalRead(BUTTON_KEY0) == LOW) + { // Vehicle + switch_ui(UI_VEHICLE_DASHBOARD); + delay(300); + } + else if (digitalRead(BUTTON_KEY1) == LOW) + { // Smart Home + switch_ui(UI_SMART_HOME); + delay(300); + } + else if (digitalRead(BUTTON_KEY2) == LOW) + { // Super Mario + switch_ui(UI_SUPER_MARIO); + delay(300); + } + + // Drive LVGL internal timers only (no driver I/O in UI layer) + ui_update_loop(); + + // Check if e-paper refresh is needed (driver logic stays here) + if (e1001_display_should_refresh(&e1001_driver)) + { + Serial.println("Refreshing e-paper display..."); + e1001_display_refresh(&e1001_driver); + Serial.println("Display refresh complete."); + } +} +``` + +
+ +### 効果デモンストレーション: + +EE04ボード上のボタンを押すことで、対応するUIインターフェースに切り替えることができます: + +- KEY1: Vehicle Dashboard +- KEY2: SmartHome Dashboard +- KEY3: Super Mario +- デフォルト: Super Mario + +
+ + + + + + + + + + + +
Super MarioVehicleSmartHome
+
+ +リンクをクリックし、**Resources**タイトルを見つけて、印刷したい3Dシェルファイルを選択してください。
+[3Dシェルファイルリソース](https://wiki.seeedstudio.com/cn/trmnl_7inch5_diy_kit_main_page/) + + + +## 技術サポート & 製品ディスカッション + +弊社製品をお選びいただき、ありがとうございます!私たちは、お客様の製品体験が可能な限りスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルを用意しています。 + +
+ + +
+ +
+ + +
diff --git a/docs/ja/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/ja_XIAO_ESP32S3_Getting_Started.md b/docs/ja/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/ja_XIAO_ESP32S3_Getting_Started.md index 57e415e205e14..e7333738bb2a7 100644 --- a/docs/ja/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/ja_XIAO_ESP32S3_Getting_Started.md +++ b/docs/ja/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/ja_XIAO_ESP32S3_Getting_Started.md @@ -52,7 +52,7 @@ import TabItem from '@theme/TabItem'; Seeed Studio XIAOシリーズは、類似したハードウェア構造を共有する小型開発ボードで、そのサイズは文字通り親指サイズです。コードネーム「XIAO」は、その半分の特徴である「Tiny(小さい)」を表し、もう半分は「Puissant(強力)」を表します。 -Seeed Studio XIAO ESP32S3 Senseは、カメラセンサー、デジタルマイクロフォン、SDカードサポートを統合しています。組み込みML計算能力と撮影機能を組み合わせることで、この開発ボードはインテリジェント音声・視覚AIを始めるための優れたツールになります。 +Seeed Studio XIAO ESP32S3 Senseは、カメラセンサー、デジタルマイクロフォン、SDカードサポートを統合しています。組み込みML計算能力と撮影機能を組み合わせることで、この開発ボードはインテリジェント音声・視覚AIを始めるための優れたツールとなります。 :::tip **OV2640カメラ**は廃止され、その後のXIAO ESP32S3 Senseでは**OV3660カメラ**モデルを使用しています。ただし、カメラ用のWikiサンプルコードは引き続き適用されます。 @@ -110,7 +110,7 @@ Seeed Studio XIAO ESP32S3 Senseは、カメラセンサー、デジタルマイ - - ウェブカメラWebアプリケーション:

- Type-C:

- - 平均消費電力:5V/220mA

- バッテリー:

- - 平均消費電力:4.2V/212mA + ウェブカムWebアプリケーション:

- Type-C:

- - 平均消費電力:5V/220mA

- バッテリー:

- - 平均消費電力:4.2V/212mA - @@ -128,13 +128,13 @@ Seeed Studio XIAO ESP32S3 Senseは、カメラセンサー、デジタルマイ モデムスリープモデル:3.8V/26.5 mA

ライトスリープモデル:3.8V/2.2 mA

ディープスリープモデル:3.8V/69 μA - Wi-Fi有効時消費電力 + Wi-Fi有効時の消費電力 アクティブモデル:~ 100 mA アクティブモデル:~ 110 mA(拡張ボード付き) アクティブモデル:~ 85 mA - BLE有効時消費電力 + BLE有効時の消費電力 アクティブモデル:~ 85 mA アクティブモデル:~ 102 mA(拡張ボード付き) アクティブモデル:~ 77 mA @@ -147,12 +147,12 @@ Seeed Studio XIAO ESP32S3 Senseは、カメラセンサー、デジタルマイ ### 特徴 -- **強力なMCUボード**:最大240MHzで動作するESP32S3 32ビット、デュアルコア、Xtensaプロセッサチップを搭載、複数の開発ポートを実装、Arduino / MicroPython対応 -- **高度な機能**(Sense用):取り外し可能な**1600x1200解像度対応OV2640カメラセンサー**と**2048x1536対応OV3660カメラセンサー**(OV5640カメラセンサーと互換)、追加のデジタルマイクロフォンを統合 +- **強力なMCUボード**:最大240MHzで動作するESP32S3 32ビット、デュアルコア、Xtensaプロセッサチップを搭載し、複数の開発ポートを実装、Arduino / MicroPython対応 +- **高度な機能**(Sense用):1600x1200解像度対応の着脱可能な**OV2640カメラセンサー**と2048x1536対応の**OV3660カメラセンサー**(OV5640カメラセンサーと互換)、追加のデジタルマイクロフォンを統合 - **精巧な電源設計**:リチウムバッテリー充電管理機能、14μAという低消費電力のディープスリープモードを含む4つの消費電力モデルを提供 -- **より多くの可能性のための大容量メモリ**:8MB PSRAMと8MB FLASH(**Plus**バージョンでは16MB)を提供、外部32GB FATメモリ用SDカードスロット対応(XIAO ESP32S3のみ) +- **より多くの可能性のための大容量メモリ**:8MB PSRAMと8MB FLASH(**Plus**バージョンでは16MB)を提供、外部32GB FATメモリ用のSDカードスロット対応(XIAO ESP32S3のみ) - **優れたRF性能**:2.4GHz Wi-FiとBLEデュアルワイヤレス通信対応、U.FLアンテナ接続時100m+の遠距離通信対応 -- **親指サイズのコンパクト設計**:21 x 17.8mm、XIAOの定番フォームファクターを採用、ウェアラブルデバイスなどスペースが限られたプロジェクトに適している +- **親指サイズのコンパクト設計**:21 x 17.8mm、XIAOの定番フォームファクターを採用し、ウェアラブルデバイスなどのスペース制限のあるプロジェクトに適している @@ -351,7 +351,7 @@ Wiki のカメラに関するすべてのプログラムは、OV5640、OV2640、 私たちのテストでは、元のセットアップに対するアップグレードされたヒートシンクの利点が実証されています: -| テストサンプル | 背面のピーク温度 | +| テストサンプル | 背面の最高温度 | | --------------------- | ---------------------------- | | **ヒートシンクなし** | 63.6°C | | **デュアルヒートシンク付き** | 53.5°C (🔻10°C) | @@ -435,17 +435,17 @@ Arduinoを初めて使用する場合は、[Getting Started with Arduino](https: - **ステップ1.** お使いのオペレーティングシステムに応じて、Arduino IDEの安定版をダウンロードしてインストールしてください。 -- **ステップ2.** Arduinoアプリケーションを起動してください。 +- **ステップ2.** Arduinoアプリケーションを起動します。 -- **ステップ3.** Arduino IDEにESP32ボードパッケージを追加してください。 +- **ステップ3.** Arduino IDEにESP32ボードパッケージを追加します。 -**File > Preferences**に移動し、**"Additional Boards Manager URLs"**に以下のURLを入力してください: +**File > Preferences**に移動し、**"Additional Boards Manager URLs"**に以下のURLを入力します: ``` https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json @@ -453,7 +453,7 @@ https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32
-**Tools > Board > Boards Manager...**に移動し、検索ボックスにキーワード**esp32**を入力し、**esp32**の最新バージョンを選択してインストールしてください。 +**Tools > Board > Boards Manager...**に移動し、検索ボックスにキーワード**esp32**を入力し、**esp32**の最新バージョンを選択してインストールします。
@@ -461,14 +461,14 @@ https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32 XIAO ESP32S3のオンボードパッケージには**2.0.8**以上のバージョンが必要です。 ::: -- **ステップ4.** ボードとポートを選択してください。 +- **ステップ4.** ボードとポートを選択します。 Arduino IDEの上部で、ポートを直接選択できます。これはおそらくCOM3以上になります(**COM1**と**COM2**は通常ハードウェアシリアルポート用に予約されています)。
-**Arduino IDE > Preferences**に移動し、**"Additional Boards Manager URLs"**に以下のURLを入力してください: +**Arduino IDE > Preferences**に移動し、**"Additional Boards Manager URLs"**に以下のURLを入力します: ``` https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json @@ -483,7 +483,7 @@ https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32
-**Tools > Board > Boards Manager...**に移動し、検索ボックスにキーワード**esp32**を入力し、**esp32**の最新バージョンを選択してインストールしてください。 +**Tools > Board > Boards Manager...**に移動し、検索ボックスにキーワード**esp32**を入力し、**esp32**の最新バージョンを選択してインストールします。
@@ -491,9 +491,9 @@ https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32 XIAO ESP32S3のオンボードパッケージには**2.0.8**以上のバージョンが必要です。 ::: -- **ステップ4.** ボードとポートを選択してください。 +- **ステップ4.** ボードとポートを選択します。 -Arduino IDEの上部でポートを直接選択できます。これはおそらく名前に「usbmodem」または「usbserial」が含まれているものです。不明な場合は、プラグを抜いて再度接続し、どのポートが消えるかを確認してください。 +Arduino IDEの上部で、ポートを直接選択できます。これはおそらく名前に"usbmodem"または"usbserial"が含まれているものです。不明な場合は、プラグを抜いて再度接続し、どのポートが消えるかを確認してください。 @@ -537,9 +537,9 @@ After you have downloaded the above zip, please unzip it and you will see two fi - **Step 4.** Close the Arduino IDE and reopen it.--> - + -また、左側の開発ボードで**xiao**を検索してください。**XIAO_ESP32S3**を選択してください。 +また、左側の開発ボードで**xiao**を検索します。**XIAO_ESP32S3**を選択してください。
@@ -555,15 +555,15 @@ After you have downloaded the above zip, please unzip it and you will see two fi ### BootLoaderモード -時々、間違ったプログラムを使用するとXIAOがポートを失ったり、正しく機能しなくなったりすることがあります。一般的な問題には以下があります: +時々、間違ったプログラムを使用すると、XIAOがポートを失ったり、正しく機能しなくなったりすることがあります。一般的な問題には以下があります: - XIAOがコンピュータに接続されているが、*ポート番号が見つからない*。 - XIAOが接続され、ポート番号が表示されるが、*プログラムのアップロードが失敗する*。 上記の2つの状況に遭遇した場合、XIAOをBootLoaderモードにすることで、デバイスの認識不良やアップロード失敗の問題の大部分を解決できます。具体的な方法は: -- **ステップ1**. XIAO ESP32S3の`BOOT`ボタンを離さずに押し続けてください。 -- **ステップ2**. `BOOT`ボタンを押したまま、データケーブルでコンピュータに接続してください。コンピュータに接続した後、`BOOT`ボタンを離してください。 +- **ステップ1**. XIAO ESP32S3の`BOOT`ボタンを離さずに押し続けます。 +- **ステップ2**. `BOOT`ボタンを押したまま、データケーブルでコンピュータに接続します。コンピュータに接続した後、`BOOT`ボタンを離します。 - **ステップ 3**. **File > Examples > 01.Basics > Blink** プログラムをアップロードして、XIAO ESP32S3の動作を確認します。
@@ -675,7 +675,7 @@ XIAO ESP32S3のUSBドライブにアクセスし、変換されたUF2ファイ 別のUF2ファイルをアップロードするためにUF2 BootLoaderモードに再入する必要がある場合は、**Reset** ボタンを押してから **Boot** ボタンを素早く押します。boot_uf2.batスクリプトを再度実行する必要はありません。 :::note -Reset、次にBootを素早く押してください! +Resetを押してから、素早くBootを押してください! :::
@@ -701,11 +701,11 @@ Reset、次にBootを素早く押してください!
-まず、これは品質の問題ではなく、XIAOの正常な機能に影響しないことを明記しておきます。 +まず、これは品質の問題ではなく、XIAOの正常な機能に影響を与えないことを明記しておきます。 XIAO ESP32S3は高い統合度のため、すべてのXIAOの中で最も複雑であり、PCBは工場生産で組み合わせる必要があります。高い統合度のため、スプライシングボード接続は4つの角の丸い部分にのみ配置でき、これが画像の角の丸い部分が不均一になる問題を引き起こします。この問題が後続の生産で解決されるよう、プロセスの改善に努めます。 -### Q3: リソースセクションで提供されているXIAO ESP32S3のファクトリーファームウェアをフラッシュする方法は? +### Q3: リソースセクションで提供されているXIAO ESP32S3にファクトリーファームウェアをフラッシュする方法は? リソースセクションで提供されているスクリプトはWindowsをサポートしています。zipファイルをダウンロードすると、以下のファイルが見つかります: diff --git a/docs/ja/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF54L15-Sense/ja_XIAO_nRF54L15-Sense_MicroPython.md b/docs/ja/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF54L15-Sense/ja_XIAO_nRF54L15-Sense_MicroPython.md index 6a408693c963d..46dbb1cd18779 100644 --- a/docs/ja/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF54L15-Sense/ja_XIAO_nRF54L15-Sense_MicroPython.md +++ b/docs/ja/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF54L15-Sense/ja_XIAO_nRF54L15-Sense_MicroPython.md @@ -5,7 +5,7 @@ keywords: - nRF54L15 - xiao - MicroPython -image: https://files.seeedstudio.com/wiki/XIAO_nRF54L15/Getting_Start/1-101991422-XIAO-nRF54L15-Sense.webp +image: https://files.seeedstudio.com/wiki/XIAO_nRF54L15/Getting_Start/epaper_1.webp slug: /ja/xiao_nrf54l15_sense_micropython last_update: date: 9/23/2025 @@ -35,7 +35,7 @@ XIAO nRF54L15を準備してください。 @@ -58,7 +58,7 @@ XIAO nRF54L15を準備してください。
@@ -73,7 +73,7 @@ git clone https://github.com/Seeed-Studio/micropython-seeed-boards.git **ステップ1.** XIAO nRF54L15用のMicroPythonファームウェアをフラッシュする -- ファームウェアパッケージをダウンロードして適切な場所に展開します。その後、flash.batをクリックすると、自動的にファームウェアがフラッシュされます。 +- ファームウェアパッケージをダウンロードして適切な場所に展開します。次にflash.batをクリックすると、自動的にファームウェアがフラッシュされます。 **[ファームウェア]** [XIAO nRF54L15 MicroPythonファームウェア](https://files.seeedstudio.com/wiki/XIAO_nRF54L15/Getting_Start/xiao54_flash.zip) @@ -83,22 +83,18 @@ git clone https://github.com/Seeed-Studio/micropython-seeed-boards.git このスクリプトには事前設定されたフラッシュツールチェーンコマンドがあります。初回使用時は少し時間がかかる場合があります。 ::: -**ステップ2.** Thonny IDEを開き、インターフェースの右下角をクリックしてインタープリターオプションを設定します。MicroPython(generic)とPortを選択します +**ステップ2.** Thonny IDEを開き、インターフェースの右下角をクリックしてインタープリターオプションを設定します。MicroPython (generic)とPortを選択します
-:::tip -このファームウェアには事前設定されたフラッシュツールチェーン指示があります。初回使用時は少し時間がかかる場合があります。 -::: - -**ステップ3.** ボードファイルをアップロードする +**ステップ3.** boardsファイルをアップロードする -- ビューを開き、「File」を選択すると、ファイルマネージャーパスが左サイドバーに表示されます。 +- ビューを開き、"File"を選択すると、ファイルマネージャーパスが左サイドバーに表示されます。
- クローンまたはダウンロードしたファイルのパスを開き、`micropython-seeed-boards\examples`を開きます -- 「boards」フォルダを選択してフラッシュにアップロードします。その後、MicroPythonデバイス/フラッシュにアップロードされたファイルを確認できます。 +- "boards"フォルダを選択してフラッシュにアップロードします。その後、MicroPythonデバイス/フラッシュにアップロードされたファイルが表示されます。
@@ -151,17 +147,17 @@ finally: @@ -171,7 +167,7 @@ finally:
@@ -211,11 +207,12 @@ finally: - `Xiao Pin` boards.xiaoモジュールからSeeed Xiao開発ボード用のピン制御クラスをインポートします。これはボード上のピンを操作するために使用されます。 - **ピンの定義** - - `button = "sw"` ボタンが開発ボードの「sw」ピンに接続されていることを指定します(ここではBOOTピン) - `relay = 0` リレーがデジタルピンD0に接続されていることを指定します。 + - `button = "sw"` ボタンが開発ボードの"sw"ピン(ここではBOOTピン)に接続されていることを指定します + - `relay = 0` リレーがデジタルピンD0に接続されていることを指定します。 - **メインロジック(tryブロック)** - - ボタンが押されたとき(状態が0)→ リレーが作動します(出力が1)。 - - ボタンが押されていないとき(状態が1)→ リレーが非作動になります(出力が0)。 + - ボタンが押されたとき(状態は0)→ リレーが作動します(出力は1)。 + - ボタンが押されていないとき(状態は1)→ リレーが非作動になります(出力は0)。 ### 結果 @@ -241,22 +238,22 @@ finally: @@ -266,7 +263,7 @@ finally:
@@ -329,28 +326,28 @@ finally: pwm.deinit() ``` -コード説明: +コードの説明: - **依存ライブラリのインポート** - - `time`: 遅延を追加し、プログラムの実行リズムを制御するために使用されます。 - - `boards.xiao`: Xiao開発ボードのハードウェア制御クラスをインポートします。以下を含みます: - - `XiaoADC`: アナログ信号(ポテンショメータの出力など)を読み取るために使用されます。 - - `XiaoPWM`: PWM信号を生成するために使用されます(LED輝度を制御)。 + - `time`:遅延を追加し、プログラムの実行リズムを制御するために使用されます。 + - `boards.xiao`:Xiao開発ボードのハードウェア制御クラスをインポートします。以下が含まれます: + - `XiaoADC`:アナログ信号(ポテンショメータの出力など)を読み取るために使用されます。 + - `XiaoPWM`:PWM信号を生成するために使用されます(LED の明るさを制御するため)。 - **ハードウェアピンの定義** - `adc`は開発ボードのD0ピンに対応し(ポテンショメータの出力を接続するために使用)、`pwm`はD1ピンに対応します(LEDを接続するために使用)。 - **ハードウェアの初期化(tryブロック)** - - `XiaoADC(adc)`: D0ピンをADC入力モードとして初期化し、ポテンショメータの電圧信号を読み取ります。 - - `XiaoPWM(pwm)`: D1ピンをPWM出力モードとして初期化し、LEDを制御します。 - - `PWMパラメータ`: 1000Hzの周波数は信号周期が1ミリ秒(1e6ナノ秒)であることを意味します。デューティサイクル(周期内でハイレベルが持続する割合)がLEDの輝度を決定します(デューティサイクルが高いほど、LEDが明るくなります)。 + - `XiaoADC(adc)`:D0ピンをADC入力モードとして初期化し、ポテンショメータの電圧信号を読み取ります。 + - `XiaoPWM(pwm)`:D1ピンをPWM出力モードとして初期化し、LEDを制御します。 + - `PWMパラメータ`:1000Hzの周波数は、信号周期が1ミリ秒(1e6ナノ秒)であることを意味します。デューティサイクル(周期のうちハイレベルが持続する割合)がLEDの明るさを決定します(デューティサイクルが高いほど、LEDが明るくなります)。 - **メインループ(コアロジック)** - - 電圧読み取り: ADCを通じてポテンショメータが出力する電圧を読み取ります(単位をボルトに変換)。 - - 範囲制限: 電圧が0〜3.3Vの範囲内にあることを確認します(ハードウェア安全範囲)。 - - デューティサイクル計算: 電圧を0〜1のデューティサイクルに線形変換します(例:1.65Vは50%のデューティサイクルに対応)。 - - デッドゾーン処理: 微小な電圧変動(ノブの軽微な振動など)を無視し、LEDの頻繁な変化を防ぎます。 - - LED制御: PWMデューティサイクルを通じてLEDの輝度を調整します(デューティサイクルが高いほど、LEDが明るくなります)。 + - 電圧の読み取り:ADCを通じてポテンショメータが出力する電圧を読み取ります(単位をボルトに変換)。 + - 範囲制限:電圧が0〜3.3Vの範囲内にあることを確認します(ハードウェア安全範囲)。 + - デューティサイクル計算:電圧を0〜1のデューティサイクルに線形変換します(例:1.65Vは50%のデューティサイクルに対応)。 + - デッドゾーン処理:軽微な電圧変動(ノブの軽微な振動など)を無視し、LEDの頻繁な変化を防ぎます。 + - LED制御:PWMデューティサイクルを通じてLEDの明るさを調整します(デューティサイクルが高いほど、LEDが明るくなります)。 ### 結果 @@ -373,12 +370,12 @@ finally: @@ -389,12 +386,13 @@ finally:
+
-code +コード ```py from boards.xiao import XiaoUART @@ -605,9 +603,9 @@ finally: - **データ構造の定義** - `Coordinates`クラス:経度/緯度の値を浮動小数点数として格納するシンプルなコンテナ。 - - `GNRMC`クラス:`$GNRMC` NMEA文から解析されたGPSデータを表します。含まれる内容: + - `GNRMC`クラス:`$GNRMC` NMEA文から解析されたGPSデータを表します。以下を含みます: - 十進度での緯度/経度 - - 半球インジケータ(`N/S`、`E/W`) + - 半球インジケーター(`N/S`、`E/W`) - 時刻(時、分、秒 — GMT+8に調整) - ステータスフラグ(1 = 有効な測位、0 = 測位なし) @@ -627,7 +625,7 @@ finally: - **フォーマットされたGPSデータの表示** - `print_gps_data(gps)` — 以下を含む人間が読みやすいGPS情報を印刷します: - - ローカル時刻(GMT+8) + - 現地時刻(GMT+8) - 半球付きの生WGS-84座標 - 変換されたGCJ-02(Google互換)およびBD-09(Baidu互換)座標 - 測位が成功したかどうかを示すステータスメッセージ @@ -635,7 +633,7 @@ finally: - **メインロジック(tryブロック)** - 指定されたパラメータでUARTインターフェースを初期化します。 - 座標計算に必要なグローバル定数(`pi`、`a`、`ee`、`x_pi`)を定義します — 地球楕円体パラメータとスケーリング係数。 - - UART経由で受信するGPSデータを継続的に読み取るための無限ループに入ります。 + - UARTを介して受信するGPSデータを継続的に読み取る無限ループに入ります。 - `buffer`を使用して、完全な行(`\n`で終わる)が受信されるまで部分的なメッセージを蓄積します。 - 完全な行が到着したとき: - `$GNRMC`または`$PNRMC`で始まるかチェック @@ -647,7 +645,7 @@ finally: - 最後に、終了前にUARTリソースをクリーンアップするために`uart.deinit()`を呼び出します。 ### 結果 - +
## I2C @@ -667,12 +665,12 @@ finally: @@ -683,13 +681,13 @@ finally:
-コード +Code ```py import time @@ -922,10 +920,10 @@ ssd1306_draw_text("HELLO WORLD", 20, 4) - **メインロジック(初期化とディスプレイ)** - `i2c.scan()` I2Cバスをスキャンして接続されたデバイスを検出します。 - - SSD1306がアドレス`0x3C`で見つからない場合は例外が発生し、そうでなければ成功メッセージが出力されます。 + - SSD1306がアドレス`0x3C`で見つからない場合、例外が発生します。そうでなければ、成功メッセージが出力されます。 - `ssd1306_init()` ディスプレイハードウェアを初期化します。 - - `ssd1306_draw_text("NRF54L15", 30, 2)` 列30、ページ2(≈ 行16)から始まる文字列"NRF54L15"を描画します。 - - `ssd1306_draw_text("HELLO WORLD", 20, 4)` 列20、ページ4(≈ 行32)から始まる文字列"HELLO WORLD"を描画します。 + - `ssd1306_draw_text("NRF54L15", 30, 2)` 文字列"NRF54L15"を列30、ページ2(≈ 行16)から描画します。 + - `ssd1306_draw_text("HELLO WORLD", 20, 4)` 文字列"HELLO WORLD"を列20、ページ4(≈ 行32)から描画します。 ### 結果 @@ -948,12 +946,12 @@ ssd1306_draw_text("HELLO WORLD", 20, 4) @@ -964,7 +962,7 @@ ssd1306_draw_text("HELLO WORLD", 20, 4)
@@ -1205,7 +1203,7 @@ if __name__ == "__main__": - まず、完全な白色背景を設定するためのデータを送信。 - 次に、新しい画像データを行ごとに計算して送信。 - 最後に、新しいコンテンツを表示するためのディスプレイリフレッシュをトリガー。 - - 複数行テキスト表示をサポート、各行は異なる位置とスケーリング比率を持つことが可能。 + - 複数行テキスト表示をサポートし、各行は異なる位置とスケーリング比率を持つことができる。 - **main()関数** - ディスプレイを初期化。 @@ -1228,11 +1226,11 @@ if __name__ == "__main__":
-すると、MicroPythonデバイス/フラッシュセクションの下に表示されます。 +すると、MicroPythonデバイス/flashセクションの下に表示されます。
-**ステップ2.** オンボードのリセットボタンを押すことで、自動実行効果を実現できます。 +**ステップ2.** オンボードのResetボタンを押すことで、自動実行効果を実現できます。 効果: @@ -1244,14 +1242,14 @@ if __name__ == "__main__": ## 技術サポート & 製品ディスカッション -弊社製品をお選びいただきありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供いたします。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。 +弊社製品をお選びいただき、ありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。
- +
- +
diff --git a/docs/zh-CN/Sensor/Epaper/EE04/cn_EE04_with_PlatformIO.md b/docs/zh-CN/Sensor/Epaper/EE04/cn_EE04_with_PlatformIO.md new file mode 100644 index 0000000000000..b8fdb6cf3efef --- /dev/null +++ b/docs/zh-CN/Sensor/Epaper/EE04/cn_EE04_with_PlatformIO.md @@ -0,0 +1,694 @@ +--- +description: PlatfromIO 与 EE04 +title: XIAO ePaper Display Board EE04 与 PlatfromIO +keywords: + - epaper +image: https://files.seeedstudio.com/wiki/bus_servo_driver_board/10.webp +sidebar_position: 1 +slug: /cn/e04_with_platformio +last_update: + date: 10/10/2025 + author: Zeller +--- + +
+ +## PlatformIO 介绍 + +PlatformIO 是一个强大且高度可扩展的嵌入式系统开发生态系统。它无缝集成了对大量开发板和微控制器的支持,提供了无与伦比的灵活性。PlatformIO 的突出之处在于其卓越的可扩展性:即使您的特定开发板没有原生支持,其架构也允许直接的自定义开发板定义。 + +至关重要的是,PlatformIO 为熟悉 Arduino 的开发者架起了桥梁,通过简单地包含相关库,就能编译和部署 Arduino 风格的代码。 + +### 硬件准备 + +您需要准备一个 XIAO ePaper Display Board EE04 以及支持尺寸的屏幕。 +
+ + + + + + + +
XIAO ePaper Display Board EE04
+
+
+ +XIAO ePaper Display Board EE04 支持不同尺寸和引脚数的屏幕。本教程以 24 引脚 800×480 7.5 英寸墨水屏为例。
+ +**链接**:[支持的屏幕链接](https://wiki.seeedstudio.com/cn/epaper_ee04/#supported-eink) + +### 下载 Vscode + +根据您使用的系统下载 [Vscode](https://code.visualstudio.com/download) + +
+ +### 安装 PlatformIO + +打开 VSCode,点击 Extensions,然后搜索 PlatformIO 并选择安装。安装完成后,重启 VSCode。 + +
+ +### 新建项目 + +- 打开 PIO Home 界面并选择 `New Project` + +
+ +- Name:为您的项目命名 +- Board:选择 Seeed Studio XIAO ESP32S3 +- Framework:选择 Ardunio +- Location:工程文件的路径可以设置为自定义路径或选择默认路径。 +- 点击 "Finish" 并等待创建完成。然后,在工作区中打开项目文件。 + +
+ +### 添加 Seeed GFX 库 + +:::tip +此库与 TFT 库具有相同功能但不兼容。如果您已安装 TFT 库或其他类似的显示库,请先卸载它们。 +::: + +我们将使用 Seeed_GFX 库,它为各种 Seeed Studio 显示设备提供全面支持。 + +**步骤 1.** 从 GitHub 下载 Seeed_GFX 库: + +
+ +**步骤 2.** 将解压的文件移动到项目文件的 `lib` 目录中。 + +
+ +**步骤 3.** 添加 `driver.h` 文件 + +[Seeed GFX 配置工具](https://seeed-studio.github.io/Seeed_GFX/) + +- 在工具页面上,选择您正在使用的屏幕规格。这里选择的是 7.5 英寸单色电子纸屏幕。 +- 为驱动板选择 XIAO ePaper Display Board EE04,然后将生成相应的驱动代码。 + +```cpp +#define BOARD_SCREEN_COMBO 502 // 7.5 inch monochrome ePaper Screen (UC8179) +#define USE_XIAO_EPAPER_DISPLAY_BOARD_EE04 +``` + +:::tip +如果您选择错误,屏幕将不显示任何内容。 +所以请确保您的设备或组件类型正确。 +::: + +
+ +- 在 PlatfromIO 项目文件的 `lib` 目录下创建一个新的 `driver` 文件夹,然后添加 `driver.h` 文件。复制生成的头文件代码并按 Ctrl + S 保存。 + +
+ +### 上传 + +将代码复制到 `main.cpp`,点击 `Build`,完成后上传。 + +```cpp +#include "TFT_eSPI.h" + +#ifdef EPAPER_ENABLE // Only compile this code if the EPAPER_ENABLE is defined in User_Setup.h +EPaper epaper; +#endif + +void setup() +{ +#ifdef EPAPER_ENABLE + epaper.begin(); + epaper.fillScreen(TFT_WHITE); + + epaper.fillCircle(25, 25, 15, TFT_BLACK); + epaper.fillRect(epaper.width() - 40, 10, 30, 30, TFT_BLACK); + + for (int i = 0; i < epaper.height() / 80; i++) + { + epaper.setTextSize(i + 1); + epaper.drawLine(10, 70 + 60 * i, epaper.width() - 10, 70 + 60 * i, TFT_BLACK); + epaper.drawString("Hello EE04", 10, 80 + 60 * i); + } + + epaper.update(); // update the display + +#endif +} + +void loop() +{ + // put your main code here, to run repeatedly: +} +``` + +
+ +- 效果演示 + +
+ +### 用户按钮 + +EE04 具有三个用户可编程按钮,可用于各种控制目的。本节演示如何使用 Arduino 读取按钮状态并响应按钮按下。 + +在 EE04 上,三个按钮连接到 ESP32-S3: + +- KEY1 (GPIO2_D1/A1) +- KEY2 (GPIO3_D2/A2) +- KEY3 (GPIO5_D4/A4) + +所有按钮都是低电平有效,这意味着按下时读取为 LOW,释放时读取为 HIGH。 + +基本按钮读取示例 + +此示例演示如何检测按钮按下并向串行监视器打印消息。 + +
+ +

+ +```cpp +#include +// reTerminal E Series - Button Test +// Based on hardware schematic + +// Define button pins according to schematic +const int BUTTON_KEY0 = 2; // KEY0 - GPIO2 +const int BUTTON_KEY1 = 3; // KEY1 - GPIO3 +const int BUTTON_KEY2 = 5; // KEY2 - GPIO5 + +// Button state variables +bool lastKey0State = HIGH; +bool lastKey1State = HIGH; +bool lastKey2State = HIGH; + +void setup() { + // Initialize serial communication + Serial.begin(115200); + while (!Serial) { + delay(10); // Wait for serial port to connect + } + + Serial.println("================================="); + Serial.println("Press any button to see output"); + Serial.println(); + + // Configure button pins as inputs + // Hardware already has pull-up resistors, so use INPUT mode + pinMode(BUTTON_KEY0, INPUT_PULLUP); + pinMode(BUTTON_KEY1, INPUT_PULLUP); + pinMode(BUTTON_KEY2, INPUT_PULLUP); + + // Read initial states + lastKey0State = digitalRead(BUTTON_KEY0); + lastKey1State = digitalRead(BUTTON_KEY1); + lastKey2State = digitalRead(BUTTON_KEY2); + + Serial.println("Setup complete. Ready to detect button presses..."); +} + +void loop() { + // Read current button states + bool key0State = digitalRead(BUTTON_KEY0); + bool key1State = digitalRead(BUTTON_KEY1); + bool key2State = digitalRead(BUTTON_KEY2); + + // Check KEY1 + if (key0State != lastKey0State) { + if (key0State == LOW) { + Serial.println("KEY0 (GPIO2) pressed!"); + } else { + Serial.println("KEY0 (GPIO2) released!"); + } + lastKey0State = key0State; + delay(50); // Debounce delay + } + + // Check KEY2 + if (key1State != lastKey1State) { + if (key1State == LOW) { + Serial.println("KEY1 (GPIO3) pressed!"); + } else { + Serial.println("KEY1 (GPIO3) released!"); + } + lastKey1State = key1State; + delay(50); // Debounce delay + } + + // Check KEY3 + if (key2State != lastKey2State) { + if (key2State == LOW) { + Serial.println("KEY2 (GPIO5) pressed!"); + } else { + Serial.println("KEY2 (GPIO5) released!"); + } + lastKey2State = key2State; + delay(50); // Debounce delay + } + + delay(10); // Small delay to prevent excessive CPU usage +} +``` + +代码解释: + +- **核心函数分析** + +1. **`pinMode(pin, mode)`** + - 功能:配置引脚模式。 + - 这里使用 `INPUT_PULLUP` 模式来启用内部上拉电阻。这使得引脚在按钮未按下时默认输出高电平(HIGH),当按钮按下时(因为连接到地)输出低电平(LOW)。 + +2. **`digitalRead(pin)`** + - 功能:读取指定引脚的电平状态(HIGH 或 LOW)。 + - 在循环中用于实时获取按钮的当前状态,这有助于判断按钮是否被激活。 + +3. **`Serial.begin(baud)`** 和 **`Serial.println()`** + - 前者初始化串口通信(波特率为 115200),后者向串口输出文本信息。这用于在监视器中显示按钮状态。 + +4. **`delay(ms)`** + - 功能:暂停程序指定的毫秒数。 + - 这里用于两种场景:首先,在 `setup()` 中等待串口连接;其次,在按钮状态改变后延迟 50ms。这通过"等待抖动消失"来实现硬件防抖,防止误触发。 + +- **核心逻辑分析** + +1. **状态比较检测** + - 记录每个按钮的"上一次状态"(如 `lastKey0State`),并在循环中读取"当前状态"。 + - 如果"当前状态 ≠ 上一次状态",则表示按钮已被激活(按下或释放)。 + +2. **按钮动作判断** + - 当状态从 HIGH 变为 LOW 时:判断为"按下"(输出 "pressed")。 + - 当状态从 LOW 变为 HIGH 时:判断为"释放"(输出 "released")。 + - 每次状态改变后,将"上一次状态"更新为当前状态,作为下次比较的参考。 + +3. **循环执行** + - `loop()` 函数在无限循环中运行,重复执行"读取状态 → 比较状态 → 输出结果"的过程,以实现实时检测。 + +- 效果演示: + +Serial Monitor 可以显示串口的状态。 + +
+ +### 电池电压 + +- XIAO ePaper Display Board EE04 由 3.7V - 4.2V 锂电池供电。此外,还有一个 ADC 接口供您测量电压并实时监控电池电压。 +- ADC 测量引脚是 `A0 (GPIO1)`,ADC 使能引脚是 `D5 (GPIO_6)`。 + +连接: + +

+ +监控电池电压的程序。仅供参考。 + +```cpp +#include + +#define BATTERY_ADC A0 // Battery voltage ADC pin +#define ADC_EN 6 // ADC enable pin +#define VOLTAGE_DIVIDER_RATIO 2.0 // Voltage divider ratio (adjust based on your resistor values) ((R1+R2)/R2) + +// Function to read battery voltage +static float readBatteryVoltage() { + int sum = 0; + // Read multiple samples for better accuracy + for (int i = 0; i < 10; i++) { + sum += analogRead(BATTERY_ADC); + delay(2); + } + int adcValue = sum / 10; + + // Calculate actual battery voltage + // Formula: voltage = (ADC_value / 4095) * 3.3V * divider_ratio + float voltage = (adcValue / 4095.0) * 3.3 * VOLTAGE_DIVIDER_RATIO; + + return voltage; +} + +void setup() { + Serial.begin(115200); + delay(1000); + + analogReadResolution(12); // Set ADC resolution to 12 bits + pinMode(BATTERY_ADC, INPUT); + + pinMode(ADC_EN, OUTPUT); + digitalWrite(ADC_EN, HIGH); // Enable ADC +} + +void loop() { + float batteryVoltage = readBatteryVoltage(); + + Serial.print("Battery Voltage: "); + Serial.print(batteryVoltage, 2); + Serial.println(" V"); + + delay(500); // Read every 0.5 seconds +} +``` + +代码解释: + +- 主要功能: + + - **电池电压获取**:通过 ADC 引脚读取分压后的电池电压(电池电压可能超过 Arduino 的 ADC 参考电压,需要先分压)。 + - **精度优化**:通过多次采样取平均值来减少电路噪声干扰。 + - **电压转换**:将 ADC 的数字信号转换为实际电池电压(考虑分压比和参考电压)。 + - **串口输出**:定期通过串口打印测量的电压,供外部设备(如计算机)查看。 + +- 核心函数及作用 + + - `setup()`(初始化函数) + + - **作用**:程序启动时运行一次,用于配置硬件和参数。 + - **关键操作**: + - `Serial.begin(115200)`:初始化串口通信(波特率 115200)用于电压数据输出。 + - `analogReadResolution(12)`:设置 ADC 分辨率为 12 位(读取范围:0~4095)以获得更高精度。 + - `pinMode(BATTERY_ADC, INPUT)`:设置电池检测引脚(A0)为输入模式,用于模拟信号。 + - `pinMode(ADC_EN, OUTPUT)` & `digitalWrite(ADC_EN, HIGH)`:启用 ADC 模块(用于低功耗:仅在测量时开启)。 + + - `loop()`(主循环函数) + + - **作用**:初始化后重复运行,用于定期电压检测和输出。 + - **关键操作**: + - 调用 `readBatteryVoltage()` 获取当前电池电压。 + - 使用 `Serial.print()`/`Serial.println()` 打印格式化的电压(保留 2 位小数,如 "Battery Voltage: 3.82 V")。 + - `delay(500)`:设置测量间隔为 0.5 秒。 + + - `readBatteryVoltage()`(核心测量函数) + + - **作用**:读取 ADC 信号,优化结果,并转换为实际电压。 + - **关键操作**: + - **平均采样**:读取 ADC 10 次,求和后取平均值(减少噪声)。 + - `analogRead(BATTERY_ADC)`:从引脚 A0 读取模拟电压(返回 0~4095)。 + - `delay(2)`:采样间隔 2ms 以保证稳定性。 + - **电压计算**:使用公式 `(adcValue / 4095.0) * 3.3 * VOLTAGE_DIVIDER_RATIO` 获得真实电池电压。 + - 返回计算得到的电压(float 类型)供 `loop()` 使用。 + +- 效果演示: + +
+ +## 仪表板演示 + +EE04 使您能够进行各种创意设计,如仪表板和图像显示。通过与按钮结合,可以实现多页面之间的切换。这里是一个仪表板的示例。 + +:::tip +在这个例程中,绘制仪表板的操作是基于 LVGL 库进行的。 + +LVGL 官方文档:[LVGL docs](https://docs.lvgl.io/master/examples.html#get-started) +::: + +### 硬件 + +您需要准备一个 XIAO ePaper Display Board EE04 和一个分辨率为 800*480 的 7.5 英寸屏幕。 + +
+ + + + + + + +
XIAO ePaper Display Board EE04
+
+
+ +**链接**:[屏幕链接](https://wiki.seeedstudio.com/cn/epaper_ee04/#supported-eink) + +### 软件 + +- 添加 LVGL 库。在 PIO Home 界面的 Library 工具中,搜索 LVGL,然后选择将库添加到当前项目。建议您选择 LVGL 9.0 或以上版本。 + +
+ +- 在 **lib** 目录中 + - 创建一个 **dashboard** 文件夹,然后创建 `dashboard_ui.cpp` 和 `dashboard_ui.h` 文件。这些文件主要用于存储 LGVL 的绘制代码。 + - 创建 **e1001_display** 文件夹,并添加屏幕驱动文件 `e1001_display.c` 和 `e1001_display.h` + - 创建 **lvgl_conf** 文件夹并添加 LVGL 的配置文件 `lv_conf.h`。 + +

+ +完整参考代码:[EE04_Dashboard_ui.zip](https://files.seeedstudio.com/wiki/Epaper/EE04/EE04_dashboard_ui.zip) + +
+ +main.cpp 代码 + +```cpp +/* + * Seeed reTerminal E1001 Multi-UI Demo + * - All hardware I/O and e-paper driver work happens here. + * - All runtime parameters and debug logs live here. + * - dashboard_ui.cpp is a pure LVGL UI layer (no driver calls, no runtime params). + * + * UI switching: + * KEY0 (GPIO2) → Vehicle Dashboard + * KEY1 (GPIO3) → Smart Home + * KEY2 (GPIO5) → Super Mario (default) + */ + +#include +#include + +#include "dashboard_ui.h" // Pure UI layer +#include "e1001_display.h" // E1001 e-paper driver (init/refresh in this file only) + +/* ============ Global driver object ============ */ +static e1001_driver_t e1001_driver; + +/* ============ Current UI ============ */ +static UIType current_ui = UI_SUPER_MARIO; + +/* ============ Smart Home runtime parameters (tuned here) ============ */ +static String smh_location = "New York"; +static String smh_weather = "Sunny"; +static float smh_temperature = 22.5f; +static int smh_humidity = 45; +static float smh_batt_voltage = 12.4f; +static int smh_batt_capacity = 85; +static int smh_wifi_signal = 4; // 0..4 + +/* ============ Vehicle runtime parameters (tuned here) ============ */ +static int veh_speed = 85; // km/h +static int veh_rpm = 2800; // RPM +static int veh_fuel = 75; // % +static int veh_engine_temp = 82; // °C +static char veh_gear = 'D'; // gear char +static long veh_odometer = 86531; // km +static bool veh_seatbelt = true; // indicator example + +/* --------------------------------------------------------------- + * LVGL periodic tick (moved here from dashboard_ui.cpp) + * --------------------------------------------------------------- */ +void ui_update_loop() +{ + lv_timer_handler(); + delay(50); +} + +/* --------------------------------------------------------------- + * Rebuild the active screen for a given UI type (moved here) + * --------------------------------------------------------------- */ +void load_ui(UIType type) +{ + lv_obj_clean(lv_scr_act()); + current_ui = type; + + switch (type) + { + case UI_VEHICLE_DASHBOARD: + create_vehicle_dashboard_ui(); + break; + case UI_SMART_HOME: + create_smarthome_ui(); + break; + case UI_SUPER_MARIO: + default: + create_supermario_ui(); + break; + } +} + +/* --------------------------------------------------------------- + * Helper to apply Smart Home params to the active UI (if loaded) + * --------------------------------------------------------------- */ +static void apply_smarthome_params() +{ + update_temperature(smh_temperature); + update_humidity(smh_humidity); + update_battery_voltage(smh_batt_voltage); + update_battery_capacity(smh_batt_capacity); + update_wifi_signal(smh_wifi_signal); + update_weather_status(smh_weather.c_str()); + update_location(smh_location.c_str()); + + // Example to-do placeholders (UI has checkboxes already) + add_todo_item("Water plants"); + add_todo_item("Check security"); + add_todo_item("Update firmware"); + add_todo_item("Check smart plugs"); +} + +/* ------------------------------------------------------------- + * Helper to apply Vehicle params to the active UI (if loaded) + * ------------------------------------------------------------- */ +static void apply_vehicle_params() +{ + update_speed_gauge(veh_speed); + update_rpm_gauge(veh_rpm); + update_fuel_level(veh_fuel); + update_engine_temp(veh_engine_temp); + update_gear_position(veh_gear); + update_odometer(veh_odometer); + set_warning_indicator(0, veh_seatbelt); +} + +/* ------------------------------------------------------------- + * Switch UI (rebuilds the UI and applies current parameters) + * ------------------------------------------------------------- */ +static void switch_ui(UIType next_ui) +{ + if (next_ui == current_ui) + return; + + current_ui = next_ui; + load_ui(current_ui); + + if (current_ui == UI_VEHICLE_DASHBOARD) + { + Serial.println("[UI] Loaded Vehicle Dashboard"); + apply_vehicle_params(); + } + else if (current_ui == UI_SMART_HOME) + { + Serial.println("[UI] Loaded Smart Home"); + apply_smarthome_params(); + } + else + { + Serial.println("[UI] Loaded Super Mario"); + } + + // Trigger an e-paper refresh immediately after rebuilding UI + e1001_display_refresh(&e1001_driver); +} + +/* ------------------------------------------------------------- + * Setup + * ------------------------------------------------------------- */ +void setup() +{ + Serial.begin(115200); + Serial.println("LVGL Multi-UI + E1001 e-paper demo starting..."); + + // Configure keys (active LOW due to INPUT_PULLUP) + pinMode(BUTTON_KEY0, INPUT_PULLUP); + pinMode(BUTTON_KEY1, INPUT_PULLUP); + pinMode(BUTTON_KEY2, INPUT_PULLUP); + + // Initialize e-paper (includes LVGL/timer/display config handled by your driver) + Serial.println("Initializing E1001 e-paper driver..."); + e1001_display_init(&e1001_driver); + Serial.println("E1001 init done."); + + // Default UI: Super Mario + current_ui = UI_SUPER_MARIO; + load_ui(current_ui); + Serial.println("Default UI created: Super Mario"); + + e1001_display_refresh(&e1001_driver); +} + +/* ------------------------------------------------------------- + * Loop: button-based UI switching + LVGL ticks + e-paper refresh + * ------------------------------------------------------------- */ +void loop() +{ + // Handle UI switching (debounced) + if (digitalRead(BUTTON_KEY0) == LOW) + { // Vehicle + switch_ui(UI_VEHICLE_DASHBOARD); + delay(300); + } + else if (digitalRead(BUTTON_KEY1) == LOW) + { // Smart Home + switch_ui(UI_SMART_HOME); + delay(300); + } + else if (digitalRead(BUTTON_KEY2) == LOW) + { // Super Mario + switch_ui(UI_SUPER_MARIO); + delay(300); + } + + // Drive LVGL internal timers only (no driver I/O in UI layer) + ui_update_loop(); + + // Check if e-paper refresh is needed (driver logic stays here) + if (e1001_display_should_refresh(&e1001_driver)) + { + Serial.println("Refreshing e-paper display..."); + e1001_display_refresh(&e1001_driver); + Serial.println("Display refresh complete."); + } +} +``` + +
+ +### 效果演示: + +按下 EE04 板上的按钮可以切换到相应的 UI 界面: + +- KEY1:车辆仪表盘 +- KEY2:智能家居仪表盘 +- KEY3:超级马里奥 +- 默认:超级马里奥 + +
+ + + + + + + + + + + +
超级马里奥车辆智能家居
+
+ +点击链接,找到 **Resources** 标题,选择您想要打印的 3D 外壳文件。
+[3D 外壳文件资源](https://wiki.seeedstudio.com/cn/trmnl_7inch5_diy_kit_main_page/) + + + +## 技术支持与产品讨论 + +感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。 + +
+ + +
+ +
+ + +
diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/cn_XIAO_ESP32S3_Getting_Started.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/cn_XIAO_ESP32S3_Getting_Started.md index e671b3fe3d794..151f0be454f60 100644 --- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/cn_XIAO_ESP32S3_Getting_Started.md +++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/cn_XIAO_ESP32S3_Getting_Started.md @@ -82,7 +82,7 @@ Seeed Studio XIAO ESP32S3 Sense 集成了摄像头传感器、数字麦克风和 - - 存储 + 内存 片上 8M PSRAM 和 8MB Flash 片上 8M PSRAM 和 8MB Flash

板载 SD 卡插槽,支持 32GB FAT 片上 8M PSRAM 和 16MB Flash @@ -148,9 +148,9 @@ Seeed Studio XIAO ESP32S3 Sense 集成了摄像头传感器、数字麦克风和 ### 特性 - **强大的 MCU 板**:集成 ESP32S3 32 位双核 Xtensa 处理器芯片,运行频率高达 240 MHz,配备多个开发端口,支持 Arduino / MicroPython -- **高级功能**(Sense 版本):可拆卸的 **OV2640 摄像头传感器,分辨率 1600x1200** 和 **OV3660 摄像头传感器,分辨率 2048x1536**,兼容 OV5640 摄像头传感器,集成额外的数字麦克风 +- **高级功能**(适用于 Sense):可拆卸的 **OV2640 摄像头传感器,分辨率 1600x1200** 和 **OV3660 摄像头传感器,分辨率 2048x1536**,兼容 OV5640 摄像头传感器,集成额外的数字麦克风 - **精心设计的电源**:锂电池充电管理功能,提供 4 种功耗模式,允许深度睡眠模式下功耗低至 14μA -- **大容量存储带来更多可能性**:提供 8MB PSRAM 和 8MB FLASH(**Plus** 版本为 16MB),支持 SD 卡插槽用于外部 32GB FAT 存储(仅适用于 XIAO ESP32S3) +- **大容量内存带来更多可能性**:提供 8MB PSRAM 和 8MB FLASH(**Plus** 版本为 16MB),支持 SD 卡插槽用于外部 32GB FAT 内存(仅适用于 XIAO ESP32S3) - **出色的射频性能**:支持 2.4GHz Wi-Fi 和 BLE 双无线通信,连接 U.FL 天线时支持 100m+ 远程通信 - **拇指大小的紧凑设计**:21 x 17.8mm,采用 XIAO 经典外形,适合空间受限的项目,如可穿戴设备 @@ -288,7 +288,7 @@ GPIO0、GPIO45 和 GPIO46 在芯片复位时连接到芯片内部的弱上拉/ 2. **XIAO ESP32S3 Sense** -XIAO ESP32S3 Sense 出厂时预装了 WebCam 示例程序。您可以通过给 XIAO 安装好天线并通电来使用此程序。有关详细信息,您可以阅读关于此程序的 Wiki。 +XIAO ESP32S3 Sense 出厂时预装了 WebCam 示例程序。您可以通过给 XIAO 安装好天线并通电来使用此程序。有关详细信息,您可以阅读有关此程序的 Wiki。 - [视频流](https://wiki.seeedstudio.com/cn/xiao_esp32s3_camera_usage#project-ii-video-streaming) @@ -298,9 +298,9 @@ XIAO ESP32S3 Sense 出厂时预装了 WebCam 示例程序。您可以通过给 X #### 焊接排针 -XIAO ESP32S3 默认出厂时不带排针,您需要准备自己的排针并将其焊接到 XIAO 的相应引脚上,这样您就可以连接到扩展板或传感器。 +XIAO ESP32S3 默认出厂时不带排针,您需要准备自己的排针并将其焊接到 XIAO 的相应引脚上,以便您可以连接到扩展板或传感器。 -由于 XIAO ESP32S3 的微型尺寸,焊接排针时请小心,不要将不同的引脚粘在一起,也不要将焊料粘到屏蔽层或其他组件上。否则,可能会导致 XIAO 短路或无法正常工作,由此造成的后果将由用户承担。 +由于 XIAO ESP32S3 的微型尺寸,焊接排针时请小心,不要将不同的引脚粘在一起,也不要将焊料粘到屏蔽层或其他组件上。否则,可能导致 XIAO 短路或无法正常工作,由此造成的后果将由用户承担。
@@ -339,7 +339,7 @@ XIAO ESP32S3 默认出厂时不带排针,您需要准备自己的排针并将
:::tip -Wiki 中关于摄像头的所有程序都与 OV5640、OV2640 和 OV3660 摄像头兼容。 +Wiki 中所有关于摄像头的程序都与 OV5640、OV2640 和 OV3660 摄像头兼容。 ::: #### 安装升级版散热器 @@ -435,7 +435,7 @@ XIAO ESP32S3 推荐的编程工具是 Arduino IDE,因此作为软件准备的 - **步骤 1.** 根据您的操作系统下载并安装稳定版本的 Arduino IDE。 - **步骤 2.** 启动 Arduino 应用程序。 @@ -458,7 +458,7 @@ https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32
:::caution -XIAO ESP32S3 的板载包需要 **2.0.8** 及以上版本才可用。 +XIAO ESP32S3 的开发板包需要 **2.0.8** 及以上版本才可用。 ::: - **步骤 4.** 选择您的开发板和端口。 @@ -488,12 +488,12 @@ https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32
:::caution -XIAO ESP32S3 的板载包需要 **2.0.8** 及以上版本才可用。 +XIAO ESP32S3 的开发板包需要 **2.0.8** 及以上版本才可用。 ::: - **步骤 4.** 选择您的开发板和端口。 -在 Arduino IDE 顶部,您可以直接选择端口。这很可能是名称中包含 "usbmodem" 或 "usbserial" 的端口。如果您不确定,请拔出并重新插入以查看哪个端口消失了。 +在 Arduino IDE 顶部,您可以直接选择端口。这很可能是名称中包含 "usbmodem" 或 "usbserial" 的端口。如果您不确定,请拔出再插入以查看哪个端口消失了。 @@ -537,7 +537,7 @@ After you have downloaded the above zip, please unzip it and you will see two fi - **Step 4.** Close the Arduino IDE and reopen it.--> - + 同时,在左侧的开发板中搜索 **xiao**。选择 **XIAO_ESP32S3**。 @@ -695,7 +695,7 @@ XIAO ESP32S3 系列内置电源管理芯片,允许 XIAO ESP32S3 通过电池 ### Q1:如果上传程序失败/程序运行异常/找不到设备端口,我应该怎么办? -如果您遇到上述问题,建议您首先尝试按下 XIAO ESP32S3 上的复位按钮,尝试让程序重新运行。如果问题仍然存在,请重新检查您的程序并阅读 **[BootLoader 模式](#bootloader-模式)** 中提供的方法来恢复设备。 +如果您遇到上述问题,建议您首先尝试按下 XIAO ESP32S3 上的复位按钮,尝试让程序重新运行。如果问题仍然存在,请重新检查您的程序并阅读 **[BootLoader 模式](#bootloader-mode)** 中提供的方法来恢复设备。 ### Q2:为什么我的 XIAO 在圆角处有不齐平的问题?这是质量问题吗? diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF54L15-Sense/cn_XIAO_nRF54L15-Sense_MicroPython.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF54L15-Sense/cn_XIAO_nRF54L15-Sense_MicroPython.md index 6f7c0f527ecef..31b433e12e854 100644 --- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF54L15-Sense/cn_XIAO_nRF54L15-Sense_MicroPython.md +++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF54L15-Sense/cn_XIAO_nRF54L15-Sense_MicroPython.md @@ -5,7 +5,7 @@ keywords: - nRF54L15 - xiao - MicroPython -image: https://files.seeedstudio.com/wiki/XIAO_nRF54L15/Getting_Start/1-101991422-XIAO-nRF54L15-Sense.webp +image: https://files.seeedstudio.com/wiki/XIAO_nRF54L15/Getting_Start/epaper_1.webp slug: /cn/xiao_nrf54l15_sense_micropython last_update: date: 9/23/2025 @@ -35,7 +35,7 @@ Win + R --> @@ -87,18 +87,14 @@ git clone https://github.com/Seeed-Studio/micropython-seeed-boards.git
-:::tip -此固件已预设刷写工具链指令。如果这是您第一次使用,可能需要一点时间。 -::: - **步骤 3.** 上传板文件 -- 打开视图,选择"文件",文件管理器路径将显示在左侧边栏。 +- 打开视图,选择 "Files",文件管理器路径将显示在左侧边栏。
- 打开克隆或下载文件的路径,并打开 `micropython-seeed-boards\examples` -- 选择"boards"文件夹并将其上传到闪存。然后,您将能够在 MicroPython 设备/闪存上看到上传的文件。 +- 选择 "boards" 文件夹并将其上传到闪存。然后,您将能够在 MicroPython 设备/闪存上看到上传的文件。
@@ -133,15 +129,15 @@ finally:
-## 数字 +## 数字输入输出 ### 硬件 - - + + @@ -151,17 +147,17 @@ finally: @@ -204,14 +200,15 @@ finally: relay.off() ``` -代码解释: +代码说明: - **导入模块** - `time` 导入时间模块 - `Xiao Pin` 从 boards.xiao 模块导入 Seeed Xiao 开发板的引脚控制类,用于操作板上的引脚。 - **定义引脚** - - `button = "sw"` 指定按钮连接到开发板的"sw"引脚(这里是 BOOT 引脚) - `relay = 0` 指定继电器连接到数字引脚 D0。 + - `button = "sw"` 指定按钮连接到开发板的 "sw" 引脚(这里是 BOOT 引脚) + - `relay = 0` 指定继电器连接到数字引脚 D0。 - **主逻辑(try 块)** - 当按钮被按下时(状态为 0)→ 继电器被激活(输出为 1)。 @@ -329,7 +326,7 @@ finally: pwm.deinit() ``` -代码说明: +代码解释: - **导入依赖库** - `time`:用于添加延迟和控制程序的执行节奏。 @@ -392,6 +389,7 @@ finally: 下载库文件
+
代码 @@ -613,10 +611,10 @@ finally: - **坐标转换函数** - `transformLat(x, y)` 和 `transformLon(x, y)` — 实现 WGS-84 → GCJ-02 转换算法部分的辅助函数(在中国用于地图混淆)。 - - `bd_encrypt(gg)` — 通过应用额外的偏移和旋转将 GCJ-02 坐标转换为百度的 BD-09 坐标系。 + - `bd_encrypt(gg)` — 通过应用额外的偏移和旋转将 GCJ-02 坐标转换为百度的 BD-09 坐标系统。 - `transform(gps)` — 使用基于椭球地球模型的复杂三角函数公式将 WGS-84(原始 GPS)坐标转换为 GCJ-02 的主函数。 - `L76X_Baidu_Coordinates(gps)` — 将原始 GPS(WGS-84)→ GCJ-02 → BD-09(百度地图格式)转换的包装器。 - - `L76X_Google_Coordinates(gps)` — 将原始 GPS(WGS-84)→ GCJ-02(中国的谷歌地图格式)转换的包装器。 + - `L76X_Google_Coordinates(gps)` — 将原始 GPS(WGS-84)→ GCJ-02(中国的 Google 地图格式)转换的包装器。 - **解析 GNRMC 语句** - `parse_gnrmc(nmea_sentence)` — 将原始 NMEA `$GNRMC` 或 `$PNRMC` 字符串解析为结构化的 `GNRMC` 对象。 @@ -629,7 +627,7 @@ finally: - `print_gps_data(gps)` — 打印人类可读的 GPS 信息,包括: - 本地时间(GMT+8) - 带半球的原始 WGS-84 坐标 - - 转换后的 GCJ-02(谷歌兼容)和 BD-09(百度兼容)坐标 + - 转换后的 GCJ-02(Google 兼容)和 BD-09(百度兼容)坐标 - 指示定位是否成功的状态消息 - **主逻辑(try 块)** @@ -658,7 +656,7 @@ finally:
Seeed Studio XIAO nRF54L15 SenseSeeed Studio XIAO 扩展板配 Grove OLEDGrove - 继电器Seeed Studio Expansion Base for XIAO with Grove OLEDGrove - Relay
- + @@ -683,7 +681,7 @@ finally:
@@ -894,8 +892,8 @@ ssd1306_draw_text("HELLO WORLD", 20, 4) 代码说明: - **导入模块** - - `time` 导入时间模块以启用与时间相关的功能,如延迟。 - - `XiaoI2C` 从 `boards.xiao` 模块导入适用于 Seeed Xiao 开发板的 I2C 通信类,用于初始化和控制 I2C 外设。 + - `time` 导入时间模块以启用延迟等时间相关功能。 + - `XiaoI2C` 从 `boards.xiao` 模块导入 Seeed Xiao 开发板的 I2C 通信类,用于初始化和控制 I2C 外设。 - **定义 I2C 配置** - `sda = 4` 指定 I2C 总线的 SDA(数据)线连接到数字引脚 D4。 @@ -948,12 +946,12 @@ ssd1306_draw_text("HELLO WORLD", 20, 4) @@ -1173,7 +1171,7 @@ if __name__ == "__main__": - **模块导入** - `time`:启用时间相关功能,如延时。 - - `XiaoPin 和 XiaoSPI`:从 `boards.xiao` 导入;XiaoPin 用于控制 GPIO 引脚,而 XiaoSPI 处理 SPI 通信。 + - `XiaoPin and XiaoSPI`:从 `boards.xiao` 导入;XiaoPin 用于控制 GPIO 引脚,而 XiaoSPI 处理 SPI 通信。 - **引脚和 SPI 配置** - 定义了特定引脚:复位 (RST)、片选 (CS)、数据/命令 (DC) 和忙碌 (BUSY)。 @@ -1198,7 +1196,7 @@ if __name__ == "__main__": - 定义了一个简单的 5x7 像素字体,存储在 `G` 字典中。 - `glyph(ch)`:检索给定字符对应的像素数据。 - `text_size()`:计算文本在指定缩放比例下显示时的尺寸。 - - `text_pixel()`:确定特定位置是否应绘制像素(用于文本渲染)。 + - `text_pixel()`:确定在特定位置是否应绘制像素(用于文本渲染)。 - **显示更新** - **epaper_update_lines(lines)**:更新显示器的核心功能。 @@ -1228,11 +1226,11 @@ if __name__ == "__main__":
-然后它将显示在 MicroPython 设备/闪存部分下。 +然后它将显示在 MicroPython device/flash 部分下。
-**步骤 2.** 通过按下板载复位按钮,可以实现自动执行效果。 +**步骤 2.** 通过按下板载 Reset 按钮,可以实现自动执行效果。 效果: @@ -1247,11 +1245,11 @@ if __name__ == "__main__": 感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。
- +
- +
From db2f00578de15ac31d57f517744aa75a37abfd46 Mon Sep 17 00:00:00 2001 From: nfs0619 <1447996181@qq.com> Date: Sat, 11 Oct 2025 16:51:38 +0800 Subject: [PATCH 2/2] fix conflict --- .../Lerobot/es_Lerobot_SO100Arm_New.md | 324 +++++++++++------ .../Lerobot/es_Lerobot_Starai_Arm.md | 207 ++++++++--- .../Lerobot/ja_Lerobot_SO100Arm_New.md | 334 ++++++++++++------ .../Lerobot/ja_Lerobot_Starai_Arm.md | 257 ++++++++++---- 4 files changed, 794 insertions(+), 328 deletions(-) diff --git a/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_SO100Arm_New.md b/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_SO100Arm_New.md index 0ac9e6b352f1e..acb60a1c3cfcd 100644 --- a/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_SO100Arm_New.md +++ b/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_SO100Arm_New.md @@ -50,7 +50,7 @@ Este wiki proporciona el tutorial de ensamblaje y depuración para el SO ARM10x 4. **Compatible con Nvidia**: Despliega este kit de brazo con reComputer Mini J4012 Orin NX 16 GB. 5. **Aplicación Multi-Escenario**: Es aplicable a campos como educación, investigación científica, producción automatizada y robótica, ayudando a los usuarios a lograr operaciones de robot eficientes y precisas en varias tareas complejas. -## Novedades +## Novedades: - Optimización del cableado: Comparado con SO-ARM100, SO-ARM101 presenta un cableado mejorado que previene problemas de desconexión previamente vistos en la articulación 3. El nuevo diseño de cableado también ya no limita el rango de movimiento de las articulaciones. - Diferentes relaciones de engranajes para el brazo líder: El brazo líder ahora usa motores con relaciones de engranajes optimizadas, mejorando el rendimiento y eliminando la necesidad de cajas de engranajes externas. @@ -58,7 +58,7 @@ Este wiki proporciona el tutorial de ensamblaje y depuración para el SO ARM10x :::caution -Seeed Studio solo es responsable de la calidad del hardware en sí. Los tutoriales se actualizan estrictamente de acuerdo con la documentación oficial. Si encuentras problemas de software o problemas de dependencias del entorno que no se pueden resolver, además de verificar la sección de FAQ al final de este tutorial, por favor reporta el problema oportunamente a la [plataforma LeRobot](https://github.com/huggingface/lerobot) o al [canal Discord de LeRobot](https://discord.gg/8TnwDdjFGU). +Seeed Studio solo es responsable de la calidad del hardware en sí. Los tutoriales se actualizan estrictamente de acuerdo con la documentación oficial. Si encuentras problemas de software o problemas de dependencias del entorno que no se pueden resolver, además de verificar la sección FAQ al final de este tutorial, por favor reporta el problema oportunamente a la [plataforma LeRobot](https://github.com/huggingface/lerobot) o al [canal Discord de LeRobot](https://discord.gg/8TnwDdjFGU). ::: @@ -77,19 +77,19 @@ Seeed Studio solo es responsable de la calidad del hardware en sí. Los tutorial - - - - + + + + - + @@ -142,7 +142,7 @@ Si compras la versión Arm Kit, ambas fuentes de alimentación son de 5V. Si com | Cable USB-C 2 piezas | 1 | ✅ | | Fuente de Alimentación2 | 2 | ✅ | | Abrazadera de Mesa| 4 | ✅ | -| Partes impresas en 3D del brazo | 1 | Opción | +| Partes impresas en 3D del brazo | 1 | Opcional | ## Entorno del Sistema Inicial @@ -214,12 +214,12 @@ Los archivos STL proporcionados están listos para imprimir en muchas impresoras Todas las piezas para el líder o seguidor están ya contenidas en un solo archivo para facilitar la impresión 3D, correctamente orientadas con z hacia arriba para minimizar los soportes. - Para tamaños de cama de impresora de 220mmx220mm (como la Ender), imprima estos archivos: - - [Seguidor](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Follower/Ender_Follower_SO101.stl) - - [Líder](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Leader/Ender_Leader_SO101.stl) + - [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) - Para tamaños de cama de impresora de 205mm x 250mm (como la Prusa/Up): - - [Seguidor](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Follower/Prusa_Follower_SO101.stl) - - [Líder](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Leader/Prusa_Leader_SO101.stl) + - [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) ## Instalar LeRobot @@ -235,7 +235,7 @@ chmod +x Miniconda3-latest-Linux-aarch64.sh source ~/.bashrc ``` -O, Para X86 Ubuntu 22.04: +O, para X86 Ubuntu 22.04: ```bash mkdir -p ~/miniconda3 @@ -266,7 +266,7 @@ conda install ffmpeg -c conda-forge ``` :::tip -Esto generalmente instala ffmpeg 7.X para su plataforma compilado con el codificador libsvtav1. Si libsvtav1 no es compatible (verifique los codificadores compatibles con ffmpeg -encoders), puede: +Esto usualmente instala ffmpeg 7.X para su plataforma compilado con el codificador libsvtav1. Si libsvtav1 no es compatible (verifique los codificadores compatibles con ffmpeg -encoders), puede: - [En cualquier plataforma] Instalar explícitamente ffmpeg 7.X usando: @@ -304,7 +304,7 @@ pip3 install numpy==1.26.0 # This should match torchvision 6. Verificar Pytorch y Torchvision -Dado que instalar el entorno lerobot a través de pip desinstalará el Pytorch y Torchvision originales e instalará las versiones CPU de Pytorch y Torchvision, necesita realizar una verificación en Python. +Dado que instalar el entorno lerobot vía pip desinstalará el Pytorch y Torchvision originales e instalará las versiones CPU de Pytorch y Torchvision, necesita realizar una verificación en Python. ```python import torch @@ -330,11 +330,11 @@ Para configurar los motores, designe un adaptador de servo de bus y 6 motores pa | Modelo de Servo | Relación de Engranajes | Articulaciones Correspondientes | |----------------------------------------|------------|------------------------------| -| ST-3215-C044(7.4V) | 1:191 | L1 | -| ST-3215-C001(7.4V) | 1:345 | L2 | -| ST-3215-C044(7.4V) | 1:191 | L3 | -| ST-3215-C046(7.4V) | 1:147 | L4–L6 | -| ST-3215-C001(7.4V) / C018(12V) / C047(12V) | 1:345 | F1–F6 | +| ST-3215-C044(7.4V) | 1:191 | L1 | +| ST-3215-C001(7.4V) | 1:345 | L2 | +| ST-3215-C044(7.4V) | 1:191 | L3 | +| ST-3215-C046(7.4V) | 1:147 | L4–L6 | +| ST-3215-C001(7.4V) / C018(12V) / C047(12V) | 1:345 | F1–F6 | :::danger Ahora debe conectar la fuente de alimentación de 5V o 12V al bus del motor. 5V para los motores STS3215 7.4V y 12V para los motores STS3215 12V. Tenga en cuenta que el brazo líder siempre usa los motores de 7.4V, así que tenga cuidado de conectar la fuente de alimentación correcta si tiene motores de 12V y 7.4V, ¡de lo contrario podría quemar sus motores! Ahora, conecte el bus del motor a su computadora vía USB. Tenga en cuenta que el USB no proporciona energía, y tanto la fuente de alimentación como el USB deben estar conectados. @@ -345,7 +345,7 @@ Ahora debe conectar la fuente de alimentación de 5V o 12V al bus del motor. 5V src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/all_motos.png" /> -***Los siguientes son los pasos de calibración del código, por favor calibre con el servo de cableado de referencia en la imagen de arriba*** +***Los siguientes son los pasos de calibración de código, por favor calibre con el servo de cableado de referencia en la imagen de arriba*** Encontrar puertos USB asociados a sus brazos Para encontrar los puertos correctos para cada brazo, ejecute el script de utilidad dos veces: @@ -371,9 +371,9 @@ Reconnect the USB cable. Recuerde quitar el usb, de lo contrario la interfaz no será detectada. ::: -Salida de ejemplo al identificar el puerto del brazo seguidor (por ejemplo, `/dev/tty.usbmodem575E0031751` en Mac, o posiblemente `/dev/ttyACM0` en Linux): +Salida de ejemplo al identificar el puerto del brazo seguidor (ej., `/dev/tty.usbmodem575E0031751` en Mac, o posiblemente `/dev/ttyACM0` en Linux): -Salida de ejemplo al identificar el puerto del brazo líder (por ejemplo, `/dev/tty.usbmodem575E0032081`, o posiblemente `/dev/ttyACM1` en Linux): +Salida de ejemplo al identificar el puerto del brazo líder (ej., `/dev/tty.usbmodem575E0032081`, o posiblemente `/dev/ttyACM1` en Linux): Podría necesitar dar acceso a los puertos USB ejecutando: @@ -401,7 +401,7 @@ Si compra la versión Arm Kit (ST-3215-C001), use una fuente de alimentación de | ![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úrese de que los IDs de las articulaciones del servo y las relaciones de engranajes correspondan estrictamente a los del SO-ARM101. +Nuevamente, asegúrese de que los IDs de las articulaciones del servo y las relaciones de engranajes correspondan estrictamente a las del SO-ARM101. ::: Conecte el cable USB de su computadora y la fuente de alimentación a la placa controladora del brazo seguidor. Luego, ejecute el siguiente comando. @@ -418,7 +418,7 @@ Debería ver la siguiente instrucción. Connect the controller board to the 'gripper' motor only and press enter. ``` -Como se indica, conecte el motor de la pinza. Asegúrese de que sea el único motor conectado a la placa, y que el motor en sí no esté aún conectado en cadena a ningún otro motor. Al presionar [Enter], el script configurará automáticamente el ID y la velocidad de baudios para ese motor. +Como se indica, conecte el motor de la pinza. Asegúrese de que sea el único motor conectado a la placa, y que el motor en sí no esté aún conectado en cadena a ningún otro motor. Al presionar [Enter], el script configurará automáticamente el ID y la velocidad de transmisión para ese motor. Luego debería ver el siguiente mensaje: @@ -444,7 +444,7 @@ Verifique su cableado en cada paso antes de presionar Enter. Por ejemplo, el cab Cuando haya terminado, el script simplemente finalizará, momento en el cual los motores estarán listos para ser utilizados. Ahora puede conectar el cable de 3 pines de cada motor al siguiente, y el cable del primer motor (el 'giro del hombro' con id=1) a la placa controladora, que ahora puede ser fijada a la base del brazo. -Haga los mismos pasos para el brazo líder. +Realice los mismos pasos para el brazo líder. ```bash lerobot-setup-motors \ @@ -589,6 +589,122 @@ El comando teleoperate automáticamente: ## Agregar cámaras + +
+ Si usas la Cámara de Profundidad Orbbec Gemini2 + +
+ +
+ + + +- 🚀 Paso 1: Instalar el Entorno Dependiente del SDK de Orbbec + +1. Clona el repositorio `pyorbbec` + ```bash + cd ~/ + git clone https://github.com/orbbec/pyorbbecsdk.git + ``` + +2. Descarga e instala el **archivo .whl** correspondiente para el SDK + Ve a [pyorbbecsdk Releases](https://github.com/orbbec/pyorbbecsdk/releases), + selecciona e instala basándote en tu versión de Python. Por ejemplo: + ```bash + pip install pyorbbecsdk-x.x.x-cp310-cp310-linux_x86_64.whl + ``` + +3. Instala las dependencias en el directorio `pyorbbec` + ```bash + cd ~/pyorbbecsdk + pip install -r requirements.txt + ``` + + Fuerza la degradación de la versión de `numpy` a `1.26.0` + ```bash + pip install numpy==1.26.0 + ``` + Los mensajes de error rojos pueden ser ignorados. + +4. Clona el SDK de Orbbec en el directorio `~/lerobot/src/cameras` + + ```bash + cd ~/lerobot/src/cameras + git clone https://github.com/ZhuYaoHui1998/orbbec.git + ``` + +5. Modifica utils.py y __init__.py +- Encuentra `utils.py` en el directorio `~/lerobot/src/lerobot/cameras`, y agrega el siguiente código en la línea 40: + +```python +elif cfg.type == "orbbec": + from .realsense.camera_orbbec import OrbbecCamera + + cameras[key] = OrbbecCamera(cfg) +``` + +
+ +
+ +- Encuentra `__init__.py` en el directorio `~/lerobot/src/lerobot/cameras`, y agrega el siguiente código en la línea 18: + +```python +from .orbbec.configuration_orbbec import OrbbecCameraConfig +``` + +
+ +
+ + +- 🚀 Paso 2: Llamada de Función y Ejemplos + +En todos los siguientes ejemplos, reemplaza `so101_follower` con el modelo real del brazo robótico que estés usando (ej., `so100` / `so101`). + + +Hemos agregado el hiperparámetro `focus_area`. Dado que los datos de profundidad que están demasiado lejos no tienen sentido para el brazo robótico (no puede alcanzar o agarrar objetos), los datos de profundidad menores o mayores que el `focus_area` se mostrarán en negro. El `focus_area` predeterminado es (20, 600). +Actualmente, la única resolución soportada es ancho: 640, alto: 880. + +```bash +lerobot-teleoperate \ + --robot.type=so101_follower \ + --robot.port=/dev/ttyACM0 \ + --robot.id=my_awesome_follower_arm \ + --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \ + --teleop.type=so101_leader \ + --teleop.port=/dev/ttyACM1 \ + --teleop.id=my_awesome_leader_arm \ + --display_data=true +``` + + +
+ +
+ + + +Para tareas posteriores como recolección de datos, entrenamiento y evaluación, el proceso es el mismo que para comandos RGB regulares. Solo necesitas reemplazar la parte relevante en el comando RGB regular con: + +```bash + --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \ +``` + +También puedes agregar una cámara RGB monocular adicional después. + + +
+ + + :::tip Los códigos SO100 y SO101 son compatibles. Los usuarios de SO100 pueden utilizar directamente los parámetros y código de SO101 para la operación. ::: @@ -622,7 +738,7 @@ 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 , 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. +Al usar cámaras Intel RealSense en macOS, podrías obtener este error: Error finding RealSense cameras: failed to set power state, esto se puede resolver ejecutando el mismo comando con permisos sudo. Ten en cuenta que usar cámaras RealSense en macOS es inestable. ::: Entonces podrás mostrar las cámaras en tu computadora mientras teleoperás ejecutando el siguiente código. Esto es útil para preparar tu configuración antes de grabar tu primer conjunto de datos. @@ -697,9 +813,9 @@ lerobot-record \ --dataset.reset_time_s=30 ``` -Entre ellos, `repo_id` se puede modificar de forma personalizada, y `push_to_hub=false`. Finalmente, el conjunto de datos se guardará en el directorio `~/.cache/huggingface/lerobot` en la carpeta home, donde se creará la carpeta `seeedstudio123/test` mencionada anteriormente. +Entre ellos, `repo_id` se puede modificar de forma personalizada, y `push_to_hub=false`. Finalmente, el conjunto de datos se guardará en el directorio `~/.cache/huggingface/lerobot` en la carpeta de inicio, donde se creará la carpeta `seeedstudio123/test` mencionada anteriormente. -- Si quieres usar las funciones del hub de Hugging Face para subir tu conjunto de datos y no lo has hecho previamente, asegúrate de haber iniciado sesión usando un token de acceso de escritura, que se puede generar desde la [configuración de Hugging Face](https://huggingface.co/settings/tokens): +- Si deseas usar las funciones del hub de Hugging Face para subir tu conjunto de datos y no lo has hecho anteriormente, asegúrate de haber iniciado sesión usando un token de acceso de escritura, que se puede generar desde la [configuración de Hugging Face](https://huggingface.co/settings/tokens): ```bash huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential @@ -738,64 +854,64 @@ Verás muchas líneas apareciendo como esta: INFO 2024-08-10 15:02:58 ol_robot.py:219 dt:33.34 (30.0hz) dtRlead: 5.06 (197.5hz) dtWfoll: 0.25 (3963.7hz) dtRfoll: 6.22 (160.7hz) dtRlaptop: 32.57 (30.7hz) dtRphone: 33.84 (29.5hz) ``` -**Función de grabación** +**Función record** -La función **record** proporciona un conjunto de herramientas para capturar y gestionar datos durante la operación del robot. +La función **record** proporciona un conjunto de herramientas para capturar y gestionar datos durante la operación del robot. -**1. Almacenamiento de datos** +**1. Almacenamiento de Datos** - Los datos se almacenan usando el formato `LeRobotDataset` y se guardan en disco durante la grabación. -- Por defecto, el conjunto de datos se sube a tu página de Hugging Face después de la grabación. +- Por defecto, el conjunto de datos se sube a tu página de Hugging Face después de la grabación. - Para deshabilitar la subida, usa: `--dataset.push_to_hub=False` -**2. Puntos de control y reanudación** +**2. Puntos de Control y Reanudación** -- Los puntos de control se crean automáticamente durante la grabación. +- Los puntos de control se crean automáticamente durante la grabación. - Para reanudar después de una interrupción, vuelve a ejecutar el mismo comando con: `--resume=true` -⚠️ Nota crítica: Al reanudar, establece `--dataset.num_episodes` al número de episodios adicionales a grabar (no el número total objetivo de episodios en el conjunto de datos). +⚠️ Nota Crítica: Al reanudar, establece `--dataset.num_episodes` al número de episodios adicionales a grabar (no el número total objetivo de episodios en el conjunto de datos). - Para comenzar a grabar desde cero, **elimina manualmente** el directorio del conjunto de datos. -**3. Parámetros de grabación** +**3. Parámetros de Grabación** -Establece el flujo de grabación de datos usando argumentos de línea de comandos: +Configura el flujo de grabación de datos usando argumentos de línea de comandos: -| Parámetro | Descripción | Por defecto | -|-----------|-------------|-------------| -| --dataset.episode_time_s | Duración por episodio de datos (segundos) | 60 | -| --dataset.reset_time_s | Tiempo de reinicio del entorno después de cada episodio (segundos) | 60 | -| --dataset.num_episodes | Total de episodios a grabar | 50 | +| Parámetro | Descripción | Por defecto | +|-----------|-------------|---------| +| --dataset.episode_time_s | Duración por episodio de datos (segundos) | 60 | +| --dataset.reset_time_s | Tiempo de reinicio del entorno después de cada episodio (segundos) | 60 | +| --dataset.num_episodes | Total de episodios a grabar | 50 | -**4. Controles de teclado durante la grabación** +**4. Controles de Teclado Durante la Grabación** Controla el flujo de grabación de datos usando atajos de teclado: -| Tecla | Acción | -|-------|--------| -| → (Flecha derecha) | Detener temprano el episodio/reinicio actual; pasar al siguiente. | -| ← (Flecha izquierda) | Cancelar episodio actual; volver a grabarlo. | -| ESC | Detener sesión inmediatamente, codificar videos y subir conjunto de datos. | +| Tecla | Acción | +|-----|--------| +| → (Flecha Derecha) | Detener temprano el episodio actual/reiniciar; pasar al siguiente. | +| ← (Flecha Izquierda) | Cancelar episodio actual; volver a grabarlo. | +| ESC | Detener sesión inmediatamente, codificar videos y subir conjunto de datos. | -**Consejos para recopilar datos** +**Consejos para Recopilar Datos** -- Sugerencia de tarea: Agarrar objetos en diferentes ubicaciones y colocarlos en un contenedor. -- Escala: Grabar ≥50 episodios (10 episodios por ubicación). -- Consistencia: - - Mantener las cámaras fijas. - - Mantener comportamiento de agarre idéntico. - - Asegurar que los objetos manipulados sean visibles en las transmisiones de cámara. -- Progresión: - - Comenzar con agarre confiable antes de agregar variaciones (nuevas ubicaciones, técnicas, ajustes de cámara). - - Evitar aumentos rápidos de complejidad para prevenir fallas. +- Sugerencia de Tarea: Agarrar objetos en diferentes ubicaciones y colocarlos en un contenedor. +- Escala: Grabar ≥50 episodios (10 episodios por ubicación). +- Consistencia: + - Mantener las cámaras fijas. + - Mantener comportamiento de agarre idéntico. + - Asegurar que los objetos manipulados sean visibles en las transmisiones de la cámara. +- Progresión: + - Comenzar con agarre confiable antes de agregar variaciones (nuevas ubicaciones, técnicas, ajustes de cámara). + - Evitar aumentos rápidos de complejidad para prevenir fallas. -💡 Regla general: Deberías poder hacer la tarea tú mismo solo mirando las imágenes de la cámara. +💡 Regla General: Deberías poder hacer la tarea tú mismo solo mirando las imágenes de la cámara. -Si quieres profundizar en este tema importante, puedes consultar la [publicación del blog](https://huggingface.co/blog/lerobot-datasets#what-makes-a-good-dataset) que escribimos sobre qué hace que un conjunto de datos sea bueno. +Si quieres profundizar en este tema importante, puedes consultar la [publicación del blog](https://huggingface.co/blog/lerobot-datasets#what-makes-a-good-dataset) que escribimos sobre qué hace un buen conjunto de datos. -**Solución de problemas** +**Solución de Problemas** -Problema específico de Linux: +Problema Específico de Linux: Si las teclas Flecha Derecha/Flecha Izquierda/ESC no responden durante la grabación: - Verifica que la variable de entorno `$DISPLAY` esté configurada (ver [limitaciones de pynput](https://pynput.readthedocs.io/en/latest/limitations.html)). @@ -843,9 +959,9 @@ lerobot-dataset-viz \ Los códigos SO100 y SO101 son compatibles. Los usuarios de SO100 pueden utilizar directamente los parámetros y código de SO101 para la operación. ::: -Una característica útil es la función `replay`, que te permite reproducir cualquier episodio que hayas grabado o episodios de cualquier conjunto de datos disponible. Esta función te ayuda a probar la repetibilidad de las acciones de tu robot y evaluar la transferibilidad entre robots del mismo modelo. +Una función útil es la función `replay`, que te permite reproducir cualquier episodio que hayas grabado o episodios de cualquier conjunto de datos disponible. Esta función te ayuda a probar la repetibilidad de las acciones de tu robot y evaluar la transferibilidad entre robots del mismo modelo. -Puedes reproducir el primer episodio en tu robot con el comando a continuación o con el ejemplo de API: +Puedes reproducir el primer episodio en tu robot con el comando de abajo o con el ejemplo de API: ```bash lerobot-replay \ @@ -864,7 +980,7 @@ Tu robot debería replicar movimientos similares a los que grabaste. Los códigos SO100 y SO101 son compatibles. Los usuarios de SO100 pueden utilizar directamente los parámetros y código de SO101 para la operación. ::: -Para entrenar una política para controlar tu robot, usa el script [lerobot-train](https://github.com/huggingface/lerobot/blob/main/src/lerobot/scripts/train.py). Se requieren algunos argumentos. Aquí tienes un comando de ejemplo: +Para entrenar una política para controlar tu robot, usa el script [lerobot-train](https://github.com/huggingface/lerobot/blob/main/src/lerobot/scripts/train.py). Se requieren algunos argumentos. Aquí hay un comando de ejemplo: ```bash lerobot-train \ @@ -946,7 +1062,7 @@ huggingface-cli upload ${HF_USER}/act_so101_test${CKPT} \ [SmolVLA](https://huggingface.co/docs/lerobot/smolvla) es el modelo fundacional ligero de Hugging Face para robótica. Diseñado para un ajuste fino fácil en conjuntos de datos de LeRobot, ¡ayuda a acelerar tu desarrollo! -**Configura tu entorno** +**Configura tu Entorno** Instala las dependencias de SmolVLA ejecutando: @@ -954,13 +1070,13 @@ Instala las dependencias de SmolVLA ejecutando: pip install -e ".[smolvla]" ``` -**Ajusta finamente SmolVLA en tus datos** +**Ajusta SmolVLA con tus datos** -Usa [smolvla_base](https://hf.co/lerobot/smolvla_base), nuestro modelo preentrenado de 450M, y ajústalo finamente en tus datos. Entrenar el modelo por 20k pasos tomará aproximadamente ~4 horas en una sola GPU A100. Deberías ajustar el número de pasos según el rendimiento y tu caso de uso. +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 tomará aproximadamente ~4 horas en una sola GPU A100. Debes ajustar el número de pasos según el rendimiento y tu caso de uso. -Si no tienes un dispositivo gpu, puedes entrenar usando nuestro notebook en [Google Colab](https://colab.research.google.com/github/huggingface/notebooks/blob/main/lerobot/training-smolvla.ipynb). +Si no tienes un dispositivo GPU, puedes entrenar usando nuestro notebook en [Google Colab](https://colab.research.google.com/github/huggingface/notebooks/blob/main/lerobot/training-smolvla.ipynb). -Pasa tu conjunto de datos al script de entrenamiento usando `--dataset.repo_id`. Si quieres probar tu instalación, ejecuta el siguiente comando donde usamos uno de los conjuntos de datos que recopilamos para el [Artículo de SmolVLA](https://huggingface.co/papers/2506.01844). +Pasa tu conjunto de datos al script de entrenamiento usando `--dataset.repo_id`. Si quieres probar tu instalación, ejecuta el siguiente comando donde usamos uno de los conjuntos de datos que recopilamos para el [SmolVLA Paper](https://huggingface.co/papers/2506.01844). ```bash lerobot-train \ @@ -984,9 +1100,9 @@ El ajuste fino es un arte. Para una descripción completa de las opciones para e lerobot-train --help ``` -**Evalúa el modelo ajustado finamente y ejecútalo en tiempo real** +**Evalúa el modelo ajustado y ejecútalo en tiempo real** -De manera similar a cuando grabas un episodio, se recomienda que hayas iniciado sesión en el Hub de HuggingFace. 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: +De manera similar a cuando grabas un episodio, se recomienda que hayas iniciado sesión en el 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: ```bash lerobot-record \ @@ -1014,20 +1130,20 @@ Dependiendo de tu configuración de evaluación, puedes configurar la duración [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 serán preentrenados una vez en una fábrica, necesitarán seguir aprendiendo y adaptándose con sus usuarios humanos a lo largo del tiempo. Esta adaptación continua se llama 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 verdaderos asistentes personalizados. -- 📄 [Artículo de LIBERO](https://arxiv.org/abs/2306.03310) -- 💻 [Repositorio original de LIBERO](https://github.com/Lifelong-Robot-Learning/LIBERO) +- 📄 [LIBERO paper](https://arxiv.org/abs/2306.03310) +- 💻 [Original LIBERO repo](https://github.com/Lifelong-Robot-Learning/LIBERO) **Evaluando con LIBERO** -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. +En **LeRobot**, portamos LIBERO a nuestro framework y lo usamos principalmente para **evaluar** [SmolVLA](https://huggingface.co/docs/lerobot/en/smolvla), nuestro modelo ligero Vision-Language-Action. -LIBERO ahora es parte de nuestra **simulación multi-eval soportada**, lo que significa que puedes hacer benchmark de tus políticas ya sea en una **suite única de tareas** o a través de **múltiples suites a la vez** con solo una bandera. +LIBERO ahora es parte de nuestra **simulación multi-eval soportada**, lo que significa que puedes evaluar tus políticas ya sea en una **suite única de tareas** o a través de **múltiples suites 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]"` +Para instalar LIBERO, después de seguir las instrucciones oficiales de LeRobot, simplemente haz: `pip install -e ".[libero]"` ***Evaluación de suite única*** -Evalúa una política en una suite de LIBERO: +Evalúa una política en una suite LIBERO: ```bash lerobot-eval \ @@ -1042,9 +1158,9 @@ lerobot-eval \ - `--eval.batch_size` controla cuántos entornos se ejecutan en paralelo. - `--eval.n_episodes` establece cuántos episodios ejecutar en total. -***Evaluación de múltiples suites*** +***Evaluación multi-suite*** -Evalúa una política en múltiples suites a la vez: +Evalúa una política a través de múltiples suites a la vez: ```bash lerobot-eval \ @@ -1055,9 +1171,9 @@ lerobot-eval \ --eval.n_episodes=2 ``` -- Pasa una lista separada por comas a `--env.task` para evaluación de múltiples suites. +- Pasa una lista separada por comas a `--env.task` para evaluación multi-suite. -**Ejemplo de comando de entrenamiento** +**Comando de entrenamiento de ejemplo** ```bash lerobot-train \ @@ -1104,7 +1220,7 @@ lerobot-record \ --policy.path=${HF_USER}/my_policy ``` -como por ejemplo: +como: ```bash lerobot-record \ @@ -1118,13 +1234,13 @@ lerobot-record \ --policy.path=outputs/train/act_so101_test/checkpoints/last/pretrained_model ``` -1. El parámetro `--policy.path` indica la ruta al archivo de pesos de los resultados del entrenamiento de tu política (ej., `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 (ej., `${HF_USER}/act_so100_test`). +1. El parámetro `--policy.path` indica la ruta al archivo de pesos de los resultados de entrenamiento de tu política (ej., `outputs/train/act_so101_test/checkpoints/last/pretrained_model`). Si subes el archivo de pesos del resultado del entrenamiento del modelo al Hub, también puedes usar el repositorio del modelo (ej., `${HF_USER}/act_so100_test`). -2. El nombre del dataset `dataset.repo_id` comienza con `eval_`. Esta operación grabará por separado videos 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 grabará por separado videos y datos durante la evaluación, que se guardarán en la carpeta que comience 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, por favor elimina primero la carpeta que comience con `eval_` y luego ejecuta el programa nuevamente. -4. Cuando encuentres `mean is infinity. You should either initialize with stats as an argument or use a pretrained model`, por favor nota que palabras clave como front y side en el parámetro `--robot.cameras` deben ser estrictamente consistentes con las usadas al recopilar el dataset. +4. Cuando encuentres `mean is infinity. You should either initialize with stats as an argument or use a pretrained model`, por favor nota que las palabras clave como front y side en el parámetro `--robot.cameras` deben ser estrictamente consistentes con las usadas al recopilar el conjunto de datos.
@@ -1132,15 +1248,15 @@ lerobot-record \ ## FAQ -- Si estás siguiendo esta documentación/tutorial, por favor clona el 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 datasets, diferentes comandos, etc. +- Si estás siguiendo esta documentación/tutorial, por favor clona el 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 IDs de servo: +- Si encuentras el siguiente error al calibrar los IDs de servo: ```bash `Motor ‘gripper’ was not found, Make sure it is connected` ``` - Por favor verifica cuidadosamente si el cable de comunicación está correctamente conectado al servo y si la fuente de alimentación está proporcionando el voltaje correcto. + Por favor verifica cuidadosamente si el cable de comunicación está conectado correctamente al servo y si la fuente de alimentación está proporcionando el voltaje correcto. - Si encuentras: @@ -1177,45 +1293,45 @@ lerobot-record \ Magnitude 30841 exceeds 2047 (max for sign_bit_index=11) ``` - Apaga y reinicia el brazo robótico, luego intenta calibrar nuevamente. Este método también se puede usar si el ángulo MAX alcanza un valor de decenas de miles durante la calibración. Si esto no funciona, necesitas recalibrar los servos correspondientes, incluyendo calibración mediana y escritura de ID. + Apague y reinicie el brazo robótico, luego intente calibrar nuevamente. Este método también se puede usar si el ángulo MAX alcanza un valor de decenas de miles durante la calibración. Si esto no funciona, necesita recalibrar los servos correspondientes, incluyendo la calibración mediana y la escritura de ID. -- Si encuentras durante la fase de evaluación: +- Si encuentra durante la fase de evaluación: ```bash File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/seeed/eval_xxxx' ``` - Por favor elimina primero la carpeta que comience con `eval_` y luego ejecuta el programa nuevamente. + Por favor, elimine primero la carpeta que comience con `eval_` y luego ejecute el programa nuevamente. -- Si encuentras durante la fase de evaluación: +- Si encuentra durante la fase de evaluación: ```bash `mean` is infinity. You should either initialize with `stats` as an argument or use a pretrained model ``` - Por favor nota que palabras clave como "front" y "side" en el parámetro `--robot.cameras` deben ser estrictamente consistentes con las usadas al recopilar el dataset. + Tenga en cuenta que las palabras clave como "front" y "side" en el parámetro `--robot.cameras` deben ser estrictamente consistentes 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 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. +- Si ha reparado o reemplazado partes del brazo robótico, por favor elimine completamente los archivos bajo `~/.cache/huggingface/lerobot/calibration/robots` o `~/.cache/huggingface/lerobot/calibration/teleoperators` y recalibre 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 en 50 conjuntos de datos toma aproximadamente 6 horas en una laptop con RTX 3060 (8GB), y alrededor de 2-3 horas en computadoras 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 peatones capturados por la cámara, ya que cambios excesivos en el entorno de despliegue pueden causar que el brazo robótico falle al agarrar correctamente. +- Durante la recopilación de datos, asegúrese de que la posición de la cámara, el ángulo y la iluminación ambiental sean estables. Reduzca la cantidad de fondo inestable y peatones capturados por la cámara, ya que cambios excesivos en el entorno de implementación pueden causar que el brazo robótico falle al agarrar correctamente. -- Para el comando de recopilación de datos, asegúrate de que el parámetro `num-episodes` esté configurado para recopilar datos suficientes. No pauses manualmente a la mitad, ya que la media y varianza de los datos se calculan solo después de que se complete la recopilación de datos, que son necesarias para el entrenamiento. +- Para el comando de recopilación de datos, asegúrese de que el parámetro `num-episodes` esté configurado para recopilar datos suficientes. No pause manualmente a la mitad, ya que la media y la varianza de los datos se calculan solo después de que se complete la recopilación de datos, las cuales son necesarias 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 asegurar una velocidad de transmisión de imagen rápida. +- Si el programa indica que no puede leer datos de imagen de la cámara USB, asegúrese 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 velocidad de transmisión de imagen rápida. -- Si encuentras un error como `AttributeError: module 'rerun' has no attribute 'scalar'. Did you mean: 'scalars'?`, puedes degradar la versión de rerun para resolver el problema. +- Si encuentra un error como `AttributeError: module 'rerun' has no attribute 'scalar'. Did you mean: 'scalars'?`, puede degradar la versión de rerun para resolver el problema. ```bash pip3 install rerun-sdk==0.23 ``` :::tip -Si encuentras problemas de software o problemas de dependencias del entorno que no se pueden resolver, además de verificar la sección FAQ al final de este tutorial, por favor reporta el problema oportunamente a la [plataforma LeRobot](https://github.com/huggingface/lerobot) o al [canal Discord de LeRobot](https://discord.gg/8TnwDdjFGU). +Si encuentra problemas de software o problemas de dependencias del entorno que no se pueden resolver, además de verificar la sección de FAQ al final de este tutorial, por favor reporte el problema oportunamente a la [plataforma LeRobot](https://github.com/huggingface/lerobot) o al [canal Discord de LeRobot](https://discord.gg/8TnwDdjFGU). ::: -## Cita +## Citas [中文文档](https://wiki.seeedstudio.com/cn/lerobot_so100m_new/) @@ -1237,7 +1353,7 @@ Dnsty: [Jetson Containers](https://github.com/dusty-nv/jetson-containers/tree/ma ## Soporte Técnico y Discusión de Productos -¡Gracias por elegir nuestros productos! Estamos aquí para brindarte diferentes tipos de soporte para asegurar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades. +¡Gracias por elegir nuestros productos! Estamos aquí para brindarle diferentes tipos de soporte para asegurar que su experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades.
diff --git a/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_Starai_Arm.md b/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_Starai_Arm.md index c0fce26d39d63..a1eef14d84230 100644 --- a/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_Starai_Arm.md +++ b/docs/es/Robotics/Robot_Kits/Lerobot/es_Lerobot_Starai_Arm.md @@ -33,7 +33,7 @@ last_update: 1. **Código Abierto y Amigable para Desarrolladores** Es una solución de brazo robótico de código abierto y amigable para desarrolladores de 6+1 DoF de [Fishion Star Technology Limited](https://fashionrobo.com/). 2. **Integración con LeRobot** - Diseñado para integración con [Plataforma LeRobot](https://github.com/huggingface/lerobot), que proporciona modelos PyTorch, conjuntos de datos y herramientas para aprendizaje por imitación en tareas robóticas del mundo real — incluyendo recolección de datos, simulación, entrenamiento y despliegue. + Diseñado para integración con [LeRobot Platform](https://github.com/huggingface/lerobot), que proporciona modelos PyTorch, conjuntos de datos y herramientas para aprendizaje por imitación en tareas robóticas del mundo real — incluyendo recolección de datos, simulación, entrenamiento y despliegue. 3. **Recursos de Aprendizaje Integrales** Proporciona recursos de aprendizaje de código abierto integrales como guías de ensamblaje y calibración, y ejemplos de tareas de agarre personalizadas para ayudar a los usuarios a comenzar rápidamente y desarrollar aplicaciones robóticas. 4. **Compatible con Nvidia** @@ -41,11 +41,11 @@ last_update: ## Características Principales -- Listo para Usar — No Requiere Ensamblaje. Solo Desempaca y Sumérgete en el Mundo de la IA. +- Listo para Usar — Sin Ensamblaje Requerido. Solo Desempaca y Sumérgete en el Mundo de la IA. - 6+1 Grados de Libertad y un Alcance de 470mm — Construido para Versatilidad y Precisión. - Alimentado por Servos de Bus Sin Escobillas Duales — Suave, Silencioso y Fuerte con hasta 300g de Carga Útil. - Pinza Paralela con Apertura Máxima de 66mm — Puntas de Dedos Modulares para Flexibilidad de Reemplazo Rápido. -- Tecnología Exclusiva de Bloqueo Flotante — Congela Instantáneamente el Brazo Líder en Cualquier Posición con una Sola Presión. +- Tecnología Exclusiva Hover Lock — Congela Instantáneamente el Brazo Líder en Cualquier Posición con una Sola Presión. ## Especificaciones @@ -73,7 +73,7 @@ last_update: | Hub de Comunicación | UC-01 | UC-01 | UC-01 | | Fuente de Alimentación | 12V10A/120w XT30 | 12V10A/120w XT30 |12V25A/300w XT60 | -Para más información sobre motores servo, por favor visita el siguiente enlace. +Para más información sobre los motores servo, por favor visita el siguiente enlace. [RA8-U25H-M](https://fashionrobo.com/actuator-u25/23396/) @@ -100,7 +100,7 @@ Para más información sobre motores servo, por favor visita el siguiente enlace ### Instalar LeRobot -Entornos como pytorch y torchvision necesitan ser instalados basándose en tu CUDA. +Los entornos como pytorch y torchvision necesitan ser instalados basándose en tu CUDA. 1. Instalar Miniconda: Para Jetson: @@ -149,7 +149,7 @@ conda install ffmpeg -c conda-forge ``` :::tip -Esto usualmente instala ffmpeg 7.X para tu plataforma compilado con el codificador libsvtav1. Si libsvtav1 no es soportado (verifica codificadores soportados con ffmpeg -encoders), puedes: +Esto usualmente instala ffmpeg 7.X para tu plataforma compilado con el codificador libsvtav1. Si libsvtav1 no es soportado (verifica los codificadores soportados con ffmpeg -encoders), puedes: - [En cualquier plataforma] Instalar explícitamente ffmpeg 7.X usando: @@ -239,7 +239,7 @@ Recuerda remover el usb, de lo contrario la interfaz no será detectada. Por ejemplo: -1. Salida de ejemplo al identificar el puerto del brazo líder (ej., `/dev/tty.usbmodem575E0031751` en Mac, o posiblemente `/dev/ttyUSB0` en Linux): +1. Ejemplo de salida al identificar el puerto del brazo líder (por ejemplo, `/dev/tty.usbmodem575E0031751` en Mac, o posiblemente `/dev/ttyUSB0` en Linux): 2. Ejemplo de salida al identificar el puerto del brazo seguidor (por ejemplo, `/dev/tty.usbmodem575E0032081` en Mac, o posiblemente `/dev/ttyUSB1` en Linux): :::tip @@ -294,25 +294,24 @@ sudo chmod 666 /dev/ttyUSB* ## Calibrar -### Para Calibración Inicial +Para videos que cubren el Brazo Robótico StarAI desde el desempaquetado hasta la teleoperación, puedes consultar: +
+ +
-Por favor, rota cada articulación hacia la izquierda y derecha a las posiciones correspondientes. +Mueve el brazo robótico a la posición inicial del brazo robótico (como se muestra en la figura a continuación) y colócalo en modo de espera, luego reconecta la fuente de alimentación. Para la posición inicial de la nueva versión del brazo robótico, se debe prestar especial atención a asegurar que los servos de las Articulaciones 3, 4 y 5 se alineen estrictamente con las posiciones en la figura. -### Para Re-Calibración -Sigue la indicación en pantalla: ingresa la letra "c" y presiona la tecla Enter. +| **Brazo Líder Violin** | **Brazo Seguidor Viola** | +|:---------:|:---------:| +| ![fig1](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/violin_rest.jpg) | ![fig2](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/viola_rest.jpg) | -A continuación se muestran los valores de referencia. En circunstancias normales, los valores de referencia de límite reales deberían estar dentro del rango de **±10°** de estas referencias. +Posición inicial del brazo robótico de versión anterior (se debe prestar especial atención a asegurar que los servos de las Articulaciones 3, 4 y 5 se alineen estrictamente con las posiciones en la figura; la posición inicial del brazo robótico de nueva versión también puede usarse como referencia): +
+ +
-| ID del Servo | Límite de Ángulo Inferior (°) | Límite de Ángulo Superior (°) | Notas | -| ------------ | ------------------------------ | ------------------------------ | ---------------------------------------------- | -| motor\_0 | -180° | 180° | Rotar a la posición límite | -| motor\_1 | -90° | 90° | Rotar a la posición límite | -| motor\_2 | -90° | 90° | Rotar a la posición límite | -| motor\_3 | -180° | 180° | Sin límite; rotar a los límites de ángulo de referencia | -| motor\_4 | -90° | 90° | Rotar a la posición límite | -| motor\_5 | -180° | 180° | Sin límite; rotar a los límites de ángulo de referencia | -| motor\_6 | 0° | 100° | Rotar a la posición límite | :::tip Tomando PC (Linux) y placa Jetson como ejemplos, el `primer` dispositivo USB insertado se mapeará a `ttyUSB0`, y el `segundo` dispositivo USB insertado se mapeará a `ttyUSB1`. @@ -328,6 +327,8 @@ Conecta el líder a `/dev/ttyUSB0`, o modifica el parámetro `--teleop.port`, y lerobot-calibrate --teleop.type=starai_violin --teleop.port=/dev/ttyUSB0 --teleop.id=my_awesome_staraiviolin_arm ``` +Después del inicio, verás los valores del codificador de cada articulación. Necesitas calibrar manualmente cada articulación una por una: rota cada articulación a sus posiciones máxima y mínima. Para articulaciones sin topes límite, el rango de rotación no debe exceder 180° en sentido horario o 180° en sentido antihorario. Después de calibrar todas las articulaciones, presiona Enter para guardar la configuración. + #### Brazo Robótico Seguidor Conecta el seguidor a `/dev/ttyUSB1`, o modifica el parámetro `--teleop.port`, y luego ejecuta: @@ -336,7 +337,7 @@ Conecta el seguidor a `/dev/ttyUSB1`, o modifica el parámetro `--teleop.port`, lerobot-calibrate --robot.type=starai_viola --robot.port=/dev/ttyUSB1 --robot.id=my_awesome_staraiviola_arm ``` -Después de ejecutar el comando, necesitas **mover manualmente el brazo robótico** para permitir que cada articulación alcance su **posición límite**. La terminal mostrará los datos de rango registrados. Una vez completada esta operación, presiona Enter. +Después del inicio, verás los valores del codificador de cada articulación. Necesitas calibrar manualmente cada articulación una por una: rota cada articulación a sus posiciones máxima y mínima. Para articulaciones sin topes límite, el rango de rotación no debe exceder 180° en sentido horario o 180° en sentido antihorario. Después de calibrar todas las articulaciones, presiona Enter para guardar la configuración. :::tip Los archivos de calibración se guardarán en las siguientes rutas: `~/.cache/huggingface/lerobot/calibration/robots` y `~/.cache/huggingface/lerobot/calibration/teleoperators`. @@ -355,6 +356,8 @@ Conecta `left_arm_port` a `/dev/ttyUSB0` y `right_arm_port` a `/dev/ttyUSB2`, o lerobot-calibrate --teleop.type=bi_starai_leader --teleop.left_arm_port=/dev/ttyUSB0 --teleop.right_arm_port=/dev/ttyUSB2 --teleop.id=bi_starai_leader ``` +Después del inicio, verás los valores del codificador de cada articulación. Necesitas calibrar manualmente cada articulación una por una: rota cada articulación a sus posiciones máxima y mínima. Para articulaciones sin topes límite, el rango de rotación no debe exceder 180° en sentido horario o 180° en sentido antihorario. Después de calibrar todas las articulaciones, presiona Enter para guardar la configuración. + #### Brazo Robótico Seguidor Conecta `left_arm_port` a `/dev/ttyUSB1` y `right_arm_port` a `/dev/ttyUSB3`, o modifica los parámetros `--robot.left_arm_port` y `--robot.right_arm_port`, y luego ejecuta: @@ -363,11 +366,13 @@ Conecta `left_arm_port` a `/dev/ttyUSB1` y `right_arm_port` a `/dev/ttyUSB3`, o lerobot-calibrate --robot.type=bi_starai_follower --robot.left_arm_port=/dev/ttyUSB1 --robot.right_arm_port=/dev/ttyUSB3 --robot.id=bi_starai_follower ``` +Después del inicio, verás los valores del codificador de cada articulación. Necesitas calibrar manualmente cada articulación una por una: rota cada articulación a sus posiciones máxima y mínima. Para articulaciones sin topes límite, el rango de rotación no debe exceder 180° en sentido horario o 180° en sentido antihorario. Después de calibrar todas las articulaciones, presiona Enter para guardar la configuración. + :::tip -La diferencia entre configuraciones de brazo único y brazo dual radica en los parámetros `--teleop.type` y `--robot.type`. Además, las configuraciones de brazo dual requieren puertos USB separados para los brazos izquierdo y derecho, totalizando cuatro puertos USB: `--teleop.left_arm_port`, `--teleop.right_arm_port`, `--robot.left_arm_port`, y `--robot.right_arm_port`. +La diferencia entre configuraciones de brazo único y brazo dual radica en los parámetros `--teleop.type` y `--robot.type`. Además, las configuraciones de brazo dual requieren puertos USB separados para los brazos izquierdo y derecho, totalizando cuatro puertos USB: `--teleop.left_arm_port`, `--teleop.right_arm_port`, `--robot.left_arm_port` y `--robot.right_arm_port`. -Si usas una configuración de brazo dual, necesitas modificar manualmente los tipos de archivo del brazo robótico `--teleop.type` y `--robot.type`, así como los puertos USB `--teleop.left_arm_port`, `--teleop.right_arm_port`, `--robot.left_arm_port`, y `--robot.right_arm_port`, para adaptarse a los comandos de teleoperación, recolección de datos, entrenamiento y evaluación. +Si usas una configuración de brazo dual, necesitas modificar manualmente los tipos de archivo del brazo robótico `--teleop.type` y `--robot.type`, así como los puertos USB `--teleop.left_arm_port`, `--teleop.right_arm_port`, `--robot.left_arm_port` y `--robot.right_arm_port`, para adaptarse a los comandos de teleoperación, recolección de datos, entrenamiento y evaluación. ::: @@ -376,7 +381,7 @@ Si usas una configuración de brazo dual, necesitas modificar manualmente los ti ## Teleoperar
- +
Mueve el brazo a la posición mostrada en el diagrama y ponlo en espera. @@ -420,14 +425,126 @@ El comando de operación remota detectará automáticamente los siguientes pará 1. Identificar cualquier calibración faltante e iniciar el procedimiento de calibración. 2. Conectar el robot y el dispositivo de operación remota e iniciar la operación remota. -Después de que el programa inicie, la Tecnología de Bloqueo Flotante permanece funcional. +Después de que el programa inicie, la Tecnología Hover Lock permanece funcional. ## Agregar cámaras +
+ Si usas la Cámara de Profundidad Orbbec Gemini2 + +
+ +
+ + + +- 🚀 Paso 1: Instalar el Entorno Dependiente del SDK de Orbbec + +1. Clonar el repositorio `pyorbbec` + ```bash + cd ~/ + git clone https://github.com/orbbec/pyorbbecsdk.git + ``` + +2. Descargar e instalar el **archivo .whl** correspondiente para el SDK + Ve a [pyorbbecsdk Releases](https://github.com/orbbec/pyorbbecsdk/releases), + selecciona e instala basándote en tu versión de Python. Por ejemplo: + ```bash + pip install pyorbbecsdk-x.x.x-cp310-cp310-linux_x86_64.whl + ``` + +3. Instalar dependencias en el directorio `pyorbbec` + ```bash + cd ~/pyorbbecsdk + pip install -r requirements.txt + ``` + + Forzar la degradación de la versión de `numpy` a `1.26.0` + ```bash + pip install numpy==1.26.0 + ``` + Los mensajes de error rojos pueden ser ignorados. + +4. Clonar el SDK de Orbbec en el directorio `~/lerobot/src/cameras` + + ```bash + cd ~/lerobot/src/cameras + git clone https://github.com/ZhuYaoHui1998/orbbec.git + ``` + +5. Modificar utils.py y __init__.py +- Encuentra `utils.py` en el directorio `~/lerobot/src/lerobot/cameras`, y añade el siguiente código en la línea 40: + +```python +elif cfg.type == "orbbec": + from .realsense.camera_orbbec import OrbbecCamera + + cameras[key] = OrbbecCamera(cfg) +``` + +
+ +
+ +- Encuentra `__init__.py` en el directorio `~/lerobot/src/lerobot/cameras`, y añade el siguiente código en la línea 18: + +```python +from .orbbec.configuration_orbbec import OrbbecCameraConfig +``` + +
+ +
+ + +- 🚀 Paso 2: Llamada de Función y Ejemplos + +En todos los siguientes ejemplos, reemplaza `starai_viola` con el modelo real del brazo robótico que estés usando (por ejemplo, `so100` / `so101`). + + +Hemos añadido el hiperparámetro `focus_area`. Dado que los datos de profundidad que están demasiado lejos no tienen sentido para el brazo robótico (no puede alcanzar o agarrar objetos), los datos de profundidad menores o mayores que el `focus_area` se mostrarán en negro. El `focus_area` predeterminado es (20, 600). +Actualmente, la única resolución soportada es ancho: 640, alto: 880. + +```bash +lerobot-teleoperate \ + --robot.type=starai_viola \ + --robot.port=/dev/ttyUSB1 \ + --robot.id=my_awesome_staraiviola_arm \ + --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \ + --teleop.type=starai_violin \ + --teleop.port=/dev/ttyUSB0 \ + --teleop.id=my_awesome_staraiviolin_arm \ + --display_data=true +``` + + +
+ +
+ + +Para tareas posteriores como recolección de datos, entrenamiento y evaluación, el proceso es el mismo que para comandos RGB regulares. Solo necesitas reemplazar la parte relevante en el comando RGB regular con: + ``` + --robot.cameras="{ front: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:(20,600)}}" \ + ``` +También puedes añadir una cámara RGB monocular adicional después. + + +
+
+ + Después de insertar tus dos cámaras USB, ejecuta el siguiente script para verificar los números de puerto de las cámaras. Es importante recordar que la cámara no debe estar conectada a un Hub USB; en su lugar, debe estar conectada directamente al dispositivo. La velocidad más lenta de un Hub USB puede resultar en la incapacidad de leer datos de imagen. ```bash @@ -523,9 +640,9 @@ pip3 install rerun-sdk==0.23
-Una vez que te familiarices con la teleoperación, puedes grabar tu primer conjunto de datos. +Una vez que estés familiarizado con la teleoperación, puedes grabar tu primer conjunto de datos. -Si quieres usar las funciones del hub de Hugging Face para subir tu conjunto de datos y no lo has hecho anteriormente, asegúrate de haber iniciado sesión usando un token de acceso de escritura, que se puede generar desde la [configuración de Hugging Face](https://huggingface.co/settings/tokens): +Si quieres usar las funciones del hub de Hugging Face para subir tu conjunto de datos y no lo has hecho previamente, asegúrate de haber iniciado sesión usando un token de acceso de escritura, que se puede generar desde la [configuración de Hugging Face](https://huggingface.co/settings/tokens): ```bash huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential @@ -588,10 +705,10 @@ Para diferenciar entre configuraciones de brazo único y brazo dual, el `--datas :::tip -Si no quieres usar la función de subida de conjuntos de datos del Hub de Hugging Face, puedes elegir `--dataset.push_to_hub=false`. Además, reemplaza `--dataset.repo_id=${HF_USER}/starai` con un nombre de carpeta local personalizado, por ejemplo, `--dataset.repo_id=starai/record-test`. Los datos se almacenarán en `~/.cache/huggingface/lerobot` bajo el directorio home del sistema. +Si no quieres usar la función de subida de conjuntos de datos del Hub de Hugging Face, puedes elegir `--dataset.push_to_hub=false`. También, reemplaza `--dataset.repo_id=${HF_USER}/starai` con un nombre de carpeta local personalizado, por ejemplo, `--dataset.repo_id=starai/record-test`. Los datos se almacenarán en `~/.cache/huggingface/lerobot` bajo el directorio home del sistema. ::: -Sin subir al Hub: +No subir al Hub: **(Recomendado, los siguientes tutoriales se enfocarán en datos locales)** ```bash @@ -636,7 +753,7 @@ lerobot-record \ ``` :::tip -Para diferenciar entre configuraciones de brazo único y brazo dual, el `--dataset.repo_id` aquí se llama `starai/record-test_bi_arm`. +Para diferenciar entre configuraciones de un solo brazo y doble brazo, el `--dataset.repo_id` aquí se llama `starai/record-test_bi_arm`. ::: @@ -651,7 +768,7 @@ Para diferenciar entre configuraciones de brazo único y brazo dual, el `--datas - Los puntos de control se crean automáticamente durante la grabación. - Si ocurre un problema, puedes reanudar ejecutando el mismo comando con `--resume=true`. Al reanudar la grabación, debes establecer `--dataset.num_episodes` al **número adicional de episodios a grabar**, ¡no al número total objetivo de episodios en el conjunto de datos! -- Para comenzar a grabar desde cero, **elimina manualmente** el directorio del conjunto de datos. +- Para comenzar la grabación desde cero, **elimina manualmente** el directorio del conjunto de datos. #### 3. Parámetros de Grabación @@ -694,7 +811,7 @@ lerobot-replay \ ```
- Brazo Dual + Doble Brazo ```bash lerobot-replay \ @@ -725,7 +842,7 @@ lerobot-train \ ```
- Brazo Dual + Doble Brazo ```bash lerobot-train \ @@ -741,7 +858,7 @@ lerobot-train \
-1. `policy.type` soporta entrada `diffusion,pi0,pi0fast` +1. `policy.type` admite entrada `diffusion,pi0,pi0fast` 1. Proporcionamos el conjunto de datos como parámetro: `dataset.repo_id=starai/record-test`. 2. Cargaremos la configuración desde [`configuration_act.py`](https://github.com/huggingface/lerobot/blob/main/src/lerobot/policies/act/configuration_act.py). Importante, esta política se adaptará automáticamente a los estados del motor del robot, acciones del motor y el número de cámaras, y se guardará en tu conjunto de datos. 3. Proporcionamos `wandb.enable=true` para usar [Weights and Biases](https://docs.wandb.ai/quickstart) para visualizar gráficos de entrenamiento. Esto es opcional, pero si lo usas, asegúrate de haber iniciado sesión ejecutando `wandb login`. @@ -800,7 +917,7 @@ lerobot-record \
Si entrenas comando de [política Libero](https://huggingface.co/docs/lerobot/libero): -LIBERO es un benchmark diseñado para estudiar el aprendizaje robótico de por vida. La idea es que los robots no solo serán preentrenados una vez en una fábrica, sino que necesitarán seguir aprendiendo y adaptándose con sus usuarios humanos a lo largo del tiempo. Esta adaptación continua se llama 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 verdaderos asistentes personalizados. +LIBERO es un benchmark diseñado para estudiar el aprendizaje robótico de por vida. La idea es que los robots no solo serán preentrenados una vez en una fábrica, necesitarán seguir aprendiendo y adaptándose con sus usuarios humanos a lo largo del tiempo. Esta adaptación continua se llama aprendizaje de por vida en toma de decisiones (LLDM), y es un paso clave hacia la construcción de robots que se conviertan en verdaderos asistentes personalizados. - [Artículo de LIBERO](https://arxiv.org/abs/2306.03310) - [Repositorio original de LIBERO](https://github.com/Lifelong-Robot-Learning/LIBERO) @@ -817,7 +934,7 @@ LIBERO incluye cinco suites de tareas: - LIBERO-Long (libero_10) – 10 tareas de horizonte largo de la colección LIBERO-100. -En conjunto, estas suites cubren 130 tareas, que van desde manipulaciones simples de objetos hasta escenarios complejos de múltiples pasos. LIBERO está destinado a crecer con el tiempo y servir como un benchmark compartido donde la comunidad puede probar y mejorar algoritmos de aprendizaje de por vida. +En conjunto, estas suites cubren 130 tareas, que van desde manipulaciones simples de objetos hasta escenarios complejos de múltiples pasos. LIBERO está destinado a crecer con el tiempo, y a servir como un benchmark compartido donde la comunidad puede probar y mejorar algoritmos de aprendizaje de por vida. ## Entrenamiento con LIBERO @@ -872,7 +989,7 @@ lerobot-eval \
-## Evalúa tu política +## Evaluar tu política Ejecuta el siguiente comando para grabar 10 episodios de evaluación: @@ -893,7 +1010,7 @@ lerobot-record \ ```
- Brazo Dual + Doble Brazo ```bash lerobot-record \ @@ -910,7 +1027,7 @@ lerobot-record \
-Como puedes ver, esto es casi lo mismo que el comando usado previamente para grabar el conjunto de datos de entrenamiento, con algunos cambios: +Como puedes ver, esto es casi lo mismo que el comando utilizado previamente para grabar el conjunto de datos de entrenamiento, con algunos cambios: 1. El parámetro `--policy.path`, que indica la ruta a tu archivo de pesos de política entrenada (por ejemplo, `outputs/train/act_viola_test/checkpoints/last/pretrained_model`). Si has subido los pesos de tu modelo al Hub, también puedes usar el repositorio del modelo (por ejemplo, `${HF_USER}/starai`). @@ -918,7 +1035,7 @@ Como puedes ver, esto es casi lo mismo que el comando usado previamente para gra 3. Si encuentras `File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/starai/eval_xxxx'` durante la fase de evaluación, por favor elimina la carpeta que comience con `eval_` y ejecuta el programa nuevamente. -4. Cuando encuentres `mean is infinity. You should either initialize with stats as an argument or use a pretrained model`, por favor asegúrate de que las palabras clave como `up` y `front` en el parámetro `--robot.cameras` sean estrictamente consistentes con las usadas durante la fase de recolección de datos. +4. Cuando encuentres `mean is infinity. You should either initialize with stats as an argument or use a pretrained model`, por favor asegúrate de que las palabras clave como `up` y `front` en el parámetro `--robot.cameras` sean estrictamente consistentes con las utilizadas durante la fase de recolección de datos. ## FAQ @@ -940,9 +1057,9 @@ Como puedes ver, esto es casi lo mismo que el comando usado previamente para gra - Durante la recolección de datos, asegura la estabilidad de la posición y ángulo de la cámara, así como la iluminación ambiental, y minimiza el fondo inestable y los peatones capturados por la cámara. De lo contrario, cambios significativos en el entorno de despliegue pueden causar que el brazo robótico falle al agarrar objetos normalmente. -- El `num-episodes` en el comando de recolección de datos debe asegurar suficiente recolección de datos y no debe pausarse manualmente a la mitad. Esto es porque la media y varianza de los datos se calculan solo después de que se completa la recolección de datos, lo cual es necesario para el entrenamiento. +- El `num-episodes` en el comando de recolección de datos debe asegurar una recolección de datos suficiente y no debe pausarse manualmente a la mitad. Esto es porque la media y varianza de los datos se calculan solo después de que se completa la recolección de datos, lo cual es necesario para el entrenamiento. -- Si el programa indica que no puede leer los datos de imagen de la cámara USB, por favor 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 asegurar velocidades rápidas de transmisión de imágenes. +- Si el programa indica que no puede leer los datos de imagen de la cámara USB, por favor 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 asegurar velocidades de transmisión de imagen rápidas. ## Cita @@ -954,9 +1071,9 @@ STEP: [STEP](https://github.com/Welt-liu/star-arm-moveit2/tree/main/hardware) URDF: [URDF](https://github.com/Welt-liu/star-arm-moveit2/tree/main/src/cello_description) -Proyecto Huggingface: [Lerobot](https://github.com/huggingface/lerobot/tree/main) +Huggingface Project: [Lerobot](https://github.com/huggingface/lerobot/tree/main) -ACT o ALOHA: [Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware](https://tonyzhaozh.github.io/aloha/) +ACT or ALOHA: [Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware](https://tonyzhaozh.github.io/aloha/) VQ-BeT: [VQ-BeT: Behavior Generation with Latent Actions](https://sjlee.cc/vq-bet/) diff --git a/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_SO100Arm_New.md b/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_SO100Arm_New.md index 991c0baf7d1b0..ccfee3a9fee53 100644 --- a/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_SO100Arm_New.md +++ b/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_SO100Arm_New.md @@ -13,7 +13,7 @@ last_update: author: LiShanghang --- -# LeRobotを使用したSO-ARM100およびSO-ARM101ロボットアームの開始 +# LeRobotを使用したSO-ARM100およびSO-ARM101ロボットアームの入門 :::tip このチュートリアルのメンテナンスは最新バージョンの[lerobot](https://huggingface.co/docs/lerobot/index)に更新されています。以前のバージョンのチュートリアルを参照したい場合は、[こちら](https://wiki.seeedstudio.com/ja/lerobot_so100m/)をクリックしてください。 @@ -21,7 +21,7 @@ last_update: ## はじめに -[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は、実世界での応用に検証された最先端の方法論を統合し、模倣学習を中心としています。事前訓練されたモデルのスイート、人間が収集したデモンストレーションを特徴とするデータセット、シミュレーション環境を提供し、ユーザーがロボットの組み立ての必要なしに開始できるようにしています。今後数週間で、現在利用可能な最もコスト効率的で有能なロボットでの実世界のロボティクスのサポートを拡張する予定です。
@@ -47,8 +47,8 @@ SO-ARM10xとreComputer Jetson AIインテリジェントロボットキットは 1. **オープンソースで低コスト**:[TheRobotStudio](https://github.com/TheRobotStudio/SO-ARM100)からのオープンソース、低コストのロボットアームソリューションです 2. **LeRobotとの統合**:[LeRobotプラットフォーム](https://github.com/huggingface/lerobot)との統合のために設計されています 3. **豊富な学習リソース**:組み立てとキャリブレーションガイド、テスト、データ収集、トレーニング、デプロイメントのチュートリアルなど、包括的なオープンソース学習リソースを提供し、ユーザーが迅速に開始してロボットアプリケーションを開発できるよう支援します。 -4. **Nvidiaとの互換性**:このアームキットをreComputer Mini J4012 Orin NX 16 GBでデプロイします。 -5. **マルチシーンアプリケーション**:教育、科学研究、自動化生産、ロボティクスなどの分野に適用可能で、ユーザーがさまざまな複雑なタスクで効率的で精密なロボット操作を実現できるよう支援します。 +4. **Nvidiaとの互換性**:reComputer Mini J4012 Orin NX 16 GBでこのアームキットをデプロイします。 +5. **マルチシーン応用**:教育、科学研究、自動化生産、ロボティクスなどの分野に適用可能で、ユーザーが様々な複雑なタスクで効率的で精密なロボット操作を実現するのを支援します。 ## 新機能: @@ -77,21 +77,21 @@ Seeed Studioは、ハードウェア自体の品質についてのみ責任を
- - - - + + + + - - + + @@ -104,8 +104,8 @@ Seeed Studioは、ハードウェア自体の品質についてのみ責任を @@ -129,7 +129,7 @@ Seeed Studioは、ハードウェア自体の品質についてのみ責任を :::danger -アームキットバージョンを購入した場合、両方の電源は5Vです。アームキットProバージョンを購入した場合は、リーダーロボットアームのキャリブレーションとすべてのステップに5V電源を使用し、フォロワーロボットアームのキャリブレーションとすべてのステップに12V電源を使用してください。 +Arm Kitバージョンを購入した場合、両方の電源は5Vです。Arm Kit Proバージョンを購入した場合は、リーダーロボットアームのキャリブレーションとすべてのステップに5V電源を使用し、フォロワーロボットアームのキャリブレーションとすべてのステップに12V電源を使用してください。 ::: @@ -188,7 +188,7 @@ Seeed Studioは、ハードウェア自体の品質についてのみ責任を ## 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:プリンターを選択する @@ -211,7 +211,7 @@ SO101の公式アップデートに従い、SO100はもはやサポートされ ### ステップ3:パーツを印刷する -リーダーまたはフォロワーのすべてのパーツは、簡単な3Dプリンティング用に既に単一ファイルに含まれており、サポートを最小限に抑えるためにz軸上向きに正しく配向されています。 +リーダーまたはフォロワーのすべてのパーツは、簡単な3Dプリント用に既に単一ファイルに含まれており、サポートを最小限に抑えるためにz軸上向きに正しく配向されています。 - 220mmx220mmのプリンターベッドサイズ(Enderなど)の場合、これらのファイルを印刷してください: - [Follower](https://github.com/TheRobotStudio/SO-ARM100/blob/main/STL/SO101/Follower/Ender_Follower_SO101.stl) @@ -266,7 +266,7 @@ conda install ffmpeg -c conda-forge ``` :::tip -これは通常、libsvtav1エンコーダーでコンパイルされたプラットフォーム用のffmpeg 7.Xをインストールします。libsvtav1がサポートされていない場合(ffmpeg -encodersでサポートされているエンコーダーを確認)、以下のことができます: +これは通常、libsvtav1エンコーダーでコンパイルされたプラットフォーム用のffmpeg 7.Xをインストールします。libsvtav1がサポートされていない場合(ffmpeg -encodersでサポートされているエンコーダーを確認)、以下を実行できます: - [すべてのプラットフォーム] 以下を使用してffmpeg 7.Xを明示的にインストール: @@ -324,9 +324,9 @@ import TabItem from '@theme/TabItem'; -SO-ARM101のサーボ校正と初期化プロセスは、方法とコードの両方においてSO-ARM100と同じです。ただし、SO-ARM101リーダーアームの最初の3つの関節のギア比はSO-ARM100と異なるため、注意深く区別して校正することが重要です。 +SO-ARM101のサーボ校正と初期化プロセスは、方法とコードの両方においてSO-ARM100と同じです。ただし、SO-ARM101 Leader Armの最初の3つの関節のギア比はSO-ARM100のものと異なるため、注意深く区別して校正することが重要です。 -モーターを設定するには、リーダーアーム用に1つのバスサーボアダプターと6つのモーターを指定し、同様にフォロワーアーム用にもう1つのバスサーボアダプターと6つのモーターを指定します。それらにラベルを付け、各モーターがフォロワー用(F)かリーダー用(L)か、そして1から6までのIDを書いておくと便利です。**フォロワーアーム**の関節1から6を表すために**F1–F6**を使用し、**リーダーアーム**の関節1から6を表すために**L1–L6**を使用します。対応するサーボモデル、関節の割り当て、ギア比の詳細は以下の通りです: +モーターを設定するには、リーダーアーム用に1つのバスサーボアダプターと6つのモーターを指定し、同様にフォロワーアーム用に他のバスサーボアダプターと6つのモーターを指定します。それらにラベルを付け、各モーターがフォロワー用(F)かリーダー用(L)か、そして1から6までのIDを書くと便利です。**Follower Arm**の関節1から6を表すために**F1–F6**を使用し、**Leader Arm**の関節1から6を表すために**L1–L6**を使用します。対応するサーボモデル、関節の割り当て、ギア比の詳細は以下の通りです: | サーボモデル | ギア比 | 対応する関節 | |----------------------------------------|------------|------------------------------| @@ -337,7 +337,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の両方を接続する必要があることに注意してください。 :::
@@ -345,7 +345,7 @@ SO-ARM101のサーボ校正と初期化プロセスは、方法とコードの src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/all_motos.png" />
-***以下はコード校正ステップです。上記の画像の参照配線サーボで校正してください*** +***以下はコード校正手順です。上記の画像の参照配線サーボで校正してください*** アームに関連するUSBポートを見つける 各アームの正しいポートを見つけるために、ユーティリティスクリプトを2回実行します: @@ -385,18 +385,18 @@ sudo chmod 666 /dev/ttyACM1 **モーターを設定する** :::danger -リーダーモーター(ST-3215-C046、C044、001)の校正には5V電源を使用してください。 +Leaderモーター(ST-3215-C046、C044、001)の校正には5V電源を使用してください。 ::: -| **リーダーアーム関節6校正** | **リーダーアーム関節5校正** | **リーダーアーム関節4校正** | **リーダーアーム関節3校正** | **リーダーアーム関節2校正** | **リーダーアーム関節1校正** | +| **Leader Arm関節6校正** | **Leader Arm関節5校正** | **Leader Arm関節4校正** | **Leader Arm関節3校正** | **Leader Arm関節2校正** | **Leader Arm関節1校正** | |:---------:|:---------:|:---------:|:---------:|:---------:|:---------:| | ![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) | :::danger -アームキット版(ST-3215-C001)を購入した場合は、5V電源を使用してください。アームキットプロ版を購入した場合は、サーボ(ST-3215-C047/ST-3215-C018)の校正に12V電源を使用してください。 +Arm Kitバージョン(ST-3215-C001)を購入した場合は、5V電源を使用してください。Arm Kit Proバージョンを購入した場合は、サーボ(ST-3215-C047/ST-3215-C018)の校正に12V電源を使用してください。 ::: -| **フォロワーアーム関節6校正** | **フォロワーアーム関節5校正** | **フォロワーアーム関節4校正** | **フォロワーアーム関節3校正** | **フォロワーアーム関節2校正** | **フォロワーアーム関節1校正** | +| **Follower Arm関節6校正** | **Follower Arm関節5校正** | **Follower Arm関節4校正** | **Follower Arm関節3校正** | **Follower Arm関節2校正** | **Follower Arm関節1校正** | |:---------:|:---------:|:---------:|:---------:|:---------:|:---------:| | ![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) | @@ -442,7 +442,7 @@ Connect the controller board to the 'wrist_roll' motor only and press enter. Enterを押す前に、各ステップでケーブル接続を確認してください。例えば、ボードを操作している間に電源ケーブルが外れる可能性があります。 ::: -完了すると、スクリプトは単純に終了し、この時点でモーターは使用準備が整います。これで、各モーターから次のモーターへ3ピンケーブルを接続し、最初のモーター(ID=1の「ショルダーパン」)からコントローラーボードへのケーブルを接続できます。コントローラーボードはアームのベースに取り付けることができます。 +完了すると、スクリプトは単純に終了し、この時点でモーターは使用準備が整います。これで、各モーターから次のモーターへ3ピンケーブルを接続し、最初のモーター(ID=1の「shoulder pan」)からコントローラーボードへのケーブルを接続できます。コントローラーボードはアームのベースに取り付けることができます。 リーダーアームについても同じ手順を実行してください。 @@ -464,7 +464,7 @@ 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を区別してください。 ::: @@ -519,7 +519,7 @@ SO100とSO101のコードは互換性があります。SO100のユーザーは **SO101 Arm Kit Standard Edition**を購入した場合、すべての電源は5Vです。**SO101 Arm Kit Pro Edition**を購入した場合、リーダーアームは各ステップで5V電源を使用してキャリブレーションと操作を行い、フォロワーアームは各ステップで12V電源を使用してキャリブレーションと操作を行う必要があります。 ::: -次に、SO-10xロボットに電源とデータケーブルを接続してキャリブレーションを行い、リーダーアームとフォロワーアームが同じ物理的位置にあるときに同じ位置値を持つようにする必要があります。このキャリブレーションは、1つのSO-10xロボットで訓練されたニューラルネットワークが別のロボットで動作できるようにするために不可欠です。ロボットアームを再キャリブレーションする必要がある場合は、`~/.cache/huggingface/lerobot/calibration/robots`または`~/.cache/huggingface/lerobot/calibration/teleoperators`の下のファイルを削除してロボットアームを再キャリブレーションしてください。そうしないと、エラープロンプトが表示されます。ロボットアームのキャリブレーション情報は、このディレクトリの下のJSONファイルに保存されます。 +次に、SO-10xロボットに電源とデータケーブルを接続してキャリブレーションを行い、リーダーアームとフォロワーアームが同じ物理的位置にあるときに同じ位置値を持つようにする必要があります。このキャリブレーションは、1つのSO-10xロボットで訓練されたニューラルネットワークが別のロボットで動作できるようにするために不可欠です。ロボットアームを再キャリブレーションする必要がある場合は、`~/.cache/huggingface/lerobot/calibration/robots`または`~/.cache/huggingface/lerobot/calibration/teleoperators`の下のファイルを削除してから、ロボットアームを再キャリブレーションしてください。そうしないと、エラープロンプトが表示されます。ロボットアームのキャリブレーション情報は、このディレクトリの下のJSONファイルに保存されます。 **フォロワーアームの手動キャリブレーション** @@ -540,7 +540,7 @@ lerobot-calibrate \ --robot.id=my_awesome_follower_arm # <- Give the robot a unique name ``` -以下の動画はキャリブレーションの実行方法を示しています。まず、すべての関節が可動範囲の中央にある位置にロボットを移動する必要があります。その後、Enterキーを押してから、各関節を可動範囲全体で動かす必要があります。 +以下の動画はキャリブレーションの実行方法を示しています。まず、すべての関節が可動範囲の中央にある位置にロボットを移動させる必要があります。その後、Enterキーを押してから、各関節を可動範囲全体で動かす必要があります。 **リーダーアームの手動キャリブレーション** @@ -562,7 +562,7 @@ lerobot-calibrate \ **シンプルなテレオペレーション** これでロボットをテレオペレーションする準備が整いました!この簡単なスクリプトを実行してください(カメラには接続せず、表示もしません): -ロボットに関連付けられたIDは、キャリブレーションファイルの保存に使用されることに注意してください。同じセットアップを使用する際は、テレオペレーション、記録、評価時に同じIDを使用することが重要です。 +ロボットに関連付けられたIDは、キャリブレーションファイルを保存するために使用されることに注意してください。同じセットアップを使用してテレオペレーション、記録、評価を行う際は、同じIDを使用することが重要です。 ```bash sudo chmod 666 /dev/ttyACM* @@ -589,6 +589,122 @@ lerobot-teleoperate \ ## カメラの追加 + +
+ Orbbec Gemini2 Depth Cameraを使用する場合 + +
+ +
+ + + +- 🚀 ステップ1:Orbbec SDK依存環境のインストール + +1. `pyorbbec`リポジトリをクローンします + ```bash + cd ~/ + git clone https://github.com/orbbec/pyorbbecsdk.git + ``` + +2. 対応する**.whlファイル**をダウンロードしてSDKをインストールします + [pyorbbecsdk Releases](https://github.com/orbbec/pyorbbecsdk/releases)にアクセスし、 + Pythonバージョンに基づいて選択してインストールしてください。例: + ```bash + pip install pyorbbecsdk-x.x.x-cp310-cp310-linux_x86_64.whl + ``` + +3. `pyorbbec`ディレクトリで依存関係をインストールします + ```bash + cd ~/pyorbbecsdk + pip install -r requirements.txt + ``` + + `numpy`バージョンを`1.26.0`に強制ダウングレードします + ```bash + pip install numpy==1.26.0 + ``` + 赤いエラーメッセージは無視できます。 + +4. Orbbec SDKを`~/lerobot/src/cameras`ディレクトリにクローンします + + ```bash + cd ~/lerobot/src/cameras + git clone https://github.com/ZhuYaoHui1998/orbbec.git + ``` + +5. utils.pyと__init__.pyを修正します +- `~/lerobot/src/lerobot/cameras`ディレクトリの`utils.py`を見つけ、40行目に以下のコードを追加してください: + +```python +elif cfg.type == "orbbec": + from .realsense.camera_orbbec import OrbbecCamera + + cameras[key] = OrbbecCamera(cfg) +``` + +
+ +
+ +- `~/lerobot/src/lerobot/cameras`ディレクトリの`__init__.py`を見つけ、18行目に以下のコードを追加してください: + +```python +from .orbbec.configuration_orbbec import OrbbecCameraConfig +``` + +
+ +
+ + +- 🚀 ステップ2:関数呼び出しと例 + +以下のすべての例では、`so101_follower`を実際に使用しているロボットアームのモデル(例:`so100` / `so101`)に置き換えてください。 + + +`focus_area`ハイパーパラメータを追加しました。遠すぎる深度データはロボットアームにとって意味がない(到達や把握ができない物体)ため、`focus_area`未満または超過の深度データは黒で表示されます。デフォルトの`focus_area`は(20, 600)です。 +現在サポートされている解像度は幅:640、高さ:880のみです。 + +```bash +lerobot-teleoperate \ + --robot.type=so101_follower \ + --robot.port=/dev/ttyACM0 \ + --robot.id=my_awesome_follower_arm \ + --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \ + --teleop.type=so101_leader \ + --teleop.port=/dev/ttyACM1 \ + --teleop.id=my_awesome_leader_arm \ + --display_data=true +``` + + +
+ +
+ + + +データ収集、トレーニング、評価などの後続タスクについては、通常のRGBコマンドと同じプロセスです。通常のRGBコマンドの関連部分を以下に置き換えるだけです: + +```bash + --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \ +``` + +その後、追加の単眼RGBカメラを追加することもできます。 + + +
+ + + :::tip SO100とSO101のコードは互換性があります。SO100のユーザーは、SO101のパラメータとコードを直接利用して操作できます。 ::: @@ -619,10 +735,10 @@ Camera #0: (more cameras ...) ``` -各カメラで撮影された画像は`outputs/captured_images`ディレクトリで確認できます。 +各カメラで撮影された写真は`outputs/captured_images`ディレクトリで確認できます。 :::warning -macOSでIntel RealSenseカメラを使用する際、このエラーが発生する可能性があります:`Error finding RealSense cameras: failed to set power state`。これは同じコマンドを`sudo`権限で実行することで解決できます。なお、macOSでRealSenseカメラを使用することは不安定です。 +macOSでIntel RealSenseカメラを使用する場合、このエラーが発生する可能性があります:Error finding RealSense cameras: failed to set power state。これは同じコマンドをsudo権限で実行することで解決できます。macOSでRealSenseカメラを使用することは不安定であることに注意してください。 ::: その後、テレオペレーション中にコンピュータでカメラを表示できるようになります。以下のコードを実行してください。これは最初のデータセットを記録する前にセットアップを準備するのに役立ちます。 @@ -663,7 +779,7 @@ lerobot-teleoperate \ src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/rerun-version.png" /> -rerunのバージョンをダウングレードすることで問題を解決できます。 +rerunバージョンをダウングレードして問題を解決できます。 ```bash pip3 install rerun-sdk==0.23 @@ -697,22 +813,22 @@ lerobot-record \ --dataset.reset_time_s=30 ``` -その中で、`repo_id`は慣例的に変更でき、`push_to_hub=false`です。最終的に、データセットはホームフォルダの`~/.cache/huggingface/lerobot`ディレクトリに保存され、前述の`seeedstudio123/test`フォルダが作成されます。 +その中で、`repo_id`は慣習的に変更でき、`push_to_hub=false`です。最終的に、データセットはホームフォルダの`~/.cache/huggingface/lerobot`ディレクトリに保存され、前述の`seeedstudio123/test`フォルダが作成されます。 -- データセットをアップロードするためにHugging Face hubの機能を使用したい場合で、以前に実行したことがない場合は、[Hugging Face設定](https://huggingface.co/settings/tokens)から生成できる書き込みアクセストークンを使用してログインしていることを確認してください: +- データセットをアップロードするためにHugging Face hubの機能を使用したい場合で、以前に行ったことがない場合は、[Hugging Face設定](https://huggingface.co/settings/tokens)から生成できる書き込みアクセストークンを使用してログインしていることを確認してください: ```bash huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential ``` -これらのコマンドを実行するために、Hugging Faceリポジトリ名を変数に保存してください: +これらのコマンドを実行するために、Hugging Faceリポジトリ名を変数に保存します: ```bash HF_USER=$(huggingface-cli whoami | head -n 1) echo $HF_USER ``` -5つのエピソードを記録し、データセットをhubにアップロードしてください: +5つのエピソードを記録し、データセットをhubにアップロードします: ```bash lerobot-record \ @@ -745,13 +861,13 @@ INFO 2024-08-10 15:02:58 ol_robot.py:219 dt:33.34 (30.0hz) dtRlead: 5.06 (197.5h **1. データストレージ** - データは`LeRobotDataset`形式を使用して保存され、記録中にディスクに保存されます。 -- デフォルトでは、記録後にデータセットがHugging Faceページにプッシュされます。 -- アップロードを無効にするには、`--dataset.push_to_hub=False`を使用してください +- デフォルトでは、データセットは記録後にHugging Faceページにプッシュされます。 +- アップロードを無効にするには、`--dataset.push_to_hub=False`を使用します **2. チェックポイントと再開** -- 記録中にチェックポイントが自動的に作成されます。 -- 中断後に再開するには、`--resume=true`を付けて同じコマンドを再実行してください +- チェックポイントは記録中に自動的に作成されます。 +- 中断後に再開するには、同じコマンドを`--resume=true`で再実行します ⚠️ 重要な注意:再開時は、`--dataset.num_episodes`を記録する追加エピソード数に設定してください(データセット内の目標総エピソード数ではありません)。 @@ -767,7 +883,7 @@ INFO 2024-08-10 15:02:58 ol_robot.py:219 dt:33.34 (30.0hz) dtRlead: 5.06 (197.5h | --dataset.reset_time_s | 各エピソード後の環境リセット時間(秒) | 60 | | --dataset.num_episodes | 記録する総エピソード数 | 50 | -**4. 記録中のキーボード操作** +**4. 記録中のキーボード制御** キーボードショートカットを使用してデータ記録フローを制御します: @@ -775,30 +891,30 @@ INFO 2024-08-10 15:02:58 ol_robot.py:219 dt:33.34 (30.0hz) dtRlead: 5.06 (197.5h |-----|--------| | → (右矢印) | 現在のエピソード/リセットを早期停止し、次に移動。 | | ← (左矢印) | 現在のエピソードをキャンセルし、再記録。 | -| ESC | セッションを即座に停止し、動画をエンコードし、データセットをアップロード。 | +| ESC | セッションを即座に停止し、ビデオをエンコードし、データセットをアップロード。 | **データ収集のヒント** - タスクの提案:異なる場所でオブジェクトを掴み、ビンに配置する。 - スケール:≥50エピソードを記録(場所あたり10エピソード)。 - 一貫性: - - カメラを固定する。 + - カメラを固定に保つ。 - 同一の掴み動作を維持する。 - 操作されるオブジェクトがカメラフィードで見えることを確認する。 - 進行: - バリエーション(新しい場所、技術、カメラ調整)を追加する前に、信頼性のある掴みから始める。 - 失敗を防ぐため、急激な複雑さの増加を避ける。 -💡 経験則:カメラ画像だけを見てタスクを自分で実行できるようにする必要があります。 +💡 経験則:カメラ画像だけを見て、自分でタスクを実行できるようにする必要があります。 -この重要なトピックについてより深く学びたい場合は、良いデータセットとは何かについて書いた[ブログ記事](https://huggingface.co/blog/lerobot-datasets#what-makes-a-good-dataset)をご確認ください。 +この重要なトピックについてより深く掘り下げたい場合は、良いデータセットとは何かについて書いた[ブログ投稿](https://huggingface.co/blog/lerobot-datasets#what-makes-a-good-dataset)をチェックできます。 **トラブルシューティング** -Linux固有の問題: -記録中に右矢印/左矢印/ESCキーが反応しない場合: +Linux固有の問題: +記録中に右矢印/左矢印/ESCキーが応答しない場合: -- `$DISPLAY`環境変数が設定されていることを確認してください([pynputの制限事項](https://pynput.readthedocs.io/en/latest/limitations.html)を参照)。 +- `$DISPLAY`環境変数が設定されていることを確認してください([pynputの制限](https://pynput.readthedocs.io/en/latest/limitations.html)を参照)。
@@ -810,20 +926,20 @@ Linux固有の問題: SO100とSO101のコードは互換性があります。SO100のユーザーは、SO101のパラメータとコードを直接利用して操作できます。 ::: -`--control.push_to_hub=true`でデータセットをハブにアップロードした場合、以下のコマンドで取得したrepo idをコピー&ペーストして[データセットをオンラインで可視化](https://huggingface.co/spaces/lerobot/visualize_dataset)できます: +`--control.push_to_hub=true`でデータセットをhubにアップロードした場合、以下で与えられるrepo idをコピー&ペーストして[データセットをオンラインで可視化](https://huggingface.co/spaces/lerobot/visualize_dataset)できます: ```bash echo ${HF_USER}/so101_test ``` -`--dataset.push_to_hub=false`でアップロードしなかった場合は、以下のコマンドでローカルで可視化することもできます: +`--dataset.push_to_hub=false`でアップロードしなかった場合も、以下でローカルで可視化できます: ```bash lerobot-dataset-viz \ --repo-id ${HF_USER}/so101_test \ ``` -`--dataset.push_to_hub=false`でアップロードした場合は、以下のコマンドでローカルで可視化することもできます: +`--dataset.push_to_hub=false`でアップロードした場合も、以下でローカルで可視化できます: ```bash lerobot-dataset-viz \ @@ -843,9 +959,9 @@ lerobot-dataset-viz \ SO100とSO101のコードは互換性があります。SO100のユーザーは、SO101のパラメータとコードを直接利用して操作できます。 ::: -便利な機能として`replay`機能があります。これにより、記録したエピソードや他のデータセットのエピソードを再生できます。この機能は、ロボットの動作の再現性をテストし、同じモデルのロボット間での転移可能性を評価するのに役立ちます。 +便利な機能として`replay`機能があり、記録したエピソードや外部のデータセットからのエピソードを再生できます。この機能は、ロボットの動作の再現性をテストし、同じモデルのロボット間での転移可能性を評価するのに役立ちます。 -以下のコマンドまたはAPIの例を使用して、ロボットで最初のエピソードを再生できます: +以下のコマンドまたはAPI例を使用して、ロボットで最初のエピソードを再生できます: ```bash lerobot-replay \ @@ -856,7 +972,7 @@ lerobot-replay \ --dataset.episode=0 ``` -ロボットは記録した動作と同様の動きを再現するはずです。 +ロボットは記録した動作と似た動きを再現するはずです。 ## ポリシーの訓練 @@ -864,7 +980,7 @@ lerobot-replay \ SO100とSO101のコードは互換性があります。SO100のユーザーは、SO101のパラメータとコードを直接利用して操作できます。 ::: -ロボットを制御するポリシーを訓練するには、[lerobot-train](https://github.com/huggingface/lerobot/blob/main/src/lerobot/scripts/train.py)スクリプトを使用します。いくつかの引数が必要です。以下はコマンドの例です: +ロボットを制御するポリシーを訓練するには、[lerobot-train](https://github.com/huggingface/lerobot/blob/main/src/lerobot/scripts/train.py)スクリプトを使用します。いくつかの引数が必要です。以下はコマンド例です: ```bash lerobot-train \ @@ -894,8 +1010,8 @@ lerobot-train \ 説明しましょう: - **データセット指定**:パラメータ`--dataset.repo_id=${HF_USER}/so101_test`でデータセットを提供します。 -- **訓練ステップ**:`--steps=300000`を使用して訓練ステップ数を変更します。アルゴリズムのデフォルトは800000ステップで、タスクの難易度と訓練中の損失を観察して調整できます。 -- **ポリシータイプ**:`policy.type=act`でポリシーを提供します。同様に、[`act`, `diffusion`, `pi0`, `pi0fast`, `pi0fast`, `sac`, `smolvla`]などのポリシー間で切り替えることができ、これにより`configuration_act.py`から設定が読み込まれます。重要なことに、このポリシーは、この情報がすでにデータセットに保存されているため、ロボット(例:`laptop`と`phone`)のモーター状態、モーターアクション、カメラ数に自動的に適応します。 +- **訓練ステップ**:`--steps=300000`を使用して訓練ステップ数を変更します。アルゴリズムはデフォルトで800000ステップですが、タスクの難易度と訓練中の損失を観察して調整できます。 +- **ポリシータイプ**:`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`を実行してログインしていることを確認してください。 @@ -906,15 +1022,15 @@ lerobot-train \ src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/so101/stack_bug.png" />
-以下のコマンドを実行して解決してください: +以下のコマンドを実行して解決してみてください: ```bash pip install datasets==2.19 ``` -訓練には数時間かかります。チェックポイントは`outputs/train/act_so100_test/checkpoints`にあります。 +訓練には数時間かかります。`outputs/train/act_so100_test/checkpoints`にチェックポイントが見つかります。 -チェックポイントから訓練を再開するには、以下は`act_so101_test`ポリシーの`last`チェックポイントから再開するコマンドの例です: +チェックポイントから訓練を再開するには、以下は`act_so101_test`ポリシーの`last`チェックポイントから再開するコマンド例です: ```bash lerobot-train \ @@ -924,14 +1040,14 @@ lerobot-train \ **ポリシーチェックポイントのアップロード** -訓練が完了したら、以下のコマンドで最新のチェックポイントをアップロードします: +訓練が完了したら、最新のチェックポイントをアップロードします: ```bash huggingface-cli upload ${HF_USER}/act_so101_test \ outputs/train/act_so101_test/checkpoints/last/pretrained_model ``` -以下のコマンドで中間チェックポイントもアップロードできます: +中間チェックポイントもアップロードできます: ```bash CKPT=010000 @@ -944,9 +1060,9 @@ huggingface-cli upload ${HF_USER}/act_so101_test${CKPT} \
SmolVLA -[SmolVLA](https://huggingface.co/docs/lerobot/smolvla)は、ロボティクス向けのHugging Faceの軽量基盤モデルです。LeRobotデータセットでの簡単なファインチューニング用に設計されており、開発を加速するのに役立ちます! +[SmolVLA](https://huggingface.co/docs/lerobot/smolvla)は、ロボティクス用のHugging Faceの軽量基盤モデルです。LeRobotデータセットでの簡単なファインチューニング用に設計されており、開発を加速するのに役立ちます! -**環境のセットアップ** +**環境をセットアップする** 以下を実行してSmolVLAの依存関係をインストールします: @@ -954,13 +1070,13 @@ huggingface-cli upload ${HF_USER}/act_so101_test${CKPT} \ pip install -e ".[smolvla]" ``` -**データでSmolVLAをファインチューニング** +**あなたのデータでSmolVLAをファインチューニングする** -事前訓練済みの450Mモデルである[smolvla_base](https://hf.co/lerobot/smolvla_base)を使用し、データでファインチューニングします。20kステップでモデルを訓練するには、単一のA100 GPUで約4時間かかります。パフォーマンスとユースケースに基づいてステップ数を調整する必要があります。 +事前学習済みの450Mモデルである[smolvla_base](https://hf.co/lerobot/smolvla_base)を使用して、あなたのデータでファインチューニングします。20kステップでモデルを学習するには、単一のA100 GPUで約4時間かかります。パフォーマンスとユースケースに基づいてステップ数を調整する必要があります。 -GPUデバイスがない場合は、[Google Colab](https://colab.research.google.com/github/huggingface/notebooks/blob/main/lerobot/training-smolvla.ipynb)のノートブックを使用して訓練できます。 +GPUデバイスがない場合は、[Google Colab](https://colab.research.google.com/github/huggingface/notebooks/blob/main/lerobot/training-smolvla.ipynb)のノートブックを使用して学習できます。 -`--dataset.repo_id`を使用してデータセットを訓練スクリプトに渡します。インストールをテストしたい場合は、[SmolVLA論文](https://huggingface.co/papers/2506.01844)用に収集したデータセットの1つを使用する以下のコマンドを実行してください。 +`--dataset.repo_id`を使用してデータセットを学習スクリプトに渡します。インストールをテストしたい場合は、[SmolVLA Paper](https://huggingface.co/papers/2506.01844)のために収集したデータセットの1つを使用する以下のコマンドを実行してください。 ```bash lerobot-train \ @@ -975,7 +1091,7 @@ lerobot-train \ ``` :::tip -小さなバッチサイズから始めて、GPUが許可し、読み込み時間が短い限り、段階的に増やすことができます。 +小さなバッチサイズから始めて、GPUが許可し、読み込み時間が短いままである限り、段階的に増やすことができます。 ::: ファインチューニングは芸術です。ファインチューニングのオプションの完全な概要については、以下を実行してください: @@ -984,9 +1100,9 @@ lerobot-train \ lerobot-train --help ``` -**ファインチューニングされたモデルの評価とリアルタイム実行** +**ファインチューニングされたモデルを評価してリアルタイムで実行する** -エピソードを記録する場合と同様に、HuggingFace Hubにログインすることをお勧めします。対応する手順に従うことができます:[データセットの記録](https://huggingface.co/docs/lerobot/il_robots)。ログインしたら、以下を実行してセットアップで推論を実行できます: +エピソードを記録する場合と同様に、HuggingFace Hubにログインすることをお勧めします。対応する手順に従ってください:[データセットを記録する](https://huggingface.co/docs/lerobot/il_robots)。ログインしたら、以下を実行してセットアップで推論を実行できます: ```bash lerobot-record \ @@ -1005,29 +1121,29 @@ lerobot-record \ --policy.path=HF_USER/FINETUNE_MODEL_NAME # <- Use your fine-tuned model ``` -評価セットアップに応じて、評価スイート用に記録する期間とエピソード数を設定できます。 +評価セットアップに応じて、評価スイートで記録する期間とエピソード数を設定できます。
LIBERO -[LIBERO](https://huggingface.co/docs/lerobot/libero)は、生涯ロボット学習を研究するために設計されたベンチマークです。ロボットは工場で一度だけ事前訓練されるのではなく、時間をかけて人間のユーザーと共に学習し適応し続ける必要があるという考えです。この継続的な適応は意思決定における生涯学習(LLDM)と呼ばれ、真にパーソナライズされたヘルパーとなるロボットの構築に向けた重要なステップです。 +[LIBERO](https://huggingface.co/docs/lerobot/libero)は、生涯ロボット学習を研究するために設計されたベンチマークです。ロボットは工場で一度だけ事前学習されるのではなく、時間をかけて人間のユーザーと共に学習し適応し続ける必要があるという考えです。この継続的な適応は意思決定における生涯学習(LLDM)と呼ばれ、真にパーソナライズされたヘルパーとなるロボットを構築するための重要なステップです。 - 📄 [LIBERO論文](https://arxiv.org/abs/2306.03310) - 💻 [元のLIBEROリポジトリ](https://github.com/Lifelong-Robot-Learning/LIBERO) **LIBEROでの評価** -**LeRobot**では、LIBEROをフレームワークに移植し、主に軽量Vision-Language-Actionモデルである[SmolVLA](https://huggingface.co/docs/lerobot/en/smolvla)の**評価**に使用しました。 +**LeRobot**では、LIBEROを私たちのフレームワークに移植し、主に軽量なVision-Language-Actionモデルである[SmolVLA](https://huggingface.co/docs/lerobot/en/smolvla)の**評価**に使用しました。 -LIBEROは現在、**マルチ評価対応シミュレーション**の一部となっており、**単一のタスクスイート**または**複数のスイートを同時に**フラグ一つでポリシーをベンチマークできます。 +LIBEROは現在、**マルチ評価対応シミュレーション**の一部であり、**単一のタスクスイート**または**複数のスイートを同時に**フラグ1つでポリシーをベンチマークできます。 -LIBEROをインストールするには、LeRobot公式の手順に従った後、次のコマンドを実行してください:`pip install -e ".[libero]"` +LIBEROをインストールするには、LeRobotの公式手順に従った後、`pip install -e ".[libero]"`を実行してください。 ***単一スイート評価*** -1つのLIBEROスイートでポリシーを評価する: +1つのLIBEROスイートでポリシーを評価します: ```bash lerobot-eval \ @@ -1038,13 +1154,13 @@ lerobot-eval \ --eval.n_episodes=3 ``` -- `--env.task`でスイート(`libero_object`、`libero_spatial`など)を選択します。 -- `--eval.batch_size`で並列実行する環境数を制御します。 -- `--eval.n_episodes`で実行する総エピソード数を設定します。 +- `--env.task`はスイート(`libero_object`、`libero_spatial`など)を選択します。 +- `--eval.batch_size`は並列実行する環境数を制御します。 +- `--eval.n_episodes`は実行する総エピソード数を設定します。 ***マルチスイート評価*** -複数のスイートで一度にポリシーをベンチマークする: +複数のスイートで同時にポリシーをベンチマークします: ```bash lerobot-eval \ @@ -1057,7 +1173,7 @@ lerobot-eval \ - マルチスイート評価には`--env.task`にカンマ区切りのリストを渡します。 -**トレーニングコマンドの例** +**学習コマンドの例** ```bash lerobot-train \ @@ -1078,19 +1194,19 @@ lerobot-train \ **レンダリングに関する注意** -LeRobotはシミュレーションにMuJoCoを使用します。トレーニングや評価の前にレンダリングバックエンドを設定する必要があります: +LeRobotはシミュレーションにMuJoCoを使用します。学習または評価の前にレンダリングバックエンドを設定する必要があります: - `export MUJOCO_GL=egl` → ヘッドレスサーバー用(例:HPC、クラウド)
-## ポリシーの評価 +## ポリシーを評価する :::tip 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 \ @@ -1118,13 +1234,13 @@ 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_`で始まります。この操作により、評価中に動画とデータが個別に記録され、`eval_`で始まるフォルダ(例:`seeed/eval_test123`)に保存されます。 +2. データセット名`dataset.repo_id`は`eval_`で始まります。この操作により、評価中にビデオとデータが個別に記録され、`eval_`で始まるフォルダ(例:`seeed/eval_test123`)に保存されます。 -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などのキーワードが、データセット収集時に使用したものと厳密に一致している必要があることに注意してください。
@@ -1132,25 +1248,25 @@ lerobot-record \ ## FAQ -- このドキュメント/チュートリアルに従っている場合は、推奨されるGitHubリポジトリ`https://github.com/Seeed-Projects/lerobot.git`をgit cloneしてください。このドキュメントで推奨されるリポジトリは検証済みの安定版です。公式Lerobotリポジトリは最新版に継続的に更新されており、異なるデータセットバージョン、異なるコマンドなどの予期しない問題を引き起こす可能性があります。 +- このドキュメント/チュートリアルに従っている場合は、推奨されるGitHubリポジトリ`https://github.com/Seeed-Projects/lerobot.git`をgit cloneしてください。このドキュメントで推奨されるリポジトリは検証済みの安定版です。公式のLerobotリポジトリは最新版に継続的に更新されており、異なるデータセットバージョン、異なるコマンドなどの予期しない問題を引き起こす可能性があります。 -- サーボIDキャリブレーション時に以下のエラーが発生した場合: +- サーボIDの校正時に以下のエラーが発生した場合: ```bash `Motor ‘gripper’ was not found, Make sure it is connected` ``` - 通信ケーブルがサーボに正しく接続されているか、電源が正しい電圧を供給しているかを慎重に確認してください。 + 通信ケーブルがサーボに適切に接続されているか、電源が正しい電圧を供給しているかを注意深く確認してください。 -- 以下のエラーが発生した場合: +- 以下が発生した場合: ```bash Could not connect on port "/dev/ttyACM0" ``` - `ls /dev/ttyACM*`を実行してACM0が存在することが確認できる場合、シリアルポートの権限付与を忘れています。ターミナルで`sudo chmod 666 /dev/ttyACM*`を入力して修正してください。 + `ls /dev/ttyACM*`を実行してACM0が存在することを確認できる場合、シリアルポートの権限を付与するのを忘れています。ターミナルで`sudo chmod 666 /dev/ttyACM*`を入力して修正してください。 -- 以下のエラーが発生した場合: +- 以下が発生した場合: ```bash No valid stream found in input file. Is -1 of the desired media type? @@ -1163,7 +1279,7 @@ lerobot-record \ src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/lekiwi/No valid stream.png" />
-- 以下のエラーが発生した場合: +- 以下が発生した場合: ```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! @@ -1171,13 +1287,13 @@ lerobot-record \ 対応するポートのロボットアームが電源オンになっているか、バスサーボのデータケーブルが緩んでいるか切断されていないかを確認する必要があります。サーボのライトが点灯していない場合は、前のサーボのケーブルが緩んでいることを意味します。 -- ロボットアームのキャリブレーション時に以下のエラーが発生した場合: +- ロボットアームの校正時に以下のエラーが発生した場合: ```bash Magnitude 30841 exceeds 2047 (max for sign_bit_index=11) ``` - ロボットアームの電源を切って再起動し、再度キャリブレーションを試してください。この方法は、キャリブレーション中にMAX角度が数万の値に達した場合にも使用できます。これで解決しない場合は、中央値キャリブレーションやID書き込みを含む対応するサーボの再キャリブレーションが必要です。 + ロボットアームの電源を切って再起動し、再度キャリブレーションを試してください。この方法は、キャリブレーション中にMAX角度が数万の値に達した場合にも使用できます。これで解決しない場合は、中央値キャリブレーションやID書き込みを含む、対応するサーボの再キャリブレーションが必要です。 - 評価フェーズで以下のエラーが発生した場合: @@ -1185,7 +1301,7 @@ lerobot-record \ File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/seeed/eval_xxxx' ``` - まず`eval_`で始まるフォルダを削除してからプログラムを再実行してください。 + まず`eval_`で始まるフォルダを削除してから、プログラムを再実行してください。 - 評価フェーズで以下のエラーが発生した場合: @@ -1193,26 +1309,26 @@ lerobot-record \ `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ファイルにキャリブレーション情報が保存されているため、エラーメッセージが表示される可能性があります。 -- 50セットのデータでACTをトレーニングするには、RTX 3060(8GB)搭載のラップトップで約6時間、RTX 4090またはA100 GPUを搭載したコンピュータで約2-3時間かかります。 +- 50セットのデータでACTをトレーニングするには、RTX 3060(8GB)搭載のノートパソコンで約6時間、RTX 4090またはA100 GPU搭載のコンピュータで約2〜3時間かかります。 -- データ収集中は、カメラの位置、角度、周囲の照明を安定させてください。カメラに映る不安定な背景や歩行者の量を減らしてください。展開環境の変化が過度になると、ロボットアームが適切に把握できなくなる可能性があります。 +- データ収集中は、カメラの位置、角度、周囲の照明を安定させてください。カメラに映る不安定な背景や歩行者の量を減らしてください。デプロイメント環境の変化が激しすぎると、ロボットアームが適切に把持できなくなる可能性があります。 - データ収集コマンドでは、`num-episodes`パラメータが十分なデータを収集するように設定されていることを確認してください。途中で手動で一時停止しないでください。データの平均と分散はデータ収集完了後にのみ計算され、これらはトレーニングに必要です。 -- プログラムがUSBカメラから画像データを読み取れないと表示される場合は、USBカメラがハブ経由で接続されていないことを確認してください。USBカメラは高速な画像転送速度を確保するため、デバイスに直接接続する必要があります。 +- プログラムがUSBカメラから画像データを読み取れないと表示される場合は、USBカメラがハブを通して接続されていないことを確認してください。USBカメラは高速な画像転送速度を確保するため、デバイスに直接接続する必要があります。 -- `AttributeError: module 'rerun' has no attribute 'scalar'. Did you mean: 'scalars'?`のようなバグが見つかった場合は、rerunのバージョンをダウングレードして問題を解決できます。 +- `AttributeError: module 'rerun' has no attribute 'scalar'. Did you mean: 'scalars'?`のようなバグが見つかった場合は、rerunのバージョンをダウングレードすることで問題を解決できます。 ```bash pip3 install rerun-sdk==0.23 ``` :::tip -解決できないソフトウェアの問題や環境依存の問題が発生した場合は、このチュートリアルの最後にあるFAQセクションを確認することに加えて、[LeRobotプラットフォーム](https://github.com/huggingface/lerobot)または[LeRobot Discordチャンネル](https://discord.gg/8TnwDdjFGU)に速やかに問題を報告してください。 +ソフトウェアの問題や環境依存の問題で解決できない場合は、このチュートリアルの最後にあるFAQセクションを確認することに加えて、[LeRobotプラットフォーム](https://github.com/huggingface/lerobot)または[LeRobot Discordチャンネル](https://discord.gg/8TnwDdjFGU)に速やかに問題を報告してください。 ::: ## 引用 @@ -1237,7 +1353,7 @@ Dnsty: [Jetson Containers](https://github.com/dusty-nv/jetson-containers/tree/ma ## 技術サポート & 製品ディスカッション -弊社製品をお選びいただきありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。 +弊社製品をお選びいただき、ありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供いたします。さまざまな好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。
diff --git a/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_Starai_Arm.md b/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_Starai_Arm.md index 9ec8ded70d670..9a016d2a05036 100644 --- a/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_Starai_Arm.md +++ b/docs/ja/Robotics/Robot_Kits/Lerobot/ja_Lerobot_Starai_Arm.md @@ -1,5 +1,5 @@ --- -description: このwikiは、StarAI Robot ArmのデバッグチュートリアルとLerobotフレームワーク内でのデータ収集とトレーニングの実現を提供します。 +description: このwikiは、StarAI Robot ArmのデバッグチュートリアルとLerobotフレームワーク内でのデータ収集とトレーニングの実現方法を提供します。 title: LeRobotでのStarAI Arm keywords: - Lerobot @@ -35,7 +35,7 @@ last_update: 2. **LeRobotとの統合** [LeRobot Platform](https://github.com/huggingface/lerobot)との統合を目的として設計されており、実世界のロボットタスクにおける模倣学習のためのPyTorchモデル、データセット、ツール(データ収集、シミュレーション、トレーニング、デプロイメントを含む)を提供します。 3. **包括的な学習リソース** - 組み立てとキャリブレーションガイド、カスタム把持タスクの例など、包括的なオープンソース学習リソースを提供し、ユーザーが迅速に開始してロボットアプリケーションを開発できるよう支援します。 + 組み立てと校正ガイド、カスタム把持タスクの例など、包括的なオープンソース学習リソースを提供し、ユーザーが迅速に開始してロボットアプリケーションを開発できるよう支援します。 4. **Nvidiaとの互換性** reComputer Mini J4012 Orin NX 16GBプラットフォームでのデプロイメントをサポートします。 @@ -45,7 +45,7 @@ last_update: - 6+1自由度と470mmのリーチ — 汎用性と精度のために構築されています。 - デュアルブラシレスバスサーボ駆動 — 最大300gのペイロードでスムーズ、静音、強力。 - 66mm最大開口のパラレルグリッパー — クイック交換の柔軟性のためのモジュラーフィンガーチップ。 -- 独自のホバーロック技術 — ワンプレスでリーダーアームを任意の位置で瞬時に固定。 +- 独自のHover Lock技術 — ワンプレスでリーダーアームを任意の位置で瞬時に固定。 ## 仕様 @@ -184,7 +184,7 @@ 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がアンインストールされ、PytorchとTorchvisionのCPUバージョンがインストールされるため、Pythonで確認を行う必要があります。 ```python import torch @@ -195,9 +195,9 @@ print(torch.cuda.is_available()) 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をインストールしてください。 -### ロボットアームの開封 +### ロボットアームの開梱 -ロボットアームキットの内容 +ロボットアームキットに含まれるもの - リーダーアーム - フォロワーアーム @@ -239,7 +239,7 @@ usbを取り外すことを忘れないでください。そうしないとイ 例: -1. リーダーアームのポートを識別する際の出力例(例:Macでは`/dev/tty.usbmodem575E0031751`、Linuxでは`/dev/ttyUSB0`の可能性があります): +1. リーダーアームのポートを識別する際の出力例(例:Macでは `/dev/tty.usbmodem575E0031751`、Linuxでは `/dev/ttyUSB0` の可能性があります): 2. フォロワーアームのポートを識別する際の出力例(例:Macでは `/dev/tty.usbmodem575E0032081`、Linuxでは `/dev/ttyUSB1` の可能性があります): :::tip @@ -286,7 +286,7 @@ sudo chmod 777 /dev/ttyUSB* ::: -以下を実行してUSBポートへのアクセス権を付与する必要がある場合があります: +以下を実行してUSBポートへのアクセス権限を付与する必要がある場合があります: ```bash sudo chmod 666 /dev/ttyUSB* @@ -294,28 +294,27 @@ sudo chmod 666 /dev/ttyUSB* ## キャリブレーション -### 初期キャリブレーション +StarAIロボットアームの開封からテレオペレーションまでを扱った動画については、以下を参照してください: +
+ +
-各関節を左右に対応する位置まで回転させてください。 +ロボットアームを初期位置(下図のとおり)に移動してスタンバイモードにし、電源を再接続してください。新バージョンのロボットアームの初期位置では、ジョイント3、4、5のサーボが図の位置と厳密に一致するよう特に注意してください。 -### 再キャリブレーション -画面の指示に従って:文字「c」を入力してEnterキーを押してください。 +| **Violin Leader Arm** | **Viola Follower Arm** | +|:---------:|:---------:| +| ![fig1](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/violin_rest.jpg) | ![fig2](https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/viola_rest.jpg) | -以下は参考値です。通常の状況では、実際の制限参考値はこれらの参考値の**±10°**の範囲内に収まるはずです。 +旧バージョンのロボットアームの初期位置(ジョイント3、4、5のサーボが図の位置と厳密に一致するよう特に注意してください。新バージョンのロボットアームの初期位置も参考として使用できます): +
+ +
-| サーボID | 下限角度 (°) | 上限角度 (°) | 備考 | -| -------- | --------------------- | --------------------- | ---------------------------------------------- | -| motor\_0 | -180° | 180° | 制限位置まで回転 | -| motor\_1 | -90° | 90° | 制限位置まで回転 | -| motor\_2 | -90° | 90° | 制限位置まで回転 | -| motor\_3 | -180° | 180° | 制限なし;参考角度制限まで回転 | -| motor\_4 | -90° | 90° | 制限位置まで回転 | -| motor\_5 | -180° | 180° | 制限なし;参考角度制限まで回転 | -| motor\_6 | 0° | 100° | 制限位置まで回転 | :::tip -PC(Linux)とJetsonボードを例にとると、`最初に`挿入されたUSBデバイスは`ttyUSB0`にマップされ、`2番目に`挿入されたUSBデバイスは`ttyUSB1`にマップされます。 +PC(Linux)とJetsonボードを例にすると、`最初に`挿入されたUSBデバイスは`ttyUSB0`にマッピングされ、`2番目に`挿入されたUSBデバイスは`ttyUSB1`にマッピングされます。 コードを実行する前に、リーダーとフォロワーのマッピングインターフェースに注意してください。 ::: @@ -328,6 +327,8 @@ PC(Linux)とJetsonボードを例にとると、`最初に`挿入されたUS lerobot-calibrate --teleop.type=starai_violin --teleop.port=/dev/ttyUSB0 --teleop.id=my_awesome_staraiviolin_arm ``` +起動後、各ジョイントのエンコーダ値が表示されます。各ジョイントを手動で一つずつキャリブレーションする必要があります:各ジョイントを最大位置と最小位置まで回転させてください。リミットストップのないジョイントの場合、回転範囲は時計回りまたは反時計回りに180°を超えてはいけません。すべてのジョイントをキャリブレーションした後、Enterキーを押して設定を保存してください。 + #### フォロワーロボットアーム フォロワーを`/dev/ttyUSB1`に接続するか、`--teleop.port`パラメータを変更してから実行してください: @@ -336,7 +337,7 @@ lerobot-calibrate --teleop.type=starai_violin --teleop.port=/dev/ttyUSB0 --t lerobot-calibrate --robot.type=starai_viola --robot.port=/dev/ttyUSB1 --robot.id=my_awesome_staraiviola_arm ``` -コマンドを実行した後、各関節が**制限位置**に到達するように**手動でロボットアームを動かす**必要があります。ターミナルには記録された範囲データが表示されます。この操作が完了したら、Enterキーを押してください。 +起動後、各ジョイントのエンコーダ値が表示されます。各ジョイントを手動で一つずつキャリブレーションする必要があります:各ジョイントを最大位置と最小位置まで回転させてください。リミットストップのないジョイントの場合、回転範囲は時計回りまたは反時計回りに180°を超えてはいけません。すべてのジョイントをキャリブレーションした後、Enterキーを押して設定を保存してください。 :::tip キャリブレーションファイルは以下のパスに保存されます:`~/.cache/huggingface/lerobot/calibration/robots`と`~/.cache/huggingface/lerobot/calibration/teleoperators`。 @@ -355,6 +356,8 @@ lerobot-calibrate --robot.type=starai_viola --robot.port=/dev/ttyUSB1 --robo lerobot-calibrate --teleop.type=bi_starai_leader --teleop.left_arm_port=/dev/ttyUSB0 --teleop.right_arm_port=/dev/ttyUSB2 --teleop.id=bi_starai_leader ``` +起動後、各ジョイントのエンコーダ値が表示されます。各ジョイントを手動で一つずつキャリブレーションする必要があります:各ジョイントを最大位置と最小位置まで回転させてください。リミットストップのないジョイントの場合、回転範囲は時計回りまたは反時計回りに180°を超えてはいけません。すべてのジョイントをキャリブレーションした後、Enterキーを押して設定を保存してください。 + #### フォロワーロボットアーム `left_arm_port`を`/dev/ttyUSB1`に、`right_arm_port`を`/dev/ttyUSB3`に接続するか、`--robot.left_arm_port`と`--robot.right_arm_port`パラメータを変更してから実行してください: @@ -363,11 +366,13 @@ lerobot-calibrate --teleop.type=bi_starai_leader --teleop.left_arm_port=/de lerobot-calibrate --robot.type=bi_starai_follower --robot.left_arm_port=/dev/ttyUSB1 --robot.right_arm_port=/dev/ttyUSB3 --robot.id=bi_starai_follower ``` +起動後、各ジョイントのエンコーダ値が表示されます。各ジョイントを手動で一つずつキャリブレーションする必要があります:各ジョイントを最大位置と最小位置まで回転させてください。リミットストップのないジョイントの場合、回転範囲は時計回りまたは反時計回りに180°を超えてはいけません。すべてのジョイントをキャリブレーションした後、Enterキーを押して設定を保存してください。 + :::tip シングルアームとデュアルアーム設定の違いは、`--teleop.type`と`--robot.type`パラメータにあります。さらに、デュアルアーム設定では左右のアーム用に別々のUSBポートが必要で、合計4つのUSBポートが必要です:`--teleop.left_arm_port`、`--teleop.right_arm_port`、`--robot.left_arm_port`、`--robot.right_arm_port`。 -デュアルアーム設定を使用する場合、テレオペレーション、データ収集、トレーニング、評価コマンドに適応するために、ロボットアームファイルタイプ`--teleop.type`と`--robot.type`、およびUSBポート`--teleop.left_arm_port`、`--teleop.right_arm_port`、`--robot.left_arm_port`、`--robot.right_arm_port`を手動で変更する必要があります。 +デュアルアーム設定を使用する場合、テレオペレーション、データ収集、トレーニング、評価コマンドに適応するため、ロボットアームファイルタイプ`--teleop.type`と`--robot.type`、およびUSBポート`--teleop.left_arm_port`、`--teleop.right_arm_port`、`--robot.left_arm_port`、`--robot.right_arm_port`を手動で変更する必要があります。 ::: @@ -376,10 +381,10 @@ lerobot-calibrate --robot.type=bi_starai_follower --robot.left_arm_port=/de ## テレオペレーション
- +
-アームを図に示された位置に移動し、スタンバイ状態に設定してください。 +アームを図に示された位置に移動し、スタンバイに設定してください。
+ Orbbec Gemini2 Depth Cameraを使用する場合 + +
+ +
+ + + +- 🚀 ステップ1:Orbbec SDK依存環境のインストール + +1. `pyorbbec`リポジトリをクローンします + ```bash + cd ~/ + git clone https://github.com/orbbec/pyorbbecsdk.git + ``` + +2. SDK用の対応する**.whlファイル**をダウンロードしてインストールします + [pyorbbecsdk Releases](https://github.com/orbbec/pyorbbecsdk/releases)にアクセスし、 + Pythonバージョンに基づいて選択してインストールしてください。例: + ```bash + pip install pyorbbecsdk-x.x.x-cp310-cp310-linux_x86_64.whl + ``` + +3. `pyorbbec`ディレクトリで依存関係をインストールします + ```bash + cd ~/pyorbbecsdk + pip install -r requirements.txt + ``` + + `numpy`バージョンを`1.26.0`に強制ダウングレードします + ```bash + pip install numpy==1.26.0 + ``` + 赤いエラーメッセージは無視できます。 + +4. Orbbec SDKを`~/lerobot/src/cameras`ディレクトリにクローンします + + ```bash + cd ~/lerobot/src/cameras + git clone https://github.com/ZhuYaoHui1998/orbbec.git + ``` + +5. utils.pyと__init__.pyを変更します +- `~/lerobot/src/lerobot/cameras` ディレクトリの `utils.py` を見つけて、40行目に以下のコードを追加します: + +```python +elif cfg.type == "orbbec": + from .realsense.camera_orbbec import OrbbecCamera + + cameras[key] = OrbbecCamera(cfg) +``` + +
+ +
+ +- `~/lerobot/src/lerobot/cameras` ディレクトリの `__init__.py` を見つけて、18行目に以下のコードを追加します: + +```python +from .orbbec.configuration_orbbec import OrbbecCameraConfig +``` + +
+ +
+ + +- 🚀 ステップ 2:関数呼び出しと例 + +以下のすべての例では、`starai_viola` を実際に使用しているロボットアームのモデル(例:`so100` / `so101`)に置き換えてください。 + + +`focus_area` ハイパーパラメータを追加しました。遠すぎる深度データはロボットアームにとって意味がない(到達や把握ができない物体)ため、`focus_area` より小さいまたは大きい深度データは黒で表示されます。デフォルトの `focus_area` は (20, 600) です。 +現在サポートされている解像度は幅:640、高さ:880のみです。 + +```bash +lerobot-teleoperate \ + --robot.type=starai_viola \ + --robot.port=/dev/ttyUSB1 \ + --robot.id=my_awesome_staraiviola_arm \ + --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \ + --teleop.type=starai_violin \ + --teleop.port=/dev/ttyUSB0 \ + --teleop.id=my_awesome_staraiviolin_arm \ + --display_data=true +``` + + +
+ +
+ + +データ収集、トレーニング、評価などの後続タスクについては、通常のRGBコマンドと同じプロセスです。通常のRGBコマンドの関連部分を以下に置き換えるだけです: + ``` + --robot.cameras="{ front: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:(20,600)}}" \ + ``` +その後、追加の単眼RGBカメラを追加することもできます。 + + + +
-2つのUSBカメラを挿入した後、以下のスクリプトを実行してカメラのポート番号を確認してください。カメラはUSBハブに接続してはならず、デバイスに直接接続する必要があることを覚えておくことが重要です。USBハブの低速度により、画像データを読み取れない場合があります。 + + +2つのUSBカメラを挿入した後、以下のスクリプトを実行してカメラのポート番号を確認します。カメラはUSBハブに接続せず、デバイスに直接接続する必要があることが重要です。USBハブの低速度により、画像データの読み取りができない場合があります。 ```bash lerobot-find-cameras opencv # or realsense for Intel Realsense cameras ``` -ターミナルには以下の情報が出力されます。例えば、ラップトップカメラは`index 2`、USBカメラは`index 4`です。 +ターミナルに以下の情報が出力されます。例えば、ラップトップのカメラは `index 2`、USBカメラは `index 4` です。 ```markdown --- Detected Cameras --- @@ -465,7 +582,7 @@ Finalizing image saving... Image capture finished. Images saved to outputs/captured_images ``` -`outputs/images_from_opencv_cameras`ディレクトリで各カメラが撮影した画像を確認し、異なる位置のカメラに対応するポートインデックス情報を検証できます。 +各カメラで撮影された画像は `outputs/images_from_opencv_cameras` ディレクトリで確認でき、異なる位置のカメラに対応するポートインデックス情報を検証できます。 外部カメラを確認した後、以下のカメラ情報を実際のカメラ情報に置き換えると、リモート操作中にコンピュータでカメラを表示できるようになります: @@ -509,7 +626,7 @@ lerobot-teleoperate \ src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/starai/rerun-version.png" />
-この問題を解決するために、rerunのバージョンをダウングレードできます。 +rerunのバージョンをダウングレードして問題を解決できます。 ```bash pip3 install rerun-sdk==0.23 @@ -525,7 +642,7 @@ pip3 install rerun-sdk==0.23 テレオペレーションに慣れたら、最初のデータセットを記録できます。 -データセットをアップロードするためにHugging Face hubの機能を使用したい場合で、以前に行ったことがない場合は、[Hugging Face設定](https://huggingface.co/settings/tokens)から生成できる書き込みアクセストークンを使用してログインしていることを確認してください: +データセットのアップロードにHugging Face hubの機能を使用したい場合で、以前に行ったことがない場合は、[Hugging Face設定](https://huggingface.co/settings/tokens)から生成できる書き込みアクセストークンを使用してログインしていることを確認してください: ```bash huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential @@ -538,7 +655,7 @@ HF_USER=$(huggingface-cli whoami | head -n 1) echo $HF_USER ``` -10エピソードを記録し、データセットをhubにアップロードします: +10エピソードを記録し、データセットをハブにアップロードします: ```bash lerobot-record \ @@ -582,13 +699,13 @@ lerobot-record \ ``` :::tip -シングルアームとデュアルアームのセットアップを区別するために、ここでの`--dataset.repo_id`は`starai/record-test_bi_arm`と名付けられています。 +シングルアームとデュアルアームのセットアップを区別するため、ここでの `--dataset.repo_id` は `starai/record-test_bi_arm` と名付けられています。 ::: :::tip -Hugging Face Hubデータセットアップロード機能を使用したくない場合は、`--dataset.push_to_hub=false`を選択できます。また、`--dataset.repo_id=${HF_USER}/starai`をカスタムローカルフォルダ名(例:`--dataset.repo_id=starai/record-test`)に置き換えてください。データはシステムのホームディレクトリの`~/.cache/huggingface/lerobot`に保存されます。 +Hugging Face Hubデータセットアップロード機能を使用したくない場合は、`--dataset.push_to_hub=false` を選択できます。また、`--dataset.repo_id=${HF_USER}/starai` をカスタムローカルフォルダ名(例:`--dataset.repo_id=starai/record-test`)に置き換えてください。データはシステムのホームディレクトリの `~/.cache/huggingface/lerobot` に保存されます。 ::: Hubにアップロードしない場合: @@ -636,21 +753,21 @@ lerobot-record \ ``` :::tip -シングルアームとデュアルアームのセットアップを区別するために、ここでの`--dataset.repo_id`は`starai/record-test_bi_arm`と名付けられています。 +シングルアームとデュアルアームのセットアップを区別するため、ここでの `--dataset.repo_id` は `starai/record-test_bi_arm` という名前になっています。 ::: -- `record`は、ロボット操作中のデータキャプチャと管理のためのツールセットを提供します: +- `record` は、ロボット操作中にデータをキャプチャして管理するためのツールセットを提供します: #### 1. データストレージ -- データは`LeRobotDataset`形式で保存され、記録プロセス中にディスクに保存されます。 +- データは `LeRobotDataset` 形式で保存され、記録プロセス中にディスクに保存されます。 #### 2. チェックポイントと再開 - チェックポイントは記録中に自動的に作成されます。 -- 問題が発生した場合、`--resume=true`で同じコマンドを再実行することで再開できます。記録を再開する際は、`--dataset.num_episodes`をデータセット内の目標総エピソード数ではなく、**記録する追加エピソード数**に設定する必要があります! +- 問題が発生した場合、`--resume=true` を指定して同じコマンドを再実行することで再開できます。記録を再開する際は、`--dataset.num_episodes` をデータセット内の**目標総エピソード数ではなく、追加で記録するエピソード数**に設定する必要があります! - 最初から記録を開始するには、データセットディレクトリを**手動で削除**してください。 #### 3. 記録パラメータ @@ -670,14 +787,14 @@ Parameter Description キーボードショートカットを使用してデータ記録ワークフローを制御します: -- **右矢印キー(→)**を押す:現在のエピソードを早期停止するか時間をリセットし、次のエピソードに移動します。 +- **右矢印キー(→)**を押す:現在のエピソードを早期停止するか時間をリセットして、次のエピソードに移動します。 - **左矢印キー(←)**を押す:現在のエピソードをキャンセルして再記録します。 - **ESC**を押す:セッションを即座に停止し、ビデオをエンコードしてデータセットをアップロードします。 :::tip Linuxでは、データ記録中に左右の矢印キーとエスケープキーが効かない場合、$DISPLAY環境変数が設定されていることを確認してください。pynputの制限を参照してください。 -データ記録に慣れたら、トレーニング用により大きなデータセットを作成できます。良い開始タスクは、異なる位置でオブジェクトを掴み、小さな箱に置くことです。少なくとも50エピソード、場所ごとに10エピソードを記録することをお勧めします。カメラを固定し、記録全体を通して一貫した掴み動作を維持してください。また、操作しているオブジェクトがカメラに映っていることを確認してください。良い経験則は、カメラ画像だけを見てタスクを完了できることです。 +データ記録に慣れたら、トレーニング用により大きなデータセットを作成できます。良い開始タスクは、異なる位置にあるオブジェクトを掴んで小さな箱に置くことです。少なくとも50エピソード、位置ごとに10エピソードを記録することをお勧めします。カメラを固定し、記録全体を通して一貫した掴み動作を維持してください。また、操作しているオブジェクトがカメラに映っていることを確認してください。良い経験則は、カメラ画像だけを見てタスクを完了できることです。 ::: ## エピソードの再生 @@ -694,7 +811,7 @@ lerobot-replay \ ```
- デュアルアーム + Dual-Arm ```bash lerobot-replay \ @@ -710,7 +827,7 @@ lerobot-replay \ ## ポリシーのトレーニング -ロボットを制御するポリシーをトレーニングするためのコマンド例です: +ロボットを制御するポリシーをトレーニングするためのコマンド例は以下の通りです: ```bash lerobot-train \ @@ -725,7 +842,7 @@ lerobot-train \ ```
- デュアルアーム + Dual-Arm ```bash lerobot-train \ @@ -741,10 +858,10 @@ lerobot-train \
-1. `policy.type`は`diffusion,pi0,pi0fast`の入力をサポートします +1. `policy.type` は `diffusion,pi0,pi0fast` の入力をサポートします 1. データセットをパラメータとして提供します:`dataset.repo_id=starai/record-test`。 -2. [`configuration_act.py`](https://github.com/huggingface/lerobot/blob/main/src/lerobot/policies/act/configuration_act.py)から設定を読み込みます。重要なことに、このポリシーはロボットのモーター状態、モーターアクション、カメラ数に自動的に適応し、データセットに保存されます。 -3. トレーニングチャートを可視化するために[Weights and Biases](https://docs.wandb.ai/quickstart)を使用する`wandb.enable=true`を提供します。これはオプションですが、使用する場合は`wandb login`を実行してログインしていることを確認してください。 +2. [`configuration_act.py`](https://github.com/huggingface/lerobot/blob/main/src/lerobot/policies/act/configuration_act.py) から設定を読み込みます。重要なことに、このポリシーはロボットのモーター状態、モーターアクション、カメラ数に自動的に適応し、データセットに保存されます。 +3. トレーニングチャートを可視化するために [Weights and Biases](https://docs.wandb.ai/quickstart) を使用する `wandb.enable=true` を提供します。これはオプションですが、使用する場合は `wandb login` を実行してログインしていることを確認してください。 特定のチェックポイントからトレーニングを再開します。 @@ -756,7 +873,7 @@ lerobot-train \ ```
-[SmolVLA policy](https://huggingface.co/docs/lerobot/smolvla)をトレーニングする場合のコマンド: +[SmolVLA policy](https://huggingface.co/docs/lerobot/smolvla) をトレーニングする場合のコマンド: ```bash pip install -e ".[smolvla]" @@ -798,9 +915,9 @@ lerobot-record \
-[Libero policy](https://huggingface.co/docs/lerobot/libero)をトレーニングする場合のコマンド: +[Libero policy](https://huggingface.co/docs/lerobot/libero) をトレーニングする場合のコマンド: -LIBEROは生涯ロボット学習を研究するために設計されたベンチマークです。ロボットは工場で一度だけ事前訓練されるのではなく、時間をかけて人間のユーザーと共に学習し適応し続ける必要があるという考えです。この継続的な適応は意思決定における生涯学習(LLDM)と呼ばれ、真にパーソナライズされたヘルパーとなるロボットを構築するための重要なステップです。 +LIBEROは生涯ロボット学習を研究するために設計されたベンチマークです。ロボットは工場で一度だけ事前トレーニングされるのではなく、時間をかけて人間のユーザーと共に学習し適応し続ける必要があるという考えです。この継続的な適応は意思決定における生涯学習(LLDM)と呼ばれ、真にパーソナライズされたヘルパーとなるロボットを構築するための重要なステップです。 - [LIBERO論文](https://arxiv.org/abs/2306.03310) - [オリジナルLIBEROリポジトリ](https://github.com/Lifelong-Robot-Learning/LIBERO) @@ -817,7 +934,7 @@ LIBEROには5つのタスクスイートが含まれています: - LIBERO-Long (libero_10) – LIBERO-100コレクションからの10の長期間タスク。 -これらのスイートは合わせて130のタスクをカバーし、シンプルなオブジェクト操作から複雑な多段階シナリオまで幅広く含んでいます。LIBEROは時間とともに成長し、コミュニティが生涯学習アルゴリズムをテストし改善できる共有ベンチマークとして機能することを意図しています。 +これらのスイートは合わせて130のタスクをカバーし、シンプルなオブジェクト操作から複雑な多段階シナリオまでを含んでいます。LIBEROは時間とともに成長し、コミュニティが生涯学習アルゴリズムをテストし改善できる共有ベンチマークとして機能することを意図しています。 ## LIBEROでのトレーニング @@ -836,11 +953,11 @@ lerobot-train \ --eval_freq=1000 \ ``` -## LIBEROでの評価 +## LIBEROでの評価 -LIBEROをインストールするには、LeRobotの公式手順に従った後、単に次を実行してください:`pip install -e ".[libero]"` +LIBEROをインストールするには、LeRobotの公式手順に従った後、`pip install -e ".[libero]"` を実行するだけです。 -### 単一スイート評価: +### 単一スイート評価 ```bash lerobot-eval \ @@ -851,11 +968,11 @@ lerobot-eval \ --eval.n_episodes=3 ``` -- `--env.task`はスイート(libero_object、libero_spatialなど)を選択します。 +- `--env.task` はスイート(libero_object、libero_spatial など)を選択します。 -- `--eval.batch_size`は並列実行する環境の数を制御します。 +- `--eval.batch_size` は並列実行する環境数を制御します。 -- `--eval.n_episodes`は実行するエピソードの総数を設定します。 +- `--eval.n_episodes` は実行する総エピソード数を設定します。 ### マルチスイート評価 @@ -868,13 +985,13 @@ lerobot-eval \ --eval.n_episodes=2 ``` -- マルチスイート評価には`--env.task`にカンマ区切りのリストを渡します。 +- マルチスイート評価には `--env.task` にカンマ区切りのリストを渡します。
## ポリシーの評価 -10回の評価エピソードを記録するには、以下のコマンドを実行してください: +以下のコマンドを実行して10の評価エピソードを記録します: ```bash lerobot-record \ @@ -893,7 +1010,7 @@ lerobot-record \ ```
- デュアルアーム + Dual-Arm ```bash lerobot-record \ @@ -914,11 +1031,11 @@ lerobot-record \ 1. `--policy.path`パラメータは、トレーニング済みポリシー重みファイルへのパスを示します(例:`outputs/train/act_viola_test/checkpoints/last/pretrained_model`)。モデル重みをHubにアップロードしている場合は、モデルリポジトリも使用できます(例:`${HF_USER}/starai`)。 -2. 評価データセット`dataset.repo_id`の名前は`eval_`で始まります。この操作により、評価フェーズ専用のビデオとデータが記録され、`starai/eval_record-test`などの`eval_`で始まるフォルダに保存されます。 +2. 評価データセット`dataset.repo_id`の名前は`eval_`で始まります。この操作により、評価フェーズ専用のビデオとデータが記録され、`starai/eval_record-test`のような`eval_`で始まるフォルダに保存されます。 -3. 評価フェーズで`File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/starai/eval_xxxx'`が発生した場合は、`eval_`で始まるフォルダを削除してプログラムを再実行してください。 +3. 評価フェーズで`File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/starai/eval_xxxx'`に遭遇した場合は、`eval_`で始まるフォルダを削除してプログラムを再実行してください。 -4. `mean is infinity. You should either initialize with stats as an argument or use a pretrained model`が発生した場合は、`--robot.cameras`パラメータの`up`や`front`などのキーワードがデータ収集フェーズで使用されたものと厳密に一致していることを確認してください。 +4. `mean is infinity. You should either initialize with stats as an argument or use a pretrained model`に遭遇した場合は、`--robot.cameras`パラメータの`up`や`front`などのキーワードがデータ収集フェーズで使用されたものと厳密に一致していることを確認してください。 ## FAQ @@ -932,17 +1049,17 @@ lerobot-record \ conda install libtiff==4.5.0 # for Ubuntu 22.04, use libtiff==4.5.1 ``` -- LeRobotをインストールした後、GPU版のPyTorchが自動的にアンインストールされる場合があるため、torch-gpuを手動でインストールする必要があります。 +- LeRobotをインストールした後、PyTorchのGPUバージョンが自動的にアンインストールされる場合があるため、torch-gpuを手動でインストールする必要があります。 -- Jetsonの場合は、`conda install -y -c conda-forge ffmpeg`を実行する前に、まず[PyTorchとTorchvision](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)をインストールしてください。そうしないと、torchvisionをコンパイルする際にバージョンの不一致問題が発生します。 +- Jetsonの場合は、`conda install -y -c conda-forge ffmpeg`を実行する前に、まず[PyTorchとTorchvision](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)をインストールしてください。そうしないと、torchvisionをコンパイルする際にバージョンの不一致の問題が発生します。 -- 3060 8GBラップトップでACTデータの50エピソードをトレーニングするには約6時間かかり、4090またはA100コンピュータでは約2-3時間かかります。 +- 3060 8GBラップトップでACTデータの50エピソードをトレーニングするには約6時間かかり、4090またはA100コンピュータで50エピソードをトレーニングするには約2-3時間かかります。 -- データ収集中は、カメラの位置と角度の安定性、環境照明を確保し、カメラに映る不安定な背景や歩行者を最小限に抑えてください。そうしないと、デプロイメント環境の大幅な変化により、ロボットアームが正常にオブジェクトを把握できなくなる可能性があります。 +- データ収集中は、カメラの位置と角度の安定性、環境照明を確保し、カメラに映る不安定な背景や歩行者を最小限に抑えてください。そうしないと、展開環境の大幅な変化により、ロボットアームが正常にオブジェクトを把握できなくなる可能性があります。 - データ収集コマンドの`num-episodes`は十分なデータ収集を確保し、途中で手動で一時停止してはいけません。これは、データの平均と分散がデータ収集完了後にのみ計算され、これがトレーニングに必要だからです。 -- プログラムがUSBカメラの画像データを読み取れないと表示する場合は、USBカメラがHubを通じて接続されていないことを確認してください。USBカメラは高速画像転送レートを確保するために、デバイスに直接接続する必要があります。 +- プログラムがUSBカメラの画像データを読み取れないというプロンプトが表示される場合は、USBカメラがHub経由で接続されていないことを確認してください。USBカメラは高速な画像転送レートを確保するために、デバイスに直接接続する必要があります。 ## 引用 @@ -966,7 +1083,7 @@ TD-MPC: [TD-MPC](https://www.nicklashansen.com/td-mpc/) ## 技術サポート & 製品ディスカッション -弊社製品をお選びいただき、ありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、複数のコミュニケーションチャネルを提供しています。 +弊社製品をお選びいただき、ありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供いたします。さまざまな好みやニーズに対応するため、複数のコミュニケーションチャネルを提供しています。
Seeed Studio XIAO nRF54L15 SenseSeeed Studio XIAO 扩展底板Seeed Studio Expansion Board Base for XIAO
Kit de BrazoKit de Brazo ProKit de BrazoKit de Brazo ProArm KitArm Kit ProArm KitArm Kit Pro
Brazo Líder12x motores ST-3215-C001 (7.4V) con relación de engranajes 1:345 para todas las articulaciones12x motores ST-3215- C001 (7.4V) con relación de engranajes 1:345 para todas las articulaciones 12x motores ST-3215-C018/ST-3215-C047 (12V) con relación de engranajes 1:345 para todas las articulaciones - 1x motor ST-3215-C001 (7.4V) con relación de engranajes 1:345 solo para la articulación 2
+ 1x motor ST-3215- C001 (7.4V) con relación de engranajes 1:345 solo para la articulación 2
2x motores ST-3215-C044 (7.4V) con relación de engranajes 1:191 para las articulaciones 1 y 3
3x motores ST-3215-C046 (7.4V) con relación de engranajes 1:147 para las articulaciones 4, 5 y pinza (articulación 6)
アームキットアームキットProアームキットアームキットProArm KitArm Kit ProArm KitArm Kit Pro
リーダーアーム全ジョイント用の1:345ギア比を持つ12x ST-3215-C001(7.4V)モーター全ジョイント用の1:345ギア比を持つ12x ST-3215-C018/ST-3215-C047(12V)モーター全ジョイント用の1:345ギア比を持つ12x ST-3215- C001 (7.4V) モーター全ジョイント用の1:345ギア比を持つ12x ST-3215-C018/ST-3215-C047 (12V) モーター - ジョイント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)モーター + ジョイント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) モーター
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(フォロワーアーム)
- 5.5 mm × 2.1 mm DC 5 V 4 A(リーダーアーム) + 5.5 mm × 2.1 mm DC 12 V 2 A (フォロワーアーム)
+ 5.5 mm × 2.1 mm DC 5 V 4 A (リーダーアーム)