Pular para o conteúdo principal

Simulação do Reachy Mini - Guia de Configuração

Você não precisa de um robô físico para começar a construir! A simulação do Reachy Mini roda em MuJoCo e fornece um ambiente de física realista para prototipar, testar e depurar suas aplicações.

Simulation

1. Instalação

📋 Pré-requisitos: Antes de configurar a simulação, você deve primeiro concluir a instalação básica e a configuração do ambiente virtual seguindo o Guia de Instalação. Este guia assume que você já tem o Reachy Mini SDK instalado e seu ambiente virtual ativado.

A simulação requer os bindings Python do mujoco. Você pode instalá-los junto com o software do Reachy Mini usando a tag extra [mujoco].

Com pip, execute:

pip install "reachy-mini[mujoco]"

Com uv, execute:

uv pip install "reachy-mini[mujoco]"

2. Executando a Simulação

Para iniciar o robô simulado, simplesmente execute o comando do daemon com a flag --sim:

reachy-mini-daemon --sim

Uma janela deve abrir exibindo a visualização 3D do robô. Você pode interagir com a visualização usando o mouse (arraste para girar, clique com o botão direito para mover, role para dar zoom).

🍎 Usuários de Mac (Apple Silicon / Intel)

No macOS, o MuJoCo requer um lançador específico para funcionar corretamente com a interface gráfica. Em vez do comando acima, use mjpython:

mjpython -m reachy_mini.daemon.app.main --sim

⚠️ Usuários de macOS: uv pode ter problemas de compatibilidade com o MuJoCo no macOS. Se você encontrar problemas de instalação ou execução, é recomendado usar pip diretamente em vez de uv para pacotes relacionados ao MuJoCo.

3. Reachy Mini Control e Apps

Você pode usar o Reachy Mini Control para interagir com o robô simulado. Basta abrir o app e conectar à simulação local.

Control App with local daemon

  • Apps: Você pode instalar e executar Apps! Eles serão executados dentro da simulação (por exemplo, o robô se moverá no visualizador 3D).

4. Cenas e Opções

Você pode personalizar o ambiente de simulação usando o argumento --scene.

  • empty (padrão): Apenas o robô no vazio.
  • minimal: Adiciona uma mesa e alguns objetos (maçã, croissant, pato) para brincar.

Exemplo:

reachy-mini-daemon --sim --scene minimal

5. Conectando seu Código

Quando a simulação estiver em execução, ela se comporta exatamente como um Reachy Mini Lite real conectado via USB. O daemon escuta em localhost, e você pode executar qualquer script Python do SDK sem modificação:

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 Passos

  • Python SDK: Aprenda a mover, ver, falar e ouvir.
  • AI Integrations: Conecte LLMs, construa Apps e publique na Hugging Face.
  • Core Concepts: Arquitetura, sistemas de coordenadas e limites de segurança.

❓ Solução de Problemas

Falha de segmentação de libgstpython.dylib ao usar mjpython (macOS)

Você pode ver um erro como:

ERROR: Caught a segmentation fault while loading plugin file:
.../gstreamer_python/lib/gstreamer-1.0/libgstpython.dylib

Este erro de falha de segmentação do plugin GStreamer é um problema conhecido, que também acontece com o robô real, mas ocorre em um processo paralelo e não causa nenhum problema visível. Com mjpython, porém, ele derruba o processo principal. A correção é renomear o plugin para que o GStreamer não o carregue mais:

# 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')")

Isso simplesmente impede que o GStreamer carregue o plugin automaticamente. Isso não afeta a funcionalidade normal de áudio/vídeo.

Encontrou outro problema? 👉 Confira o Guia de Solução de Problemas e FAQ

Loading Comments...