Armadilloフォーラム

armadillo-x2におけるGPS(BU-353S4)の接続と時刻設定

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

よろしくお願いします。

コメント

アットマークテクノにも当該モジュールがあるので少し先になりますが確認をしてみます。

一応の手順としては、
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秒を許容できない場合になります。
システムの概要等おしえてもらえれば、リーズナブルな方針を議論することもできると思います。

at_kazutaka.bito

2025年1月30日 14時11分

尾藤です。

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一択のような場合に、それなりの精度で同期かけるような用法になるかと思います。)