SO-ARM101 es una plataforma de brazo robótico de código abierto de alto rendimiento pensada para la educación, la investigación y los aficionados. Totalmente compatible con el ecosistema LeRobot de Hugging Face, admite todo el flujo de trabajo del aprendizaje de manipulación robótica (recopilación de datos, entrenamiento de modelos e inferencia de IA) y es la opción ideal para aprender robótica y desarrollar aplicaciones de robots con IA.
📋 Características principales
- Diseño de 6 grados de libertad con control de movimiento flexible
- Hardware y software totalmente de código abierto, libremente personalizables y ampliables
- Compatibilidad perfecta con el framework LeRobot; admite varios algoritmos de aprendizaje robótico (ACT, Diffusion, Pi0, SmolVLA, etc.)
- Tutoriales y ejemplos completos incluidos, puesta en marcha rápida incluso sin experiencia
- Admite todo el proceso: teleoperación maestro-esclavo, retroalimentación visual con varias cámaras, grabación de conjuntos de datos y entrenamiento de modelos
🔧 Especificaciones de hardware
| Parámetro | Detalle |
|---|---|
| Grados de libertad | 6 ejes + pinza |
| Carga útil | 500 g |
| Precisión de repetibilidad | ±0,1 mm |
| Radio de trabajo | 520 mm |
| Tipo de servo | Servos de bus serie |
| Requisitos de alimentación | Brazo maestro: 5 V 6 A, brazo esclavo: 12 V 5 A |
| Interfaz de comunicación | USB-C |
🚀 Inicio rápido
1. Preparación del entorno
SO-ARM101 admite dos plataformas: Ubuntu x86 y Jetson Orin:
Requisitos del entorno Ubuntu x86:
- Ubuntu 22.04
- CUDA 12+
- Python 3.10
- Torch 2.6+
Requisitos del entorno Jetson Orin:
- JetPack 6.0+
- Python 3.10
- Torch 2.5.0a0+
2. Instalación de dependencias
# Install Miniconda (Ubuntu x86 version)
mkdir -p ~/miniconda3
cd miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm ~/miniconda3/miniconda.sh
source ~/miniconda3/bin/activate
conda init --all
# Create and activate environment
conda create -y -n lerobot python=3.10
conda activate lerobot
# Clone code repository
git clone https://github.com/Juxi-Technology/lerobot.git
# Install dependencies
conda install ffmpeg -c conda-forge
cd ~/lerobot && pip install -e ".[feetech]"
3. Control del brazo robótico
Búsqueda del puerto
# Find USB port corresponding to the robotic arm
lerobot-find-port
Según las indicaciones, conecta y desconecta el cable USB del brazo para obtener el número de puerto correspondiente (normalmente /dev/ttyACM0 y /dev/ttyACM1)
Autorización del puerto
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1
Calibración del brazo
# Calibrate slave arm
lerobot-calibrate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm
# Calibrate master arm
lerobot-calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm
Según las indicaciones, mueve el brazo a la posición neutra y luego completa la calibración del recorrido de cada articulación.
🎮 Ejemplos de funciones principales
1. Teleoperación maestro-esclavo
# Basic teleoperation (without camera)
lerobot-teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm
# Teleoperation with camera display
lerobot-teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: \"MJPG\"}}" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm \
--display_data=true
2. Grabación del conjunto de datos
# Record dataset locally
lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: \"MJPG\"}, side: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: \"MJPG\"}}" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm \
--display_data=true \
--dataset.repo_id=juxi/so101_test \
--dataset.num_episodes=5 \
--dataset.single_task="Put the blue cube on the black box" \
--dataset.push_to_hub=false \
--dataset.episode_time_s=30 \
--dataset.reset_time_s=30
Los datos grabados se guardan en el directorio ~/.cache/huggingface/lerobot.
3. Entrenamiento del modelo (algoritmo ACT)
# Train with local dataset
lerobot-train \
--dataset.repo_id=juxi/so101_test \
--policy.type=act \
--output_dir=outputs/train/act_so101_test \
--job_name=act_so101_test \
--policy.device=cuda \
--wandb.enable=false \
--policy.push_to_hub=false \
--steps=300000
Los pesos del modelo entrenado se guardan en el directorio outputs/train/act_so101_test/checkpoints.
4. Ejecución de inferencia de IA
# Control robotic arm with trained model
lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: \"MJPG\"}, side: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30,fourcc: \"MJPG\"}}" \
--robot.id=my_awesome_follower_arm \
--display_data=false \
--dataset.repo_id=juxi/eval_test \
--dataset.single_task="Put the blue cube on the black box" \
--policy.path=outputs/train/act_so101_test/checkpoints/last/pretrained_model
📚 Recursos relacionados
- JuxiTechnology GitHub - Obtén el código de código abierto y los materiales de hardware más recientes
- Lark Wiki - Consulta la documentación oficial completa y los tutoriales
🛠️ Preguntas frecuentes
- P: ¿La ejecución indica que la GPU no está disponible?
- R: Asegúrate de instalar la versión de PyTorch que coincida con tu versión de CUDA; en plataformas Jetson hay que instalar la versión de PyTorch específica para Jetson.
- P: ¿El teclado no responde durante la teleoperación?
- R: Prueba a degradar la versión de pynput a 1.6.8:
pip install pynput==1.6.8 - P: ¿Qué hago si la calibración falla?
- R: Comprueba que los permisos del puerto serie sean correctos, elimina los archivos de calibración antiguos del directorio ~/.cache/huggingface/lerobot/calibration y vuelve a intentarlo.
El brazo SO-ARM101 ofrece un soporte de ecosistema completo para el aprendizaje y el desarrollo robótico. Tanto en educación, investigación como para aficionados, cualquiera puede desarrollar rápidamente sus propias aplicaciones robóticas.

