Ubuntu 16.04 LTSでGPS レシーバーを接続し、python3言語のスクリプトを使用してGPSデータを取得しました。
GPS レシーバーのインストール
amazonから「GPS レシーバー USB, 内蔵 アンテナ チップ 一体型」を購入しました。届いたGPS レシーバーを確認すると、VFAN社のモデル:UG-353でした。Ubuntu 16.04 LTSでGPS レシーバーを接続して、次のコマンドで接続を確認すると、「U-Blox AG」と認識されました。
$ lsusb Bus 002 Device 004: ID 1546:01a7 U-Blox AG Bus 002 Device 003: ID 046d:c018 Logitech, Inc. Optical Wheel Mouse Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 004: ID 17ef:480f Lenovo Integrated Webcam [R5U877] Bus 001 Device 003: ID 0a5c:217f Broadcom Corp. BCM2045B (BDC-2.1) Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Ubuntu 16.04 LTSが動作するThinkPad T410にGPS レシーバーを接続した状態を次に示します。
次のコマンドで、GPSデーモン「gpsd」をインストールします。
$ sudo apt-get install gpsd gpsd-clients
ここで、再起動します。
次のコマンド「gpsmon」を実行するとGPSデータが受信されます。
$ sudo gpsmon
次のコマンド「cgps」を実行するとGPSデータが受信されます。
$ sudo cgps
GPS受信プログラムの作成
Ubuntu 16.04 LTSにはすでにPython3はインストールされていました。GPSライブラリ「gps3」を次のコマンドでインストールします。
$ sudo apt-get install python3-pip $ sudo pip3 install gps3
GPS受信プログラム「gpstest.py」を次に示します。このプログラムでは、変数「gps_socket」により、GPSから入力した緯度、経度、高度、速度をCSV形式でファイル「gps.csv」に保存します。
from gps3 import gps3 import csv gps_socket = gps3.GPSDSocket() data_stream = gps3.DataStream() gps_socket.connect() gps_socket.watch() with open('gps.csv', 'w') as f: writer = csv.writer(f, lineterminator='\n') # 改行コード(\n)を指定しておく i=0 for new_data in gps_socket: if new_data: data_stream.unpack(new_data) list=[data_stream.TPV['time'], data_stream.TPV['lat'], data_stream.TPV['lon'], data_stream.TPV['alt'], data_stream.TPV['speed']] writer.writerow(list) # list(1次元配列)の場合 i += 1 if i>110: break
「sudo apt-get install python3-pip 」を実行したときに次のエラーが発生しました。
[sudo] password for oneiric:
E: ロック /var/lib/apt/lists/lock が取得できませんでした – open (11: リソースが一時的に利用できません)
E: ディレクトリ /var/lib/apt/lists/ をロックできません
E: ロック /var/lib/dpkg/lock が取得できませんでした – open (11: リソースが一時的に利用できません)
E: 管理用ディレクトリ (/var/lib/dpkg/) をロックできません。これを使う別のプロセスが動いていませんか?
次の2行を実行してロックファイルを削除すると、正常に命令が実行できるようになりました。
$ sudo rm /var/lib/apt/lists/lock $ sudo rm /var/lib/dpkg/lock
GPS受信プログラムの実行
GPS受信プログラムを実行すると、ファイル「gps.csv」にCSV形式で次のようにGPSデータが保存されます。
... 2019-09-12T02:25:31.000Z,35.445834167,139.634532333,163.0,0.236 2019-09-12T02:25:33.000Z,35.445830667,139.634535167,162.4,0.093 2019-09-12T02:25:34.000Z,35.445831667,139.634540333,162.2,0.27 2019-09-12T02:25:35.000Z,35.445833,139.634551833,161.9,0.535 2019-09-12T02:25:36.000Z,35.445836333,139.634564667,161.6,0.6 2019-09-12T02:25:37.000Z,35.4458385,139.634574167,161.2,0.543 2019-09-12T02:25:38.000Z,35.44584,139.634584667,160.8,0.645 ...