ラズパイに接続したGPSから位置情報を取得する (5)

こんにちはドルフィンシステム福島です。
少し時間が空いてしまいましたが「ラズパイでモバイルセンシング端末を作る」の続きです。

前回は、ラズパイやUSRPと一緒に使用するGPSの選定(4)でした。

具体的なステップ

1. ラズパイ4にUSRP B200miniを接続する
2. 電源は市販のモバイルバッテリーを使用することでコストを抑える
3. 特定周波数のRSSIを計測しながら
4. 接続したGPSの位置情報を取り込みロギングする
5. ロギングしたRSSIと位置情報からマップを作成する

5段階の今日は4番のGPSログ取得を行います。
(3番が後先になってしまいましたが、先にGPSに取りかかったので先にGPSをやっつけます)


ついでにラズパイ4の無線LAN設定をする

この節は福島のメモです。

以前ラズパイをセットアップした際に、無線LANの設定をしていませんでしたが、GPS電波が受信できる場所にラズパイを持って行っても社内LANに接続できるように無線LANを設定します。

$ sudo vi /etc/netplan/50-cloud-init.yaml network:     ethernets:         eth0:             dhcp4: true             optional: true     wifis:         wlan0:             dhcp4: true             access-points:                 "アクセスポイント名":                     password: "アクセスポイントのパスワード"     version: 2

$ sudo netplan apply

固定IPにする場合は、

$ sudo vi /etc/netplan/50-cloud-init.yaml ~中略~     wifis:         wlan0:             dhcp4: false             addresses:                     [192.168.0.30/24]             gateway4: 192.168.0.1             nameservers:                     addresses: [192.168.0.1] ~中略~

とする。

Error in network definition: expected mapping (check indentation)

というエラーメッセージが表示されたら、インデント(行頭のスペースの数など)が間違っているので正しく直します。


GPSを接続して認識を確認する

まず前回購入したGPSをUSBポートに挿入しlsusbコマンドを実行して認識していることを確認します。

以下の「~PL2303 Serial Port」がGPSです。

次にGPSがどのttyに割り当てられたか確認します。

一度GPSをUSBから抜き差ししてdmesgコマンドを実行すると、割当先が表示されます。
下図ではttyUSB0に割り当てられたようです。

$ dmesg

次にGPSから文字列を受信してみます。以下のコマンドを実行します。
すると表示されますね。

$ cat /dev/ttyUSB0

以下のように文字が化けたらGPSのボーレートがおかしいようです。
この場合は、

1. Windows PCにu-centerをインストール。
2. Windows PCにGPSを挿入。
3. u-centerを起動して、Receiver→Action→Revert Config

を行ってGPS設定値をデフォルトに戻しましょう。デフォルトボーレートは9600baudです。


GPSデーモンをインストールする

pythonを使ってSerialで受信したGPSのNMEAをパースしても良いのですが、シリアル受信やパースなどの手間を省いてくれるインテリジェントなgpsdをインストールして使用します。

自作でシリアルポートを開くプログラムを作成した場合、同時に他のプログラムがGPSを開くことは出来ませんが、gpsdは複数のアプリにgps情報を共有する機能があるのでネットワーク経由でgps情報を配信可能です。

$ sudo apt-get install gpsd gpsd-clients
$ sudo killall gpsd

インストールが完了したら、GPS情報を受信してみます。
下図のようにちゃんと見えてますね。

$ sudo gpsmon /dev/ttyUSB0

次にgpsdをGPSサーバとして動かして、その情報をgpsmonクライアントで取得してみます。

$ sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock
$ gpsmon

ちゃんと見えてますね。


まとめ

• USBシリアルタイプのGPSなら接続すれば認識する
• 認識したデバイス名はdmesgコマンドで調べる
• catコマンドでGPS NMEAを確認することが出来る
• gpsdを使用すればシリアルポート受信やNMEA文字列パースも行ってくれる
• gpsdなら複数アプリでGPS情報を見ることが出来る

GPS情報の取得まで行おうと思ったのですが、意外と分量があったので、ログ取得は次回にします。

以上です。



コメント