Simulación de Reachy Mini - Guía de configuración
¡No necesitas un robot físico para empezar a construir! La simulación de Reachy Mini se ejecuta sobre MuJoCo y proporciona un entorno de física realista para crear prototipos, probar y depurar tus aplicaciones.
1. Instalación
📋 Requisitos previos: Antes de configurar la simulación, primero debes completar la instalación básica y la configuración del entorno virtual siguiendo la Guía de instalación. Esta guía asume que ya tienes el Reachy Mini SDK instalado y tu entorno virtual activado.
La simulación requiere los bindings de Python de mujoco. Puedes instalarlos junto con el software de Reachy Mini usando la etiqueta extra [mujoco].
Con pip, ejecuta:
pip install "reachy-mini[mujoco]"
Con uv, ejecuta:
uv pip install "reachy-mini[mujoco]"
2. Ejecución de la simulación
Para iniciar el robot simulado, simplemente ejecuta el comando del daemon con la opción --sim:
reachy-mini-daemon --sim
Debería abrirse una ventana que muestre la vista 3D del robot. Puedes interactuar con la vista usando el ratón (arrastrar para rotar, clic derecho para desplazar, rueda para hacer zoom).
🍎 Usuarios de Mac (Apple Silicon / Intel)
En macOS, MuJoCo requiere un lanzador específico para funcionar correctamente con la interfaz gráfica. En lugar del comando anterior, usa mjpython:
mjpython -m reachy_mini.daemon.app.main --sim
⚠️ Usuarios de macOS:
uvpuede tener problemas de compatibilidad con MuJoCo en macOS. Si encuentras problemas de instalación o de ejecución, se recomienda usarpipdirectamente en lugar deuvpara los paquetes relacionados con MuJoCo.
3. Reachy Mini Control y Apps
Puedes usar Reachy Mini Control para interactuar con el robot simulado. Simplemente abre la app y conéctate a la simulación local.

- Apps: ¡Puedes instalar y ejecutar Apps! Se ejecutarán dentro de la simulación (por ejemplo, el robot se moverá en el visor 3D).
4. Escenas y opciones
Puedes personalizar el entorno de simulación usando el argumento --scene.
empty(predeterminado): Solo el robot en el vacío.minimal: Añade una mesa y algunos objetos (manzana, cruasán, pato) con los que jugar.
Ejemplo:
reachy-mini-daemon --sim --scene minimal
5. Conectar tu código
Una vez que la simulación está en ejecución, se comporta exactamente como un Reachy Mini Lite real conectado por USB. El daemon escucha en localhost, y puedes ejecutar cualquier script del SDK de Python sin modificaciones:
from reachy_mini import ReachyMini
from reachy_mini.utils import create_head_pose
# Connects to the simulation running on localhost
with ReachyMini() as mini:
print("Connected to simulation!")
# Look up and tilt head
print("Moving head...")
mini.goto_target(
head=create_head_pose(z=20, roll=10, mm=True, degrees=True),
duration=1.0
)
# Wiggle antennas
print("Wiggling antennas...")
mini.goto_target(antennas=[0.6, -0.6], duration=0.3)
mini.goto_target(antennas=[-0.6, 0.6], duration=0.3)
# Reset to rest position
mini.goto_target(
head=create_head_pose(),
antennas=[0, 0],
duration=1.0
)
Próximos pasos
- Python SDK: Aprende a mover, ver, hablar y escuchar.
- AI Integrations: Conecta LLMs, crea Apps y publícalas en Hugging Face.
- Core Concepts: Arquitectura, sistemas de coordenadas y límites de seguridad.
❓ Resolución de problemas
Fallo de segmentación desde libgstpython.dylib al usar mjpython (macOS)
Puedes ver un error como:
ERROR: Caught a segmentation fault while loading plugin file:
.../gstreamer_python/lib/gstreamer-1.0/libgstpython.dylib
Este fallo de segmentación del plugin de GStreamer es un problema conocido, que también ocurre con el robot real, pero se produce en un proceso paralelo y no causa ningún problema visible. Sin embargo, con mjpython bloquea el proceso principal. La solución es renombrar el plugin para que GStreamer deje de cargarlo:
# Find the file inside your environment (adjust the path to match yours)
mv $(python -c "import gstreamer_python, pathlib; print(pathlib.Path(gstreamer_python.__file__).parent / 'lib/gstreamer-1.0/libgstpython.dylib')") \
$(python -c "import gstreamer_python, pathlib; print(pathlib.Path(gstreamer_python.__file__).parent / 'lib/gstreamer-1.0/libgstpython_.dylib')")
Esto simplemente evita que GStreamer cargue automáticamente el plugin. No afecta a la funcionalidad normal de audio/vídeo.
¿Te has encontrado con otro problema? 👉 Consulta la guía de resolución de problemas y FAQ