Paolo Pinto
Ingegnere Aeronautico e
Programmatore
Con particolare riferimento all’ utilizzo ludico si effettuerà il calcolo dell’ occupazione di memoria nel caso di applicazioni in tempo reale, dimostrando che per renderla compatibile con le macchine attuali (Dicembre 2002) occorre giungere a dei pesanti compromessi sul realismo della simulazione.
Essendo impossibile approfondire in questa sede i dettagli del calcolo, cosa per cui occorrerebbe un libro, questa trattazione si rivolge a lettori già esperti del settore.
Si partirà dal classico modello monotraccia ; ovvero
le reazioni dei pneumatici vengono considerate applicate al centro dell’ asse
di appartenenza, pur tenendo conto dei trasferimenti di carico.
Vengono trascurati i momenti autoallineanti
L’ effetto del camber può essere calcolato una volta
per tutte ove lo si consideri fisso, e in tal caso viene inserito nei diagrammi
di aderenza dei pneumatici.
Ove si cerchi una maggior sofisticazione, occorre
tenere presente che il movimento delle sospensioni porta a una variazione dell’ angolo di camber. Tale movimento
dipende dal rollio della vettura, che a sua volta è funzione dell’
accelerazione laterale. E’ pertanto possibile includere nelle caratteristiche
anche questo effetto, con opportuni calcoli.
Si trascurano caster, conicità, stagger e ply steer.
Si partirà inizialmente dalle ipotesi di pista 2D,
per poi estendere la trattazione al caso 3D.
I dati inizialmente occorrenti sono :
CARATTERISTICHE FISICHE DELLA VETTURA
W : peso della vettura
a : distanza orizzontale tra asse anteriore e
baricentro
b : distanza orizzontale tra asse posteriore e
baricentro
h : altezza del baricentro
Ta : carreggiata anteriore
Tp : carreggiata posteriore
KA : Rigidezza al rollio della sala
anteriore
KP : rigidezza al rollio della sala
posteriore
KS : rigidezza torsionale della scocca
Da(u): deportanza anteriore (in funzione
della velocità)
Dp(u) : deportanza posteriore (in
funzione della velocità)
mA(a,FZ) : Coefficiente di aderenza della sala
anteriore (in funzione di slip angle e carico verticale)
mP(a,FZ) :
Coefficiente di aderenza della sala posteriore (in funzione di slip angle e
carico verticale)
Molti di questi dati non compariranno esplicitamente
nella trattazione ; essi intervengono però nei calcoli di dettaglio (come
quello del trasferimento di carico) , che saranno solo citati di sfuggita,
supponendoli noti al lettore
La vettura viene considerata come un corpo rigido :
ne sono note pertanto le
COMPONENTI DEL MOTO
u : velocità della vettura lungo l’ asse
longitudinale
v : velocità della vettura in direzione normale all’
asse longitudinale
w : velocità angolare della vettura
A queste si potrebbe aggiungere una componente
“fittizia” :
Ciò significa che pur non simulando graficamente il movimento in rollio della vettura, si terrà aggiornato di volta in volta questo parametro, utile al calcolo dell’ effetto degli ammortizzatori.
Inoltre è noto di volta in volta, l’
INPUT DEL PILOTA
d : angolo di sterzo
In via di prima approssimazione la deportanze
anteriore e posteriore possono essere considerate delle funzioni quadratiche
della velocità.
Occorre però tenere presente che questo non è
rigorosamente vero.
Infatti buona parte della deportanza di una vettura
da competizione deriva dall’ effetto suolo, che non è una funzione quadratica
della velocità.
Esso dipende fortemente dalla distanza tra fondo
scocca e piano stradale e dall’ inclinazione della vettura : due parametri
dipendenti dalla rigidezza delle molle (non delle barre antirollio) .
Quindi intensità
e punto di applicazione del vettore deportanza generata dall’ effetto
suolo variano con la velocità in modo non elementare, seppur calcolabile.
Si tenga presente che la deportanza genera un’
inclinazione, che a sua volta modifica la deportanza, che a sua volta modifica
l’ inclinazione e così via. Un piccolo programma di calcolo può risolvere il
problema.
L’
inclinazione della vettura ha anche un effetto sull’ angolo di attacco a cui
lavorano gli alettoni, anche se la variazione è meno sensibile.
Tra
l’ altro non va trascurato il downwash dell’ ala anteriore su quella
posteriore; sebbene tale effetto non sia rigorosamente quadratico, è ampiamente
accettabile considerarlo tale in prima ( e seconda…) approssimazione.
Il
moto del veicolo (senza trasferimenti di carico)
Si
esaminerà, per dare un’ idea generale dei meccanismi connessi , il moto di una
vettura che sia miracolosamente esente da trasferimenti di carico.
Successivamente riprenderemo in esame questo fattore.
Si
supponga una vettura a trazione
posteriore che sia dotata inizialmente di sola velocità longitudinale u ,
mentre v ed w sono nulle
L’
angolo di sterzo d sarà nullo, mentre il tiro T potrà essere qualunque ; per comodità lo
supporremo ad un valore capace di imprimere una lieve accelerazione, agendo
ovviamente sulle ruote posteriori.
La
vettura procede quindi inizialmente dritta.
Il
pilota decide di curvare a destra ; pertanto imprime una rotazione d alle ruote anteriori.
Ciò
causa l’ insorgere di uno slip angle sul treno anteriore, che potremo porre
inizialmente pari a d, benché nella realtà alcuni effetti che per ora trascuriamo lo rendano
lievemente minore.
Lo
slip angle genera una forza applicata all’ asse anteriore, dipendente dal
carico verticale applicato, che è somma di carico aerodinamico (dipendente da
u) e statico.
Ciò ha tre effetti :
1)
Una
accelerazione verso destra del baricentro della vettura, con conseguente
nascita di una componente v
Tale
accelerazione è data dalla forza generata dai pneumatici divisa per la massa della vettura
2)
Una
accelerazione angolare in senso orario intorno al baricentro, con conseguente
nascita di una componente w .
Tale accelerazione angolare è data dalla coppia
generata dalle ruote sterzanti divisa per il momento di inerzia polare della
vettura
3) Una diminuzione di u, dovuta alla
resistenza indotta dei pneumatici anteriori
Nel
frattempo il tiro applicato alle ruote posteriori ha causato un aumento di u.
All’
istante successivo preso in esame (il frame successivo) la vettura si
presenterà quindi ruotata (effetto di w) e traslata (effetto di u e v). Avendo essa
subito una rotazione, le u e v andranno aggiornate tenendo presente il nuovo
angolo , mentre w resta ovviamente la medesima.
A
questo punto si avranno due nuovi slip angles all’ anteriore ed al posteriore .
Lo
slip angle posteriore dipenderà da u, v
,w , T
oltre che dalle caratteristiche fisiche della vettura
Lo
slip angle anteriore dipenderà da u, v,
w , d .
Questa
volta si generano pertanto DUE forze, una applicata all’ asse anteriore ed una
applicata all’ asse posteriore ; è chiaramente possibile scomporle in una
coppia , una forza trasversale applicata al baricentro ed una forza
longitudinale applicata al baricentro.
Quindi
nuova u, nuova v, nuova w , con cui modificare la posizione della vettura e con cui entrare
(dopo avere ricalcolato u e v in funzione della nuova angolazione della vettura)
nella frame successiva.
L’
effetto dei trasferimenti di carico
In
quanto detto finora si sono , come detto, trascurati i trasferimenti di carico.
Ciò
ha consentito di avere una prima idea delle cose ; tuttavia in una simulazione
i trasferimenti di carico non sono trascurabili.
In
effetti, quando alla vettura vengono impartite delle accelerazioni trasversali
(centripete), si verifica un trasferimento di carico laterale.
In
presenza di accelerazioni longitudinali si ha un trasferimento di carico
longitudinale.
Ciò
fa sì che i 4 pneumatici siano caricati, in linea di principio, da 4 carichi
verticali Fzi diversi tra loro.
I
carichi verticali modificano l’ aderenza dei pneumatici in un modo che può
essere calcolato tramite le curve di Pacejka.
E
qui sorge il problema : come calcolare
le accelerazioni della vettura, se esse sono influenzate dalle aderenze, che a
loro volta sono influenzate dalle accelerazioni stesse?
E’
chiaro che occorre fare ricorso ad una iterazione numerica che parta dall’
ipotesi di assenza di trasferimenti di carico, o da altra ipotesi ragionevole
sulla loro entità.
Simulazioni
ingegneristiche e tempi biblici
Se
questo modello fisico dovesse venire applicato ad una simulazione
ingegneristica, utile al calcolo del comportamento di un veicolo reale, i
calcoli iterativi possono essere eseguiti man mano.
La
loro pesantezza farà sì che i tempi di elaborazione siano piuttosto lunghi, ma
anche giornate di tempo macchina sono in questo caso accettabili.
In
compenso non si avrà alcuna perdita sul piano della qualità.
I
videogiochi : questione di RAM
E
se si decidesse di applicare questo modo di procedere ad un videogame ?
E’
ovvio che , ove si desideri una risposta in tempo reale, non è nemmeno
pensabile di eseguire simili iterazioni numeriche mentre il programma principale gira.
Questi
calcoli vanno effettuati prima.
Conosciute
le caratteristiche della vettura, occorrerà pertanto valutare ALL’ AVVIO DEL
PROGRAMMA, tutte le componenti u, v, w che si hanno in corrispondenza di ogni
possibile combinazione di :
u,
v, w, d, T
per
poi andarle semplicemente a leggere in una matrice multidimensionale, senza
effettuare ogni volta i calcoli.
La
matrice deve essere memorizzata in RAM, perché i tempi di accesso dal disco
rigido non sarebbero accettabili.
Quante sono queste combinazioni ?
Ciò
dipende dalla “definizione” richiesta ; ovvero quanti possibili valori si
decida di attribuire ad ogni parametro
Può
inizialmente apparire ragionevole ipotizzare che ciascun parametro possa
assumere 256 diversi valori,
memorizzabili in un byte.
Che
significa ciò in termini di definizione ?
Ove
si prenda in esame la velocità longitudinale
u, essa, per una vettura da corsa , può considerarsi compresa tra 0 e
400 Km/h (velocità effettivamente toccata a Le Mans dai Prototipi e a Fontana
dalle vetture CART) .
Poiché
si desidera però un modello fisico capace anche di simulare un testacoda in
piena velocità, il vero range dovrebbe essere compreso tra –400 e +400.
Non
ha chiaramente senso avere la stessa definizione per le velocità negative e
quelle positive ; si può pertanto assegnare
alle velocità negative una definizione minore che per semplicità si pone
ora pari ad ¼ di quelle positive.
E’
ovvio che sono possibili ripartizioni più sofisticate, con un aumento della
definizione per le basse (in valore assoluto) velocità negative ed una
diminuzione per quelle alte, visto che una
vettura in testacoda a 400 Km/h è comunque totalmente incontrollabile e
rallenta davvero in fretta.
Comunque,
con la convenzione ora descritta, si disporrà di 64 valori per simulare le
velocità tra -400 e 0 Km/h e 192 valori
per le velocità tra 0 e 400 Km/h
Per
le velocità negative si avranno quindi incrementi di
-400/64
= -6.25 Km/h
mentre
per le velocità positive gli incrementi saranno di :
400/192
= 2.08 Km/h
Si
tratta di valori senz’ altro accettabili… ma c’ è un problema
L’
utilizzo di 5 parametri in input, ciascuno con 256 valori, significa la creazione di una matrice con
2565 elementi.
Inoltre
ogni elemento rappresenta una possibile
combinazione u, v, w, ed è pertanto composto da 3 bytes
L’
occupazione di memoria richiesta è spaventosa
:
3*256^5 = 3.298 E12 bytes = 3145728 Mb !!!
Una
occupazione di memoria accettabile
Si
è visto come 256 valori per parametro siano troppi.
L’
unica soluzione è diminuire la definizione.
Quantità
accettabili per la RAM possono
essere :
u
: 21 valori (contenibili in 1 byte)
v
: 15 valori (contenibili in ½ byte)
w : 15 valori (contenibili in ½ byte)
d : 15 valori
T
: 15 valori
Adesso
ogni elemento della matrice contiene 2 bytes ( cioè 1 byte per u e 2 mezzi
bytes ciascuno per v ed w, che forniscono l’ output desiderato) ; La matrice risultante avrà
dimensioni :
21*15*15*15*15*2
= 2126250 bytes = 2.02775 Mb
Finalmente
una quantità ragionevole, che può comunque essere diminuita, a scapito della
definizione, o viceversa.
Definire
con l’ accetta
Utilizzando
questi valori sorge però un problema drammatico sulla definizione ; ad esempio,
si prenda in esame la velocità longitudinale u .
Supponendo,
secondo il ragionamento prima svolto,
che 16 dei 21 valori possibili
siano assegnati alle velocità positive, si dispone di soli 16 valori per
rappresentare velocità comprese tra 0 e 400 Km/h.
Ciò
vuol dire che le caratteristiche sono calcolate solo ogni 25 Km/h.
Se
ci si fermasse qui, il modello fisico risultante sarebbe completamente privo di
fluidità.
Interpolando
multidimensionalmente
La
soluzione sta nell’ interpolare tra i (relativamente) pochi valori disponibili.
Essendo
i valori in input ben 5 ( ovvero u,v,w,d,T) occorrerà interpolare su
tutti questi.
Si
riprenda in esame la velocità longitudinale u.
La
matrice contiene triplette u,v,w solo in corrispondenza di u (positive) pari a
0,
25, 50, 75, 100, 125, 150, 175, 200, 225, 250 Km/h e così via fino a 400 Km/h,
con incrementi di 25 Km/h da un’ elemento all’ altro.
Per
semplicità, si supponga inizialmente che i parametri v,w,d, T che il veicolo ha in un dato istante siano precisamente
corrispondenti a valori presenti nella matrice, non presentando quindi alcuna
necessità di approssimazione.
Solo
per la u si presenta un problema,
essendo essa di 105 Km/h, valore non presente in matrice
Si
esamineranno gli elementi della matrice corrispondenti ad u = 100 (che conterrà
u100, v100, w100) ed u = 125 (che conterrà u125,
v125, w125)
Si
può pertanto effettuare una media ponderata dei valori di u,v,w forniti dai due elementi
viciniori, dando ovviamente maggiore peso a quello più vicino :
u = 4/5 u100 + 1/5 u125
v
= 4/5 v100 + 1/5 v125
w = 4/5 w 100 + 1/5 w 125
Naturalmente,
in linea generale, i restanti parametri v,w,d, T non saranno affatto corrispondenti a
valori presenti in matrice.
Pertanto
la u andrà calcolata riferendosi ai valori di v,w,d, T che meno si discostano
da quelli effettivi.
Tuttavia
sarà possibile ripetere questo ragionamento anche per gli altri parametri .
Il
risultato sarà costituito da 5 triplette u,v,w , ciascuna interpolata su
un solo parametro
Basterà
fare la media di questi risultati per ottenere la tripletta u,v,w da usare
nello step successivo
Grazie
a questo tipo di interpolazione, si otterrà una continua variabilità delle
caratteristiche della vettura, pur in presenza di pochi dati.
Gli
ammortizzatori
Con
i parametri fisici finora considerati non si può simulare la rigidezza degli ammortizzatori : essi sono sensibili alla velocità di
rollio (anche a quella di beccheggio, ma c’e’ un limite a quello che un povero
programma di simulazione può fare…)
Infatti
la rigidezza di rollio può considerarsi dovuta a 3 fattori :
1)
Km
= rigidità delle molle
2)
Kb
= rigidità della barra antirollio
3)
Ka
= rigidità degli ammortizzatori.
Occorre
tenere presente che Km e Kb dipendono dal rollio, e sono
le sole rigidità che intervengono col veicolo a regime.
Al
contrario Ka dipende dalla velocità di rollio ; ha quindi influenza
nei transienti, come l’ entrata e l’ uscita di curva , ma non ha effetto a
regime.
Volerne
tenere conto in una simulazione implica quindi l’ aggiornamento di una
variabile dq/dt , velocità di rollio
Esso
è influenzato dall’ altezza del baricentro e dall’ entità delle accelerazioni
centripete, oltre che dalla rigidezza delle molle e dalla taratura degli
ammortizzatori.
Ci
si ritrova qui di fronte ad un problema già visto : gli ammortizzatori offrono
una resistenza al rollio che dipende dalla velocità di rollio ; ma la velocità
di rollio dipende dalla resistenza offerta dagli ammortizzatori …. Niente
lacrime, prego : siamo tecnici.
E
ricorreremo ancora ad un programma numerico. Decisamente, questi calcoli vanno
effettuati all’ inizio.
Certo,
usare anche questo parametro implica l’ aumentare ancora la grandezza delle
matrici. Non esistono pasti gratis.
Tre
dimensioni
Ormai
tutti i simulatori di guida sono su 3 dimensioni. Questo implica che la vettura
debba muoversi lungo un tracciato che presenta dislivelli.
I
dislivelli influiscono in più modi sul moto.
Chiaramente
la macchina tenderà ad accelerare in discesa e rallentare in salita, ma vi sono
anche effetti più sottili.
Infatti,
se prendiamo ad esempio una salita, la forza peso non agirà più normalmente
rispetto alla vettura, ma secondo un vettore inclinato.
Come
si vede in figura, tale vettore intercetterà il suolo in un punto posto
posteriormente rispetto al baricentro.
Ciò
significa che il treno posteriore sarà maggiormente caricato : la macchina
tenderà a sottosterzare rispetto al piano. Analogamente, in discesa si avrà
sovrasterzo.
Inoltre
non è detto che il dislivello sia semplicemente una salita o una discesa ; esso
può essere laterale, come in una curva sopraelevata stile Indianapolis, e in
tal caso influirà sulla tenuta laterale.
Ciò
crea la necessità di comunicare di volta in volta alla vettura l’ inclinazione
del piano stradale.
C’
è di più : possono infatti crearsi notevoli effetti inerziali, come avviene in
presenza di dossi, dove una vettura può addirittura decollare, come succedeva
sul vecchio Nurburgring
Questo
implica che del tracciato dovranno essere memorizzate anche le coordinate di
elevazione z, oltre che x ed y.
Occorre
che il programma controlli, ad ogni step almeno 3 punti , ad esempio la
mezzeria delle ruote anteriori e un punto per ogni ruota posteriore.
Ciò
permette di individuare ad ogni istante le inclinazioni laterale ILT e
longitudinale ILG della vettura, ed eseguire i calcoli opportuni.
Nelle
equazioni del moto dovrà entrare anche una nuova coordinata di velocità
verticale w; questa sarà utilizzata per gli effetti inerziali di salto.
Sarebbe
opportuno inserire addirittura una velocità angolare di beccheggio.
Un
impiego collaterale di queste nuove
componenti può essere il loro sfruttamento per la visualizzazione di incidenti
particolarmente spettacolari, come quelli che avvengono in caso di aggancio tra
le ruote di due vetture.
Tuttavia
nel caso di un videogame, è improbabile che il giocatore si accorga di una
simile sottigliezza, e può essere possibile ricorrere a sequenze preregistrate
per i “voli”.
Farewell
Definition
Come
si è visto, nel caso 3D entrano in gioco i nuovi parametri velocità verticale
w, inclinazione longitudinale ILG, inclinazione trasversale ILT .
Inoltre
un buon simulatore 3D dovrebbe simulare anche gli ammortizzatori ; introducendo
un quarto parametro velocità di rollio dq/dt
L’
aggiunta di qusti parametri fa sì che le definizioni viste nel caso 2D siano
purtroppo eccessive per un simulatore 3D
3D vs RAM
Quale
sarebbe l’ occupazione di memoria per il caso 3D (con ammortizzatori) ?
I
parametri in input sono u,v,w,w, dq/dt, d, T, ILT, ILG
I
parametri in output sono : u,v,w,w, dq/dt
Non
c’è infatti bisogno di avere ILG, ILT in output, perchè essi saranno forniti
allo step successivo dalla lettura dei punti di controllo della pista (salvo l’
eccezionale situazione di un salto, che può essere gestita da una diversa
routine dato che in quel caso, mancando il contatto con il suolo, l’ effetto
dei pneumatici è nullo ed i calcoli sono semplificati).
Immaginando
di avere :
11 valori per u (contenibili in ½ byte)
9 valori per v (contenibili in ½ byte)
7 valori per w (contenibili in ½ byte)
3 valori per w (contenibili in ¼ byte)
3 valori per dq/dt (contenibili in ¼ byte)
5
valori per d
5
valori per T
2
valori per ILT
2 valori per ILG
abbiamo
che la matrice avrà 623700 elementi ed ogni elemento della matrice conterrà 2
bytes ;
Dimensione
totale : 1.784 Mb
Solo
l’ esperienza, ovviamente , potrà dire quali sono i parametri cui assegnare più
o meno valori.
Le collisioni con lo scenario
Come
entrano le collisioni con muri e altre vetture nel modello fisico ?
In
realtà la collisione non fa che fornire delle nuove componenti di velocità u, v
,w ,
w alla vettura; una volta calcolatele
con le equazioni della fisica elementare (bilancio della quantità di moto e
dell’ energia cinetica) , esse diventano l’ input allo step successivo, senza
che il discorso nella sostanza cambi