ラズパイでロギングしたGPS情報をGoogle Mapにマッピングする方法 (7)

こんにちはドルフィンシステム福島です。
前回まででGPSのロギングが出来るようになりました。

今回は外に出て実際にロギングし、GPS情報を地図にマッピングしてみます。

NMEAも保存する

前回まででGPS情報をファイルに保存出来ましたが、NMEA情報は保存していませんでした。
NMEA情報も保存するようにスクリプトを作成し、自動実行できるようにします。

以下は、前回行ったことに似ているので説明は省略します。

$ vi nmea.py
#!/usr/bin/python3

import socket
import datetime

host="127.0.0.1"
port=2947
gpsd_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
gpsd_socket.connect((host, port))
gpsd_stream = gpsd_socket.makefile(mode="rw")
gpsd_stream.write('?WATCH={"enable":true, "json":false, "nmea":true}\n')
gpsd_stream.flush()

dt_now=datetime.datetime.now()
filename = "/tmp/nmea-" + dt_now.strftime('%Y%m%d-%H%M%S') + ".csv"

with open(filename, 'w') as f:
    while 1:
        raw = gpsd_stream.readline()
        #print(raw)
        f.write(raw)

$ sudo vi /etc/systemd/system/gpsnmea.service

[Unit]
Description = gps nmea get daemon

[Service]
ExecStart = /home/mikio/work/gps/nmea.py
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target

$ sudo systemctl enable gpsnmea.service
$ sudo systemctl start gpsnmea.service
$ ps ax
~中略~
   3329 ?        I      0:00 [kworker/2:3-mm_percpu_wq]
   3365 ?        I<     0:00 [kworker/1:2H]
   3370 ?        Ss     0:00 /usr/bin/python3 /home/mikio/work/gps/nmea.py
   3371 pts/0    R+     0:00 ps ax
~中略~
$ ls -al /tmp
~中略~
drwxrwxrwt  2 root root  4096 Apr  1  2020 .font-unix
-rw-r--r--  1 root root 24694 Nov 30 02:59 nmea-20201130-025847.csv
drwx------  3 root root  4096 Nov 20 02:17 snap.lxd
~中略~


ラズパイロギング用キットを作る

ラズパイとモバイルバッテリーとGPSを持ち歩くのは、やっかいなので100均のケースに詰め込んでみました。



ガタガタするのでモバイルバッテリーはガムテープで軽く固定。


ケースの蓋の部分をニッパーで切ってGPSアンテナを外に出します。


これで大丈夫!!

これなら片手で運べますし、違和感はありません!!


というわけで行ってきます!!



ラズパイからGPSログを取り出す

帰ってきました。




早速ラズパイにFilezillaでsftp接続して、/tmpにあるGPSログをPCにダウンロードします。

ちゃんと保存されているようです。


GPSログからマップに表示する

GPSログ活用がはかどるソフトとして「轍-wadachi」があります。

NMEAファイルがあれば、Google Map / Earthにインポート可能なKMLファイルを出力してくれます。

以下のURLからダウンロードし、適当なフォルダに展開します。

轍-wadachi
https://wadachi.cyclekikou.net/



wadachi.exeを起動し、インポートを選択。

ラズパイから取り出した "nmea-2020nnnn-xxxxxx.csv"をインポートしますが、その前に.csvを.nmeaに拡張子を変更してから読み込みます。


読込が完了したら、ウィンドウ右上の「ブラウザでプレビュー」をクリック。


するとブラウザが開き、移動した位置が地図上にプロットされ。。。あれ?なんだかユーラシア大陸の内陸の方に移動しています。

多分おかしな位置情報が記録されているのでしょう。


NMEAファイルを見てみると、位置情報を取得し始めたときの位置が大幅にずれています。

徐々に位置情報が終息しています。恐らく原因はこれ。



NMEAファイルから位置情報確定前のデータを削除して再度読み込むと、ちゃんとマッピングされました。



下図の青丸から出発点して近所をぐるっと散歩しています。
GPSログが赤い線。実際に歩いたルートが青い矢印です。

直進していると良い精度でトラッキングしているように見えますが、角を曲がると誤差が目立ちますね。
地図の左半分は開けている場所ですが、右半分はビルの間の道を歩いています。

やはりビルの谷間は精度に影響があるようです。



Google Mapにも表示してみる

轍でインポートが完了したら、エクスポートを選択し"Google Earth KML…"を選択し、KMLファイル(位置情報が書かれたXMLファイル)を保存します。


Google マップを開いて左側のメニューから「マイプレイス」を選択。
Google にログインしている必要があります。



マイマップを選択して、一番下の「地図を作成」をクリックします。


「インポート」をクリックし、先ほど保存したKMLファイルを選択します。



ちゃんとマッピングされました。




移動していた時間と距離も表示されるという便利さ。



まとめ

  • 疲れました。
  • 直進していると良い精度でトラッキングしているように見えますが、角を曲がると誤差が目立つ。
  • 開けている場所は位置情報の精度が良いが、ビルの間の道は精度が劣る。
  • 轍を使用するとマッピングの確認が楽。
  • 轍ならGoogle Map / Earth用のKMLファイル出力が出来る。

RFキャプチャなどでRFデータと収録場所両方を保存したい場合などもありますが、大まかな位置ならGPSでも良さそうですが、今後更に精度の良い方法を追求したいと思います。


以上、ドルフィンシステム福島でした。






コメント