Come posso evitare che le ruote dell'auto Raycast scivolino lateralmente?


11

Ho scritto un motore di fisica delle auto non realistico come esercizio di apprendimento, usando questo articolo come riferimento.

Ho un'auto che si scontra correttamente con un terreno e applica le forze di sospensione corrette per ogni ruota. Il mio prossimo problema è prevenire il movimento laterale delle ruote. Ad esempio, se lascio cadere la mia auto su un pendio, scivolerà lateralmente lungo il pendio e quindi non smetterà mai di scivolare lateralmente (poiché non vi è alcun attrito di alcun tipo).

L'articolo collegato afferma che deve essere applicata una "forza laterale", combinata con la forza diretta, ma che analizza il modo in cui viene calcolata quella forza laterale.

Date le informazioni sulla collisione per ciascuna ruota (intersezione normale, ecc.) E le informazioni sul corpo rigido dell'auto, come posso calcolare la forza laterale appropriata da applicare al corpo rigido per impedire il movimento laterale?

Risposte:


10

Quella forza laterale è la componente orizzontale del normale della strada rispetto al movimento in avanti dell'auto. Le strade sono inclinate come si sta discutendo per facilitare le curve a velocità più elevate senza volare fuori dalla pista dallo slancio spingendole verso l'angolo esterno. Il sistema bancario spinge indietro in una direzione in cui le gomme non ruotano liberamente e si spera possano resistere; se il banco fosse abbastanza ripido, il baricentro abbastanza alto o la velocità abbastanza lenta, la macchina stessa fungerebbe da ruota e si rigirerebbe semplicemente.

I pneumatici hanno una gamma limitata di sterzo. Le forze che agiscono perpendicolarmente all'asse longitudinale (dalla parte anteriore a quella posteriore) sono parzialmente resistite perché i pneumatici non ruotano in quel modo. È possibile calcolare la forza che agisce lateralmente rispetto alla strada dalla gravità e dalla velocità in avanti e quindi calcolare la forza rimanente dopo che il pneumatico ha rimosso parte di questo attrito. Se la forza rimanente è abbastanza grande da superare la forza che spinge la macchina nella strada, la macchina scivolerà / scivolerà.

Quanto segue illustra questo ed è discusso qui (con e senza attrito) :

   https://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Banked_turn.svg/375px-Banked_turn.svg.png

La forza che agisce in senso orizzontale è di particolare interesse qui. A riposo (solo la forza che agisce su di essa è dovuta alla gravità), l'auto non scivolerà giù da una pendenza che corre perpendicolare a meno che il coefficiente di attrito non sia eccezionalmente basso ( ad esempio una strada ghiacciata).


7

La risposta di Andon non mi ha dato la soluzione, ma sicuramente mi ha messo sulla strada giusta!

Una volta che ho iniziato a pensare che le ruote fossero sul loro piano (il cui normale è il vettore che sporge dal centro - mi riferirò a questo come "normale" della ruota) ho capito che la forza laterale è solo il vettore richiesto per "spingere" la velocità della macchina su questo piano. Questo vettore è semplicemente il "normale" della ruota moltiplicato per uno scalare che è il prodotto punto tra la velocità e il "normale".

Ecco il codice su cui ho optato che funziona perfettamente:

            // Now calculate the side force. Get the linear velocity
            auto vel = car->body()->linear_velocity();
            auto side_force = car->wheel_right_axis(i, closest_normal);

            // Find the length of the vector necessary to nullify the horizontal movement
            auto dot = kmVec3Dot(&vel, &side_force);

            // Scale the right vector to that length
            kmVec3Scale(&side_force, &side_force, -dot);

Nel codice sopra, "più vicino_normale" è la normale del terreno con cui la ruota si è scontrata e viene utilizzata come vettore "su" quando si calcola la "normale" della ruota.


2
Sì, non pensavo davvero che ti avrebbe dato la risposta di cui avevi bisogno, ma era troppo lungo per inserire un commento;)
Andon M. Coleman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.