Programação diferencial para um veículo

8

Estou em um ponto no meu veículo em que, quando estou indo rápido e girando, o veículo age de maneira estranha porque os pneus internos estão se movendo mais rapidamente do que os pneus externos. Então, eu preciso descobrir como programar em um diferencial, mas eu não consigo fazê-lo funcionar corretamente, então eu estou aqui para ver se alguém tem experiência com isso.

Eu verifiquei online a física, mas isso parece levar mais informações do que eu posso fornecer no meu jogo (como a influência da gravidade real no veículo). Atualmente, uso a seguinte lógica para determinar as velocidades diferenciais das rodas. Vou tentar explicar da maneira mais clara e simples possível, e peço desculpas se é confuso ou simplificado demais, é confuso para mim!

Aqui está o que eu faço: divido meu grau de turno atual pelo valor máximo de turno para obter uma porcentagem, depois pego essa porcentagem e a aplico a uma porcentagem modificadora (apenas uma porcentagem que inventei e aprimorei para reduzir o número passado para o diferencial, não tenho certeza do que realmente deveria ser. Velocidade do motor? Velocidade?). Então, no meu diferencial, verifico se o veículo está virando para a esquerda ou direita e reduzo a velocidade de um lado em x% e aumento a velocidade do outro lado no mesmo x%

Estou certo de que meu maior problema é o número que estou inventando para reduzir a porcentagem de turnos, mas não sei dizer o que colocar lá. Eu sei que passar diretamente o turn% para o diferencial (digamos, 40%) reduziria um lado em 40 e aumentaria o outro em 40 e isso claramente não está certo.

Tenho acesso à velocidade do motor, transmissão, velocidade de cada roda, torque, velocidade do veículo, etc., mas não tenho certeza de quais delas devo levar em consideração ao fazer esta fórmula.

Talvez eu esteja complicando demais ou talvez esteja simplificando demais. Qualquer ajuda para entender isso seria ótimo!

Mungoid
fonte
Que problemas você realmente teve com a física real envolvida? Como a gravidade é facilmente obtida (é uma constante que você deve apenas ajustar, mesmo vai para a massa do veículo etc ..)
Roy T.
Bem, não há realmente nenhum grande problema com a física real, mas como eu realmente não sei muito sobre diferenciais e mecânica (da vida real), a física passou por minha cabeça.
Mungoid

Respostas:

9

Eu realmente acho que você não deve fazê-lo dessa maneira e que você deveria examinar mais a física real (veja meu comentário). No entanto, posso dizer por que sua abordagem atual não funciona. (Muito tempo para os comentários, então eu vou postar isso como resposta)

Vamos primeiro explorar o que acontece (você provavelmente já fez isso sozinho).

Ponto de inflexão

A localização é basicamente como na figura acima, mas vamos simplificar um pouco os números:

Digamos que o carro C tenha 2 metros de largura e um círculo de viragem mínimo de 5 metros. Agora eu dirijo completamente à esquerda. A roda dianteira esquerda agora segue um círculo com um diâmetro de 5 metros. A roda dianteira direita segue agora um círculo com o diâmetro de 7 metros. Ao completar um círculo completo, a roda esquerda percorre 10 * pi metros. A roda direita percorre 14 * pi metros. Agora dizer que as rodas de C todos têm o mesmo tamanho, e que o perímetro das rodas é de 0,5 metros * pi (sim essas são as rodas grandes, mas ninguém disse que não poderia modelar um caminhão monstro!) O diferencial será é necessário garantir que, a cada 20 rotações da roda esquerda, a roda direita gire 28 vezes para que nenhuma delas deslize.

Então você pode dizer agora que o diff-% deve ser ajustado, digamos, para a esquerda completa, deve diferenciar + 40%, e vamos ler isso para a direita direita -40% e então somos dourados?

Infelizmente, como você viu, isso não funciona. Vamos encontrar uma fórmula geral para o diferencial neste carro. Aqui x é o círculo de viragem desejado.

left wheel distance: x*pi meters
right wheel distance: (x+2)*pi meters:
left wheel rotations: x*4
right wheel rotations: (x+2)*4  

Eu argumentaria que o diff deve funcionar na fração ((x + 2) * 4 / (x * 4)) [*]. (Vezes 100%, se você quiser em porcentagens) Vamos traçar isso:

gráfico diferencial

Como você pode ver claramente, essa função não é linear. Portanto, apenas ter o diferencial depende linearmente de quanto sua direção para a esquerda ou para a direita nunca vai funcionar.

Agora vejo que é tentador usar apenas a fórmula acima, mas acho que provavelmente é melhor se você não usar, pelas razões descritas acima :). Além disso, você precisará implementar 2 diferenciais, a menos que, se sua direção envolver as quatro rodas, o que dificulta ainda mais a implementação, consulte a 1ª imagem novamente.

[*]: que podemos simplificar: (x + 2) * 4 / (x * 4) => (x + 2) / x

Roy T.
fonte
Não estou no meu computador de trabalho para tentar isso, mas tenho um forte pressentimento de que você está certo em todos os pontos! E você não está muito longe da coisa do caminhão monstro. É uma peça de maquinaria pesada para um simulador, de modo que as rodas têm cerca de 2 metros de diâmetro. Originalmente, eu pensei que seria capaz de 'trapacear', pois só preciso manter as rodas no chão, mas acho que isso tornará muito mais preciso. Vou correr os números amanhã e avisá-lo. Obrigado!
Mungoid
Sim, sua postagem me apontou na direção certa. Eu tinha tentado minha própria versão da matemática que você deu, mas aparentemente estava fazendo um pouco errado. Obrigado pela orientação!
Mungoid