Saltar al contenido principal

Etapa 8 · Capítulo 36 · Práctica

36. Ejecución del reBot Arm en MuJoCo

Capítulo 36 del Curso de iniciación a la IA Física de Seeed — ejecución del reBot Arm en MuJoCo: instalación del entorno de desarrollo de MuJoCo, lectura de la estructura del modelo MJCF, importación del modelo del reBot Arm a través de los paquetes de ROS2, lanzamiento de la simulación completa y accionamiento de las articulaciones desde la interfaz gráfica de deslizadores de ROS2.

El capítulo 35 cubrió la teoría de simulación; este capítulo es práctico. El objetivo es sencillo: hacer que el reBot Arm se ejecute en MuJoCo, verlo moverse y comprender la relación entre el modelo, las articulaciones y las órdenes de control.

Objetivo didáctico: permitir que los usuarios completen la primera ejecución del reBot Arm en MuJoCo y comprendan la relación entre el modelo del robot,

las articulaciones y las órdenes de control.

36.1 Instalación del entorno de desarrollo de MuJoCo​

Los bindings de Python de MuJoCo se instalan mediante pip; no es necesaria la compilación de bibliotecas en C. El espacio de trabajo del reBot Arm

usa un entorno virtual (.venv) para gestionar las dependencias de Python, y MuJoCo se instala dentro de él.

Método 1: usar el entorno virtual integrado del espacio de trabajo (recomendado)

#RS:
cd ~/ReBot_Arm_DigitalTwin_RS
source scripts/rs_env.sh
python3 -c "import mujoco; print(mujoco.__version__)"

#DM:
cd ~/ReBot_Arm_DigitalTwin_DM/reBotArmController_ROS2-main
source scripts/source_rebotarm_env.sh
python3 -c "import mujoco; print(mujoco.__version__)"

Si la salida es algo como 3.10.0, MuJoCo está listo. source_rebotarm_env.sh carga automáticamente ROS2, el entorno virtual y PYTHONPATH; todos los comandos posteriores necesitan hacer source de este script primero.

Método 2: instalación manual

Si no estás en el entorno virtual del espacio de trabajo, puedes instalar con pip directamente:

pip3 install mujoco
#MuJoCo 3.x is a pure pip package with built-in binary libraries; no extra system dependencies needed. After installation, `import mujoco` and `mujoco.viewer` are ready to use.

Verificar la instalación de mujoco​

python3 -c "
import mujoco
print('MuJoCo version:', mujoco.version)
print('GPU rendering:', mujoco.GL_CONTEXT_BACKENDS if hasattr(mujoco, 'GL_CONTEXT_BACKENDS') else 'auto')
"

Resultado esperado​

  • Éxito: si el entorno está configurado correctamente, verás una salida similar a la siguiente (el número de versión puede variar):
MuJoCo version: 3.2.0
GPU rendering: ['egl', 'glfw']
  • O GPU rendering: auto (dependiendo de las opciones de compilación).
  • Fallo: si mujoco no está instalado o la ruta no está configurada, se lanzará un ModuleNotFoundError, lo que indica un problema de instalación.

36.2 Comprender la estructura del modelo MJCF​

MJCF (MuJoCo XML) es el formato de modelo nativo de MuJoCo. Un archivo MJCF consta de los siguientes elementos de nivel superior:

ElementRoleEmbodiment in the reBot Arm
<compiler>Opciones de compilación: unidad de ángulo, sistema de coordenadas, ruta de mallasangle="radian" coordinate="local" meshdir="../meshes"
<option>Parámetros físicos: paso de tiempo, gravedad, solvertimestep="0.001" gravity="0 0 -9.81"
<visual>Parámetros de renderizado: luces, niebla, vista globalheadlight, azimuth="135"
<asset>Declaraciones de recursos: mallas, materiales, texturas10 mallas STL + múltiples materiales
<default>Valores por defecto: amortiguamiento de articulaciones, colisión de geomsdamping="0.8" armature="0.01"
<worldbody>Cuerpo mundo: suelo, luces, cámaras, robotMesa, objetos, cadena cinemática del brazo

