Technology Experience

Flight Simulation

Tutto ciò che riguarda il mondo della simulazione del volo: add-on, programmazione, scenari, software aggiuntivi, aerei di terze parti, etc.

.NET WorldFlight Simulation

Ottenere la nazione date latitude e longitudine (con Google Map)

Qualche giorno fa ho postato sui miei account Twitter e Facebook una piccola richiesta di aiuto, subito accolta da tutti i miei amici, che mi hanno suggerito la soluzione. La espongo qua, perchè può essere utile a qualcun’altro. E siccome sono blogorroico, vi descriverò lo scenario all’interno del quale l’ha utilizzata.

Anche in questo caso c’entra Flight Simulator.
Vediamo come e perchè.

Supponiamo il diagramma seguente. Scusatemi, ma non ho avuto il tempo di farlo in scala (cit.), e quello che vedete qui sotto non rappresenta in alcun modo una cartina vera. E’ solo un esempio, ma basta ed avanza.

Il pallino verde è un aeroplano che sta volando da qualche parte nel mondo.
La freccia blu è la direzione che sta seguendo.
I confini rossi sono appena gli ipotetici confini di tre nazioni: nazione A, B e C.

Il diagramma sopra mostra quindi l’aereo che sta volando nello spazio aereo della nazione C. Ma sta volando nella direzione indicata, quindi prima o poi oltrepasserà i confini della nazione C ed entrerà in B.

Esiste un servizio Web che mi permette, date latitudine e longitudine, di sapere in quale nazione mi trovo?

La risposta è ovviamente sì. Mi è stato ovviamente suggerito Google Map, e così ho fatto, ottenendo il risultato che volevo. Per la documentazione del caso, rivolgetevi a questo url.

La versione breve è questa. Richiamando (anche da un semplice browser) il seguente URL:

http://maps.google.com/maps/geo?q=45,9&output=kml&sensor=false&key=your_api_key

ottenete uno Stream di risposta in codice KML.

Il parametro q nella querystring sono latitudine/longitudine, separate da “,” (virgola). Latitudine 45, Longitudine 9 è un qualche punto della Lombardia, precisamente Voghera (PV). Il parametro output indica il formato di output che vogliamo in risposta: kml va più che bene. Il parametro sensor è messo a false. Il parametro key deve riportare l’api key che avete richiesto direttamente a Google.

KML non è nient’altro che XML che, opportunamente parserizzato, vi restituisce tutta una serie di informazioni, tra cui anche il country name.

Prima vediamo il codice della mia classe GoogleMapLookupCountry:

   1:      public class GoogleMapLookupContry : ILookupCountry
   2:      {
   3:          KmlParser parser = new KmlParser();
   4:   
   5:          public string GetCountry(double latitude, double longitude)
   6:          {
   7:              string apiKey = "your_api_key";
   8:   
   9:              string countryName = string.Empty;
  10:   
  11:              string outputFormat = "kml";
  12:              string stringLatitude = latitude.ToString().Replace(',', '.');
  13:              string stringLongitude = longitude.ToString().Replace(',', '.');
  14:              string url = string.Format("http://maps.google.com/maps/geo?q={0},{1}&output={2}&sensor=false&key={3}",
  15:                  stringLatitude, stringLongitude, outputFormat, apiKey);
  16:              HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
  17:   
  18:              string kml = ServiceHelper.GetStringResponse(request.GetResponse());
  19:   
  20:              return parser.GetCountryName(kml);
  21:          }
  22:      }

La prima cosa da fare è registrarvi su Google e richiedere un’API key, da incollare alla riga 7 del codice qui sopra.

Il metodo GetCountry ottiene in ingresso latitudine e longitudine (in formato double). Alla riga 14 costruisco l’url da richiamare via HttpWebRequest. Notare che l’output che vogliamo ottenere da Google Map deve essere in formato KML: il parametro {2} all’interno dell’url indica proprio il formato di output, che nel codice è cablato a “kml” (riga 11).

Alla riga 18 nascondo un po’ di complessità: passo la WebResponse (ottenuta da request.GetResponse()) al metodo statico GetStringResponse che prende il byte[] e mi ritorna la stringa in caratteri ASCII. Tutto ciò finisce nella variabile string kml (riga 18).

