LoginSignup
4
6

More than 3 years have passed since last update.

GG-1802 を Raspberry Pi に繋いで 1PPS?

Last updated at Posted at 2019-04-26

はじめに

PPS で Raspberry Pi NTP サーバに再挑戦です。
前回 BN-880 が1日もたずに壊れたのでもう少し安い上に PPS 出力のあるもの GG-1802 (購入時の価格 \733+送料無料) を選びました。中国からと思いきや、シンガポールからの発送でした。
こちらも BN-880 と同じく u-blox の M8030-KT が載っているようです。
PSX_20190429_182427.jpg
左側が壊れた BN-880、右が今回の TOPGNSS製 GG-1802真ん中の BN-357 はまた後程繋いで試します。

Raspberry Pi へ接続

とりあえず接続は以下の通り

GG-01802
pin番号
ケーブルの色 Raspberry Pi
pin番号
(Vcc) 1 4 (5V)
(GND) 2 6 (GND)
(Tx) 3 10 Rx (GPIO15)
(Rx) 4 8 Tx (GPIO14)
(PPS) 5 12 (GPIO18)

PSX_20190427_001407.jpg

その前に Windows で動作確認 & 設定

まず壊れていないか確認のために、Windows に繋いで u-cneter で見てみます。
u-center.png
ちょい設定をいじりましたが正常に動いていますね。(ただ、M8T にアクティブアンテナをつないだものよりは見える衛星は少ない)
最初 GPS しか捕捉しなかった & SBAS OFF だったので画像のように 3システム併用 (+みちびち & SBAS) の設定を行いました。

ちなみに u-blox の M8 系レシーバーの GNSS システム併用のパターンは以下のとおり。

GPS (米) Galileo (EU) GLONASS (露) BeiDou (中)
GPS Galileo - -
GPS Galileo GLONASS -
GPS Galileo - BeiDou
GPS - GLONASS -
GPS - - BeiDou
- Galileo GLONASS -
- Galileo - BeiDou
- - GLONASS BeiDou

みちびき (QZSS), SBAS は GPS が ON の時に ON 可能。
左上のグラフ一番下の MSAS が日本の SBAS。

問題ないことが確認できたので Raspberry Pi へ接続。

Raspberry Pi の設定

設定は GN-880 で大体終わってますが 1PPS があるのでその設定を追加。
/boot/config.txt に dtoverlay=pps-gpio,gpiopin=18 を追加。GPIO 18 を PPS 用に割り当て
gpsd が PPS を読むように /etc/default/gpsd に DEVICES="/dev/ttyS0 /dev/pps0" と /dev/pps0 を追加。
そして Raspberry Pi の再起動。

やってなかったですが、ここで以下のコマンドで PPS 入力があるかを確認できるようです。

> sudo ppstest /dev/pps0

Raspberry Pi 再起動

GG-1802 を一旦外してから gpspipe して、再度接続しなおして起動メッセージを確認。(前回壊れたのが、本当に起動メッセージの 1行目だったのか実機で確認)
GPS モジュールの起動時メッセージ

> gpspipe -r
$GNTXT,01,01,02,u-blox AG - www.u-blox.com*4E
$GNTXT,01,01,02,HW UBX-M8030 00080000*60
$GNTXT,01,01,02,ROM CORE 3.01 (107888)*2B
$GNTXT,01,01,02,FWVER=SPG 3.01*46
$GNTXT,01,01,02,PROTVER=18.00*11
$GNTXT,01,01,02,GPS;GLO;GAL;BDS*77
$GNTXT,01,01,02,SBAS;IMES;QZSS*49
$GNTXT,01,01,02,GNSS OTP=GPS;GLO*37
$GNTXT,01,01,02,LLC=FFFFFFFF-FFFFFFFF-FFFFFFFF-FFFFFFFF-FFFFFFFD*2F
$GNTXT,01,01,02,ANTSUPERV=AC SD PDoS SR*3E
$GNTXT,01,01,02,ANTSTATUS=DONTKNOW*2D
$GNTXT,01,01,02,PF=3FF*4B
$GNTXT,01,01,04,CPU clk req 120MHz, meas: ~127MHz*44
$GNTXT,01,01,04,FP8 re 26000000 (PLL A 0x0F000 B 0x00000 INT 60 N2 16*)*68
$GNTXT,01,01,04,FP1 chip=8 1602000000 if=5247070.3125(5109375,137695)*74
$GNTXT,01,01,04,FP0 chip=8 1575420000 if=3232500(3187500,45000)*67
$GNTXT,01,01,04,RF0 addr 88*62
$GNTXT,01,01,04,rf0 config done ttag 500 1 RF*6D
$GNTXT,01,01,04,DRV_SCT: ver 0201 arch 03643A18 chs 32*4D
$GNTXT,01,01,04,AID INI: pos*01
$GNRMC,185413.10,V,,,,,,,260419,,,N,V*1A
...

