はじめに
PPS で Raspberry Pi NTP サーバに再挑戦です。
前回 BN-880 が1日もたずに壊れたのでもう少し安い上に PPS 出力のあるもの GG-1802 (購入時の価格 \733+送料無料) を選びました。中国からと思いきや、シンガポールからの発送でした。
こちらも BN-880 と同じく u-blox の M8030-KT が載っているようです。
左側が壊れた 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) |
その前に Windows で動作確認 & 設定
まず壊れていないか確認のために、Windows に繋いで u-cneter で見てみます。
ちょい設定をいじりましたが正常に動いていますね。(ただ、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 じゃないといけない?試しに書き換えて再起動。
> 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
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