RPIGPS

Z Poznámkový blok
Verze z 10. 8. 2017, 20:35, kterou vytvořil Tydyt (diskuse | příspěvky) (Ověření NTP)
Přejít na: navigace, hledání

Raspberry a GPS - zde se pokusím shrnout způsob rozchození GPS modulu na Raspberry V.3 - Jessie.


Příprava

Po vytvoření image na microCD musíme ještě nahrát prázdný soubor ssh aby byl funkční přístup přes SSH. Teprve poté se můžeme k Raspberry přihlásit přes SSH. Ve výchozím nastavení je IP adresa načtena z DHCP serveru. Výchozí login je "pi" a heslo "raspberry". U instalace FlightAware je heslo "flightaware".

Po prvním spuštění je vhodné spustit příkaz "sudo raspi-config" pro dokončení plného nastavení vlastního Raspberry.

Následně provedeme upgrade celé distribuce:

sudo apt-get update
sudo apt-get dist-upgrade
sudo rpi-update
sudo apt-get upgrade

Zablokování sériové konzoly

Prvně musíme systému Linux odebrat nastavení pro spuštění sériové konzole. Pokud by jsme tak neučinili, tak nám sériový port obsadí systémová konzole a nešel by následně použít pro GPS. To provedeme editací souboru /boot/cmdline.txt

sudo nano /boot/cmdline.txt

kde změníne

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

na ( odeberte console=ttyAMA0,115200 a pokud existuje, kgdboc=ttyAMA0,115200 )

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Poznámka:

  • může se zobrazit konzola = serial0,115200 nebo console = ttyS0,115200 a měla by odstranit ty části řádku, pokud jsou k dispozici.
  • na Raspberry v.3 také konzole nastavena být nemusí. Lze to též docílit pomocí raspi-config.

Povolení sériového rozhraní

Na Raspberry V.3 je standartní sériové rozhraní využito pro Bluetooth. Proto musíme dodatečně povolit sériové rozhraní na GPIO portech v souboru /boot/config.txt

sudo nano /boot/config.txt

kde na konec přidáme parametr

enable_uart=1
dtoverlay=pps-gpio,gpiopin=4

Dále do souboru /etc/modules přidáme

sudo nano /etc/modules


pps-gpio

Také je vhodné povolit čtení ovladače i istatním uživatelům. Do docílíme přidáním práv do udev

sudo nano /etc/udev/rules.d/99-com.rules


SUBSYSTEM=="pps",  GROUP="systemd-timesync", MODE="0664"

Poté restartujeme celé Reaspberry

sudo reboot

Poznámka:

  • Toto nastavení lze také provést pomocí raspi-config.

Ověření GPS

Před pokračováním je dobré se přesvědčit že má GPS dostatek dat ze satelitů a že je komunikace přes sériový port v pořádku. Dostatek dat je signalizováno led "Fix" na modulu:

  • Bliká v intervalu 1s - No Fix (nedostatek dat)
  • Blikne jednou za 10s - OK Fix

Je možné,že bude nutné přijímač GPS dát blíže k oknu, nebo připojit externí anténu. Pak můžeme pokračovat v ověření "surových" dat z přijímače přímo ze sériového portu:

stty -F /dev/ttyS0 raw 9600 cs8 clocal -cstopb
cat /dev/ttyS0

Následně by se nám měli zobrazit "surová" data, například

$GPGGA,193338.000,4909.7635,N,01643.8563,E,1,10,0.87,221.4,M,43.4,M,,*6C
$GPGSA,A,3,03,11,31,22,01,17,09,14,06,23,,,1.57,0.87,1.30*01
$GPRMC,193338.000,A,4909.7635,N,01643.8563,E,0.21,357.98,220717,,,A*64
$GPZDA,193338.000,22,07,2017,,*56
$GPGGA,193339.000,4909.7635,N,01643.8563,E,1,10,0.87,221.4,M,43.4,M,,*6D
$GPGSA,A,3,03,11,31,22,01,17,09,14,06,23,,,1.57,0.87,1.30*01
$GPRMC,193339.000,A,4909.7635,N,01643.8563,E,0.11,57.42,220717,,,A*52

