GPSモジュールをセットして現在地を取得し表示させる
第1回:reTerminalとGPSで自転車ナビ作り
第2回: reTerminalにセンサを追加して計測、ビジュアル表示
こんにちは、ヨシケンです!
この連載では、話題のRaspberry Pi Computeモジュールと液晶画面が一体となったreTerminalでデバイス作りを紹介しています。
第3回となる今回は、ナビづくりの中心となるGPSモジュールを使って、位置情報を取得する仕組みを作ります。ラズパイには地図を使ったナビアプリがあるので、それを使って現在地などを表示できるようにします。
今回の記事の流れ
今回必要な部品
reTerminalにGPSや各種センサを追加してナビシステムを作るに当たって、今回の記事で必要な部品は以下のようになっています。
GPSナビデバイス:
名前、説明 | デバイス |
---|---|
reTerminal Seeed社が提供するRaspberry Pi Compute Moduleを使ったデバイス。 |
|
温湿度センサ 赤外線を発しその反射光を測定して、光の強度や近接度を計測します。 |
|
GPS受信機キット(又はGrove GPS |
これらの部品をそろえて、GPSナビを作っていきます。
1. GPSモジュールをreTerminalに追加
ラズパイでGPS信号を受信するには、このようなGPS受信キットモジュールを使用。これは日本の準天頂衛星システム「みちびき」を含む3機に対応しています。NMEAというGPSの標準フォーマットで、緯度、経度、高度、時刻などのデータを、シリアル信号でラズパイに出力します。
ではこのGPSモジュールをreTerminalに接続してみましょう。reTerminalのGPIO接続の40ピンは以下の図のようになっています。基本的にはRaspberry Piと変わりませんが、向きに注意して接続してください。
GPSモジュールの5本のピンの部分にメス-メスケーブルをさして、それぞれ以下の配線のようにラズパイにつなぎます。
GPS モジュール側 | reTerminal側 |
---|---|
5V | 5V (Pin 4) |
GND | GND (Pin 6) |
RXD | TX (Pin 8) |
TXD | RX (Pin 10) |
1PPS | CLK (Pin 12) |
GPSモジュールを接続して、ラズパイの電源を入れてしばらく待つと、赤色のLEDが強く点滅し出します。そうするとGPS衛星から信号を受信し始めている事になります。室内などGPS受信状況が悪い所では、窓際など信号が届きやすい所を探して試してみてください。
GPSモジュールの接続ができたら、ラズパイ側の設定をおこないます。GPS信号はシリアル通信という信号形式で受信しますので、これを有効にしたいと思います。それにはまず /boot/config.txt というファイルを編集して、以下の部分を追加。
enable_uart=1
dtoverlay=pi3-miniuart-bt
dtoverlay=pi3-disable-bt
config.txtを更新後に、コマンド ls -l /dev を打ち、以下のように serial0 とserial1 が表示されていれば、シリアル接続の設定ができていると確認できます。
次に、cmdline.txt というファイルも編集します。このファイル内で console=serial0,115200 という部分をコメントアウトします。これはシリアル接続にコンソール(画面)を使わず、GPS信号の受信に変更するような設定です。
これでGPSの受信の準備ができました。以下のような簡単なPythonコマンドで、GPS信号が取得できているか確認してみます。
$ python3
>>> import serial
>>> s = serial.Serial('/dev/serial0', 9600, timeout=10)
>>> print(s.readline())
b'\x00\x00\xc0\x00\xfe\x00pK&&KLN\xcb14,302,,06,08,254,27,30,07,230,29*70\r\n'
>>> print(s.readline())
b'$GPGSV,4,4,14,23,05,150,19,14,04,054,*74\r\n'
python3 と打ったあと、パイソンのコマンドラインを立ち上げ、serial0からシリアル信号を受け取り、それを出力してみます。何回かprint(s.readline())の部分を打ってみてください。GPGSVなどGPSの信号が取れていれば、何かGPSデータが受信できていることになります。
これでGPSモジュールの接続と、データの受信に備えたセットアップをすることができました。次にこのデータを使って地図上に場所を表示できるようにしてみたいと思います。
2. NAVIT地図アプリをインストール
ラズパイでナビゲーションシステムのような地図を表示するために、NAVITという便利なアプリがあります。これをラズパイにインストールして、先ほどのGPSデータから場所を表示できるようにします。
まず、GPSを定期的に取得するgpsdなどのツールをインストール。
$ sudo apt install gpsd gpsd-clients pps-tools
上記のようなコマンドを流すと、GPS信号を定期的に受信するようなツールがインストールされます。
その後、gpsdの設定ファイルを開き、定期的にデータを取得するための設定変更をおこないます。
$ sudo vi /etc/default/gpsd
gpsdファイル内を以下のように記述し、定期実行のコマンド(DAEMON)を有効化したり、デバイスを指定したりしています。
この設定が済んだら、cgpsと打ち、GPSデーモンを立ち上げてください。GPS信号が定期的に読み込まれていたらGPSの設定は完了です。
それでは最後にナビ画面を表示するアプリのNAVITをapt-getでインストールします。sudo apt-get install navit とコマンドを打ちます。
インストールが済んだら、NAVITのためのフォルダ.navitを作っておきましょう。ここに必要ファイルをコピーして置いておきます。
これでGPSデーモンとNAVITのインストールができました。
$ mkdir /home/pi/.navit
$ cp /etc/navit/navit.xml /home/pi/.navit/
3. オフラインのマップをインストールして地図表示
NAVITを使うに当たって、オフラインでも地図が使用できるようにあらかじめマップ情報をラズパイに保持するようにしておきます。そのためにはNAVITでオフラインのマップを、Navit-projectの地図サイトから取得します。
http://maps9.navit-project.org/
このサイト上で、右側のselectを選んで、必要な情報をダウンロード。日本全国のマップですと容量が大き過ぎなので、ここでは東京周辺だけのマップを選択してダウンロードします。
ダウンロードしたマップはosm_tokyo.binなどと名前を付けて保存します。その後、ダウンロードしたPCからラズパイにこのファイルを転送して、.navit以下に置いておきます。
$ sudo scp osm_tokyo.bin pi@raspi_host.local:.navit/
このマップを使って、NAVITのカスタマイズをしてみましょう。それにはnavit.xml というファイルを編集します。
その中のmap type=“binfile” の部分で先ほど自分でダウンロードしたファイルを置いた場所を指定します。
これでNAVITの地図の設定ができました。ラズパイから現在地が表示できるかNAVITを起動してみましょう。
これにはラズパイのデスクトップから直接操作するか、tightvncserverなどリモートデスクトップでラズパイに入り、ディスプレイがある状態でnavitと打って立ち上げます。
そうするとラズパイ画面上に地図アプリが立ち上がり、現在地を指し示してくれているのではないでしょうか?
デフォルトだと夜間は暗い地図が表示されるようです。昼間は以下ように表示されました。
4. まとめ
今回の連載では、RaspberryPi Compute Moduleが入った「reTerminal」を使い、ナビ・システムを作っています。
第3回となる今回は、ナビシステムの心臓部、GPSモジュールをラズパイに追加し、ラズパイからGPS信号をシリアル通信で取得する仕組みをセットアップしました。
さらに、NAVITという地図からナビ画面を表示できるアプリのインストールも行っています。
これにより外で使用した際に、Wi-Fiなどインターネット接続がなくても、地図が表示できるようラズパイ自身に地図を保持し、現在地を表示できるようになりました。
次回は、全てのセンサと連動させ、実運用できるようなナビシステムの完成までを紹介していきます。お楽しみに!
今回の連載の流れ
第1回:reTerminalとGPSで自転車ナビ作り
第2回: reTerminalにセンサを追加して計測、ビジュアル表示
第3回: GPSモジュールをセットして現在地を取得し表示させる(今回)
第4回:reTerminalでナビシステムを完成させる!