Thursday, July 26, 2012

More precision

Here the last version of the autopilot.. is more precise, it's error is under 1 meter but for now it doesn't work if the object to reach change position while you're approaching to it.




Eccovi un filmato che dimostra come funziona ora l'autopilota dopo tutte le elucubrazioni matematiche che ho dovuto compiere.
 Non riuscendo (per ora) ad eseguire una accelerazione ed una frenata precisa in modo che l'astronave si fermi esattamente nel punto di arrivo, ho dovuto operare per approssimazioni successive. La funzione e' piu' o meno cosi'




  1. Ferma l'astronave se si muove 
  2. Allinea l'astronave verso la destinazione 
  3. Accelera fino a quando hai compiuto meta' della distanza 
  4. Rimani a velocita' costante fino a distanza pari a velocita*(1-exp(-5*t))/3; 
  5. Rallenta fino a raggiungere una velocita' di 2 m/s: se a sto punto la distanza e' maggiore di 50 metri allora riparti da capo, altrimenti:
  6. Rvanza lentamente fino alla destinazione
  7. Rallenta fino a fermarti 




Nel video una dimostrazione: l'astronave e' molto lontana dalla stazione spaziale, voglio portarla fino all'ingresso del "tunnel". Per complicare le cose punto il muso dell'astronave in una direzione casuale ed accelero in modo da muovermi da tutt'altra parte. Puo' essere interessante qualche numerino che vedete: in alto a destra, in bianco, con la label S: viene indicata la velocita' attuale.
A destra pos x, y e z indicano la posizione attuale, state indica in quale degli stati (elencati sopra) di autopilota attualmente sta operando l'astronave, ed infine dist e' la distanza dalla destinazione.


Questo algoritmo purtroppo non funziona se l'oggetto destinazione si muove nel frattempo che l'astronave cerca di raggiungerlo. A questo devo ancora lavorare


 

Wednesday, July 25, 2012

Still Alive

I'm not dead, i'm just working hard on autopilot :)

Non sono morto, e' che sto lavorando intensamente per rendere l'autopilota preciso. Sembra una banalita' ma la semplice sequenza Allineati, Accelera, aspetta, decelera fino a fermarti e' estremamente complessa, o meglio lo e' riuscire far si' che sia sufficientemente precisa, specie quando a priori non sono noti i frames al secondo.


Se devo andare da A a B in un sistema 3D, fatta ipotesi pure che inizialmente io sia fermo, devo:


- Ruotare fino a puntare B- Accelerare diciamo fino a meta' strada- Frenare.Il primo punto l'ho realizzato e funziona bene.Anche il secondo, che e' piuttosto banale.Il difficile e' proprio il frenare. Cioe': nel caso dell'accelerazione costante, detto t il tempo che e' intercorso tra un frame all'altro la velocita' nuova e' banalmente v2=v1+a*t dove v1 era la velocita' precedente.Ma per la decelerazione? non va bene semplicemente considerare a "negativo" perche' non trattasi di frenata ma bensi' di accelerazione nel verso opposto. Una formula migliore e' v2=v1*e^(-f*t). I guai iniziano pero' non appena inizio a calcolare lo spazio di frenata con una simile equazione. integrando ottengo una formula che va bene sul continuo, il gioco pero' funziona per intervalli discreti, ovvero gli intervalli di tempo tra un frame e l'altro, e pertanto la formula matematica che ottengo mi da un risultato approssimato, tanto piu' approssimato tanto piu' gli fps sono bassi. Col rischio che su un pc buono l'algoritmo funzioni bene, su un pc obsoleto l'algoritmo addirittura non faccia a tempo a frenare.


Stay Tuned..