1.送信センテンスを限定した結果
前回、NMEAドライバのリファレンスの記載通りGPSレシーバーからの送信センテンスを限定してみたが、有意な差はみられなかった。下図は設定変更後、2日目からの5日間のoffsetをグラフしたもの(記録していたpeerstatsから作成)。
転送速度の遅い(4800bps) GLOBALIST BU-353S4の遅延が多少なりとも解消されるかと考えていたが、設定変更前のグラフと比較してそうした変化がみられない。BU-353S4はoffsetに100msの変動が出ているので、少々の差はそれに紛れてしまっている可能性もある。ではjitterに変化はあったのか?と思いグラフにしてみた。
10msを超えてるのはoffsetに大きな変動があった時。センテンスの限定とは別の要因っぽいので置いといて、それを除くとなんとなくjitterが減ったか?程度。
一応各GPSレシーバーのjitterの中央値を算出してみた(平均値はBU-353S4のように大きなoffset変動があると当てにならないので見ない)。
GPSレシーバー | 変更前 | 変更後 |
---|---|---|
VFAN UG-353(9600bps) | 2.812 ms | 2.771 ms |
GLOBALIST BU-353S4(4800bps) | 7.151 ms | 6.347 ms |
LOCOSYS LS22030-V2(115200bps) | 5.779 ms | 5.154 ms |
一応、送信センテンスを限定するとjitterが抑えられており精度には寄与しているようだが、offset変動が20ms以上ある状態なのでそう大きな要素ではなさそう。
ちなみにNMEAのリファレンスに送信センテンスの限定について書かれたのを調べたら2010/11/9だった。もしかするとスペックの低いマシンだともっと違いが現れていたのかも知れない。
BU-353S4
jitterをグラフにして気づいたが、時々起こる大きなoffset変動とは別に、周期的な変化が見られる。グラフは掲載しないが、他の2つのGPSレシーバーではこうした周期的な変化は見られなかった。
GPSモジュールの特性か、掴んでる衛星によるものか。
2.転送速度の変更
次は転送速度を上げて、しばらく様子を見る。
ntpdが対応する最大転送速度は115200bpsまでなので、最低転送速度が115200bpsのLS22030-V2はこのまま。UG-353とBU-353S4はそれぞれの最大速度38400bpsに上げる。
$ ubxtool -P 14 -f /dev/gps0 -S 38400
$ ubxtool -P 14 -f /dev/gps0 -p SAVE ※1
$ printf '$PSRF100,1,38400,8,1,0*3D\r\n' > /dev/gps1
※1 u-bloxは変更しただけでは設定が保存されないので、SAVEで現在の設定を不揮発性メモリに保存する。
おまけ.NMEAコマンドのチェックサム計算
リファレンスを見ながら送信するNMEAコマンドを作るが、チェックサムの計算が面倒なのでこんな感じのスクリプトを作っている。perlやrubyでなくawkを使ってるのは単なる好み。
#!/bin/sh
printf '$'
printf "${1}"
printf '*'
echo $1 | awk 'BEGIN{for(i=0; i<=255; i++) {Asc[sprintf("%c", i)]=i}; cs=0;} {for(i=1;i<=length($0);i++) {cs=xor(cs, Asc[substr($0,i,1)]);}} END {printf("%02X", cs)}'
printf '\r\n'
$ put_nmea.sh "PSRF100,1,38400,8,1,0" > /dev/gps1