Pular para o conteúdo principal

Introdução ao Pinocchio e MeshCat para reBot Arm B601-DM

traj_sim_geodesic

Pinocchio é uma biblioteca open source para análise e otimização de dinâmica em robótica. Ela fornece cinemática direta/inversa eficiente, cálculos dinâmicos e recursos de planejamento de trajetória. MeshCat é uma ferramenta de visualização 3D baseada na web que pode exibir o estado do robô e trajetórias de movimento em tempo real.

Este projeto combina o poderoso poder de computação do Pinocchio com a visualização intuitiva do MeshCat, fornecendo um conjunto completo de ferramentas de análise cinemática e depuração para o reBot Arm B601-DM.


Recursos do Projeto

  1. Análise Cinemática Completa
    Suporta cálculos de Cinemática Direta (FK) e Cinemática Inversa (IK), capaz de resolver em tempo real a pose do efetuador final do braço robótico.

  2. Visualização 3D em Tempo Real
    Exibe o estado do braço robótico e as trajetórias de movimento em tempo real por meio do MeshCat no navegador, sem necessidade de software adicional.

  3. Planejamento e Rastreamento de Trajetória
    Implementa planejamento de trajetória geodésica em SE(3), com suporte a controle de rastreamento CLIK (Cinemática Inversa em Malha Fechada).

  4. Controle de Compensação de Gravidade
    Calcula o torque de gravidade das juntas com base no modelo dinâmico do Pinocchio, alcançando o efeito de “flutuação” do braço robótico.

  5. Código Aberto e Extensível
    Todo o código é open source, permitindo que os usuários personalizem algoritmos de controle e efeitos de visualização conforme suas necessidades.

Especificações

O hardware para este tutorial é fornecido pela Seeed Studio

ParâmetroEspecificação
Modelo do Braço RobóticoreBot Arm B601-DM
Graus de Liberdade6-DOF + Garra
Modelo do MotorDamiao DM4340 / DM4310
Método de ComunicaçãoBarramento CAN via Adaptador USB-CAN
Tensão de Operação24V DC
Método de ControlePC
Faixa de Temperatura de Operação Recomendada0°C ~ 40°C

Lista de Materiais (BOM)

ComponenteQuantidadeIncluído
Braço Robótico reBot Arm B601-DM1
Ponte Serial USB2CAN1
Adaptador de Energia (24V)1
Cabo USB-C1
Garra1
cuidado

A Seeed Studio é responsável apenas pela qualidade do hardware. O tutorial é atualizado em estrita conformidade com a documentação oficial. Se você encontrar problemas de software ou de ambiente que não consiga resolver, consulte primeiro o FAQ no final do documento ou entre em contato com o atendimento ao cliente para entrar no grupo de comunicação SeeedStudio Lerobot para tirar dúvidas.


Requisitos de Ambiente

ItemRequisito
Python3.10+
Sistema OperacionalUbuntu 22.04+
Interface de ComunicaçãoPonte Serial USB2CAN ou Interface CAN

Etapas de Instalação

Etapa 1. Instalar uv (se ainda não estiver instalado)

curl -LsSf https://astral.sh/uv/install.sh | sh

Etapa 2. Sincronizar Ambiente (Instalar Todas as Dependências)

git clone https://github.com/vectorBH6/reBotArm_control_py.git
cd reBotArm_control_py
uv sync
dica

uv sync criará automaticamente um ambiente virtual (se não existir) e instalará todas as dependências de acordo com pyproject.toml e uv.lock.


Ferramentas de Depuração

Console de Motor Único (1_damiao_text.py)

Teste de motor único direto com o SDK motorbridge.

Uso:

uv run python example/1_damiao_text.py

Comandos Interativos:

ComandoDescrição
enable / disableAtivar/Desativar
set_zeroDefinir posição zero
stateVer estado

Calibração de Zero e Monitor de Ângulo (2_zero_and_read.py)

Define automaticamente o zero de todas as juntas e exibe os ângulos das juntas em tempo real.

Uso:

uv run python example/2_zero_and_read.py

Testes de Cinemática

Teste de Cinemática Direta (5_fk_test.py)

Calcular a pose do efetuador final a partir dos ângulos das juntas.

Entrada: 6 ângulos de junta (graus)

Saída:

  • Posição do efetuador final (X, Y, Z) — Unidade: metros
  • Matriz de rotação (3×3)
  • Ângulos de Euler (Roll/Pitch/Yaw) — Unidade: graus

Exemplo:

uv run python example/5_fk_test.py
> 0 0 0 0 0 0
> 45 -30 15 -60 90 180

Teste de Cinemática Inversa (6_ik_test.py)

Resolver os ângulos das juntas a partir da pose desejada do efetuador final.

Formato de Entrada:

  • Apenas posição: <x> <y> <z> (metros)
  • Posição + Orientação: <x> <y> <z> <roll> <pitch> <yaw> (graus)

Exemplo:

uv run python example/6_ik_test.py
> 0.25 0.0 0.15 # Position only
> 0.25 0.0 0.15 0 0 0 # Position + Orientation

Ambiente de Simulação

Simulação de Cinemática Direta (sim/fk_sim.py)

Simulação interativa de cinemática direta, visualizando a pose do braço robótico ao inserir ângulos de junta no MeshCat.

Uso:

uv run python example/sim/fk_sim.py

