Como faço para um veículo se mover para um ponto e parar sem ultrapassar ou oscilar?

9

Ok, então considere que temos um veículo como o que descrevi na minha resposta a esta pergunta , com uma posição 2D, velocidade, velocidade angular e arrasto / fricção. Ele pode acelerar e quebrar em uma quantidade variável, mas não parar instantaneamente ou atingir a velocidade máxima instantaneamente. Como posso fazer com que ele se mova para um ponto específico e pare - no menor tempo possível - sem ultrapassar ou oscilar?

Eu estava pensando em algo como:

  • vire para a posição alvo.
  • acelerar
  • olhe 1 marca à frente, perguntando "Se eu aplicasse os intervalos na próxima marca, ultrapassaria o alvo?"
  • Se exceder, aplique as quebras agora de alguma forma.

Tenho certeza de que este é um problema resolvido e provavelmente existe um método melhor do que o que descrevi.

Iain
fonte

Respostas:

3

Usando o cálculo, se você souber sua velocidade e taxa de desaceleração máxima, poderá saber sua distância mínima de parada. Com isso em mente, você pode saber exatamente quando precisa aplicar os freios (deixando de lado os erros de arredondamento / quantização) para parar em um determinado ponto.

Agora, espero que alguém melhor em matemática do que eu publique a fórmula real ...

Kylotan
fonte
2
finalPositionDelta = -0.5 * sqr(currentSpeed) / maximumDecelerationNo entanto, isso pressupõe que sua desaceleração é constante, o que, dependendo da profundidade da sua simulação, pode não ser o caso. Eu iria com a solução de Ranieri. (whoops Desculpe é de desaceleração DIV, não mul)
tenpn
Sim, esse método ainda é útil, mesmo se você o enquadrar como um problema nos sistemas de controle, porque a compreensão dos gradientes envolvidos deve ajudar a evitar instabilidade ou oscilação na medição de erros.
Kylotan
1

Às vezes, no desenvolvimento de jogos, você precisa usar atalhos. O atalho aqui é chamado de impulso, que, fisicamente, é uma força muito grande aplicada em um tempo muito curto. Em vez de integrá-lo ao longo do tempo, basta aplicá-lo ao parâmetro como uma mudança direta: defina a velocidade como 0.

A questão é: você deseja usar o atalho ou não?

ADB
fonte
2
Não estou preocupado em usar atalhos se for invisível para o jogador, mas se um veículo pudesse parar no local, isso pareceria muito estranho.
Iain
11
Isso certamente é verdade, no entanto, ajuda a parar precisamente no ponto que você deseja após uma desaceleração, evitando cálculos complexos e fazendo com que o tempo seja dividido muitas vezes.
ADB