Los archivos MJCF del reBot Arm se encuentran en:

RS version (rebotarm_mujoco_rs package):
src/rebotarm_mujoco_rs/models/
rs_arm.xml # physics model (STL mesh + full inertia + 7 actuators)
rs_grasp_scene.xml # grasping scene (with objects)
DM version (rebotarm_mujoco package):
src/rebotarm_mujoco/models/
rebotarm_b601_stl.xml # physics model (STL mesh + full inertia)
rebotarm_b601_kinematic.xml # kinematics model (simplified geometry + no inertia)
rebotarm_b601_stl.xml # physics model (STL mesh + full inertia, with scene objects)
rebotarm_b601_kinematic.xml # kinematics model (simplified geometry + no inertia)
rebotarm_b601_colored.xml # colored model (multi-material STL)
simple_rebotarm.xml # simplified model (primitive geometries)

Los dos modelos comparten la misma estructura cinemática (nombres de articulaciones, ejes, límites). Las diferencias son:

FeatureSTL modelKinematics model
VisualMalla STL (detallada)cápsula/esfera/cilindro (simplificado)
InertialDefinida para cada eslabónMayormente omitida
CollisionLa garra tiene colisión tipo cajaSin colisión
timestep0.001 s0.002 s
UseSimulación física, real2simVisualización ligera

Este capítulo utiliza el modelo STL, porque se ve bien y admite simulación física.

36.3 Importar el modelo del reBot Arm en MuJoCo​

Compilar los paquetes de ROS2​

#RS:
cd ~/ReBot_Arm_DigitalTwin_RS/rebotarm_ros2
source /opt/ros/jazzy/setup.bash
colcon build --symlink-install
source install/setup.bash

#DM:
cd ~/ReBot_Arm_DigitalTwin_DM/reBotArmController_ROS2-main
source /opt/ros/jazzy/setup.bash
colcon build --symlink-install
source install/setup.bash

Después de compilar, el directorio share del paquete de MuJoCo contendrá los archivos de modelo y las mallas STL:

# Verify the share directory (RS)
ros2 pkg prefix rebotarm_mujoco_rs
# output: ~/ReBot_Arm_DigitalTwin_RS/rebotarm_ros2/install/rebotarm_mujoco_rs
ls $(ros2 pkg prefix rebotarm_mujoco_rs)/share/rebotarm_mujoco_rs/models/
# meshes/ rs_arm.xml rs_grasp_scene.xml

# Verify the share directory (DM)
ros2 pkg prefix rebotarm_mujoco
ls $(ros2 pkg prefix rebotarm_mujoco)/share/rebotarm_mujoco/models/
# rebotarm_b601_stl.xml rebotarm_b601_kinematic.xml rebotarm_b601_colored.xml simple_rebotarm.xml

Iniciar mediante launch​

#RS:
ros2 launch rebotarm_mujoco_rs mujoco_rs.launch.py use_viewer:=true
#DM:
ros2 launch rebotarm_mujoco real2sim.launch.py
La escena de agarre del reBot Arm en el visor de MuJoCo

Iniciar mediante ROS2 launch (con el entorno completo)​

#RS:
./scripts/start_rs_sim.sh
#DM:
./rebotarm start sim
or call the script directly:
~/ReBot_Arm_DigitalTwin_DM/reBotArmController_ROS2-main/scripts/start_rebot_mujoco_all.sh

Control mediante la interfaz gráfica de deslizadores de articulaciones de ROS2​

El reBot Arm proporciona una interfaz gráfica de deslizadores de articulaciones en Tkinter (joint_slider_gui.py) para controlar cada articulación a través de una interfaz gráfica:

1. Inicia primero la simulación​

#1. First start the sim (full physics simulation)
#RS:
cd ~/ReBot_Arm_DigitalTwin_RS
./scripts/start_rs_sim.sh
#DM:
cd ~/ReBot_Arm_DigitalTwin_DM
./rebotarm start sim

