ブログ

Armadillo(ABOS対応製品):GPSデバイス(BU-353S4)を動かしてみた(お試し版)

at_kazutaka.bito
2025年2月3日 10時37分

Armadillo(ABOS対応製品)で、GPSデバイス(BU-353S4)を動かしてみました。
ABOSのカーネルでは、GPSデバイス(BU-353S4)とUSB接続するための
USBシリアルのデバイスドライバ(USB CP210x family of UART Bridge Controllers)がデフォルトで有効になっています。
ついては、GPSデバイス(BU-353S4)だけ接続してると、/dev/ttyUSB0で認識します。

備考)他のUSBデバイスが接続されていたり、中途半端にUSBデバイス挿抜してると  デバイス番号が変わる可能性があります。
 以下では、/dev/ttyUSB0で認識されていることを前提とします。

ここでは、とりあえずGPSデバイス(BU-353S4)を動かす手順です。
(以下の手順では実施した内容は保存されません。Armadilloを再起動すると、再度実行し直す必要があります。)

GPSデバイス(BU-353S4)を動かす手順

シリアル通信のボーレートを合わせます。

armadillo:~# stty -F /dev/ttyUSB0 4800

Armadilloをインターネット接続可能なネットワークに接続して、
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="-N -F /var/run/gpsd.sock -b -n"

gpsdを再起動します。

armadillo:~# rc-service gpsd restart

cgpsコマンドで、GPSの情報が確認できます。

armadillo:~# cgps -s

実行結果は下記のように表示されます。
(下記、枠線の表示が実際と異なりますが、ご容赦ください。)

x Time         2025-02-03T07:58:01.060Z ( 0)xxGNSS  S PRN  Elev  Azim   SNR Usex
x Latitude          35.62433666 N           xxGP  2     2  75.5 352.5  30.0  Y x
x Longitude        139.72335287 E           xxGP 10    10   5.5  33.0  31.8  Y x
x Alt (HAE, MSL)     123.240,     88.160  m xxGP 17    17  19.0 291.0  15.0  Y x
x Speed              0.63              km/h xxGP 27    27  10.5  93.0  26.5  Y x
x Track (true, var)      92.8,  -7.6    deg xxGP  9     9  21.0 123.0   0.0  N x
x Climb              0.72             m/min xxGP 16    16  69.0  96.0   0.0  N x
x Status          3D FIX (5 secs)           xxGP 19    19   6.5 160.5   0.0  N x
x Long Err  (XDOP, EPX)   0.79, +/- 11.8 m  xxGP 20    20  47.5 279.0   0.0  N x
x Lat Err   (YDOP, EPY)   1.68, +/- 25.2 m  xxGP 24    24  15.0 268.5   0.0  N x
x Alt Err   (VDOP, EPV)   1.65, +/- 38.0 m  xxGP 26    26   4.5  37.5   0.0  N x
x 2D Err    (HDOP, CEP)   1.80, +/- 34.2 m  xxGP 32    32   3.0 126.0   0.0  N x
x 3D Err    (PDOP, SEP)   1.80, +/- 34.2 m  xx                                 x
x Time Err  (TDOP)        1.17              xx                                 x
x Geo Err   (GDOP)        2.74              xx                                 x
x Speed Err (EPS)            +/-  181 km/h  xx                                 x
x Track Err (EPD)         n/a               xx                                 x
x Time offset             0.547594892     s xx                                 x
x Grid Square             PM95uo69          xx                                 x
x ECEF X, VX   -3959989.000  m   -0.120  m/sxx                                 x
x ECEF Y, VY    3355541.000  m   -0.120  m/sxx                                 x
x ECEF Z, VZ    3694462.000  m    0.000  m/sxx                                 x

上記表示は、Ctrl+Cで終了します。

時刻同期してみる

GPSデバイス(BU-353S4)の時刻と同期させてみます。
なお、GPSデバイス(BU-353S4)はUSB接続なので、PPSを使った時刻精度は得られません。
用途としては、ネットワーク接続不可な環境で、GPSの時刻を使わざるを得ない場合かと思います。

以下では、GPSデバイス(BU-353S4)のみから時刻同期する手順を説明します。

NTPサーバー(chronyd)関連のデフォルト設定を無効化(※)しておきます。
※) Armadillo-X2製品マニュアル「3.10. Network Time Protocol (NTP, ネットワーク・タイム・プロトコル) の設定」を参考。
ここでは、中身のないconfファイルを作って、デフォルトのconfを無効化します。

armadillo:~# touch /etc/chrony/conf.d/initstepslew.conf
armadillo:~# touch /etc/chrony/conf.d/servers.conf

/etc/chrony/chrony.confの内容を下記に書き換えます。

# include files ending in .conf in the following directories
# if a file has the same name in both, only the first one is loaded
# otherwise files are loaded in lexicographical order in the file
# names.
# Note /etc/atmark/chrony.conf.d is left for backwards compatibility,
# files in /etc/chrony/conf.d can be modified normally.
confdir /etc/atmark/chrony.conf.d /etc/chrony/conf.d /lib/chrony.conf.d

refclock SHM 0 refid GPS precision 1e-1 offset 0.9999 delay 0.2

Armadilloをネットワーク接続を外してから、下記コマンドででたらめな日付を設定します。
(このあと、GPSの情報のみで時刻が反映されることを確認するため)

armadillo:~# date -s "2022-11-11"
Fri Nov 11 00:00:00 JST 2022

armadillo:~# date
Fri Nov 11 00:00:03 JST 2022

NTPサーバー(chronyd)を再起動します。

armadillo:~# rc-service chronyd restart

時刻同期は、chronyc sources -vで確認してみます。
restart直後は、同期がとれてない(実行結果の末尾「#? GPS」)ので、日付はでたらめなままです。

armadillo:~# chronyc sources -v

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
#? GPS                           0   4     0     -     +0ns[   +0ns] +/-    0ns

armadillo:~# date
Fri Nov 11 00:00:36 JST 2022

数分程度待ってから、再度確認します。
実行結果、「#* GPS」となっていれば、GPSと同期がとれているらしく、
dateコマンドの実行結果がGPSの時刻に更新されています。

armadillo:~# chronyc sources -v

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
#* GPS                           0   4    37    17  -2103us[-6203us] +/-  200ms

armadillo:~# date
Tue Feb  4 08:08:03 JST 2025