Pokud tomu tak je, můžeme pokračovat ....


Instalace ovladače GPS - balíček

Po přípravě sériového portu pro komunikaci z GPS můžeme nainstalovat vlastní podporu pro GPS "gpsd":

sudo apt-get update
sudo apt-get dist-upgrade
sudo rpi-update
sudo apt-get install gpsd gpsd-clients python-gps pps-tools

Následně otevřeme konfigurační soubor /etc/default/gpsd kde nastavíme parametry

USBAUTO="false"
DEVICES="/dev/ttyS0"
GPSD_OPTIONS="-n"

a můžeme ověřit zda GPS funguje příkazem

cgps -s

nebo

gpsmon

Instalace ovladače GPS - new

Doinstalujeme potřebné balíčky - povinné, doporučené:

sudo apt-get install scons libncurses5-dev python-dev pps-tools
sudo apt-get install git-core

Ověříme nejnovější verzi a následně ji stáhneme:

wget http://git.savannah.gnu.org/cgit/gpsd.git/snapshot/gpsd-release-3.16.tar.gz

Poté soubor rozbalíme:

tar -xzvf gpsd-release-3.16.tar.gz

Přesuneme se do zdrojového adresáře a spustíme instalaci:

cd ./gpsd-release-3.16
scons && scons check && sudo scons udev-install

Pokud se to podaří gpsd a gpsdctl budou instalovány zde:

/usr/local/sbin/

Ostatní klienti a nástroje budou instalovány zde:

/usr/local/bin/

Tyto jsou:

cgps, gps2udp, gpsctl, gpsdecode, gpsmon, gpspipe, gpxlogger, lcdgps, ntpshmmon

Ověření gpsd

Pro ověření je možné použít několik pomocných programů:

gpsmon
cgps -s
ntpshmmon

Adresy NTP - GPS

  • lx.ujf.cas.cz ( 89.221.208.61 )
  • 94.124.107.190

Instalace NTP

V základní distribuci sice je server NTP nainstalován, ale jedná se o starší verzi, která nepodporuje PPS. Proto je nutné nainstalovat novější verzi která má i tuto podporu. Dále nabízím dvě možnosti instalace:

NTP - tar.gz

Na serveru ntp.org v sekci dovnloads si ověříme nejnovější verzi a podle toho je vhodné upravit názvy instalovaných souborů. Následně můžeme postupovat:

sudo service ntp stop

wget http://archive.ntp.org/ntp4/ntp-4.2/ntp-4.2.8p10.tar.gz
tar zxvf ntp-4.2.8p10.tar.gz
cd ntp-4.2.8p10
./configure --enable-linuxcaps
make
sudo make install
sudo cp /usr/local/bin/ntp* /usr/bin/ && sudo cp /usr/local/sbin/ntp* /usr/sbin/

Poznámka: k 9.8.2017 je aktuální a doporučená verze 4.2.8p10

NTP - balíček

Další možností je instalace novější verze přímo jako debianí balíček. V tomto případě je nutné přidat adresář depozitáře balíčků do souboru sources.list.

sudo nano /etc/apt/sources.list

na stávající konec přidáme:

deb http://ftp.cz.debian.org/debian/ stretch

Poté provedeme aktualizaci balíčků a přeinstalujeme ntp server

sudo apt-get update
sudo apt-get install ntp

Na závěr doporučuji přidaný záznam do souboru sources.list zakomentovat aby se nechtěně neaktualizovali i další balíčky. Poté opětovně aktualizovat seznam balíčků:

sudo apt-get clean
sudo apt-get update

Nastavení NTP

Po instalaci upravíme soubor ntp.conf podle našich požadavků nakonec opět NTP restartujme/spustíme.

sudo nano /etc/ntp.conf

Doporučuji upravit seznam NTP serverů. Pokud by jsme ale chtěli použít data jen z GPS, tak seznam nemusí být potřeba.

pool cz.pool.ntp.org
server ntp.cesnet.cz iburst prefer
server ntp.nix.cz prefer minpoll 10

NTP PPS

# PPS ntp
server 127.127.22.0 minpoll 4 maxpoll 4
fudge 127.127.22.0 refid PPS