2. Abre otra terminal​

#The slider GUI defines 7 joint controls:
#RS:
source /opt/ros/jazzy/setup.bash
source ~/ReBot_Arm_DigitalTwin_RS/rebotarm_ros2/install/setup.bash
ros2 launch rebotarm_mujoco_rs joint_slider_gui.launch.py

#DM:
source /opt/ros/jazzy/setup.bash
source ~/ReBot_Arm_DigitalTwin_DM/reBotArmController_ROS2-main/install/setup.bash
ros2 launch rebotarm_mujoco joint_slider_gui.launch.py
Accionando el brazo simulado desde la interfaz gráfica de deslizadores de articulaciones de ROS2

36.4 Preguntas frecuentes​

P1: El visor de MuJoCo muestra una pantalla negra o se bloquea después de abrirse. ¿Qué debo hacer?

Normalmente se trata de un problema de renderizado por GPU. Intenta configurar el backend de renderizado:

export MUJOCO_GL=egl    # use EGL (recommended, no display needed)
export MUJOCO_GL=glfw # use GLFW (requires a desktop environment)
export MUJOCO_GL=osmesa # use software rendering (slowest but most compatible)

En servidores sin pantalla (por ejemplo, vía SSH), usa egl u osmesa.

P2: "mesh file not found" al cargar MJCF. ¿Qué debo hacer?

En MJCF, meshdir="../meshes" es una ruta relativa. Si ejecutas el script desde otro directorio, los archivos de malla

pueden no encontrarse. Soluciones:

  1. Después de compilar los paquetes de ROS2, carga desde el directorio share (recomendado): ros2 pkg prefix rebotarm_mujoco_rs (RS) o ros2 pkg prefix rebotarm_mujoco (DM)
  2. O asegúrate de ejecutar el script desde el directorio models/ (su directorio padre contiene meshes/)
  3. El mujoco_sync.py de RS resuelve automáticamente las rutas de malla; DM necesita cargar desde el directorio install

P3: Después de arrastrar la interfaz gráfica de deslizadores de articulaciones, el brazo en MuJoCo no se mueve. ¿Qué debo hacer?

Comprueba los tres enlaces:

  1. ¿Está ejecutándose el driver falso? RS: ros2 topic echo /rebotarm_rs/joint_states --once; DM: ros2 topic echo /rebotarm/joint_states --once
  2. ¿El nodo de sincronización está suscrito al tópico correcto? RS se suscribe a /rebotarm_rs/joint_states por defecto; DM se suscribe a /rebotarm/joint_states por defecto
  3. ¿Está abierto el visor? La terminal debería mostrar que el nodo de sincronización está listo

Si el nombre del tópico no coincide, especifícalo con un parámetro:

RS: REAL2SIM_JOINT_STATE_TOPIC=/rebotarm_rs/joint_states ./scripts/start_rs_sim.sh
DM: REAL2SIM_JOINT_STATE_TOPIC=/rebotarm/joint_states ./rebotarm start sim

P4: Solo se mueve un lado de la garra. ¿Qué debo hacer?

RS: comprueba si la restricción equality está configurada correctamente (joint_left y joint_right deben seguir a joint7).

DM: verifica si tanto finger_left como finger_right reciben comandos. Si solo se envía finger_left sin un target para finger_right, solo se moverá un lado.

P5: Los objetos salen volando en el modo de agarre con física. ¿Qué debo hacer?

Es posible que los parámetros PD sean demasiado agresivos. Intenta reducir arm_kp y arm_kd:

RS: ros2 launch rebotarm_mujoco_rs mujoco_rs.launch.py simulation_mode:=physics arm_torque_limit:=10.0
DM: ros2 launch rebotarm_mujoco mujoco_physics_grasp.launch.py arm_torque_limit:=10.0

Reducir el límite de par desde el valor predeterminado de 30.0 a 10.0 evita que los objetos sean expulsados por pares articulares excesivos. También puedes reducir control_hz para disminuir la agresividad del bucle de control.


Loading Comments...