Zlepšení přesnosti GNSS dat při používání RaspBerry Pi 3B+

17.2.2019

Při warwalkingu nebo jiných aktivitách, kdy potřebujeme na RaspBerry Pi (dále jen RPI) informace o poloze, většinou saháme po USB GNSS přijímačích. To je celkem přímočará volba, ale můžete zjistit - zejména při položení získaných dat do mapy, že vám přesnost souřadnic získaných tímto způsobem nestačí - obvzláště ve chvíli, kdy přesnost jednoho USB přijímače, který má informace jen ze satelitů, porovnáte se zpřesněnou navigací, kterou poskytují již dlouho naše mobilní telefony.
Proto jsem hledal způsob, jak dostat data z GNSS z telefonu do RPI. A našel. Je to velmi jednoduché a nevyžaduje žádné zvláštní znalosti (jen si to musí odladit).
Na straně telefonu tedy máme aplikaci, která sdílí po síti (způsob spojení nechám do dalšího článku a hlavně na vašem uvážení a potřebách) přesnou polohu a na straně RPI máme GPS démona, který data přijímá a poskytuje lokálním aplikacím.

Aplikace ShareGPS

Na Google Play jsem našel jedinou aplikaci, která vyhovovala mému záměru a po počátečních zádrhelích funguje bez problému, aniž by si člověk musel něco takového psát sám. Aplikaci najdeme na: https://play.google.com/store/apps/details?id=com.jillybunch.shareGPS&hl=en. Nainstalujete si ji známým způsobem a nastavit ji můžete všelijak - mně se osvědčilo nastavení, které je vidět ze screenshotů.

Nastavení celé aplikace



V záložce Connections přidáme nové spojení


Obecné nastavení telefonu

Pokud máte telefon, který disponuje některým z druhů úsporných režimů, nejspíše zjistíte, že při zhasnutí displeje přestanou chodit data z aplikace do RPI. Záleží na každém výrobci, jak toto řeší a proto nemá smysl zde popisovat způsob, jak s tímto problémem naložit. Buď ale můžete úsporný režim dočasně vypnout nebo v rámci jeho nastavení povolte přenos dat, pokud to umožňuje. Pokud telefon používáte zároveň pro ovládání RPI, tak tímto je obtíž do značné míry eliminována.

Použití gpsd na RPI

Instalace gpsd

Bohužel ne každá distribuce má zabaleného démona gpsd, který je schopen bezproblémově komunikovat po síti. Protože jsem zjistil, že distribuce, na které jsem sdílení GNSS dat testoval, má právě tuto vadu, přistoupil jsem k instalaci z originálních GIT repozitářů.
Nejprve naklonujeme GIT repozitář:

git clone https://git.savannah.nongnu.org/git/gpsd.git

Po přečtení příslušných README a spol. souborů zjistíme předpoklady pro úspěšný překlad. Je potřeba nainstalovat několik balíků a naopak odinstalovat distribučního démona:

apt purge gpsd gpsd-clients
apt install scons libncurses5-dev python-dev pps-tools git-core

Překlad se provádí utilitou scons:

cd gpsd
scons
scons install

Někteří puristé (ke kterým se za normálních okolností řadím též) by mohli namítat, že instalovat tímto způsobem soubory do systému, aniž by byly registrovány v některým z balíkovacích systémů, neni zcela korektní, s čímž se dá souhlasit, ale pro tento účel nám tento způsob, který nebrání updatu sw, bude stačit.

Vlastní použití

Na straně telefonu se přesvědčíme, že ShareGPS na záložce “GPS status” vykazuje znalost polohy a poté na záložce “Connections” tapneme na připravené spojení a vidíme, že se změnil stav na “Listening”.
Na straně RPI pouze spustíme gpsd s parametry:

gpsd -b -n tcp://192.168.1.1:2947

přičemž IP adresa je IP adresa telefonu.
Otestovat příjem dat lze pomocí utilit gpsmon nebo gpspipe. Druhý jmenovaný může posloužit i pro účel nastavení přesného času (i když z tohoto pohledu bude vždy ale lepší USB přijímač):

date -u -s "`gpspipe -w -n 10 | grep -m1 TPV | sed -n 's/^..*"time":"\([^T][^T]*\)T\([^.][^.]*\)\..*$/\1 \2/p'`"

Závěr

Přesnost dat takto získaných budu ještě testovat, abych si ověřil, že došlo ke zlepšení (a článek později dostane update). Využití si každý jistě najde sám. Díky tomu, že je na straně RPI použit standardní démon, tak množství aplikací je nemalé.

  • obsah/linux_obecne/rpi_gps_android.txt
  • Last modified: 2019/02/17 22:07
  • by profors