SO-ARM100 Robot Control with MCP
Controle os braços robóticos SO-ARM100 e LeKiwi usando agentes de IA baseados em LLM.
Documentação
SO-ARM100 Robot Control with MCP
Um repositório complementar ao meu vídeo sobre o servidor MCP para o robô:
- Servidor MCP para agentes de IA baseados em LLM (Claude Desktop, Cursor, Windsurf, etc.) controlarem o robô
- Controle direto por teclado para operação manual
- Agente de IA via CLI pode usá-lo diretamente para controlar o robô com modelos Claude, Gemini ou GPT
Se você quiser saber mais sobre MCP, consulte a documentação oficial do MCP
Este repositório foi feito para funcionar com os robôs SO-ARM100 / 101. Consulte o guia de configuração do SO-101 do lerobot para instruções detalhadas sobre como configurar o robô.
Atualização! Agora há suporte parcial para LeKiwi (apenas o braço, o controle da base móvel via MCP está pendente). Também adicionei um agente simples que usa o servidor MCP para controlar o robô. Ele suporta modelos Claude, Gemini e GPT. Na minha experiência, o Claude é o melhor, o GPT não é tão bom e o Gemini fica no meio termo.
Depois que publiquei o vídeo e este repositório, o LeRobot lançou uma atualização significativa da biblioteca que quebra a compatibilidade com o código original.
Se você quiser usar o código original e seguir exatamente o vídeo, use esta versão.
Início Rápido
1. Instalar Dependências
Para simplificar, uso pip simples em vez de uv, que é frequentemente recomendado nos tutoriais de MCP — funciona perfeitamente.
python -m venv .venv
source .venv/bin/activate # or .venv\Scripts\activate on Windows
pip install -r requirements.txt
Pode ser necessário instalar o lerobot separadamente; basta usar as instruções oficiais do repositório do lerobot
2. Conectar Seu Robô
- Conecte o SO-ARM100 via USB
- Atualize
config.pycom sua porta serial para o so-arm (ex.:/dev/tty.usbmodem58FD0168731) ou robot_ip para lekiwi (ex.:192.168.1.1) - Conecte as câmeras e atualize
config.pycom os índices e nomes corretos (paralekiwiapenas os nomes são importantes)
3. Usar o robô
🔍 Verificar Status e Calibração do Robô:
python check_positions.py
Isso mostrará o estado atual do robô sem controle real. Mova seu robô manualmente para garantir que ele esteja devidamente calibrado e configurado.
Após a última atualização, o lerobot usa estados de juntas normalizados em vez de graus. Você pode atualizar MOTOR_NORMALIZED_TO_DEGREE_MAPPING em config.py para corresponder à calibração do seu robô. Você precisará atualizar esses valores toda vez que recalibrar o robô.
🎮 Controle Manual por Teclado:
python keyboard_controller.py
Agora você pode tentar controlar o robô manualmente usando o teclado. Teste antes de passar para a etapa do MCP para garantir que tudo funcione corretamente.
🛠️ Servidor MCP no modo de desenvolvimento
mcp dev mcp_robot_server.py
Etapa final de teste — para depurar o servidor MCP, use a interface para conectar-se a ele e tente enviar algumas solicitações.
🤖 Controle por Agente de IA (Servidor MCP):
AVISO: usar o próprio servidor MCP é gratuito, mas ele requer um cliente MCP que envie solicitações para algum LLM. Geralmente isso não é gratuito — e controlar o robô com MCP pode ficar caro, pois envia múltiplas solicitações de agente com imagens que consomem muitos tokens. Certifique-se de entender e controlar seu uso de tokens e os custos correspondentes antes de fazer isso. O custo real depende do cliente e dos modelos que você usa, e é sua responsabilidade monitorar e controlar isso.
mcp run mcp_robot_server.py --transport SELECTED_TRANSPORT
Suporta: stdio, sse, streamable-http
Agora seu servidor pode ser adicionado a qualquer cliente MCP.
Conectando Clientes MCP
Diferentes clientes podem suportar diferentes transportes; você pode escolher o que funciona melhor para você. A funcionalidade é a mesma.
Transporte STDIO
Adicione à sua configuração MCP:
{
"mcpServers": {
"SO-ARM100 robot controller": {
"command": "/path/to/.venv/bin/python",
"args": ["/path/to/mcp_robot_server.py"]
}
}
}
Transporte SSE
Execute o servidor no terminal com o transporte SSE:
mcp run mcp_robot_server.py --transport sse
Adicione à sua configuração MCP:
{
"mcpServers": {
"SO-ARM100 robot controller": {
"url": "http://127.0.0.1:3001/sse"
}
}
}
Transporte Streamed-HTTP
Ele deve ser um substituto para o SSE, mas atualmente não muitos clientes o suportam.
Execute o servidor no terminal com o transporte Streamed-HTTP:
mcp run mcp_robot_server.py --transport streamable-http
Adicione à sua configuração MCP:
{
"mcpServers": {
"SO-ARM100 robot controller": {
"url": "http://127.0.0.1:3001/mcp"
}
}
}
Usando o robô com MCP
Agora você pode ir ao seu cliente e ele deve ser capaz de controlar o robô quando você der instruções em linguagem natural.
Usando o Agente
Inicie o servidor MCP com o transporte SSE:
mcp run mcp_robot_server.py --transport sse
Agora você pode usar o agente de IA para controlar o robô com instruções em linguagem natural.
Configuração
Crie um arquivo .env na raiz do projeto com suas chaves de API:
# API Keys (at least one required)
ANTHROPIC_API_KEY=your_anthropic_api_key_here
GEMINI_API_KEY=your_gemini_api_key_here
OPENAI_API_KEY=your_openai_api_key_here
# MCP Server Configuration (optional)
MCP_SERVER_IP=127.0.0.1
MCP_PORT=3001
Uso Básico
python agent.py
Uso Avançado
# Use Gemini instead of Claude
python agent.py --model gemini-2.5-flash
# Override API key
python agent.py --api-key your_api_key_here
# Enable image viewer window
python agent.py --show-images
# Increase thinking budget for better reasoning
python agent.py --thinking-budget 2048
# Custom MCP server location
python agent.py --mcp-server-ip 192.168.1.100 --mcp-port 3002
Modelos Suportados (exemplos)
Claude (Anthropic):
claude-3-7-sonnet-latest(padrão)- Todos os modelos suportam raciocínio, streaming e resultados de ferramentas multimodais
Gemini (Google):
gemini-2.5-flashgemini-2.5-pro- Use modelos 2.5+ pois eles suportam o recurso de raciocínio
GPT (OpenAI):
gpt-4oe variantes- Os demais modelos em sua maioria não suportam raciocínio ou chamada de ferramentas.
No geral, não consegui obter bons resultados com os modelos GPT.
Parâmetros
--model: Modelo LLM a usar (padrão: claude-3-7-sonnet-latest)--api-key: Substituição da chave de API (usa o arquivo .env por padrão)--show-images: Exibir imagens da câmera do robô em uma janela--thinking-budget: Orçamento de tokens de raciocínio (padrão: 1024, 0 para desativar)--thinking-every-n: Usar raciocínio a cada N etapas (padrão: 3)--mcp-server-ip: Endereço IP do servidor MCP (padrão: 127.0.0.1)--mcp-port: Porta do servidor MCP (padrão: 3001)
Considerações de Custo
Uso de Tokens:
- O Claude conta imagens do MCP nos tokens de entrada (mais caro para tarefas de visão)
- O Gemini não conta imagens do MCP nos tokens (o uso de tokens será exibido apenas para texto)
- Tokens de raciocínio aumentam o custo, mas melhoram a qualidade do raciocínio
