Configuración del software
Instalación del SDK, configuración del controlador SocketCAN, integración de ROS2, configuración de LeRobot y referencia de la API de Python. Todo desde una instalación limpia de Ubuntu hasta un brazo en funcionamiento.
Ir a una sección:
Instalación del SDK
El SDK de OpenArm se distribuye como el roboticscenter paquete de Python. Incluye openarm_can (la biblioteca de interfaz CAN de bajo nivel) y todas las utilidades de soporte.
Crea un entorno virtual (recomendado)
python3 -m venv ~/.venvs/openarm
source ~/.venvs/openarm/bin/activate
Instala el SDK
pip install roboticscenter
Verifica la instalación
python3 -c "import openarm_can; print(openarm_can.__version__)"
Deberías ver una cadena de versión. Si ves un error de importación, consulta la sección de Solución de problemas.
Instalar desde el código fuente (opcional)
git clone https://github.com/reazon-research/openarm.git
cd openarm
pip install -e .
Configuración del controlador SocketCAN
OpenArm se comunica a través del bus CAN utilizando SocketCAN, un subsistema del núcleo de Linux. Los controladores ya están en el núcleo; solo necesitas cargar los módulos y activar la interfaz.
Cargar módulos del núcleo
sudo modprobe can
sudo modprobe can_raw
sudo modprobe slcan # for USB-serial CAN adapters (CANable)
Activa la interfaz CAN
Para el adaptador USB CANable 2.0 incluido:
# Find the USB serial device (usually /dev/ttyACM0 or /dev/ttyUSB0)
ls /dev/ttyACM*
# Bring up CAN interface at 1 Mbps
sudo slcand -o -c -s8 /dev/ttyACM0 can0
sudo ip link set up can0
Verificar que la interfaz esté activa
ip link show can0
# Expected output: can0: <NOARP,UP,LOWER_UP> mtu 16 ...
Hazlo persistente entre reinicios
Crear un servicio systemd o agregar a /etc/rc.localVer el Guía de configuración de SocketCAN para una plantilla de servicio systemd completa.
Probar la comunicación CAN
# Install can-utils
sudo apt install can-utils -y
# Listen for CAN packets
candump can0
# In another terminal, power on the arm and look for motor heartbeats
Integración de ROS2
OpenArm se envía con openarm_ros2, un paquete completo basado en ros2_control. Soporta el modo de hardware falso para pruebas sin el brazo físico.
Instalada ROS2 Humble (Ubuntu 22.04)
sudo apt update && sudo apt install software-properties-common curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | \
sudo apt-key add -
sudo sh -c 'echo "deb http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" \
> /etc/apt/sources.list.d/ros2.list'
sudo apt update
sudo apt install ros-humble-desktop ros-humble-ros2-control \
ros-humble-ros2-controllers ros-humble-joint-state-publisher-gui -y
Clona y construye openarm_ros2
mkdir -p ~/openarm_ws/src && cd ~/openarm_ws/src
git clone https://github.com/reazon-research/openarm_ros2.git
cd ~/openarm_ws
source /opt/ros/humble/setup.bash
colcon build --symlink-install
Lanzar en modo de hardware falso (no se requiere brazo)
source ~/openarm_ws/install/setup.bash
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=true
Lanzar con hardware real
ros2 launch openarm_ros2 openarm.launch.py \
use_fake_hardware:=false \
can_interface:=can0
Envía un comando de movimiento de prueba
ros2 topic pub /joint_trajectory_controller/joint_trajectory \
trajectory_msgs/msg/JointTrajectory \
'{joint_names: ["joint1"], points: [{positions: [0.5], time_from_start: {sec: 2}}]}'
Ver el Guía de Control ROS2 para la configuración completa del controlador, opciones de archivo de lanzamiento y ajuste de trayectoria.
Integración de LeRobot
LeRobot (de HuggingFace) es el marco principal de recopilación de datos y entrenamiento de políticas para OpenArm. Maneja la grabación de episodios, el formato de conjuntos de datos y se conecta directamente con ACT y Diffusion Policy.
Instalar LeRobot
pip install lerobot
Configura tu robot
Crea un archivo de configuración del robot para OpenArm. LeRobot utiliza una configuración de robot basada en YAML:
# ~/.lerobot/robots/openarm.yaml
robot_type: openarm
can_interface: can0
num_joints: 8
camera_names:
- wrist_cam
- overhead_cam
Grabar un conjunto de datos
python -m lerobot.scripts.control_robot \
--robot.type=openarm \
--control.type=record \
--control.fps=30 \
--control.repo_id=your-username/openarm-pick-place \
--control.num_episodes=50 \
--control.single_task="Pick up the red cube"
Subir al HuggingFace Hub
huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
--repo_id=your-username/openarm-pick-place
Ver el Página de recolección de datos para el flujo de trabajo completo de grabación de episodios y controles de calidad.
Guía rápida de la API de Python
La openarm_can la biblioteca proporciona acceso directo de bajo nivel a las 8 articulaciones a través de SocketCAN. No se requiere ROS2 para el control básico.
Control básico de articulaciones
from openarm_can import OpenArm
# Connect to the arm
arm = OpenArm(can_interface="can0")
arm.connect()
# Enable all joints
arm.enable_all()
# Move joint 1 to 45 degrees (in radians: ~0.785)
arm.set_position(joint_id=1, position=0.785, kp=50, kd=1)
# Read current state
state = arm.get_state()
print(f"Joint positions: {state.positions}")
print(f"Joint velocities: {state.velocities}")
print(f"Joint torques: {state.torques}")
# Zero torque (safe shutdown)
arm.disable_all()
arm.disconnect()
Modo de control MIT
from openarm_can import OpenArm, MITCommand
arm = OpenArm(can_interface="can0")
arm.connect()
arm.enable_all()
# Send a MIT control command: position + velocity + torque feedforward
cmd = MITCommand(
joint_id=1,
position=0.5, # rad
velocity=0.0, # rad/s
kp=80.0, # position gain
kd=2.0, # velocity gain
torque_ff=0.0 # feedforward torque (Nm)
)
arm.send_mit_command(cmd)
arm.disable_all()
arm.disconnect()
Leyendo datos del sensor en un bucle
import time
from openarm_can import OpenArm
arm = OpenArm(can_interface="can0", control_rate_hz=500)
arm.connect()
arm.enable_all()
for _ in range(1000): # 2 seconds at 500 Hz
state = arm.get_state()
print(state.positions)
time.sleep(1 / 500)
arm.disable_all()
arm.disconnect()
Soporte de Simulación
OpenArm soporta tres entornos de simulación. Todos comparten definiciones de estado y espacios de acción idénticos con el hardware real, lo que permite la transferencia de simulación a real.
Hardware Falso de ROS2 (integrado — sin instalación)
La forma más rápida de probar software sin el brazo físico. El estado refleja la interfaz del hardware real.
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=true
MuJoCo
Modelo físico calibrado. Ideal para el entrenamiento de políticas y la transferencia de simulación a real.
pip install mujoco
# Clone the OpenArm MuJoCo model
git clone https://github.com/reazon-research/openarm_mujoco.git
# Run the default sim
python openarm_mujoco/examples/run_sim.py
NVIDIA Isaac Sim
Simulación acelerada por GPU para la generación de datos sintéticos a gran escala. Requiere GPU NVIDIA y licencia de Isaac Sim. Ver el artículo de la plataforma centrada en datos para detalles de configuración de Isaac Sim.
Alineación de Sim-a-Real — Los modelos de simulación de OpenArm reflejan la cinemática, dinámica y límites de actuación del hardware real. Esto significa que puedes entrenar una política en simulación y desplegarla directamente en hardware real con un ajuste mínimo.
3 problemas comunes principales
no such device can0
La interfaz de SocketCAN no está activa. Esto casi siempre se debe a que el adaptador USB CAN no está conectado, o los módulos del kernel no están cargados.
Solución:
# 1. Check if the USB adapter is detected
lsusb | grep -i "can\|serial"
# 2. Load the modules
sudo modprobe can && sudo modprobe can_raw && sudo modprobe slcan
# 3. Bring up the interface
sudo slcand -o -c -s8 /dev/ttyACM0 can0
sudo ip link set up can0
# 4. Verify
ip link show can0
arm.enable_all()
Los motores no están recibiendo comandos. Comúnmente causado por IDs CAN incorrectos, un marco de error de bus CAN, o suministro de energía insuficiente.
Solución:
# 1. Check for CAN error frames
candump can0 | grep -i "error"
# 2. Check power supply — arm requires 24V @ 150W minimum
# Voltage sag under load causes motor timeouts
# 3. Verify motor CAN IDs match your config
python3 -c "from openarm_can import OpenArm; a=OpenArm('can0'); a.scan_motors()"
# 4. Reset the arm (power cycle) and retry
controller_manager not found
Los paquetes de ros2_control no están instalados o el espacio de trabajo no está configurado correctamente.
Solución:
# 1. Install missing packages
sudo apt install ros-humble-ros2-control \
ros-humble-ros2-controllers \
ros-humble-joint-state-publisher-gui -y
# 2. Rebuild the workspace
cd ~/openarm_ws && colcon build --symlink-install
# 3. Source both ROS2 and your workspace (order matters)
source /opt/ros/humble/setup.bash
source ~/openarm_ws/install/setup.bash
# 4. Retry launch
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=true
¿Aún atascado? Pregunta en el Foro OpenArm o revisa los existentes problemas de GitHub.