Sete corpos, seis juntas.
A entrada Um corpo só, quatro bengalas terminou com uma afirmação que ficou sem prova: a VehicleConstraint é um modelo lumped e não é o rover. Esta entrada constrói a alternativa — corpos rígidos ligados por juntas, com motor no eixo de cada roda — e submete as duas montagens à mesma manobra, para trocar a afirmação por número.
O que "articulado" quer dizer, concretamente
O que existia · lumped
Um corpo rígido e quatro conjuntos de números fingindo ser rodas. As rodas não têm massa, não têm forma e não colidem com nada: mSteerAngle, mAngularVelocity e mAngle são float.
Um raio desce até o chão, mede, e uma fórmula devolve a força. Nenhuma peça mecânica existe.
O que foi construído · rocker
Sete corpos rígidos — chassi, dois braços, quatro rodas — e seis juntas. Cada roda é um cilindro com massa que colide com o chão de verdade.
E nenhuma mola: quem absorve o degrau é a geometria, quando o braço gira. Esse é o princípio do rocker-bogie, e é impossível num bloco único porque não há o que girar.
chassi
├─ Hinge (curso ±30°) ──→ braço esq ─┬─ Hinge + motor → roda 0
│ └─ Hinge + motor → roda 1
└─ Hinge (curso ±30°) ──→ braço dir ─┬─ Hinge + motor → roda 2
└─ Hinge + motor → roda 3O detalhe que mais importa está no motor na junta. Em vez de empurrar o corpo para a frente — que é o atalho —, o código manda o eixo girar: SetMotorState(EMotorState::Velocity) e SetTargetAngularVelocity(v / raio). A roda gira, o atrito com o chão faz o conjunto andar. É como um veículo anda de verdade: o motor não empurra o carro, ele gira o eixo.
0.2 (BodyCreationSettings.h:107). Com esse valor a roda acionada por motor patina em vez de andar. Foi elevado a 1.0 em roda e chão, e isso virou parâmetro declarado do experimento — não detalhe escondido.O banco de ensaio, e as duas vezes que ele estava errado
O vehicle_probe, que antes rodava um veículo só, virou um banco capaz de montar as duas plataformas e submeter as duas à mesma manobra: acelerar em reta contra um degrau. Mesma massa (1500 kg), mesma bitola, mesmo raio de roda, mesma velocidade.
Essa parte — igualar as condições — é o trabalho de verdade da semana, e ela precisou de duas correções antes de produzir um número em que dê para acreditar.
Erro 1 · as velocidades não batiam
Na primeira rodada o lumped percorreu 79 m e o rocker 9,6 m no mesmo tempo — 19 m/s contra 1,8 m/s. Comparar inclinação assim mede a velocidade, não o mecanismo.
Correção
Velocidade-alvo comum de 1,5 m/s. O rocker deriva a rotação do eixo de ω = v/r; o lumped ganhou um acelerador proporcional, porque o WheeledVehicleController tem curva de torque própria e dispara se receber 1.0 fixo.
Erro 2 · o chassi era um pêndulo invertido
O chassi ficava com 10° de inclinação permanente, até parado em chão plano. Sem explicação física.
Causa
As duas juntas dos braços são coaxiais em X, e eu as tinha posto abaixo do centro de massa do chassi. O chassi ficava equilibrado sobre elas como uma vassoura na palma da mão — não há nada segurando a inclinação, e ela cresce sozinha. O pivô subiu para a altura do centro de massa e os 10° sumiram.
Resultado 1 · a articulação funciona
| Degrau de 0,20 m · mesma velocidade, mesma massa | lumped | rocker |
|---|---|---|
| Inclinação do chassi no obstáculo | 4,34° | 0,00° |
| Inclinação máxima na manobra inteira | 4,43° | 0,10° |
| Altura final do chassi | 1,044 | 0,850 |
E o mecanismo aparece na telemetria: quando a roda dianteira encontra o degrau, os braços giram −4,1° e o chassi não se mexe. O braço absorveu o obstáculo inteiro. Conferindo do outro lado, a roda dianteira termina em y = 0,500 — que é exatamente o raio (0,30) mais o degrau (0,20): ela está em cima do degrau, enquanto o chassi seguiu nivelado.
z = 8,50; o Godot mede 0,10° e z = 8,47. É a mesma física rodando nos dois lugares.Resultado 2 · o modelo antigo estava trapaceando
Varrendo a altura do degrau, o resultado parece se inverter — e é aqui que o ensaio entrega mais do que prometia.
| Degrau | lumped | rocker | incl. do lumped |
|---|---|---|---|
| 0,10 m | sobe | sobe | 2,23° |
| 0,20 m | sobe | sobe | 4,34° |
| 0,30 m | sobe | não sobe | 6,45° |
| 0,50 m | sobe | não sobe | 10,78° |
À primeira vista o lumped ganha. Só que a roda tem 0,30 m de raio — e ele está subindo um degrau de 0,50 m. Isso é fisicamente impossível: é um carro de passeio subindo um meio-fio na altura do capô.
passo | z | altura | incl.° | susp0 susp1 susp2 susp3
180 | 3.70 | 0.844 | 0.00 | 0.364 0.364 0.364 0.364
210 | 4.61 | 0.984 | 8.24 | 0.160 0.160 0.319 0.319 ← salta
240 | 5.51 | 1.090 | 10.70 | 0.385 0.385 0.365 0.365
330 | 8.15 | 1.356 | 0.00 | 0.377 0.377 0.376 0.376 ← em cimaA suspensão dianteira comprime de 0,364 para 0,160 de repente e o chassi salta — sem a roda nunca encostar na parede do degrau. O motivo já estava descrito em Um corpo só, quatro bengalas, mas agora está medido: naquele modelo a roda não existe, existe um raio apontado para baixo. Quando o raio passa da quina, encontra o topo, e a fórmula puxa o veículo para lá. A parede vertical do degrau não está no modelo — e a caixa do chassi passa por cima dela porque está mais alta.
O rocker falha em 0,30 m — exatamente o raio da roda, que é o limite geométrico correto de uma roda rígida sem ajuda.
Resultado 3 · o custo, medido uma semana antes
No meio do ensaio, o chassi articulado afundava 15 cm andando em chão plano. Sem explicação física: não há mola, e as rodas são rígidas. Investigar isso entregou, de graça, a medição que a faixa A do roadmap ia buscar.
| Esforço de cálculo | Altura final | Incl. máx | µs/quadro |
|---|---|---|---|
| 10 vel / 2 pos · o padrão do Jolt | 0,727 | 1,09° | 103 |
| 30 vel / 6 pos | 0,828 | 0,12° | 132 |
| 60 vel / 12 pos | 0,843 | 0,49° | 172 |
| 4 sub-passos | 0,850 | 0,10° | 335 |
| 8 sub-passos | 0,850 | 0,24° | 673 |
A altura geometricamente correta é 0,850. Portanto: não era física, era o cálculo não terminando — e o padrão do Jolt erra 12 centímetros nesta montagem.
A causa é a razão de massa: o chassi tem 1200 kg e cada braço tem 50 kg. Vinte e quatro para um através de uma junta é duro para um solver que resolve por aproximações sucessivas — com poucas rodadas ele para antes da resposta, e a junta "estica". É exatamente o tipo de montagem que a VehicleConstraint nunca produz, porque lá existe um corpo só.
de 4 para 8, o resultado não muda mais — e o custo dobra
mesmo a configuração mais cara usa 673 µs de 16 700 µs por quadro
O que isso muda
A frente passou a fazer jus ao nome
"Dinâmica multicorpo" descrevia, até esta semana, um projeto cuja simulação tinha um corpo. Agora tem sete, ligados por juntas, com a articulação medida fazendo o que deveria.
de leitura sobre multicorpo para multicorpo rodandoO modelo antigo ganhou um limite conhecido
Não é "menos preciso": ele não representa a forma do obstáculo. Serve para terreno de altura suave; não serve para degrau, pedra ou quina — que é o cenário de rover.
o que foi medido com ele antes precisa ser relido com isso em menteO caminho do rover está aberto e orçado
A montagem articulada existe, roda no Godot, e custa 4 % de um quadro. O que separa isto de um rover não é mais viabilidade — é quantidade de peças.
a pergunta virou "quando", não "se"O que falta
O bogie — seis rodas
O rocker de quatro rodas para no degrau igual ao raio da roda. É exatamente esse limite que o bogie existe para vencer: a perna dianteira é erguida sobre o obstáculo pela geometria do conjunto. É a continuação natural, e agora com um número concreto para bater — 0,30 m.
O terreno
Trocar o chão de caixa por HeightFieldShape e deformar o sulco com SetHeights. Continua valendo a distinção: o Jolt deforma a geometria, mas não tem terramecânica.
A cena nascer da física
A lição nº 1 do GDChrono. Foi adiada de propósito: com duas montagens concretas na mão, a abstração certa fica muito mais fácil de enxergar do que com uma só. Agora existem duas.