DIY head-tracking per simulatori di volo
Quando si gioca con un simulatore di volo si impara subito ad apprezzare la possibilità di guardarsi attorno, per osservare ora gli strumenti, ora l'orizzonte, ora di lato per sorvegliare la posizione della pista mentre si sta facendo un circuito.
Sfortunatamente, non è facile guardarsi attorno mentre si simula con il computer: le mani sono impegnate su joystick/manetta/tastiera; spostare ogni momento una mano sul mouse non è pensabile. Si può usare l'hat del joystick, ma non è particolarmente controllabile nè reattivo.
Non sarebbe fantastico se uno potesse ruotare leggermente la testa, e il computer fosse in grado di interpretare la rotazione e di conseguenza variare la direzione del campo visivo del giocatore così, senza bisogno di ulteriori input? Magari con l'ausilio di una serie di marker posti sulla testa del giocatore stesso, facilmente distinguibili da una webcam e attraverso i quali sia possibile triangolare la posizione della testa del giocatore?
Già, oggi si parla di head tracking artigianale. Il sistema è composto da tre componenti principali.
- I marker. Devono essere tre in posizione fissa tra loro e rispetto al capo del giocatore, per consentire la triangolazione della posizione stessa. Inoltre devono essere facilmente identificabili da una webcam.
- La webcam.
- Il software che interpreta la posizione dei marker e comunica con i videogiochi compatibili mediante un qualche protocollo standard.
Marker
Come si può vedere dalla affascinante gif animata qui sopra, i marker del mio setup sono costituiti da tre led con emissione vicina all'ultravioletto. Costano più o meno niente su Aliexpress e sono molto ben identificabili da una qualunque webcam.
La mia soluzione contempla:
- Tre led near-UV con relativa resistenza di limitazione della corrente, wrappati in termorestringente e collegati in parallelo.
I led che ho reperito hanno come dati dichiarati una corrente massima di 30mA e una caduta di tensione di 3/3.5V. Supponendo come valore di partenza della tensione 5V, ho deciso di usare delle resistenze da 100 Ohm:
((5-3) / 100) = circa 20mA
Dopodichè potrò modificare la tensione per variare la luminosità facendo prove con la webcam.
- Una batteria al litio 18650, recuperata da una vecchia batteria di laptop e caricata/verificata con apposito caricabatterie. E relativo portabatteria.
- Circuito di protezione/ricarica usb basato su TP5046 (come questi). Questa parte è fondamentale sia per la funzione di ricarica che per la protezione che offre alla batteria contro i cortocircuiti o gli scaricamenti eccessivi (non serve ricordare che le batterie al litio se maltrattate fanno BOOM, vero?).
- Regolatore di tensione, per dare una tensione in uscita sufficiente ad illuminare correttamente i led e fissa anche se la batteria si scarica. Ho scelto un regolatore boost regolabile basato su MT3608 (come questi). Prima di collegarlo ai led l'ho alimentato e regolato, agendo sul potenziometro, intorno ai 5 volt. Al termine della costruzione ho poi effettuato ulteriori prove per trovare la luminosità ideale per i led.
- Interruttore tra il circuito di protezione e il regolatore. All'inizio l'avevo messo erroneamente tra il circuito di protezione e la batteria, ma impediva la ricarica con i led spenti.
- Cappellino recuperato un decennio fa a una qualche fiera, un pò di colla. Saldatore, filo, pinze. Colla vinilica. Pazienza.
Webcam
Come webcam mi sono procurato una PS3 Eye Camera, la webcam della Playstation 3.
E' consigliata per una serie di motivi:
- Si trova facilmente su ebay o amazon a 10/20 euro.
- E' pensata per il motion tracking, quindi ha un framerate che raramente è raggiunto da qualunque altra webcam sul mercato (60 Hz con una risoluzione di 640x480).
- E' già di suo sufficientemente sensibile agli UV, senza bisogno di smontarla per rimuovere il filtro UV (cosa che si può comunque fare).
- Il driver per Windows 10 si trova qui, è a pagamento ma costa 3 dollari una tantum e li vale tutti visto che funziona benissimo.
Software per il tracking
Il software di riferimento per questo mondo è OpenTrack.
Consente di configurare il proprio sistema webcam-marker con l'impostazione di diversi profili in base al gioco che si utilizza, e una volta avviato invia le informazioni relative alla posizione utilizzando il protocollo impostato.
Inoltre, è possibile impostare profili di sensibilità per regolare la velocità di movimento o l'ampiezza dei movimenti, per adattarlo alle proprie esigenze.
Come contenuto bonus a questo post, pubblico un breve video in cui si vede la schermata di OpenTrack (a sinistra quanto ripreso dalla webcam, a destra un'immagine di prova che mostra la rotazione dei marker). Da notare che la luminosità della webcam è stata messa al minimo per facilitare l'acquisizione dei marker. Successivamente è mostrato un breve esempio di utilizzo del tracking in Elite Dangerous.