Dinâmica multicorpo (C++)
O modelo multicorpo de verdade — cada roda e cada corpo como um nó rígido próprio, ligado por articulações, com as forças resolvidas por restrições em vez de raycast com mola. Esta frente é o passo além do sandbox do Godot.
1 · Constraints, juntas e o Jolt por
dentro — a quinzena de 27/jul a
10/ago, dedicada a entender o paradigma antes de construir qualquer coisa: o
que é um sistema multicorpo, penalidade × constraint, os graus de liberdade de
cada junta do Godot, o experimento mínimo com HingeJoint3D e o que o Godot
não expõe do Jolt.
2 · O tanque do Jolt e o teto do
Godot — a parte empírica, de 10 a 12/ago:
o Tank Controller Demo rodando, as peças do VehicleConstraint lidas direto nos
headers em C++, a prova de que o VehicleBody3D do Godot não é uma exposição
dele, e o teste que bate no limite ao tentar suspensão com SliderJoint3D.
3 · Um corpo só, quatro
bengalas — a mecânica interna,
lida no código-fonte: o veículo do Jolt tem um único corpo rígido, a
constraint é entre o veículo e o chão, e é o raycast que descobre esse
segundo corpo a cada passo. Fecha com o clamp μ·N do Jolt, que é o mesmo do
protótipo raycast.
4 · Dois mundos, uma cena — a primeira
entrada que produz binário em vez de leitura: uma GDExtension em C++ com um
PhysicsSystem do Jolt próprio rodando dentro do Godot, com vídeo do veículo
sendo dirigido. Traz a decisão de arquitetura, a armadilha de paridade de ABI,
a medição que fecha com a teoria em 0,1 %.
5 · Duas pontes, um desenho — a
conferência cega: o professor já tinha ligado o Godot ao Project Chrono e
chegou ao mesmo desenho de arquitetura, sem a gente combinar. Traz o código
lado a lado, as três diferenças em que ele está à frente, e o achado de que o
GdChrono já roda um rover Viper sobre terreno SCM deformável.
6 · Sete corpos, seis juntas — a
primeira entrada que mede em vez de descrever. Monta a plataforma articulada
de verdade — corpos ligados por HingeConstraint, motor no eixo de cada roda — e
a compara com a VehicleConstraint na mesma manobra: 0,00° contra 4,34° de
inclinação do chassi ao passar um degrau. Descobre, de quebra, que o modelo de um
corpo só sobe degraus maiores que a própria roda porque ignora a face do
obstáculo.
Escopo previsto
- Cada roda e corpo como um nó rígido próprio, ligado por articulações.
- Forças resolvidas por restrições, não por raycast com mola.
- O salto conceitual do arcade car (corpo rígido único) pro modelo rigoroso.
- Formulação, integrador numérico e estabilidade.
O que vem a seguir
O comparativo Jolt × Godot a partir de um Sample e a tentativa de replicá-lo
com nós Joint3D já foram feitos e estão documentados em O tanque do Jolt e o
teto do Godot, e a mecânica interna da
VehicleConstraint está destrinchada em Um corpo só, quatro
bengalas.
A segunda faixa do roadmap — usar C++ e o GDExtension para testar o Jolt de
verdade — está executada e documentada em Dois mundos, uma
cena: o ambiente do godot-cpp, a extensão
compilando, o Jolt rodando isolado e o nó JoltVehicle dentro do Godot. O código
fica em gdjolt/ na raiz do repositório.
A leitura do GDChrono deixou três pontos a adotar, em ordem de importância: construir a cena a partir da física (pré-requisito do rover — enquanto o número de rodas estiver escrito no código, não há rover), unificar o build em CMake e tratar o passo de simulação como decisão explícita.
Esses pontos viraram o roadmap 14–21 set · O rover cabe no Jolt? — e a resposta chegou antes da sprint começar, em Sete corpos, seis juntas: a plataforma articulada existe, roda no Godot, mantém o chassi nivelado onde o modelo de um corpo só inclina 4,34°, e custa 4 % do orçamento de um quadro.
Fica registrado o preço dessa troca: ao transformar a roda num corpo que colide, ganha-se articulação e perde-se o modelo de pneu, porque o contato passa a ser atrito comum de corpo rígido. E fica registrado o custo escondido: a razão de massa entre chassi e braços exige 4 sub-passos por quadro — com o padrão do Jolt, o solver para 12 cm abaixo da altura correta.
Segue em aberto, agora com alvo numérico: o bogie de seis rodas, que é o
mecanismo que vence o limite encontrado — uma roda rígida não sobe degrau maior
que o próprio raio, e o rocker de quatro rodas para em 0,30 m. Depois dele, o
terreno e a refatoração que faz a cena nascer da física.
O GdChrono já roda o Viper sobre terreno SCM, o que dá alvo concreto
para as frentes de integração roda–solo e
validação comparativa.
Referência de partida: a nota do sandbox no Godot,
que mostra por que o VehicleBody3D não é um multicorpo de verdade.