BN-357 も USB シリアル経由で繋いでみた
GG-1802 に続いて BN-357 も接続。
gpsd の設定。DEVICES に USB ポートを追加。
PPS を入力するには
GPS レシーバーは PPS 出力があるのに、渡せないのはなぁ。シリアルポートだと DCD から渡すみたいだけど、USB シリアルインターフェイス に DCD 端子は出てない。ということでちょっと開けてみた。 (下に通ってるのは 0.6mm の糸ハンダ)
CH340G とやらが入っているらしい。データシートを探してみるとこんなのが。
14番ピンが DCD の反転入力っぽいなぁということで引っ張り出す。
なんかフラックスが出てきてるみたいですが、これで Raspberry Pi に接続。
gpsd の設定
/dev/ttyUSB0 を追加する
> cat /etc/default/gpsd
# Default settings for the gpsd init script and the hotplug wrapper.
# Start the gpsd daemon automatically at boot time
START_DAEMON="true"
# Use USB hotplugging to add new USB devices automatically to the daemon
# USBAUTO="true"
# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="/dev/ttyS0 /dev/pps0 /dev/ttyUSB0"
# Other options you want to pass to gpsd
GPSD_OPTIONS="-n"
起動スクリプトにシリアルポートの速度を指定 (これをすると gpsd を起動してからの認識が早くなる → 手動で通信速度を変えると認識が早くなりますが、スクリプトでやってもダメでした。sleep とかかまさないと駄目?)
> cat /etc/init.d/gpsd
...snip
# serial speed
sudo stty -F /dev/ttyS0 115200
sudo stty -F /dev/ttyUSB0 115200
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
...snip
> /etc/init.d/gpsd restart
Restarting gpsd (via systemctl): gpsd.service.
gpsd に認識されているか、ntpd にどうやって書けばいいか確認。
> sudo ntpshmmon
ntpshmmon version 1
# Name Seen@ Clock Real L Prec
sample NTP2 1556629906.000278455 1556629905.999802467 1556629906.000000000 0 -20
sample NTP4 1556629906.000450069 1556629906.000008248 1556629906.000000000 0 -10
sample NTP0 1556629906.058861268 1556629906.057788408 1556629906.000000000 0 -1
sample NTP3 1556629906.144365784 1556629906.144251045 1556629906.000000000 0 -1
sample NTP2 1556629907.000305096 1556629906.999805671 1556629907.000000000 0 -20
sample NTP4 1556629907.000418272 1556629907.000000930 1556629907.000000000 0 -10
sample NTP0 1556629907.055453428 1556629907.055175825 1556629907.000000000 0 -1
sample NTP3 1556629907.144505960 1556629907.144409502 1556629907.000000000 0 -1
sample NTP2 1556629907.999996830 1556629907.999809956 1556629908.000000000 0 -20
sample NTP4 1556629908.000062559 1556629907.999999122 1556629908.000000000 0 -10
sample NTP0 1556629908.062150403 1556629908.061069053 1556629908.000000000 0 -1
sample NTP3 1556629908.145007026 1556629908.144642653 1556629908.000000000 0 -1
^C
NTP3, NTP4 と認識された模様。2つ増えたから、『NEMA』と『DCD に繋いだ pps』で認識されたみたい。ntp.conf に 127.127.28.3 と 127.127.28.4 を追加。
> cat /etc/ntp.conf
...snip...
server ntp-a3.nict.go.jp minpool 8 maxpool 12 iburst
server ntp-b2.nict.go.jp minpool 8 maxpool 12 iburst
server ntp-b3.nict.go.jp minpool 8 maxpool 12 iburst
server ntp-a2.nict.go.jp minpool 8 maxpool 12 iburst
server ats1.e-timing.ne.jp minpool 8 maxpool 12 iburst
server cwa225.bai.ne.jp minpool 8 maxpool 12 iburst
server cwa201.bai.ne.jp minpool 8 maxpool 12 iburst
# GG-1802
server 127.127.28.0 minpoll 0 maxpoll 0 burst noselect
fudge 127.127.28.0 time1 0.0502 refid NEMA
server 127.127.28.2 minpoll 0 maxpoll 0 burst
fudge 127.127.28.2 refid PPS
# BN-357
server 127.127.28.3 minpoll 0 maxpoll 0 burst noselect
fudge 127.127.28.3 time1 0.1455 refid NEMA
server 127.127.28.4 minpoll 0 maxpoll 0 burst
fudge 127.127.28.4 refid PPS
...snip...
しばらく待ってみた。さて、どうなったかな?
> ntp -p
remote refid st t when poll reach delay offset jitter
==============================================================================
SHM(0) .NEMA. 0 l 1 8 377 0.000 -34.122 9.202
*SHM(2) .PPS. 0 l - 8 377 0.000 0.222 0.017
SHM(3) .NEMA. 0 l - 8 377 0.000 0.206 0.877
+SHM(4) .PPS. 0 l - 8 377 0.000 -0.030 0.027
-ntp-a3.nict.go. .NICT. 1 u 11 64 377 8.983 0.561 1.721
+ntp-b2.nict.go. .NICT. 1 u 1 64 377 8.701 0.475 1.645
-ntp-b3.nict.go. .NICT. 1 u 37 64 377 9.466 0.883 1.260
-ntp-a2.nict.go. .NICT. 1 u 26 64 377 8.856 0.495 1.184
-61.114.187.55 ( .PPS. 1 u 11 64 277 11.204 1.294 1.490
-cwa225.bai.ne.j 210.171.0.34 4 u 34 64 377 3.481 0.625 0.689
-cwa201.bai.ne.j 210.171.0.34 4 u 33 64 377 3.235 -5.534 1.013
offset が 1ms を切り、jitter は 0.03ms 程度(@_@)
そして他の ntp サーバー minpoll 8 なのに、なんで poll が 64 なの???
#やっぱり BN-357 を設定する
やはりどの衛星を見るかとか、通信速度とか設定はしたほうが良いかなと。
GPS + Galileo + 北斗にしてみました。
→ 座標が安定しないので、その後北斗から GLONASS に変更。
USB の DCD が反転入力のため、PPS を立ち下がりに設定。(これで合ってるよねぇ?)
PPS が同期していないときはデューイ比 50% (同期するまでなにも点かないと電源が入っているか不安になるので)、同期してからは 10% で出力 (LED が点滅)
ナビゲーションモードは Stationary (固定局) にしておく。
Raspberry Pi に戻って gpsmon で見てみる
$HOME/opt の下で gpsd 3.18.1 をコンパイルして実行。42個も見えてる(@_@) そして 22個も使ってる(@_@)
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqklqqqqqqqqqqqqqqqqqqSeen 42/Used 22k
x Time: 2019-05-02T00:19:23.000Z xx PRN Elev Azim SNR Use x
x Latitude: 34.xxxxxxxx N xxGP 14 82 234 21 Y x
x Longitude: 135.xxxxxxxx E xxGP 22 15 286 21 Y x
x Altitude: 46.631 ft xxGP 25 35 44 24 Y x
x Speed: 0.12 mph xxGP 26 43 248 22 Y x
x Heading: 6.6 deg (true) xxGP 29 46 85 24 Y x
x Climb: 29.53 ft/min xxGP 31 59 335 25 Y x
x Status: 3D FIX (643 secs) xxGP 32 66 174 16 Y x
x Long Err (XDOP, EPX): 0.44, +/- 23.3 ft xxBD 33 72 205 21 Y x
x Lat Err (YDOP, EPY): 0.62, +/- 25.1 ft xxBD 34 61 267 30 Y x
x Alt Err (VDOP, EPV): 1.15, +/- 87.0 ft xxBD 36 64 294 31 Y x
x 2D Err (HDOP, CEP): 0.83, +/- 34.2 ft xxBD 37 36 253 18 Y x
x 3D Err (PDOP, SEP): 1.42, +/- 93.5 ft xxBD 39 31 74 16 Y x
x Time Err (TDOP): 0.90 xxBD 43 74 233 21 Y x
x Geo Err (GDOP): 1.68 xxBD 51 46 56 21 Y x
x ECEF X, VX: -3744226.050 m -0.070 m/s xxBD 52 56 316 29 Y x
x ECEF Y, VY: 3683707.980 m 0.060 m/s xxSB 122 49 166 0 Y x
x ECEF Z, VZ: 3606198.470 m 0.130 m/s xxQZ 194 80 0 27 Y x
x Speed Err (EPS): +/- 1.6 mphxxGA 211 34 50 17 Y x
x Head Err (EPD): n/a xxGA 214 41 183 11 Y x
x Time offset: 0.069 sec xxGA 219 57 270 26 Y x
x Grid Square: PM74rp xxGA 234 29 264 13 Y x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjmMore...qqqqqqqqqqqqqqqqqqqqqqqqqqj
数時間経つと時刻合わせできなくなった
しかし、暫くすると ntpd から見えなくなる。gpsmon とかでは見えるのに、ntpshmmon では見えなくなってしまい ntpd で時刻合わせできなくなってしまう。うーん。
gpspipe すると $GPZDA,$GPGGA,$GPRMC,$GPGSA は出力されてるけど $GPGSV は出力されず gpsmon で pps も見えなくなってる。
$GPGSV は待ってるとそのうち (30分とか経つと) 表示されるようになるんだけど、pps は復活せずセマフォも見えないまま。
gpsd を再起動したら復活する。うーん。なんだかなぁ。 USB シリアルがダメなのかなぁ。
ログを見てみると 11:44 に勝手に removed になってる。
pps は見えなくなってるけど gpsmon とか gpspipe では NEMA の情報は見える。ntpshmmon では見えなくなってる。gpsd 3.18.1 が何か悪さをしてる?
> grep -e pps -e gpsd /var/log/syslog
May 2 09:43:20 Ras1 gpsd[10246]: gpsd:ERROR: shmget(0x47505344, 14024, 0666) for SHM export failed: Invalid argument
May 2 09:43:23 Ras1 kernel: [19228.548923] pps pps1: new PPS source serial0
May 2 09:43:23 Ras1 kernel: [19228.548961] pps pps1: source "/dev/ttyS0" added
May 2 09:43:25 Ras1 kernel: [19230.925644] pps pps2: new PPS source usbserial0
May 2 09:43:25 Ras1 kernel: [19230.925684] pps pps2: source "/dev/ttyUSB0" added
May 2 11:44:52 Ras1 kernel: [26517.369311] pps pps2: removed
syslog を tail -f しながら再起動。再起動後には ntpd で pps も NEMA も拾えてる。ntpshmmon も勿論OK
Ras1:~> tail -f /var/log/syslog | grep -e pps -e gpsd &
[1] 11048 11049
Ras1:~>
Ras1:~> sudo systemctl stop gpsd
May 2 11:55:21 Ras1 kernel: [27146.303092] pps pps1: removed
Warning: Stopping gpsd.service, but it can still be activated by:
gpsd.socket
Ras1:~>
Ras1:~>
Ras1:~> sudo systemctl start gpsd
May 2 11:55:29 Ras1 gpsd[11086]: gpsd:ERROR: shmget(0x47505344, 14024, 0666) for SHM export failed: Invalid argument
Ras1:~> May 2 11:55:32 Ras1 kernel: [27157.625405] pps pps1: new PPS source serial0
May 2 11:55:32 Ras1 kernel: [27157.625468] pps pps1: source "/dev/ttyS0" added
May 2 11:55:34 Ras1 kernel: [27159.983266] pps pps2: new PPS source usbserial0
May 2 11:55:34 Ras1 kernel: [27159.983310] pps pps2: source "/dev/ttyUSB0" added
再度発生。まだ removed は出ていませんが ntpd が時刻合わせできなくなり ntpshmmon でも NTP3,4 を見失う。
そこで gpspipe -r してみると..."bps":57600 ...あー、勝手に速度が変わってしまって読めなくなってしまったのですかorz。 gpsd の速度を固定する方法って無いんですかねぇ?
> gpspipe -r localhost:2947:/dev/ttyUSB0
{"class":"VERSION","release":"3.18.1","rev":"3.18.1","proto_major":3,"proto_minor":13}
{"class":"DEVICES","devices":[{"class":"DEVICE","path":"/dev/ttyS0","driver":"u-blox","subtype":"SW ROM CORE 3.01 (107888),HW 00080000,FWVER=SPG 3.0
1,PROTVER=18.00,GPS;GLO;GAL;BDS,SBAS;IMES;QZ","activated":"2019-05-02T04:18:19.074Z","flags":1,"native":1,"bps":115200,"parity":"N","stopbits":1,"cy
cle":1.00,"mincycle":0.25},{"class":"DEVICE","path":"/dev/pps0","driver":"PPS","activated":"2019-05-02T04:18:20.000Z"},{"class":"DEVICE","path":"/de
v/ttyUSB0","driver":"Trimble TSIP","subtype":"Unknown","activated":"2019-05-02T04:18:15.104Z","flags":1,"native":1,"bps":57600,"parity":"N","stopbit
s":2,"cycle":1.00}]}
{"class":"WATCH","enable":true,"json":false,"nmea":true,"raw":0,"scaled":false,"timing":false,"split24":false,"pps":false,"device":"/dev/ttyUSB0"}
UART 接続の GG-1802 も見えなくなることが
さらに 2日ほど経って見てみると /dev/ttyS0 の方も速度が合わなくなって ntpd と同期できなくなってました。ntppipe -r して暫く待つと通信速度が合い ntpd と同期が始まりました。(ntpshmmon でも見える)
まぁ、しかし、これじゃぁ使えないですねぇ。通信速度を固定るする方法を探してみましょうか。