Pular para o conteúdo principal

Estágio 8 · Capítulo 35 · Teoria

35. Fundamentos de Simulação de Robôs e Introdução a Plataformas

Capítulo 35 do Curso de Iniciação em IA Física da Seeed — simulação de robôs do zero: por que a simulação é um simulador de voo para robôs, os três elementos centrais (modelo, ambiente, controlador), os avatares visual / de colisão / inercial do modelo do robô, juntas, atuadores e sensores, tamanho do passo de simulação versus frequência de controle, os formatos URDF / MJCF / USD, MuJoCo versus Isaac Sim e o gêmeo digital.

Hardware necessário para este estágio​

O que preparar para este estágio. A lista completa para cada estágio está no Capítulo 3.

Unidade de controle principal

ItemComprarQtde
reComputer Robotics J4012🛒1
NVIDIA Jetson AGX Thor 128G🛒1

Também é necessário um desktop ou laptop: Ubuntu 22.04, GTX 4080 ou superior com 12GB+ de VRAM, 16GB+ de RAM.

Para este estágio

ItemComprarQtde
reBot Arm B601 DM/RS🛒1

35.1 Por Que Usar Simulação? — A Lógica do "Simulador de Voo"​

A simulação de robôs não é uma "peça de demonstração"; é o campo de testes seguro da robótica moderna.

  • Reduzir o risco de depuração: Um braço real fora de controle pode quebrar equipamentos ou ferir pessoas; na simulação, o pior caso é o modelo sair voando (explosão do motor de física).
  • Quebrar limites de tempo e dinheiro: Você pode executar algoritmos 24/7 sem esperar o braço real carregar ou ser consertado, e nenhuma linha de produção física é ocupada.
  • Obter "rótulos perfeitos": Na simulação, você conhece o torque de cada junta, a força em cada elo e a pose 6D do efetuador final com precisão absoluta — coisas que, no mundo físico real, geralmente exigem sensores caros para medir.

Para o reBot Arm, simulação não é opcional; é o caminho de desenvolvimento padrão. O script start_fake_bringup.sh no workspace inicia um ambiente de simulação puro — usando interfaces de hardware simuladas, ele consegue completar toda a validação, do controle de juntas ao planejamento de movimento com MoveIt2, sem conectar um braço real.

Por que usar simulação: risco de depuração, custo e rótulos

35.2 Os Três Papéis Centrais da Simulação no Desenvolvimento​

Estágio de desenvolvimentoO que a simulação ajuda você a fazer
Validação de algoritmos (cinemática/dinâmica)Testar se o algoritmo de cinemática inversa (IK) converge, se o planejamento de trajetória é suave e se o controlador (PID/MPC) é estável.
Teste Software-in-the-loop (SIL)Seu código de decisão de alto nível (por exemplo, comandos de saída do modelo VLA) permanece completamente inalterado; apenas a interface de comunicação de baixo nível é trocada por Topics simulados, para verificar se a lógica de software funciona de ponta a ponta.
Treinamento de aprendizado por reforço (RL)Deixar o braço "morrer" dezenas de milhares de vezes na simulação para aprender políticas, obtendo dados de treinamento massivos a custo zero (transferência Sim2Real).

35.3 Os Três Elementos Centrais da Simulação: Modelo, Ambiente, Controlador​

Um sistema de simulação completo é composto por estas três partes, nenhuma delas pode faltar:

Modelo do robô (Agente): descreve "como eu pareço, quanto eu peso e como minhas juntas giram."

Ambiente: descreve "onde eu estou e o que está ao meu redor." (chão, mesa, objetos para agarrar, obstáculos)

Controlador: descreve "como eu me movimento." (política VLA, interpolação de trajetória, PID de baixo nível)

Em uma frase: o controlador emite comandos de torque/posição -> faz o modelo se mover no ambiente -> os sensores retornam o estado ao controlador, formando um laço fechado.

Os três elementos centrais: modelo do robô, ambiente e controlador

No modelo MJCF do reBot Arm, as três partes têm manifestações concretas: modelo do robô — começando de base_link, construindo a cadeia cinemática completa por meio de elementos <body> aninhados:

