nakamori
2025年1月28日 17時51分
==========
製品型番:armadillo-x2
その他:GPSレシーバ:BU-353S4
==========
お世話になっております。
現在、armadillo-x2に対して、NTPサーバ方式よりも正確な時刻設定を考えています。
方式の一つとして、GPSレシーバの利用があると思いますが、armadillo-x2に
GPSレシーバ:BU-353S4は接続可能でしょうか?
また可能である場合、GPSレシーバを利用した時刻設定はどのようにすればよいでしょうか?
GPSレシーバ:BU-353S4
https://armadillo.atmark-techno.com/node/4914
よろしくお願いします。
コメント
at_kazutaka.bito
尾藤です。
Armadillo-X2とBU-353S4を接続して確認しました。
結論から言いますと、
動かすことはできます。
時刻同期の方法はわかりませんでした。
動かし方
Armadillo-X2とBU-353S4をUSB接続して起動します。
前のコメント通り、デフォルトでドライバが入ってるので認識できます。
(BU-353S4だけ接続してると、/dev/ttyUSB0で認識しますが、
他のデバイスが接続されていたり、動作中に中途半端に挿抜するとttyUSB番号が変わる可能性があります。
以下では、/dev/ttyUSB0を前提とします。)
ボーレートを合わせます。
armadillo:~# stty -F /dev/ttyUSB0 4800
Armadillo-X2をインターネット接続可能なネットワークに接続して、
GPS通信に必要なパッケージ(gpsd)をインストールします。
armadillo:~# apk update armadillo:~# apk add gpsd armadillo:~# apk add gpsd-clients
/etc/conf.d/gpsdの内容を下記に書き換えます。
# Copyright 1999-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # Config file for gpsd server GPSD_OPTIONS="" DEVICES="/dev/ttyUSB0" GPSD_SOCKET="/var/run/gpsd.sock"
gpsdを再起動します。
armadillo:~# rc-service gpsd restart
cgpsコマンドを実行すると、下記のようにGPSの情報が確認できます。
(下記、枠線の表示が実際と異なりますが、ご容赦ください。)
armadillo:~# cgps -s x Time 2025-01-30T03:25:49.870Z ( 0)xxGNSS S PRN Elev Azim SNR Usex x Latitude 35.63023589 N xxGP 9 9 17.0 309.0 17.0 Y x x Longitude 139.72444000 E xxGP 18 18 31.0 73.5 35.6 Y x x Alt (HAE, MSL) n/a, n/a m xxGP 25 25 6.0 97.5 11.3 Y x x Speed 39.81 km/h xxGP 26 26 61.5 40.5 27.5 Y x x Track (true, var) 16.0, -7.6 deg xxGP 29 29 3.5 42.0 11.9 Y x x Climb n/a m/min xxGP 30 30 42.0 58.5 10.2 Y x x Status 2D FIX (10 secs) xxGP 3 3 39.5 96.0 0.0 N x x Long Err (XDOP, EPX) 1.26, +/- 19.0 m xxGP 7 7 67.5 100.5 0.0 N x x Lat Err (YDOP, EPY) 7.19, +/- 107 m xxGP 13 13 68.5 325.5 0.0 N x x Alt Err (VDOP, EPV) 2.56, n/a xxGP 19 19 7.5 255.0 0.0 N x x 2D Err (HDOP, CEP) 50.00, +/- 950 m xxGP 32 32 61.5 295.5 0.0 N x x 3D Err (PDOP, SEP) 7.73, +/- 146 m xx x x Time Err (TDOP) 4.18 xx x x Geo Err (GDOP) 8.79 xx x x Speed Err (EPS) +/- 775 km/h xx x x Track Err (EPD) n/a xx x x Time offset 0.549406532 s xx x x Grid Square PM95up61 xx x x ECEF X, VX n/a n/a xx x x ECEF Y, VY n/a n/a xx x x ECEF Z, VZ n/a n/a xx x
時刻同期については、chrony関連をうまいこといじればできるのかもしれませんが、当方はわかりませんでした。
PPSで同期かける設定方法がネットから見つけられますが、
前のコメントにもありますとおり、PPSは単独端子のパルス信号なので、USB接続のBU-353S4では使えないと思います。
だとすると、USBから取得した時刻に同期させるというアプリ処理(このchronyの設定は不明。すみません。)になるので、
NTPより精度がいいかというと、変わらないような気がします。
(ネットワークが使えず、GPS一択のような場合に、それなりの精度で同期かけるような用法になるかと思います。)
at_ohsawa
2025年1月30日 10時09分
アットマークテクノにも当該モジュールがあるので少し先になりますが確認をしてみます。
一応の手順としては、
gpsdをインストールしてX2の場合は時刻サービスとして稼働しているchronyに追加の設定をすると連携するはずです。
(X2にはデバイスドライバは入ってるので、カーネルのビルド等は要らないです。)
ただし、NTPより正確にはなりません。
こういったUSB接続/シリアル接続でNEMAを出力する”普通の”GPSモジュールはNMEAというテキスト形式の
GPS情報を送信します。
これは文字列データの組み立て送信をモジュール側で送信する遅延分がのることで精度が出ません。
PPSというNEMAとは別に1秒毎の正確なパルス信号を出すタイプのモジュールでこの問題を
解決できますが。このタイプのPPS出力可能なGPSモジュールはやや高価です。
(この辺の議論はGPSの時刻同期 VS NTPについて解説している記事がネット上にもよくあります)
また、NTP自体がそもそも精度が高いのです。NTPサーバーによりますがサーバー側精度で
2桁ナノ秒級の精度ですしNTPのプロトコルは通信経路上の遅延をキャンセルする設計なので、
経路上の(計測上キャンセルできなかった)ジッタだけが問題になりますがこれも実時間で
1桁msレベルです。
この数msが問題になるかですが、Linuxのアプリケーションプロセス自体がリアルタイムOS
ではないのでアプリケーションが”えいや”で動くタイミングは1桁msの精度にはならないため、
データを取ってタイムスタンプをつけるといった状況ではプロセスが動くまでの遅延があり
過剰精度であると言えます。
もし、かなり割り込み実装を工夫したプログラムを作成することや、そもそも自分自身が
NTPの送出サーバー(か、それに類する精密時刻送信システム)になろうというモチベーション
が無い限りほとんどの場合でNTPが使えるならNTPで十分だと考えます。
こういった前提で、PPSの使えないGPSで時刻同期をすると嬉しいケースはインターネットに
到達できない且つ、Armadillo-X2に搭載している高精度RTCの月差±8秒を許容できない場合になります。
システムの概要等おしえてもらえれば、リーズナブルな方針を議論することもできると思います。