Comandos Interativos:

  • Inserir 6 ângulos de junta (graus), separados por espaço
  • Exemplo: 0 0 0 0 0 0
  • Exemplo: 45 -30 15 -60 90 -180
  • q/quit/exit: Sair

Recursos:

  • Exibição em tempo real da posição e orientação do efetuador final
  • Suporta entrada contínua para testar diferentes poses
  • Saída formatada das informações de pose

Simulação de Cinemática Inversa (sim/ik_sim.py)

Simulação interativa de cinemática inversa, resolvendo automaticamente os ângulos das juntas a partir da pose alvo e visualizando.

Uso:

uv run python example/sim/ik_sim.py

Formato de Entrada:

  • Apenas posição: x y z (metros)
  • Posição+Orientação: x y z roll pitch yaw (radianos)

Exemplo:

> 0.25 0.0 0.25              # Position only
> 0.25 0.0 0.25 0 0 0 # Position+Orientation

Recursos:

  • Julgamento automático da convergência da IK
  • Exibição da contagem de iterações e do erro
  • Atualizações em tempo real da pose do robô

Simulação de Planejamento de Trajetória (sim/traj_sim.py)

Simulação de planejamento de trajetória baseada em geodésicas em SE(3), incluindo rastreamento CLIK e reprodução de animação no MeshCat.

Uso:

uv run python example/sim/traj_sim.py

Comandos Interativos:

  • Entrada: x y z [roll pitch yaw] (metros/radianos)
  • Pressione Enter para usar a configuração padrão
  • q: Sair

Recursos:

  • Planejar da posição atual até a posição alvo
  • Usar perfil de trajetória de mínimo tranco (minimum jerk)
  • Exibição em tempo real das estatísticas da trajetória
  • Reprodução completa da animação da trajetória no MeshCat
  • Exibição do caminho de referência (cinza) e do caminho real (verde)

Ferramenta de Visualização (sim/visualizer.py)

[LINE_298>Wrapper de visualização MeshCat, fornecendo uma interface unificada de exibição do robô.

Principais Recursos:

  • Carregar modelo URDF e exibir o robô
  • Desenhar caminhos polilinha 3D (referência/real)
  • Exibir pose alvo da IK (eixos tricolores + esfera)
  • Suportar reprodução de animação de trajetória de juntas

Exemplo de Uso:

from example.sim.visualizer import Visualizer
viz = Visualizer()
viz.update(q) # Update robot pose
viz.draw_path(points, "path_name", color) # Draw path

Controle em Máquina Real

Configuração de Permissão

Antes de executar os exemplos de controle em máquina real, você precisa configurar as permissões do dispositivo:

# Set serial device permission (Damiao USB2CAN)
sudo chmod 666 /dev/ttyACM0

# Or for CAN interface (e.g., can0)
sudo chmod 666 /dev/can0

Controle IK em Tempo Real (7_arm_ik_control.py)

Controle em tempo real do efetuador final com base no solucionador de IK.

Comandos Interativos:

ComandoDescrição
x y z [roll pitch yaw]Pose alvo do efetuador final
stateVer estado
posPosição atual do efetuador final
q/quit/exitSair

Uso:

uv run python example/7_arm_ik_control.py
> 0.3 0.0 0.2
> 0.3 0.1 0.25 0 0.5 0

Controle de Planejamento de Trajetória (8_arm_traj_control.py)

Planejamento de trajetória geodésica em SE(3) + rastreamento CLIK.

Formato de Entrada:

x y z [roll pitch yaw] [duration]

Parâmetros:

  • x, y, z: Posição alvo (metros)
  • roll, pitch, yaw: Orientação alvo (radianos)
  • duration: Duração do movimento (segundos), padrão 2,0 s

Uso:

uv run python example/8_arm_traj_control.py
> 0.3 0.0 0.3 0 0.4 0 2.0

Controle de Compensação de Gravidade (9_gravity_compensation.py)

Compensa a gravidade das juntas usando o modelo dinâmico do Pinocchio.

Lei de Controle:

tau = g(q)          — Gravity feedforward
pos = current motor position — Joint position follows current position
kp = 2, kd = 1 — Unified stiffness/damping for all joints

Comportamento Esperado:

  • O braço robótico pode “flutuar” em qualquer postura
  • Não cairá devido ao próprio peso quando solto
  • Pode ser movido manualmente para qualquer posição

Uso:

uv run python example/9_gravity_compensation.py

Saída:

  • Exibição em tempo real do torque esperado para cada junta (N·m)
  • Pressione Ctrl+C para parar e desconectar

FAQ

  • Erro Permission denied
    Certifique-se de ter executado sudo chmod 666 /dev/ttyACM0 ou sudo chmod 666 /dev/can0 para definir as permissões do dispositivo.

  • Falha na solução de IK ou resultados anormais
    Verifique se a pose alvo está dentro da área de trabalho do braço robótico e certifique-se de que a configuração dos limites das juntas está correta.

  • O efeito da compensação de gravidade não é bom
    Isso pode ser causado por erros estruturais e precisão de processamento. A compensação de gravidade deste projeto depende de urdf e pinocchio. Você pode tentar corrigir o urdf para os seus parâmetros medidos reais (você pode pedir ajuda à IA para esta etapa).


Licença

Este projeto é open source sob a Licença MIT.


Contato


Documentos de referência


Se este projeto ajudar você, por favor nos dê uma Star!
Loading Comments...