Adresy NTP - GPS

  • lx.ujf.cas.cz ( 89.221.208.61 )
  • 94.124.107.190

Ověření NTP

sudo service ntp start

Následně ověříme funkcionalitu NTP:

ntpq -p -n

Pro úplný výpis z dalšími informacemi můžeme použít:

ntpq -crv -pn

Adresy NTP - GPS

  • lx.ujf.cas.cz ( 89.221.208.61 )
  • 94.124.107.190

NTP z GPS

Pro synchronizaci času musíme mít na Rasberry nainstalovanou službu NTP. Ta je ale již součástí image, tudíž tento krok můžeme přeskočit.

sudo apt-get install ntp

Ale aby si NTP server bral čas z GPS, musíme upravit konfigurační soubor /etc/ntp.conf kam přidáme

# gps ntp
server 127.127.28.0 minpoll 4 prefer
fudge  127.127.28.0 time1 0.183 refid NMEA
server 127.127.28.1 minpoll 4
fudge  127.127.28.1 refid PPS

a následně službu NTP restartujeme pro načtení změn

sudo service ntp restart

Po chvíli by jsme měli vidět, že se synchronizuje čas z GPS

pi@raspberrypi:~$ ntpq -p
remote           refid           st t when poll reach   delay   offset  jitter
==============================================================================
*ns1.luns.net.uk 33.117.170.50    2 u   54   64    7   65.454    2.666   5.800
+resntp-b-vip.lo 127.151.91.34    3 u   45   64   17   55.704   -5.169   8.482
+bart.nexellent. 194.242.34.149   2 u   17   64   17   76.585   -4.271  57.595
+v01.s01.be.it2g 193.190.230.65   2 u   20   64   37   86.464   -2.374 228.460
xSHM(0)          .NMEA.           0 l   11   16  377    0.000  144.714   3.026
 SHM(1)          .PPS.            0 l    -   16    0    0.000    0.000   0.000

Kde první znak znamená:

"mezera"
   Peer je vyřazen jako nedostupný, synchronizovaný na vlastní server (synchronizační smyčka) nebo velká synchronizační vzdálenost. 
x falsetick
   Peer je vyřazen algoritmem průniku jako falešný. 
. excess
   Peer je vyřazen, protože není mezi prvními deseti podle synchronizační vzdálenosti, a tak je nevhodný kandidát k dalšímu použití. 
- outlyer
   Peer je vyřazen clusteringovým algoritmem jako outlier. 
+ candidat
   Peer je přeživší a je kandidátem na kombinační algoritmus. 
# selected
   Peer je přeživší, ale není mezi prvními šest seřazených podle synchronizační vzdálenosti. Pokud je asociace pomíjivá, může být odpojen, aby šetřil zdroje. 
* sys.peer
   Peer byl prohlášen za systémový a jeho proměnné jsou předávány vlastnímu systému. 
o pps.peer
   Peer byl prohlášen za systémový a předává proměnné vlastnímu systému. Skutečná synchronizace je však odvozena od signálu puls-per-second (PPS), ať už nepřímo přes ovladač referenčních hodin PPS nebo přímo přes rozhraní jádra.
remote - Adresa vzdáleného NTP serveru
refid  - Referenční NTP server vzdáleného NTP serveru
st     - vrstvy vzdáleného peeru
t      - Typ peeru: l - místní, u - unicast, m - multicast, b - broadcast, p - seznam
when   - Interval v sekundách od posledního přijatého paketu
pool   - Interval v sekundách dotazování (log2 sec - min/max pool )
reach  - Registr dostupnosti (v osmičkové soustavě) 
delay  - Aktuálně odhadované zpoždění
offset - Offset serveru vzhledem k tomuto hostiteli
jitter - Odhadovaná časová chyba peerových hodin měřená jako exponenciální průměr časových rozdílů RMS

Dokončení

Odstranit soubor /etc/dhcp/dhclient-exit-hooks.d/ntp abychom zabránili přepsání konfigurace ntp z dhcp.

rm /etc/dhcp/dhclient-exit-hooks.d/ntp
rm /var/lib/ntp/ntp.conf.dhcp

Zdroje: