Raspberry PiでGPS位置情報を記録

先日、Raspberry Piに「みちびき」対応のGPSモジュールを接続しました。

位置情報を記録して「みちびき対応のGPSロガー」として使用できるように、Raspberry Piを設定したいと思います。


Raspberry PiのGPSロガー設定

位置情報の記録は、gpsd付属のgpxloggerで行おうと思います。

普通に-dオプション付きで起動すれば良さそうですが。

gpxlogger -d -f <ファイル名>

このままシャットダウンするとGPXファイルの最後が切れてしまい、不完全なファイルになってしまいます。

XMLの閉じタグがありません。むむむ・・・工夫が必要のようです。

gpxloggerのサービス化

いろいろと試したところ、systemdにgpxloggerをサービスとして登録することで、正しいファイルを出力できそうです。サービス化することで、シャットダウンまたはサービス終了時にgpxloggerへシグナル(おそらくSIGTERM)が送られて、XMLの閉じタグが正しく出力されるようです。

次の手順でサービス化を行いました。

  1. GPXファイルの出力先フォルダを作成します。
    先日設定した、Nextcloudサーバへ自動同期するフォルダを使おうと思います。

    mkdir nextcloud/pi3cam/gpslog

    RaspbianのNextcloudサーバ同期設定はこちらの記事になります。

  2. /etc/systemd/system/gpxlogger.serviceファイルを作成します。
    sudo nano /etc/systemd/system/gpxlogger.service

    次のような内容です。

    [Unit]
    Description=gpxlogger service
    After=gpsd.socket
    
    [Service]
    ExecStart=/bin/bash -c '/usr/bin/gpxlogger -f /home/pi/nextcloud/pi3cam/gpslog/gps_$$(date +%%Y%%m%%d%%H%%M%%S).gpx -m 20'
    ExecStop=/bin/kill ${MAINPID}
    Restart=always
    Type=simple
    User=pi
    Group=pi
    
    [Install]
    WantedBy=multi-user.target

    GPXファイル名は、サービスを起動した日時にしています。日時の取得のために、ExecStart行が少し特殊になっています。記録が細かすぎないように、-mオプションで20メートルの移動を検知した場合に位置情報を出力するようにしてみました。

  3. 作成したgpxlogger.serviceをsystemdに登録し、有効化します。
    sudo systemctl daemon-reload
    sudo systemctl enable gpxlogger.service

これで、Raspberry Piを起動するとGPXファイルの出力が開始され、シャットダウンするかgpxloggerサービスを終了すると出力が終了する動作になります。


実際にファイルが正しく出力されるか確認してみましょう。

サービスを動かすとGPXファイルが出力され、サービスを終了すると</gpx>の閉じタグを出力・・・このような感じです。


GPXファイルを地図で表示

Nextcloud

Nextcloudサーバにアプリケーションをインストールすることで、このような感じで位置情報を表示することができます。下図はGPX Editですが、他のアプリケーションも選べます。

アプリケーションのインストールは、Nextcloudサーバの設定画面でいろいろと選択できます。2018年3月現在、GPX関連アプリは3つありました。

Google Earth

PCにインストールしたGoogle Earthも位置情報を表示できます。このような感じで、正しく位置情報が表示されました。青い線がGPXの位置情報になります。

つぎの2つの工夫で、大変便利なGPSロガーになりました。

  1. gpxloggerをサービス化。
    • Raspberry Piを起動すると位置情報の記録が開始され、シャットダウン・またはサービスを停止すると正しいGPXファイルが出力されるようになりました。
  2. Nextcloudサーバとの同期設定と、GPXアプリケーションのインストール。
    • Raspberry PiをLANに接続すれば自動的にGPXファイルがアップロードされ、ファイル転送の手間がありません。NextcloudにGPXアプリをインストールすることで、アップロード後すぐに地図上に位置情報を表示できます。サーバ側アプリのため、PCでもスマートフォンでも表示できます。

さて。

いろいろ試したところ、PPS信号を使う/使わないの違いで、gpsdの位置情報が変わることがわかりました。

精度が高い位置情報を記録するための工夫は、次回の記事でご紹介させて頂きたいと思います。それではまた!


※19.1.7追記:

リアルタイムに位置情報を知りたい場合

スマートフォンやPCにて、Raspberry Piの現在位置を知りたい場合。よろしければこちらの記事を御覧ください。ログを記録しながら位置情報の表示も可能のようです。

スポンサーリンク

フォローする

スポンサーリンク