どうやら「再起動を繰り返していた」で間違いなさそうですね。

ntp.conf の調整 & 設定の抜け修正

どうも gpsd 経由だと NEMA と PPS を別に扱う必要があるようなので 127.127.28.0, 127.127.28.1 の二つを ntp.conf に追加。(127.127.20.n なら 1行で良い)

server 127.127.28.0 minpoll 4 maxpoll 4 iburst
fudge 127.127.28.0 time1 0.100 refid NEMA stratum 4

server 127.127.28.1 minpoll 4 maxpoll 4 iburst
fudge 127.127.28.1 refid PPS stratum 3

が、書き換えたところで PPS は見てくれてない?

> ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ntp.nict.jp     .POOL.          16 p    -   64    0    0.000    0.000   0.000
*SHM(0)          .NEMA.           3 l   15   16  377    0.000   50.553   1.577
 SHM(1)          .PPS.            3 l    -   16    0    0.000    0.000   0.000
-61.114.187.55 ( .PPS.            1 u   58   64    3   11.208    2.841   2.450
-cwa225.bai.ne.j 210.171.0.34     4 u   61   64    3    2.641    0.062   4.304
-cwa201.bai.ne.j 210.171.0.34     4 u   58   64    3    1.239   -0.878   3.026
+ntp-a3.nict.go. .NICT.           1 u   58   64    3    9.468    0.968   1.398
-ntp-b2.nict.go. .NICT.           1 u   54   64    3    8.896   -1.570   1.654
-ntp-b3.nict.go. .NICT.           1 u   52   64    3    8.861   -0.677   1.437
+ntp-a2.nict.go. .NICT.           1 u   54   64    3    8.583    0.124   0.884

> ntpshmmon
ntpshmmon version 1
#      Name   Seen@                Clock                Real               L Prec
sample NTP2 1556305971.431976518 1556305971.073791292 1556305971.000000000 0 -20
sample NTP2 1556305971.933012439 1556305971.073791292 1556305971.000000000 0 -20
sample NTP2 1556305972.433266585 1556305972.073846474 1556305972.000000000 0 -20
sample NTP2 1556305972.933620744 1556305972.073846474 1556305972.000000000 0 -20
...

ntpshmmon を見てみるとどうも NTP2 という表示が。これは .2 じゃないといけない?試しに書き換えて再起動。

ntp.conf
> vi /etc/ntp/conf
...
server 127.127.28.0 minpoll 4 maxpoll 4 iburst
fudge 127.127.28.0 time1 0.100 refid NEMA stratum 4

server 127.127.28.2 minpoll 4 maxpoll 4 iburst
fudge 127.127.28.2 refid PPS stratum 3
...
> sudo systemctl restart ntp
> ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ntp.nict.jp     .POOL.          16 p    -   64    0    0.000    0.000   0.000
-SHM(0)          .NEMA.           3 l   13   16    1    0.000  -21.718   0.000
-SHM(2)          .PPS.            3 l   12   16    1    0.000   30.239   0.000
+61.114.187.55 ( .PPS.            1 u    6   64    1   14.029  -67.561   0.161
+cwa225.bai.ne.j 210.171.0.34     4 u    4   64    1    2.381  -70.315   3.418
-cwa201.bai.ne.j 210.171.0.34     4 u    1   64    1    4.970  -68.077   0.897
-ntp-a2.nict.go. .NICT.           1 u    1   64    1   12.412  -67.766   1.001
*ntp-a3.nict.go. .NICT.           1 u    2   64    1   10.084  -69.218   1.432
-ntp-b2.nict.go. .NICT.           1 u    -   64    1   11.284  -67.795   1.285
 ntp-b3.nict.go. .NICT.           1 u    -   64    1   11.689  -67.464   1.290

当たり!ちゃんと reach の数も増えてます。しばらく待ってると

> ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ntp.nict.jp     .POOL.          16 p    -   64    0    0.000    0.000   0.002
+SHM(0)          .NEMA.           3 l    -   16  377    0.000    0.321   0.776
*SHM(2)          .PPS.            0 l   14   16  377    0.000   -0.363   0.041
-61.114.187.55 ( .PPS.            1 u   52   64  345   10.174    0.722   1.097
-cwa225.bai.ne.j 210.171.0.34     4 u    1   64  377    2.929   -0.035   3.107
-cwa201.bai.ne.j 210.171.0.34     4 u   60   64  377    1.761   -0.616   0.597
-ntp-a3.nict.go. .NICT.           1 u   65   64  377    9.695    0.021   1.774
-ntp-b2.nict.go. .NICT.           1 u   54   64  377    9.370    0.020   1.472
-ntp-b3.nict.go. .NICT.           1 u   65   64  377    9.253    0.909   1.081
+ntp-a2.nict.go. .NICT.           1 u   54   64  377   10.141    0.314   1.562

もう少し NEMA の offset は追い込みますが、PPS の jitter が凄いですね。
どうも、ntpd が /dev/pps0 root 権限で開けてないみたいですね。root で 1μs、一般ユーザになると 5μs の誤差らしいですが。
GPSD Time Service HOWTO
あら、 minpoll 0 maxpoll 0 って設定できるの?

NTPsec その2 :ntpviz で統計情報を取得する 辺りで確認できたら便利なのかな?

AD9547 / AD9548 を使って 1pps を更に安定化させる方法もあるらしい。これってパルスの立ち上がりを GPS の 1pps 出力にあわせることができるのかな?

未確認情報

やったほうが良いらしいこと

> apt install setserial
> setserial /dev/ttyS0 low_latency

このあと、USB シリアルも使いますが、USB シリアルにはこれは効きません。

シリアルポートの速度を変更するには

u-blox 8 / u-blox M8 Receiver Description Including Protocol Specification の 32.3.1.1 Set Protocols and Baudrate と NEMA チェックサム計算機 より

$PUBX,41,1,0007,0003,9600,0*10
$PUBX,41,1,0007,0003,19200,0*25
$PUBX,41,1,0007,0003,38400,0*20
$PUBX,41,1,0007,0003,115200,0*18

辺りのコマンドで速度を変更することができる?
まぁ、gpsd は自動的に速度に追従するのでボーレートは気にしなくても大丈夫。

雑多な GPS 情報 (メモ)

The International GNSS Service (IGS) GNSS についてのことが纏まっているサイト
Satellite IDs より

NEMA ID System
1 - 32 GPS
33 - 54 色々な SBAS systems (EGNOS, WAAS, SDCM, GAGAN, MSAS) NEMA=PRN-87
55 - 64 未使用 (might be assigned to further SBAS systems)
65 - 88 GLONASS NEMA=SLOT+64
89 - 96 GLONASS (将来の拡張用?)
97 - 119 未使用
120 - 151 未使用 (SBAS PRNs occupy this range)
152 - 158 色々な SBAS systems (EGNOS, WAAS, SDCM, GAGAN, MSAS)
159 - 172 未使用
173 - 182 IMES
193 - 197 QZSS
196 - 200 QZSS (将来の拡張用?)
201 - 235 BeiDou (u-blox 独自 NMEA ではない)
301 - 336 GALILEO
401 - 437 BeiDou (NMEA)

QZSS は 2019年現在 4機体制で、2023年に 3機追加することが予定されている。

GLONASS 1~32 +64 → NEMA

SBAS

System Satellite (位置) PRN NMEA-ID
EGNOS Inmarsat 3-F2(AOR-E) 15.5°W 120 33
EGNOS EUTELSAT 5 West B 5°W 121?
GATBP GEOSCIENCE AUSTRALIA (INMARSAT 4F1) 143.5°E 122 35
EGNOS Astra-5B 31.5°E 123 36
EGNOS ESA Artemis 22E 124 37
SDCM Luch-5V 16°W 125 38
EGNOS Inmarsat 4-F2 (IOR-W) 25°E 126 39
GAGAN GSAT-8 55°E 127 40
GAGAN GSAT-10 83°E 128 41
MSAS MTSAT-1R 140°E 129 42
BDSBAS BeiDou-3 GEO-1 140°E 130
WASS EUTELSAT 117W B (IOR-E) 117°W 131 44
予約 132 45
WAAS Inmarsat 4-F3 (AMR) 98°W 133 46
WASS Inmarsat POR 178E 134 47
WAAS Intelsat Galaxy 15 (CRW) (PanAm) 133°W 135 48
EGNOS SES-5 (Sirius-5, Astra-4B) 5°E 136 49
MSAS MTSAT-2 145°E 137 50
WAAS TeleSat Anik F1R (CRE) 107.3°W 138 51
SDCM Luch-5A 167°E 140
SDCM Luch-5B 16°W 141
BDSBAS BeiDou-3 GEO-3 110.5°E 143
BDSBAS BeiDou-3 GEO-2 80°E 144
NSAS NigComSat-1R 42°E 147
QZSS QZS-1 137.5°E (QZO) 193 (L1C/A, L1C, L2C, L5, L6)/183 (L1S)
QZSS QZS-2 136°E (QZO) 194 (L1C/A, L1C, L2C, L5, L6)/184 (L1S)/196 (L5S)
QZSS QZS-3 127°E (GEO) 199 (L1C/A, L1C, L2C, L5, L6)/189 (L1S)/197 (L5S)/137 (L1Sb)/- (Sr/Sf)
QZSS QZS-4 136°E (QZO) 195 (L1C/A, L1C, L2C, L5, L6)/185 (L1S)/200 (L5S)

GNSS 衛星の数、軌道
各国の測位衛星 by みちびき (準天頂衛星システム)
静止衛星:GEO / 中高度軌道:MEO / 傾斜対地同期軌道:IGSO

GPS 【公式】ー【運用状況】ー【軌道
軌道 (MEO) A~F に 各4機 + 予備機 1~2
現在 31機
ftp://ftp.agi.com/pub/Catalog/Almanacs/SEM/GPSData.txt

GLONASS 【公式】ー【運用状況】ー【軌道
軌道 (MEO) A, B, C に 01~08 の 8機づつ
運用中 24機 + 予備
Parameters Definition

Galileo 【公式】ー【運用状況】ー【軌道
軌道 (MEO) 3面 に各 9機 + 予備 1機
現状24機 + 予備 2機

北斗 【公式】ー【運用状況】ー【軌道
45機
GEO 6機 / MEO 22個 / IGSO 8機
GEO, IGSO は中国地域の補強用

みちびき 【公式】ー【運用状況】ー【軌道
GEO 1機 / IGSO 3機
2023年に3機の追加打ち上げを行い 7機体制になる予定。

色々な SBAS
SBAS (satellite-based augmentation system:静止衛星型衛星航法補強システム)

  • WAAS (wide area augmentation system) 米
  • EGNOS (European geostationary overlay service) 欧、露
  • MSAS (MTSAT satellite-based augmentation system:運輸多目的衛星用航法補強システム) 日本
  • GAGAN (GPS Aided GEO Augmented Navigation、静止衛星型 衛星航法補強システム) インド (GAGAN はサンスクリット語で「空」の意味だそうな)
  • SDCM ロシア
  • BDSBAS (BeiDou Satellite-based Augmentation System) 中国
  • KASS 韓国
  • GATBP (Geoscience Australia (SBAS) Test-Bed Project) オーストラリア

https://www.enri.go.jp/report/hapichi/pdf2015/H27_16.pdf
インドの GAGAN、西日本なら実用になるみたいですね。

THE ALMANAC by GPS WORLD

NMEA 0183 のリバースエンジニアリング (規格書は有料)

Dale DePriest's Navigation and GPS Articles
gpsd - NMEA Revealed

Raspberry Pi の ntp に限らずパッケージは古いのでインターネットにつなぐのは危険

バージョンを見てみると

> apt list ntp
Listing... Done
ntp/stable,now 1:4.2.8p10+dfsg-3+deb9u2 armhf [installed]

ftp サイトでタイムスタンプを見てみると 2018-02-26 ですね。セキュリティーホール入りのじゃ怖くてインターネットに繋げないです... (最新は 2019/03/07 の 4.2.8p13。)

ちなみに人の少ないといわれる *BSD 系のパッケージだと
FreeBSD 2019/3/7 に 4.2.8p13 へアップデート
NetBSB 2019/3/25 に 4.2.8p13 へアップデート
OpenBSD 2017/3/27 に 4.2.8p10 へアップデートorz まぁ、自分たちで OpenNTPD プロジェクト立ち上げて、セキュリティーに問題があって重い ntp とは決別しましたから。

手で入れるなら NTPsec が良いかもしれません。

そもそもこういう人には Gentoo とかが良いかもしれませんねぇ。
Gentoo Linux は 2017/3/17 に ntp-4.2.8_p13 にアップデート

Gentoo on the Raspberry Pi 1, 2, and 3 in 32-bit mode
Raspberry Pi 3 64 bit Install

GPSD のサイトに行くとこんなのが転がってます PPS の設定方法など、参考に
Precise Point Positioning (PPP) HOWTO
GPSD Time Service HOWTO

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6