O rover cabe no Jolt?
A entrada anterior fechou a ponte C++ e provou que o Jolt roda dentro do Godot. Mas o que roda hoje é um veículo de um corpo só — a VehicleConstraint é um modelo lumped, sem articulação nenhuma. Rover não é isso.
A pergunta que decide o rumo do projeto era: dá para montar dinâmica multicorpo de verdade com o Jolt — corpos e juntas — e ainda caber no orçamento de um quadro? Ela foi respondida antes da sprint começar. O que a semana faz agora é ir além do limite que a resposta revelou.
A pergunta do título está respondida: a plataforma articulada existe, mantém o chassi a 0,00° onde o modelo de um corpo só inclina 4,34°, e custa 4 % do orçamento de um quadro. Boa parte da faixa A veio junto, de brinde. O que sobra para a sprint está reorganizado abaixo.
O entregável-âncora
O rover articulado cabe no Jolt — sim, e está medido
Sete corpos, seis juntas, motor no eixo de cada roda. Chassi a 0,00° contra 4,34° do modelo lumped no mesmo degrau, com 4 sub-passos por quadro consumindo 4 % do orçamento. Publicado em Sete corpos, seis juntas.
O bogie: vencer o degrau de 0,30 m
O ensaio encontrou um limite exato: o rocker de quatro rodas sobe degrau de 0,20 m e para em 0,30 m — que é o raio da roda, o limite geométrico de uma roda rígida sem ajuda.
É precisamente esse limite que o bogie existe para vencer. A perna dianteira é erguida sobre o obstáculo pela geometria do conjunto. O entregável tem número para bater: subir um degrau que a montagem de quatro rodas não sobe.
Três faixas, uma pergunta
Multicorpo de verdade
Plataforma articulada montada, medida e rodando no Godot. Trouxe junto duas descobertas: o modelo lumped sobe degraus maiores que a própria roda porque ignora a face do obstáculo, e o passo padrão do Jolt erra 12 cm nesta montagem.
Quanto cabe num quadro
O cronômetro está no vehicle_probe e a curva do solver já foi levantada para a montagem articulada. Falta repetir com vários veículos na cena — o orçamento é do quadro inteiro, não de um veículo.
O terreno
Chão de altura variável e deformação do sulco. Nada feito ainda, e agora com um motivo a mais: o obstáculo de face vertical mostrou que a forma do terreno importa.
Faixa A · o orçamento do quadro
Quatro parâmetros controlam quanto o Jolt calcula por passo. Os três primeiros já foram varridos na montagem articulada — o resultado está em Sete corpos, seis juntas, e a conclusão é que a configuração recomendada é 4 sub-passos. Falta repetir com vários veículos na cena: o orçamento é do quadro inteiro, não de um veículo.
Update várias vezes por quadro com dt/N · o botão principal · é o que aproxima do passo de 0,5 ms do professorSetNumStepsBetweenCollisionTestActive · de quantos em quantos passos o raycast da roda é refeito — hoje todo passoInstrumentar o medidor
- Cronometrar cada
PhysicsSystem::Updatee reportar mínimo, mediana e máximo — o pico é o que estoura o quadro, não a média. - Definir uma manobra padrão reproduzível: acelerar em reta, subir um degrau, curva fechada. Sem ela, nada é comparável.
- Fixar as métricas de fidelidade: erro no impulso de suspensão contra m·g·Δt, penetração máxima da roda, tremor do corpo parado.
A varredura e a curva
- Variar um parâmetro por vez: sub-passos 1, 2, 4, 8, 16, 32 — até encostar no 0,5 ms do professor (33 sub-passos).
- Repetir para as iterações do solver e a frequência do raycast.
- Montar a curva e marcar o joelho: o ponto em que dobrar o custo para de melhorar o resultado. E marcar onde os 16,7 ms estouram.
Porquê: a partir daqui, "quanto isso custa" tem resposta em número para qualquer coisa que eu adicionar depois.
↳ curva custo × fidelidadeFaixa B · feita — e o que ela abriu
Executada em 9–10/set. O relato completo, com as tabelas e os dois erros de projeto que o ensaio precisou corrigir antes de valer alguma coisa, está em Sete corpos, seis juntas.
O bogie · o entregável da sprint
Uma roda rígida sozinha não sobe degrau maior que o próprio raio. O rocker-bogie resolve isso com geometria: a perna dianteira é erguida sobre o obstáculo pelo conjunto, em vez de ter que escalá-lo.
A geometria de seis rodas
- Estender
src/rocker_rig.h: cada rocker ganha, na ponta traseira, um bogie — um segundo braço articulado com duas rodas. Total: 11 corpos, 10 juntas. - O
GroupFilterTablee o filtro de auto-colisão já existem e escalam sozinhos; o header foi escrito com isso em mente. - Ajustar o curso de cada junta. O curso errado trava o mecanismo antes dele trabalhar.
A varredura de degrau, de novo
- Rodar a mesma manobra padrão nas três montagens — lumped, rocker de quatro, rocker-bogie de seis — varrendo o degrau de 0,10 a 0,50 m.
- A tabela responde de uma vez: até onde cada uma sobe, e com quanta inclinação de chassi.
- Medir o custo por quadro das 11 peças e conferir se ainda cabe nos 16,7 ms.
A pergunta que fecha: o bogie passa dos 0,30 m? Se passar, o rover está a uma refatoração de distância. Se não passar, saber por quê vale igual.
↳ tabela das três montagens + vídeo do bogie subindo o que o rocker não sobeFaixa C · o terreno, se sobrar tempo
HeightFieldShape::SetHeights(), que permite abrir o sulco onde a roda passou, em tempo de execução. O que ele não tem é terramecânica: nenhum Bekker, nenhum Janosi, nenhuma força de resistência ao afundamento ou de cisalhamento. Essa parte existe no Chrono e teria que ser escrita à mão no Jolt.Relevo, sulco e o custo dos dois
- Trocar o chão de caixa por um
HeightFieldShapee confirmar que a suspensão responde ao relevo — a telemetria por roda deve deixar de ser simétrica. - Deformar onde a roda tocou, com
SetHeightsnuma janela pequena ao redor do contato — a ideia de domínio ativo copiada do GDChrono. - Medir o custo por quadro e somar ao orçamento da faixa A.
- Listar o que o
SCMTerraincalcula e o Jolt não, e estimar o que seria escrever isso à mão — e se vale, dado que o Chrono entrega pronto.
O que sai desta sprint
Já entregue · 9–10 set
- A plataforma articulada rodando no terminal e no Godot, com a comparação contra o modelo de um corpo só.
- A curva do solver — o joelho em 4 sub-passos, e a constatação de que o padrão do Jolt erra 12 cm nesta montagem.
- O limite geométrico medido — 0,30 m, o raio da roda.
- A entrada publicada: Sete corpos, seis juntas.
Até terça, 15 de setembro
- O rocker-bogie de seis rodas — 11 corpos, 10 juntas (o entregável-âncora).
- A tabela das três montagens — até onde cada uma sobe, e com quanta inclinação.
- O custo por quadro das 11 peças, conferido contra os 16,7 ms.
- Vídeo do bogie subindo o degrau que o rocker de quatro não sobe.
Esta semana eu NÃO vou
Um mecanismo, não um veículo. O bogie existe para responder uma pergunta com número — não para virar o rover final.
- Modelar o rover da ExoTerra com geometria real — a montagem é genérica de propósito
- Refatorar a cena para nascer da física — agora há duas montagens, o que torna a abstração fácil, mas não é esta semana
- Migrar o build para CMake
- Escrever terramecânica do zero
- Recuperar o modelo de pneu perdido na troca
Perguntas para o professor
Continuam abertas — a reunião de 8/set foi adiada. Duas delas a semana responde sozinha, e isso está marcado.
Sobre o rumo · as que só ele responde
- O alvo é uma ponte ou duas? Faz sentido o projeto ter Jolt e Chrono lado a lado — um para tempo real, outro para fidelidade — ou é para convergir numa só?
- Posso usar o Viper como referência de rover articulado, ou o alvo é um rover da ExoTerra com geometria própria?
- O que conta como validação para o PIBIC: comparar contra o Chrono na mesma manobra, ou contra dado experimental?
- O rover precisa rodar em tempo real, ou pode rodar mais devagar que o relógio? Isso muda toda a leitura da curva da faixa A.
Sobre o código dele
- O passo de 0,5 ms do GDChrono foi escolhido por convergência do SCM, por estabilidade das juntas do Viper, ou empiricamente?
- Em
ChWorld.cpp, oSCMTerrain terrain(&sys)é variável local dentro doInit()— o terreno continua vivo depois que a função retorna?
As que eu mesmo respondi
- Dá para montar multicorpo articulado no Jolt? ✔ Sim — 7 corpos, 6 juntas, chassi a 0,00° contra 4,34°.
- Cabe no orçamento de um quadro? ✔ Sim, com folga — 4 % em 4 sub-passos, que é onde a curva para de melhorar.
- Solo deformável é viável no Jolt em tempo real? → ainda em aberto, faixa C.
De onde eu parto
A ponte C++ está de pé e verificada — ver Dois mundos, uma cena. Tenho um vehicle_probe que roda o veículo sem Godot e imprime telemetria, o que torna a faixa A quase só instrumentar o que já existe.
E tenho as duas leituras que sustentam a faixa B: a mecânica interna da VehicleConstraint, que explica por que ela não articula, e a tabela de graus de liberdade das juntas, que é exatamente o material para montar a perna.