Alla riga 20 passo il codice KML al metodo GetCountryName che restituisce appunto il nome in chiaro della nazione in cui mi trovo. Ecco il codice della classe KmlParser:

   1:  public class KmlParser
   2:      {
   3:          XmlNamespaceManager nsmgr;
   4:   
   5:          public KmlParser()
   6:          {
   7:              nsmgr = new XmlNamespaceManager(new NameTable());
   8:              nsmgr.AddNamespace("google", "http://earth.google.com/kml/2.0");
   9:              nsmgr.AddNamespace("address", "urn:oasis:names:tc:ciq:xsdschema:xAL:2.0");
  10:          }
  11:   
  12:          public string GetCountryName(string kmlCode)
  13:          {
  14:              string countryName = string.Empty;
  15:   
  16:              XmlDocument document = new XmlDocument();
  17:              document.LoadXml(kmlCode);
  18:   
  19:              XmlNode node = document.SelectSingleNode("//address:CountryName", nsmgr);
  20:   
  21:              if (node != null) countryName = node.InnerText;
  22:   
  23:              return countryName;
  24:          }
  25:      }

Non sto qui a descrivervi il codice riga per riga. Voglio solo fare questa annotazione: il codice KML restituito da Google dichiara il namespace specificato alla riga 8 del codice qui sopra (“http://earth.google.com/kml/2.0”). Prima di poter fare il SelectSingleNode (riga 19), dovete quindi istanziare un XmlNamespaceManager ed aggiungere i vari namespace che ci servono (nel nostro caso due). La ricerca tramite XPath, quindi, deve utilizzare “//” per selezionare il primo nodo che si chiama CountryName, indipendentemente da dove questo si trovi all’interno dell’KML, ma deve anche specificare il prefix per il namespace (“address”) e l’istanza di XmlNamespaceManager creata nel costruttore della classe.

Conclusione

Supponiamo di interrogare FSX ogni 60 secondi per chiedere la posizione dell’aereo. Otterremo la sua latitudine e la sua longitudine ogni 60 secondi. E’ sufficiente una piccola chiamata al servizio di Google Map ed otterremo la nazione in cui ci troviamo. Esempio pratico: decollate da Trieste ed otterremo ovviamente “Italia”. Dopo aver preso quota, virate verso est (direzione 90°) e quando entrerete in Slovenja, ecco che magicamente il servizio Google Map ci dirà – guarda caso – proprio “Slovenja”.

Detta così è una cosa banale e stupida, ma vi posso assicurare che si possono tirar fuori un certo numero di cose interessanti.

Send to Kindle
Flight Simulation

[FSX] Cominciare un volo libero con FSX: aereo, aeroporto, meteo e data/ora

Questo sarà all’incirca il penultimo post relativo a Flight Simulator X da un punto di vista utente. In futuro ne parlerò ancora – è il motivo per cui ho inaugurato la categoria Flight Simulation nel mio blog – ma al di fuori di questa mini-serie che ho deciso di scrivere per introdurre un po’ tutti voi all’argomento.

Oggi smettiamo di parlare di teoria, e vediamo qualche screenshots della mia installazione di Flight Simulator X. La prima cosa da dire è che FSX su Windows Vista/Windows 7 disabilita Aero, per cui non spaventatevi se vedete sul vostro desktop qualche effetto grafico scomparire. La schermata principale di FSX è la seguente:

Ho evidenziato i quattro pulsanti interessanti che descriverò in questo post. Questa è la schermata del Volo Libero, che probabilmente è la funzione più utilizzata di FSX. Da qui potete selezionare un aereo (tra quelli installati), un aeroporto qualsiasi in tutto il pianeta ed infine le condizioni meteo, ora e stagione in cui volete volare. Vediamole una alla volta.

Selezione di un aeromobile
Per scegliere l’aereo (o l’elicottero, o l’aliante, etc.) con cui volete volare cliccate sul pulsante Cambia in alto a sinistra. FSX vi mostra un elenco con tutti i velivoli disponbile. Potete filtrarli per costruttore (Airbus, Beechcraft, Grumman, Boeing, etc.), oppure per tipo di motore (aliante, autogiro, jet bimotore, etc.), oppure per produttore software (Microsoft, Level-D, Flight1, etc.). Ecco la mia schermata:

Per ciascun aereo potreste avere più varianti disponibili: per vederle tutte, basta attivare la casella Mostra tutte le varianti. Ad esempio, il Douglas DC-3 è disponibile come cargo, con la livrea militare, grigio metallizzato, etc.

Da qui, banalmente, selezionate un velivolo e poi cliccate su OK per tornare alla schermata precedente.

Selezione di un aeroporto
Cliccate sul pulsante Cambia in alto a destra per selezionare l’aeroporto da cui volete partire.

Gli aeroporti disponibili sono moltissimi. Per facilitarvi le cose, potete filtrarli per nazione, per stato/provincia e per città. Ad esempio, nello screenshot qui sopra ho filtrato sulla nazione “Italia” e per città “Firenze”. A Firenze ce n’è uno solo, Peretola, che difatti compare nell’elenco. La posizione esatta in cui verrà collocato l’aero viene determinata da quello che impostate nell’elenco Scegliere pista/posizione di partenza: potete scegliere una qualsiasi delle piste disponibili, oppure uno dei parcheggi presenti in aeroporto.

Precisazione: se volete da soli sul vostro PC, ovviamente potete fare quello che volete e partire da dove volete. Se volete in rete, in multiplayer intendo, è assolutamente buona norma posizionarvi presso uno dei parcheggi. Come accade nella realtà, infatti, prima di rullare e decollare dovete essere autorizzati. E soprattutto, non dovete disturbare gli altri velivoli già in transito nell’area dell’aeroporto. Ma ci sarà tempo in futuro per parlare di questi “dettagli”.

Una volta selezionato l’aeroporto e la posizione, cliccate su OK per tornare alla schermata precedente.

Condizioni meteo
FSX simula il bel tempo, il nebbia, la pioggia, la neve, la tormenta di neve, qualsiasi tipo di foschia e, più in generale, qualsiasi condizione meteo. Le condizioni meteo con cui volete volare possono essere…

  1. impostate a mano (clima invernale, nebbia, tempo burrascoso, temporale, etc.)
  2. scaricate da Internet, così volate con le vere condizioni meteo presenti nell’aeroporto selezionato
  3. personalizzate esattamente come volete voi

L’opzione (3) è ovviamente la più complessa. Dovete impostare il tipo di nuvola a seconda dell’altitudine. Dovete impostare i venti a bassa quota e i venti ad alta quota, e così via. Un consiglio? Se avete Internet sotto mano, usate l’opzione (2) e siete a posto: in pochi secondi FSX scarica le informazioni meteo dal Web ed imposta automaticamente il simulatore. La morale è: se a Linate in questo momento sta piovendo, pioverà anche all’interno del simulatore. Più realismo di così!

Una volta scelto il meteo che volete, premete OK per tornare alla schermata precedente.

Selezionare ora e stagione
Questo è talmente ovvio che non necessità di spiegazioni, credo. Qui banalmente potete selezionare giorno/mese/anno ed ora del giorno in cui volete volare. Nulla di più. Questo influisce sulla visibilità e sulle temperature esterne, chiaramente. Se volate a mezzogiorno con il bel tempo, avrete la massima visibilità possibile. Se volate di notte, idem, solo che…ehm…siete di notte e probabilmente un volo VFR è un po’ più complicato. Se volate nella bassa Lombardia a gennaio trovate freddo, gelo e neve. Se volate in bassa Lombardia d’estate trovate caldo ed umidità.

Selezionare giorno/mese/anno ed ora del giorno, poi cliccate su OK per tornare alla schermata precedente.

Come si comincia un volo?
Tornate per un attimo al primo screenshot che ho pubblicato in questo post. Abbiamo impostato un volo libero, per cui siete pronti a salire sull’aereo. Come? Semplice! Cliccate sul pulsante Inizia Volo in basso a destra ed aspettate il caricamento di FSX. In base alle impostazioni, il tempo richiesto – come sempre – può essere più o meno lungo. Al termine, sarete sull’aereo che avete scelto, e nella posizione che avete indicato.

In realtà, dalla schermata principale potete fare diverse cose in più: impostare il carburante ed il carico, pianificare il piano di volo, gestire ed impostare eventuali guasti sull’aereo, e così via. Diciamo che ad un livello base quello che ho descritto questa mattina può bastare.

Appuntamento alla prossima volta!

Send to Kindle
Flight Simulation

[FSX] Hardware e software con Flight Simulator X

Ricominciamo oggi riprendendo il discorso interrotto ieri.

Flight Simulator X sulla Wikipedia
L’indirizzo è questo. Qui potete trovare un po’ di informazioni su questo simulatore di volo, comprese le differenze tra Standard/Deluxe di cui parlavo ieri.

Cosa vi serve per volare con Flight Simulator X?
Beh, dunque, sul Web trovate qualche centinaia di recensioni di schede video con il framerate raggiunto con FSX. Trovate sistemi desktop studiati ad-hoc per la simulazione del volo, con caratteristiche e relativi prezzi. Nella mailing-list di PVI si discute quotidianamente se conviene prendere questo o quello, se un processore quad-core dà veramente i suoi vantaggi, quale joystick è più bello e più funzionale, quale memoria tra Kingston e Corsair è più performante, etc. etc. Come sempre, ognuno ha le sue credenze e le sue convinzioni. Io vi dico che il mio sistema, un Intel Core2 Quad Q9450 @2,66GHz, con 4GBytes di RAM, con una ATI Radeon 4850 mi permette di raggiungere a volte 60-70 fps, a volte 15-20 (quando ci sono temporali o condizioni grafiche particolari).

Una cosa è assolutamente necessaria: un joystick. Se non l’avete, andate al Mediaword, compratene uno da 5 euro e sia già a buon punto. Un joystick è fondamentale per avere un controllo più naturale dell’aeroplano. Ci sono joystick da 5 euro e volantini da 300 euro e – anche qui – dipenderà da voi e dall’interesse che la simulazione del volo vi dà.

 

 

 

 

 

 

 

L’ultimo joystick in basso a destra è il mio personale: nulla di trascendentale, no? Il penultimo è quello di mio fratello: comprende un volantino, tre manette e una pedaliera (in alto a destra). Realismo al massimo.

Ma non finisce qui. Se la simulazione diventerà per voi una cosa seria, vi serviranno altre cose. Software aggiuntivi per creare piani di volo reali, ad esempio. Oppure software aggiuntivo (add-on, in breve) per rendere più realistico questo o quell’aspetto. Ci sono siti Web che, dati aeroporto di partenza e di destinazione, vi forniscono il vero piano di volo seguito dagli aerei di linea. Potreste volar acquistare aerei aggiuntivi, perchè magari vi interessa sapere come funzionava un B-17, aereo bombardiere della seconda guerra mondiale. O magari un piccolo Cessna Skyhawk, con un modello di volo più accurato rispetto a quello di default contenuto nella confezione. Non c’è alcun limite, davvero.

Perchè Flight Simulator X è così dispendioso?
FSX richiede tanta memoria, una bella scheda video e un ottimo processore. Perchè? Perchè è un vero simulatore di volo. Ogni istante vengono valutate un incredibile numero di informazioni del vostro aereo e dell’ambiente circostante. Il vostro aereo ha una certa posizione nell’atmosfera e una certa velocità. Ci sono turbolenze e vuoti d’aria, e correnti ascensionali, e la temperatura esterna può influire parecchio, formando ghiaccio sulle ali, ad esempio. Ci sono i consumi di carburante, che cambiano in base a velocità, carico, altitudine, etc. etc. Ogni singolo indicatore sul cruscotto dell’aereo deve essere continuamente aggiornato. Di questa complessità parlerò un pochino più avanti.

E senza tener conto dell’aspetto grafico. Se volate sopra il Sahara, probabilmente non c’è granchè da vedere, ma se volate sopra Los Angeles le cose sono diverse. Facilmente intuibile, no?

Se sono un programmatore, cosa posso fare con Flight Simulator X?
E questa è la vera domanda, che mi ha spinto a scrivere questa serie di post.

Con FSX potete creare nuovi aerei e nuovi scenari. A patto di avere le conoscenze giuste, ovviamente. E non è detto che bisogna essere programmatori. Basta editare qualche file di configurazione nel modo giusto. Creare nuovi scenari significa posizionare edifici e veicoli nel posto giusto e – nei casi più complessi – disegnare con strumenti appropriati i nuovi elementi grafici (3D Studio Max, AutoCAD, etc.). Ad esempio, se volete creare una Statua della Libertà migliore di quella “ufficiale”, dovete disegnarvela da voi. Stessa cosa: se volete ricreare un Airbus A320 migliore di quello di default, dovete fare tutto da zero e qui non saprei da che parte cominciare.

Con FSX potete creare nuove missioni. Io l’ho fatto, ed è davvero divertente e gratificante. Con FSX Mission Editor, un software di terze parti in versione freeware/paid, è possibile disegnare nuove missioni. Si assegna un aeroplano al giocatore e si inseriscono testi ed audio per dire al giocatore cosa deve fare. Se il giocatore riesce nell’intento, allora viene assegnata una ricompensa. Io ho creato due missioni ambientate in Svezia (se ricordo bene), dove un aereo anfibio dove ammarare nei pressi di una nave, e un’altra dove invece deve sorvolare un faro a bassa velocità per effettuare rilevamenti fotografici. Anche in questo caso, non dovete essere veri programmatori: dovete avere una certa logica, chiaro, dovete essere un po’ esperti di files wave e nell’utilizzo del PC.

E con .NET?

FSX espone un modello ad oggetti potentissimo. E qui arriva il bello. Tutto avviene tramite l’installazione di un SDK, che trovate sui DVD originali di FSX. Una volta installato, questo SDK vi mette a disposizione documentazione, samples e righe di codice. Tutto fondamentalmente si basa sull’assembly Microsoft.FlightSimulator.SimConnect.dll.

C’è un’intera sezione di MSDN dedicata a Flight Simulator X o – meglio – a ESP, l’engine di simulazione che sta alla base di FSX. ESP è un motore di simulazione che – in linea teoria – consente la simulazione di qualsiasi cosa noi vogliamo: aerei, ma anche automobili, navi e altri tipi di veicoli. Qui potete ottenere la documentazione sulle variabili esposte dal modello ad oggetti, e molto, molto di più. Qui torno alla complessità di cui parlavo prima: le variabili gestite da FSX sono diverse centinaia. Dal numero di giri della ruota anteriore del carrello in fase di atterraggio alla temperatura esterna, dall’aeroporto più vicino alla pressione dell’olio, da quali luci sono accese in un dato momento alla direzione che state assumendo, e così via. Tutte variabili che vengono ricalcolate chissà quante volte ogni secondo.

E con questo vi do appuntamento al prossimo post.

Send to Kindle
Flight Simulation

[FSX] Primi passi con Flight Simulator X: cosa, dove e perchè

E’ tanto che non parlo di programmazione, ed è tanto che non scrivo qualche mini-serie, come mi accadeva qualche anno fa sul Muro di UGIdotNET, parlando di NHibernate o della prima versione di WPF. Decido di ricominciare parlando di Microsoft Flight Simulator X (FSX) e del fantastico mondo che ci sta dietro. Siccome credo che la maggior parte di voi non sa nemmeno cosa sia FSX, non preoccupatevi: questo primo post servirà proprio ad introdurvi all’argomento. Buttiamoci nella mischia.

Cos’è Flight Simulator X, in breve FSX?
FSX è un videogioco, nulla di più semplice. Un videogioco estremamente complesso, ovvio, perchè è un simulatore di volo. Lo potete acquistare ovunque, on-line oppure al Mediaworld, al GameStop e in tutte le altre catene di software. FSX è disponibile in due versioni: Standard e Deluxe. Nella deluxe trovate più aerei simulati, più aeroporti e più città, potete fare da torre di controllo e altri dettagli che agli esperti del settore possono interessare di più. Una precisazione: in FSX trovate tutto il pianeta riprodotto, tutti gli aeroporti civili e militari e tutti gli strumenti per la radionavigazione (VOR, NDB, ILS, etc. etc.). Quando dico che nella versione Deluxe ci sono più aeroporti e più città, intendo che presso quelle locazioni geografiche trovate uno scenario migliore, e che riproduce più accuratamente l’ambiente reale.

Mi spiego meglio con un piccolo esempio: supponiamo di decollare con un Cessna da Linate, e di volare sopra Milano. Lo scenario predefinito di FSX, quello che trovate nella confezione, vi fa vedere San Siro, il Duomo, le autostrade principali e poco di più. Nulla vi vieta però di scaricare da Internet scenari gratuiti o a pagamento che arrichiscono l’Europa, il Nord Italia, la Lombardia o Milano. Ci sono migliaia di prodotti che coprono tutto il globo, dal parco di Yellowstone all’aeroporto di Rimini. Avete solo l’imbarazzo della scelta. Installando uno scenario di Milano, vedrete anche il Castello Sforzesco, strade migliori, Linate riprodotto più fedelmente, la fiera di Novegro, la Stazione Centrale, e via dicendo.

Cosa trovate nella confezione originale?
In FSX trovate due DVD per installare il software. L’attivazione avviene on-line, così come succede con le ultime versioni dei sistemi operativi. Avete a disposizione un certo numero di aerei, dal semplice ultraleggero ai più moderni Airbus, compreso un elicottero, così potete fare pratica. Potete volare ovunque sul pianeta, a patto di avere una pista per prendere velocità e staccarvi da terra. Trovate un manuale, piuttosto semplice per la verità: spesso la difficoltà di volare con un simulatore di volo è capire davvero come funziona un aereo, quindi capire la posizione di switch e manette. D’altro canto, se aerei di terze parti costano qualche decina di dollari, e se hanno un manuale di qualche centinaia di pagine, un motivo deve esserci. Non spaventatevi, non tutti sono così complessi, e magari non è mica detto che dovete leggervi tutto. Spesso basta selezionare un aereo, decidere da qualche aeroporto partire, premere CTRL+E per accendere i motori ed il gioco è fatto. Ma se invece volete la simulazione al massimo, FSX fa per voi.

Cosa potete fare con FSX?
Quando si parla di FSX, si parla di volo civile. Quindi niente bombardamenti, niente Battaglia d’Inghilterra, niente duelli aerei nel Pacifico. Francamente, è difficile spiegarvi perchè io trovo così bello il volo civile simulato. Il volo civile si divide in due grandi tronconi: volo VFR (visual flight rules) e IFR (instrumental flight rules). Quest’ultimo, IFR, è il volo dei jet e dei grandi aerei di linea (ma non solo), dove si utilizza i sistemi di radionavigazione per seguire il piano di volo ed arrivare a destinazione. il volo è tutto strumentale, compreso l’atterraggio. Il volo VFR è quello che prediligo, perchè è tutto visuale: quando state volando in VFR, dovete dare un’occhiata fuori dal finestrino per orientarvi, e riconoscere fiumi, laghi, città, montagne, per capire dove siete e capire dove dovete andare per arrivare a destinazione. FSX dà ovviamente pieno supporto ad entrambe queste possibilità.

IFR significa quindi impostare le frequenze radio corrette per agganciare un certo segnale e seguirlo. Significa impostare la frequenza di un VOR per seguirne una certa radiale (da 0° a 360°). VFR significa magari essere a Torino, cercare il Po e seguirlo verso est per arrivare a Milano. Questa è la versione breve: i miei amici di PVI probabilmente mi ammazzerebbero nel leggere queste cose, ma è giusto così. Loro sono esperti, in qualche caso sono piloti veri, o istruttori di volo, e quindi hanno esperienza da vendere. Dal mio punto di vista, in questo momento, questa breve descrizione basta ed avanza.

Il volo civile non è noioso. Dovete continuamente controllare velocità, altitudine, numeri di giri dei motori, pressione, temperatura esterna, per assicurarvi che tutto vada a buon fine. Ma se proprio non ne siete convinti, in FSX trovate una serie di missioni (da semplice a difficile), che non sono nient’altro che voli ambientati in locazioni e contesti ben specifici, nei quali dovete portare a termine compiti. Esempio: atterrare durante una bufera di neve con visibilità limitata, rintracciare un cucciolo di elefante sperduto nella savana africana, pilotare un elicottero nei dintorni di una piattaforma petrolifera in fiamme per recuperare gli uomini, etc. etc. Ogni volta che superare una certa missione, FSX vi assegna una ricompensa come premio. Questo è il punto in cui FSX diventa più “videogioco”.

Cosa vi serve per volare con Flight Simulator X?
Un bel PC, una tastiera, un mouse, un joystick, una bella scheda grafica. E un po’ di pazienza e buona volontà.
Ma ne parlerò nel prossimo post.

Send to Kindle