giovedì 20 luglio 2017

GNSS raw data in Android N

Con Android N sono disponibili le API per accedere ai dati raw del GPS e comtemporaneamente e' stato rilasciato un programma di esempio GNSSLogger sia in formato sorgente che in apk



I dati che si possono registrare sono molto interessanti perche' riguardano sia lo pseudorange che le informazioni di fase permettendo quindi un posizionamento GPS estremamente preciso.

Il problema e' attualmente principalmente legato all'hardware. Sono pochi attualmente i dispositivi che hanno una antenna GPS atta a registrare tutte le informazioni

Per esempio (vedi questo link) il Nexus 5x e' un pessimo candidato mentre e' decisamente piu' appetibile il Nexus 9 (parlando dei dispositivi che uso)





Per elaborare il file dati in uscita da GNSSLogger Google mette a disposizione degli script Matlab ma non possedendo una licenza ho trovato preferibile usare uno script in Python di Lukasz Bonenberg’s all'indirizzo 
https://github.com/DfAC/AndroidGNSS

Per fare girare lo script ipynb (iPython notebook) ho dovuto smanettare sulla mia Debian Box perche' e' stato necessario installare jupyter

pip install jupyter 

e poi sono state aggiornate alcune librerie mediante pip --upgrade

pip install --upgrade scipy


(si fa la stessa cosa con le librerie pandas, seaborn, numpy e matplotlib)

finiti gli aggiornamenti delle librerie si lancia

jupyter notebook --allow-root 

e si apre il file ProcessRanges.ipynb modificando il nome del file alla riga data_file e, dal menu, si lancia Cell/Run All



e si ottengono i dati delle elaborazioni. Nel caso del Nexus 5x lo script genera un errore quasi subito nel popolare un array mentre con i dati di Nexus 9 (grafici sottostanti) l'elaborazione si sviluppa fino a quando si cerca di elaborare la costellazione Galileo (non presente sul sensore del Nexus 9)