Ho sempre avuto una passione sfrenata per i simulatori di volo dai tempi di MS-DOS (anche se di fatto tocco terra in modo rude il 99% delle volte). In questo post ho voluto provare la possibilita' di creare un simulatore di volo in realta' virtuale con un costo decisamente abbordabile (una decina di euro per l'app piu' una 20-30 euro per un visore 3D di plastica ed un cavo USB piuttosto lungo. il telefono deve avere accelerometri e giroscopi) utilizzando Google CardBoard e Flight Simulator X
Per ottenere una visualizzazione stereoscopica (anche se non e' una vera stereoscopia perche' il gioco non la prevede, e' una duplicazione dello stesso schermo sui due oculari) ho provato sia TrinusVR che KinoVR, due applicazioni di realta' virtuale per Android con una parte server su Windows
E' importante segnalare che, nonostante siano disponibili collegamenti via WiFi e USB Tethering, la prima opzione e' fortemente sconsigliata per il ritardo che si genera sul segnale video.
Un altro aspetto che si puo' aggiungere per rendere piu' realistica la simulazione e' il cambio di visuale a seconda di come e' orientata la destra, cioe' se si guarda a destra anche la visione del gioco si sposta sulla destra e cosi' via. Per fare cio' ho utilizzato OpenTrack che pero' ha funzionato solo su KinoVR e non su TrinusVR
Nella prima schermata di OpenTrack si deve impostare il protocollo a Microsoft FSX SimConnect
Poi si va nelle Opzione e si configura l'output come segue invertendo gli assi
Infine si calibra la cuva di risposta degli assi di Yaw, Pitch e Roll
Al termine delle modifiche si preme Start
Si apre quindi Kino Console/VR Settings.
Si flagga Use Opentrack to headtracking, disable mouse acceleration e Enable image Duplication
A questo punto si collega il cavo USB e dal telefono Android si abilita USB Tethering e si disabilita la connessione di rete WiFi. Il telefono cerca il server sul PC. Il programma e' un po' instabile ed a volte richiede piuttosto tempo per stabilire la connessione. Al termine si clicca sull'icona e si inserisce la password per perfezionare il collegamento
Photosphere sono immagini a 360° sul piano orizzontale e +/- 90° sul piano verticale.
Non sono una novita' in senso assoluto perche' e' ormai una decina d'anni che si vedono a giro ma cio' che ora e' interessante e' la possibilta' di poterle realizzare con dei comuni smartphone che effettuano in automatico la ricucitura delle varie immagini e la compensazione dei colori
L'applicazione Fotocamera di Google permette questa possibilita' (o meglio lo permette solo su alcuni telefoni, per esempio su MotoG Google Edition non e' disponibile l'opzione che invece e' presente su Nexus 4...ed entrambi i telefoni condividono praticamente lo stesso software)
Per avere una visione panoramica si devono eseguire foto girando su se stessi con 5 angoli di inclinazione rispetto all'orizzontale e seguendo le indicazioni dei punti blu che compaiono sullo schermo
Per vedere l'immagine si puo' utilizzare anche l'apposita applicazione ed un visore Cardboard in modo da avere un poco di realta' virtuale
Questa e' l'immagine dentro Google Maps ma si puo' ottenere la visualizzazione via browser web anche utilizzando delle librerie JS come questa, di semplicissimo utliizzo
Cardboard SDK for Unity
Dopo aver installato Unity si lancia l'applicazione creando un nuovo progetto.
Si cancella dal progetto la camera di default e si scarica lo Unity Package dell' SDK Cardboard.
Una volta effettuato il download, tenendo aperto Unity, si fa doppio click sullo Unity package e si attiva l'importazione. Si importa tutto tranne il ramo Legacy
A questo punto da Assets/Cardboard/Prefabs si trascina sulla Hierarchy il componente Carboard Main per creare nel progetto la camera stereoscopica per Cardboard
Importare Modelli 3D
Si trascina il modello 3d (in formato 3DS o FBX) dentro la cartella Assets
Si scala il modello
Si crea una nuova cartella Texture dentro Assets e si copiano le texture trascinandole
a questo punto si deve collegare il modello 3d alla texture
si deve modificare lo Shader portandolo da Standard a Legacy Shader/Bumped Diffuse
si aprono due finestre Base e NormalMap. Si devono trascinare le due immagini (Base e' la pelle del modello mentre NormalMap e' la mappa delle normali dei vettori dei modello e di solito si mostra come immagine azzurra o nera)
Joystick XBox 360 USB su Mac e Unity
Un altro problema con cui mi sono dovuto confrontare e' stato quello di interfacciare il Joystick Microsoft XBox 360 USB su Mac con Unity
Per prima cosa si deve installare il driver prelevandolo da questo indirizzo
In seguito si deve aggiungere al progetto XBoxCtrlInput
Interazione utente
Per aggiungere l'interazione utente devono essere definiti gli script collegati con i GameObject. Cio' si fa cliccando un oggetto in Hierarchy e poi andando su Inspector ed Add Component/New Script in C#
per esempio per muovere la camera i pulsanti A,B,X ed Y del mouse si puo' aggiungere questo script
Per finire si deve mandare in esecuzione su Android usando il comando Build&Run.
Per compilare un progetto verso Android e' necessario il solo Android SDK e Unity fa tutto per conto suo.
Su IOS invece Unity crea solo un progetto ma non lo compila, deve essere compilato separatamente all'interno XCode (con la versione attulamente in uso non sono riuscito a compilare su XCode per un errore nelle impostazioni del progetto)
Oggi ho provato lo XBee Stick. In estrema sintesi e' un dongle USB con all'interno un trasmettitore XBee
Di fatto non c'e' differenza tra uno XBee Stick e un Xbee Explorer con montata sopra una trasmittente Xbee (a parte il fatto che lo Stick e' piu' solido)
Dal punto di vista dei costi uno Xbee Stick ZB costa circa 66 euro mentre l'accopiata Xbee Explorer (circa 30 euro) piu' trasmittente Xbee (circa 40 euro) costa poco piu' di 70 euro
La programmazione e' identica a quella di un modulo Xbee standard e funziona anche sotto Linux come seriale virtuale sotto /dev/ttyUSBx
In conclusione lo Stick e' utile se deve essere installato su un PC di acquisizione mentre l'Explorer e' da usare per la programmazione dei moduli Xbee che poi saranno montati su altri dispositivi
Sono arrivato al punto di connettere l'Ublox M8T ad Arduino. La connessione, come nel suo fratello minore, e' banale perche' basta connettere Vcc (in questo caso 5V), GND e Tx al D2 di Arduino
Lo sketch e' una banale modifica dell'esempio di SoftwareSerial
Il problema e' che sulla porta seriale UART1 di Ublox di default vengono trasmessi solo i dati NMEA ed anche abilitando i messaggi UBX questi si vedono passare sulla porta USB e non sulla UART1
Cio' deriva dal fatto che i messaggi UBX su UART1 devono essere esplicitamente abilitati da U-Center andando nel menu Configuration View (CTRL+F9), MSG, dalla tendina si selezione RXM-RAWX, si spunta la UART1 e si preme SEND
A questo punto si vedranno i messaggi raw UBX anche sulla porta seriale
Sto provando a mettere insieme un sistema un minimo complicato utilizzando Arduino ed al momento di montarlo mi sono accorto che non e' possibile accoppiare insieme lo shield USB e lo Shield XBee,
Normalmente gli shield si connettono alla Arduino di base utilizzando il connettore ISCP 3x2 pint che si trova all'estrema destra della foto superiore tra i pin D0 ed A5
Questo connettore, oltre a replicare i pin D13,D12,D11 e D10 della porta SPI porta anche i contatti Vcc, Gnd e reset.
In Shield come il Solar Shield il conettore e' passante, nel senso che i contatti dal basso vengono portati sopra la scheda per metterli a disposizione di un altro shield
Solar Shield
Il problema e' che l'USB shield non replica verso l'alto tali contatti. Si vede chiaramente l'assenza nella foto sottostante. Poco male si dira' perche' comunque vengono replicati verso l'alto tutti i contatti sulle due strisce laterali (compresi quindi anche D13,D12,D11,D10 Vcc e Gnd)
USB Shield
Il problema che lo Xbee Shield non ha contatti nella zona di potenza (quindi nei pin da IREF a Vin) e l'unica sorgente di alimentazione deriva dal connettore ISCP
Anche invertendo l'ordine, mettendo prima lo Xbee Shield e poi in alto l'USB Shield, la situazione non migliora perche' Xbee shield non espone verso l'alto nessun contatto di alimentazione
In conclusione non risulta possibile, a meno di non fare una patch volante, utilizzare contemporaneamente Xbee Shield e USB Shield su Arduino
Mi sono comprato su un e-commerce cinese un paio di cavi USB to 232TTL PL2303HX (avevo bisogno della doppia tensione a 5V e 3.3 V) al prezzo ridicolo 1.33 euro l'uno
Il dispositivo inserito in una Linux Box si mostra come segue e funziona correttamente
-------------------------------------------------- Mar 1 14:04:53 luca-ThinkPad-X201 kernel: [ 623.298691] usb 2-1.2: new full-speed USB device number 10 using ehci-pci Mar 1 14:04:53 luca-ThinkPad-X201 kernel: [ 623.392179] usb 2-1.2: New USB device found, idVendor=067b, idProduct=2303 Mar 1 14:04:53 luca-ThinkPad-X201 kernel: [ 623.392184] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 Mar 1 14:04:53 luca-ThinkPad-X201 kernel: [ 623.392188] usb 2-1.2: Product: USB-Serial Controller Mar 1 14:04:53 luca-ThinkPad-X201 kernel: [ 623.392191] usb 2-1.2: Manufacturer: Prolific Technology Inc. Mar 1 14:04:53 luca-ThinkPad-X201 mtp-probe: checking bus 2, device 10:"/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2" Mar 1 14:04:53 luca-ThinkPad-X201 mtp-probe: bus: 2, device: 10 was notan MTP device Mar 1 14:04:54 luca-ThinkPad-X201 kernel: [ 624.422524] usbcore:registered new interface driver pl2303 Mar 1 14:04:54 luca-ThinkPad-X201 kernel: [ 624.422561] usbserial: USB Serial support registered for pl2303 Mar 1 14:04:54 luca-ThinkPad-X201 kernel: [ 624.422589] pl2303 2-1.2:1.0: pl2303 converter detected Mar 1 14:04:54 luca-ThinkPad-X201 kernel: [ 624.424404] usb 2-1.2: pl2303 converter now attached to ttyUSB1
--------------------------------------------------
mentre una volta inserito in un PC Windows, una volta installato il driver scaricato dalla Prolific, all'inserimento del dispositivo, viene generato un Error Code 10.
Dopo aver frugato un po' su Internet ho scoperto che si tratta di un problema relativo a chip Porolific contraffatti. La Prolific, per evitare questo problema, distribuisce dei driver che sono in grado di verificare l'originalita' del dispositivo ed in caso contrario ne impedisce l'uso (su Linux il problema ovviamente non esiste perche' il driver non e' svilutppato da Prolific)
L' unica soluzione e' quella di non installare l'ultima versione del driver ma ricorrere a versioni vecchiotte (che comunque funzionano)