base_link -> link1 -> link2 -> link3 -> link4 -> link5 -> link6 -> end_link
|- finger_left_link
`- finger_right_link

Ambiente — o MJCF define uma cena completa de agarrar:

<geom name="floor" type="plane" size="1.0 1.0 0.02" material="floor_mat"/>

<body name="task_table" pos="0.42 0 0.015">
<geom name="task_table_top" type="box" size="0.30 0.26 0.015"
contype="1" conaffinity="1" condim="6" friction="2.2 0.12 0.02"/>
</body>

<body name="red_cube" pos="0.34 -0.13 0.061">
<freejoint/>
<geom type="box" size="0.025 0.025 0.025" mass="0.04" contype="1" conaffinity="1"/>
</body>
Uma cena de agarrar no MuJoCo com objetos de tarefa coloridos

A cena contém uma mesa, três objetos para agarrar (um cubo vermelho, um bloco azul, um cilindro amarelo) e uma esfera alvo de IK do tipo mocap. Esses elementos de ambiente fazem com que a simulação seja mais do que apenas "ver o braço se mover" — você pode testar o fluxo de pegar e colocar em uma cena completa de agarrar.

O controlador — a simulação do reBot Arm no MuJoCo tem dois métodos de controle:

  • Definir diretamente qpos (modo cinemático): real2sim_sync.py escreve os estados das juntas do ROS em data.qpos, chama mj_forward para corrigir a cinemática e não envolve forças nem dinâmica.
  • Aplicar torque (modo dinâmico): mujoco_torque_control.py aplica torques de junta por meio de data.qfrc_applied e chama mj_step para avançar a simulação física.

35.4 Os "Três Avatares" do Modelo do Robô: Visual, Colisão, Inercial​

Em arquivos de simulação (como URDF / MJCF), um elo geralmente contém estes três atributos, cada um com sua própria função:

AtributoMetáforaFunçãoRequisito gráfico
Visual (modelo visual)A "pele/aparência" do atorUsado apenas para exibição de renderização, para ficar bonito na interface gráfica.Malhas finas (STL/DAE), muitos triângulos.
Collision (modelo de colisão)A "bolha de segurança/esqueleto" do atorUsado pelo motor de física para calcular detecção de colisão e forças de contato.Extremamente simplificado (envolto em esferas, cápsulas, caixas), pouquíssimas faces, garantindo cálculo rápido.
Inertial (modelo inercial)O "peso e centro de gravidade" do atorDefine massa, posição do centro de massa (origem) e momento de inércia (matriz de inércia). A chave para o realismo físico.Apenas parâmetros matemáticos, sem gráficos.
Representações visual, de colisão e inercial de um elo de robô

Alerta de armadilha: Muitas pessoas copiam o Visual diretamente para Collision por conveniência, o que deixa a simulação travando (a GPU não acompanha) e a detecção de colisão extremamente instável. Collision deve ser simplificado com Convex Hull!

O modelo MJCF do reBot Arm faz exatamente isso — visual usa malhas STL, colisão usa caixas:

<!-- Visual: fine STL mesh, only for looks -->
<geom name="gripper_base_visual" type="mesh" mesh="gripper_base_mesh" material="gripper_mat"/>

<!-- Collision: simplified box, only for collision detection -->
<geom name="gripper_palm_collision" type="box" pos="-0.090 0 0"
size="0.018 0.090 0.034" contype="1" conaffinity="1" condim="6"/>

Para as partes de elo (link1-link6), os geoms visuais usam por padrão contype="0" conaffinity="0", não participando da detecção de colisão. Isso é um projeto intencional: a autocolisão do braço é gerenciada pela matriz ACM do SRDF (veja o Capítulo 34),

e no nível do MuJoCo apenas as colisões entre o gripper e os objetos são tratadas. Para o modelo Inertial, o modelo STL MJCF do reBot Arm define parâmetros inerciais completos para cada corpo:

<inertial pos="-0.000007849 -0.0000011531 0.029841"
mass="0.8366"
diaginertia="0.00133040 0.00213119 0.00275877"/>

Distribuição de massa de cada elo

EloMassa (kg)Descrição
base_link0.8366Base, o mais pesado
link21.3266Braço superior, o segundo mais pesado
link30.8353Antebraço
link40.52Inclinação do punho
link50.383Giro do punho
link60.3663Rotação da ferramenta
end_link0.5Base do gripper

Vale notar que o modelo cinemático (rebotarm_b601_kinematic.xml) omite os dados inerciais da maioria dos elos, porque o modo cinemático não precisa calcular forças e dinâmica, apenas relações geométricas.

35.5 Juntas, Atuadores e Sensores (As "Terminações Nervosas" na Simulação)​

{{/* TODO: o documento original mostra uma figura aqui (imagem 1.png) que não foi exportada - o arquivo não está na pasta e não há nada para enviar, então a figura precisa ser recriada. */}}

Joint: define o movimento relativo entre elos.​

Tipos comuns:

Tipo de juntaNome URDFNome MJCFDescrição
Junta rotativarevolutehingeComo um servo, com limites.
Rotação contínuacontinuoushinge (sem faixa)Como uma roda, rotação ilimitada.
Junta prismáticaprismaticslideComo uma haste hidráulica.
Junta fixafixedNenhum (soldado diretamente)Solda dois elos juntos.

O reBot Arm usa hinge (joint1-joint6) e slide (finger_left, finger_right):

<joint name="joint1" type="hinge" axis="0 0 1" range="-2.8 2.8"/>
<joint name="joint2" type="hinge" axis="0 0 -1" range="-3.14 0"/>
<joint name="finger_left" type="slide" axis="0 1 0" range="0 0.0285"/>

Cada junta em MJCF possui parâmetros de amortecimento (damping) e inércia do rotor (armature):

<default>
<joint damping="0.8" armature="0.01" limited="true"/>
</default>

damping="0.8" simula o atrito da junta, fazendo com que a junta desacelere naturalmente sem forças externas. armature="0.01" simula a inércia equivalente do rotor do motor, tornando a simulação mais próxima das características de resposta de um motor real.

Atuador: na simulação, define os limites de força/torque de acionamento e o atraso de transmissão. Por exemplo, se você enviar um comando de torque de -10~10 Nm, o atuador o limita antes de passá-lo para o motor de física.​

Mas o modelo MJCF do reBot Arm não define nenhum elemento <actuator> — isso não é uma omissão,

mas sim um projeto intencional:

  • real2sim_sync.py escreve diretamente em data.qpos, ignorando o atuador, para obter sincronização cinemática.
  • mujoco_torque_control.py escreve diretamente em data.qfrc_applied, ignorando o atuador,

para obter controle de torque. A limitação de torque é feita no nível de código: torque_limit=18.0.

Esse projeto "sem atuador" dá aos desenvolvedores liberdade máxima de controle: você pode escolher o modo cinemático (definir posições diretamente) ou o modo dinâmico (definir torques diretamente), sem ser limitado pelo modelo de atuador.

Sensor: o simulador pode simular perfeitamente (ou adicionar ruído para simular a realidade)​

Tipo de sensorMétodo de simulaçãoManifestação no reBot Arm
Encoder de posição/velocidade da juntaLer diretamente data.qpos / data.qvelmujoco_torque_control.py lê os estados das juntas
Sensor de força/torque (F/T)Ler data.qfrc_bias (força de bias = gravidade + força de Coriolis)O núcleo do recurso de comparação de torque
IMULer a aceleração e a velocidade angular do corpoNão usado no projeto
Câmera/LiDARGerar RGB ou nuvens de pontos através do motor de renderizaçãoMJCF define a câmera overhead_rgb

O modelo MJCF do reBot Arm não define elementos <sensor>; os dados dos sensores são lidos diretamente pela API Python:

# Read joint position
qpos = self.data.qpos[joint.qpos_addr]

# Read joint velocity
qd = self.data.qvel[joint.dof_addr]

# Read the gravity compensation torque (bias force)
mujoco.mj_forward(self.model, self.gravity_data)
tau_g = self.gravity_data.qfrc_bias[joint.dof_addr]

35.6 Principais parâmetros de tempo: tamanho do passo de simulação vs frequência de controle (facilmente confundidos)​

Physics dt: o intervalo de tempo da iteração interna de integração do motor de física. Ex.: 0,001 s = 1 kHz. Quanto menor o passo, mais precisa e estável é a física, mas maior a carga de CPU.

Taxa de controle: a frequência com que o nó de controle envia comandos para a simulação.

Por exemplo, 100 Hz. O período de controle deve ser um múltiplo inteiro do passo de simulação (por exemplo, calcular um comando de controle a cada 10 passos de física).

Regra de ouro: a frequência de controle deve cobrir suficientemente a largura de banda mecânica do braço (tipicamente malha de velocidade da junta > 1 kHz, malha de posição > 100 Hz), enquanto o passo de simulação deve ser 5–10x mais rápido que a frequência de controle para manter os comandos de torque suaves ao longo do tempo.

Os dois modelos MJCF do reBot Arm usam passos de tempo diferentes:

ModelotimestepSignificado
rebotarm_b601_stl.xml (modelo físico)0,001 s (1 ms = 1 kHz)Avança 1 ms de física por passo
rebotarm_b601_kinematic.xml (modelo cinemático)0,002 s (2 ms = 500 Hz)Avança 2 ms por passo, sem computação física

O modelo físico usa um passo de tempo menor (1 ms), porque a simulação dinâmica precisa de resolução suficiente para garantir estabilidade numérica. O modelo cinemático não precisa resolver equações de movimento, então 2 ms são suficientes.

<option timestep="0.001" gravity="0 0 -9.81" iterations="100" noslip_iterations="20"/>

iterations="100" e noslip_iterations="20" são parâmetros do solucionador de restrições, afetando a precisão da solução de contatos e atrito. Valores maiores são mais precisos, porém mais caros computacionalmente.

Em mujoco_torque_control.py, a frequência de controle e a frequência de publicação são separadas:

self.declare_parameter("control_hz", 500.0)   # control loop 500 Hz
self.declare_parameter("publish_hz", 60.0) # state publishing 60 Hz

O loop de controle roda a 500 Hz (a cada 2 ms), combinando com o passo de tempo de 1 ms do MuJoCo — cada ciclo de controle chama mj_step para avançar a simulação física. A publicação de estados roda a 60 Hz e publica externamente por meio de tópicos ROS2, evitando inundar os assinantes com dados de alta frequência.

A frequência de sincronização de real2sim_sync.py é muito menor:

self.declare_parameter("sync_hz", 60.0)  # sync rendering at 60 Hz

Como real2sim faz apenas sincronização cinemática (escrever qpos + mj_forward), sem chamar mj_step, ele não precisa de computação física em alta frequência. 60 Hz são suficientes para manter os visuais suaves.

35.7 Comparando os três formatos de modelo: URDF, MJCF e USD​

FormatoNome completo / origemCaracterísticasCenários aplicáveis
URDFUnified Robot Description Format (padrão ROS)Estrutura em árvore (sem elos fechados); extremamente forte para cinemática, mas fraco para descrição de dinâmica (inércia) e não suporta terrenos complexos.Braços tradicionais, bases móveis, padrão do ecossistema ROS.
MJCFMuJoCo XML FormatOtimizado especificamente para dinâmica de corpos múltiplos e contato; descrição extremamente detalhada de parâmetros físicos (atrito, elasticidade, amortecimento). Suporta geração automática de casco convexo.Reinforcement learning (RL), tarefas de contato de alta precisão (por exemplo, preensão com mão hábil).
USDUniversal Scene Description (open source pela Pixar)Gerenciamento de cena em nível Hollywood; suporta cenas ultra-grandes, composição hierárquica e materiais e iluminação extremamente realistas.Isaac Sim, gêmeos digitais, geração de dados sintéticos de alta fidelidade (profundamente integrado com NVIDIA Omniverse).

Recomendação de caminho de desenvolvimento: use URDF para algoritmos de braço tradicionais; use MJCF para reinforcement learning/manipulação hábil; escolha USD para geração de dados de simulação/renderização fotorrealista.

O desenvolvimento do reBot Arm envolve os dois primeiros:

URDF — exportado do SolidWorks, cada elo contém os três subelementos <inertial>, <visual>,

e <collision>, usados para exibição no RViz e planejamento no MoveIt2:

<link name="base_link">
<inertial>
<mass value="0.79874480798149"/>
<inertia ixx="..." iyy="..." izz="..."/>
</inertial>
<visual>
<geometry>
<mesh filename="package://rebotarm_bringup/description/meshes_b601_gripper/base_link.STL"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://rebotarm_bringup/description/meshes_b601_gripper/base_link.STL"/>
</geometry>
</collision>
</link>

Observe a limitação do URDF: collision só pode reutilizar a malha visual; você não pode definir separadamente um corpo de colisão simplificado.

Esse também é o motivo pelo qual o reBot Arm mantém MJCF em paralelo — MJCF pode definir de forma independente visual (malha) e colisão (caixa) no mesmo elo.

MJCF — o MJCF do reBot Arm também suporta elementos de cena que o URDF não consegue expressar (mesa, objetos, câmera):

<camera name="overhead_rgb" mode="fixed" pos="0.42 0 0.86" fovy="50"/>
<body name="red_cube" pos="0.34 -0.13 0.061">
<freejoint/>
<geom type="box" size="0.025 0.025 0.025" mass="0.04"/>
</body>

USD — o reBot Arm não o utiliza atualmente, mas se for necessário migrar para o Isaac Sim no futuro, a conversão pode ser feita com as ferramentas urdf_to_usd ou mjcf_to_usd.

35.8 Os dois gigantes de simulador: MuJoCo VS Isaac Sim (respondendo "Qual devo escolher")​

Dimensão de comparaçãoMuJoCoIsaac Sim
Posicionamento centralLaboratório de física leve (a ferramenta do matemático)Plataforma de gêmeo digital de nível empresarial (o metaverso do engenheiro)
Motor de físicaBaseado em otimização convexa/complementaridade cônica; contatos estáveis e resistentes a explosões numéricas, simulação extremamente rápida (pode rodar a 10x de velocidade ou mais).Baseado em PhysX 5 (acelerado por GPU); suporta corpos rígidos/moles e fluidos; forte realismo físico.
Capacidade de renderizaçãoRudimentar (OpenGL), quase sem iluminação ou sombras.Ray tracing cinematográfico (RTX); pode gerar imagens perfeitas semânticas/de profundidade/segmentação.
Requisito de hardwareRoda suavemente em CPU (funciona mesmo sem GPU).Requer uma GPU NVIDIA RTX (pelo menos uma 3060 para começar).
Cenários típicosTreinamento de políticas de reinforcement learning (por exemplo, OpenAI Gym), controle ótimo (MPC), dispositivos de baixo poder de computação.Geração de dados sintéticos (treinar modelos fundamentais de visão), hardware-in-the-loop (HIL), simulação de linha de fábrica completa.

O motivo da escolha do MuJoCo pelo reBot Arm é claro: o projeto precisa de validação dinâmica precisa (comparação de torque de compensação de gravidade) e espelhamento em tempo real do robô real (real2sim). Essas tarefas exigem alta precisão física e velocidade de computação, mas baixa qualidade de renderização. MuJoCo satisfaz exatamente essa necessidade.

Critérios de seleção entre os dois:

RequisitoPlataforma recomendadaMotivo
Modelagem de dinâmica e análise de torqueMuJoCoAlta precisão física, API dá acesso direto aos torques
Planejamento de movimento e validação de trajetóriaMuJoCo / RVizLeve, inicialização rápida
Percepção visual e simulação de sensoresIsaac SimSuporta câmeras, LiDAR e outros sensores
Treinamento de reinforcement learningIsaac SimParalelismo em GPU, ambientes em grande escala
Espelhamento em tempo real do robô realMuJoCoRoda em CPU, baixa latência
Renderização fotorrealista de cenaIsaac SimRay tracing RTX

35.9 Braço Simulado vs Braço Real: "Espelho" e "Lacuna"​

Relação: o braço simulado é uma "projeção matemática idealizada" do braço real.

Semelhanças: a cinemática (soluções direta/inversa) é completamente idêntica; limites de junta e limites de velocidade podem ser preenchidos exatamente de acordo com os parâmetros reais.

As seis juntas do reBot Arm têm exatamente os mesmos limites em MJCF e URDF:

JuntaFaixaLimites URDFLimites MJCF
joint1-2.8 ~ 2.8 radlower="-2.8" upper="2.8"range="-2.8 2.8"
joint2-3.14 ~ 0 radlower="-3.14" upper="0"range="-3.14 0"
joint3-3.14 ~ 0 radlower="-3.14" upper="0"range="-3.14 0"
joint4-1.87 ~ 1.57 radlower="-1.87" upper="1.57"range="-1.87 1.57"
joint5-1.57 ~ 1.57 radlower="-1.57" upper="1.57"range="-1.57 1.57"
joint6-3.14 ~ 3.14 radlower="-3.14" upper="3.14"range="-3.14 3.14"

Diferenças (Sim2Real Gap, a lacuna a ser superada):

1. Diferenças de dinâmica​

Na realidade há atrito, folga mecânica e deformação flexível; a simulação costuma ser um corpo rígido perfeito ou ter um modelo de atrito simplificado. No MJCF do reBot Arm, damping="0.8" e armature="0.01" são valores estimados; o atrito real das juntas e a inércia do rotor do motor precisam ser obtidos por identificação de sistema. O recurso de comparação de torque de mujoco_torque_control.py existe justamente para quantificar esse erro — ele calcula simultaneamente o torque de compensação de gravidade do MuJoCo e o torque de compensação de gravidade do SDK, e publica a diferença:

tau_mujoco = self._compute_mujoco_tau_g(q)  # computed by MuJoCo
tau_sdk = self._sdk_gravity(q=q) # computed by SDK
diff = tau_mujoco - tau_sdk # difference

O resultado da comparação é publicado por meio de três tópicos:

TópicoConteúdo
/rebotarm/mujoco/tau_gTorque de compensação de gravidade calculado pelo MuJoCo
/rebotarm/mujoco/sdk_tau_gTorque de compensação de gravidade calculado pelo SDK
/rebotarm/mujoco/tau_g_diffA diferença entre os dois

Se a diferença for pequena, o modelo de simulação corresponde bem à dinâmica do robô real, e o risco de transferência sim-para-real é baixo. Se a diferença for grande, os parâmetros do modelo precisam de calibração.

2. Diferenças de latência​

Na simulação, comandos de controle são executados quase instantaneamente, com latência zero; na realidade é preciso passar por "atraso de comunicação -> aceleração do motor -> estabelecimento de torque". real2sim_sync.py lida com isso usando o parâmetro stale_timeout:

self.declare_parameter("stale_timeout", 1.0)  # stop syncing after 1 second without data

Se o estado das juntas do braço real não for atualizado por mais de 1 segundo, o modelo de simulação para de seguir, evitando exibir poses desatualizadas.

3. Diferenças de percepção​

A câmera simulada gera RGB perfeito sem desfoque de movimento; uma câmera real tem atraso de exposição, deriva de balanço de branco e desfoque dinâmico. O MJCF do reBot Arm define uma câmera fixa:

<camera name="overhead_rgb" mode="fixed" pos="0.42 0 0.86" fovy="50"/>

Essa câmera pode renderizar a cena no visualizador do MuJoCo, mas há uma lacuna entre ela e a qualidade de imagem de uma câmera real.

35.10 Gêmeo Digital — A Forma Suprema de Simulação​

Definição: não é apenas "simulação offline", mas o estabelecimento de um canal de dados em tempo real para que cada ângulo de junta, torque e temperatura do braço real seja mapeado para o modelo virtual em tempo real, enquanto o modelo virtual também pode "ensaiar" ao contrário os próximos segundos de movimento (manutenção preditiva).

Os três níveis de gêmeos digitais:

NívelNomeCapacidade
Nível 1VisualizaçãoDashboard 3D, apenas para visualização.
Nível 2DiagnósticoQuando ocorre um erro real, o gêmeo destaca a parte com falha e rastreia os logs.
Nível 3PrevisãoCom base na carga atual, o corpo virtual calcula antecipadamente que "o motor pode sobrecarregar em 2 segundos", acionando proteção de redução de velocidade no mundo real.
Arquitetura de gêmeo digital do reBot Arm

Suavização e timeout: gêmeos digitais precisam lidar com jitter e interrupção dos dados do robô real. O parâmetro smoothing_alpha controla a suavidade do rastreamento (1.0 é rastreamento direto; menor que 1.0 é suavização exponencial), e stale_timeout controla o comportamento após o timeout de dados.

Apreensão virtual: real2sim_sync.py também implementa apreensão virtual — quando a garra se fecha até certo grau e o TCP está próximo de um objeto, o objeto se torna "preso" ao TCP e se move junto com ele; quando a garra abre, o objeto é liberado e cai livremente. Isso permite que o gêmeo digital não apenas espelhe poses, mas também simule interações de apreensão.

Gêmeo em nível de torque: mujoco_torque_control.py eleva o gêmeo digital do nível de cinemática para o nível de dinâmica. Ele não apenas sincroniza posições de juntas, mas também torques — usando o loop fechado de torque do MuJoCo para rastrear a trajetória das juntas do braço real, enquanto compara os torques de compensação de gravidade do MuJoCo e do SDK. Este é o passo-chave para o gêmeo digital passar de "consegue ver" para "calcula com precisão", e a base para avançar em direção ao Nível 2 (diagnóstico) e Nível 3 (previsão).


Loading Comments...