できること

話題の画面付きRaspberry Pi「reTerminal」でナビを作ろう!

第3回:GPSモジュールをセットして現在地を取得し表示させる

こんにちは、ヨシケンです!

この連載では、話題のRaspberry Pi Computeモジュールと液晶画面が一体となったreTerminalでデバイス作りを紹介しています。

今回の連載は4回を予定しており、以下のような流れでご紹介していく予定です。

第1回:「reTerminal」の紹介とラズパイ開発環境のセットアップ
第2回: reTerminalにセンサを追加して計測、ビジュアル表示
第3回: GPSモジュールをセットして現在地を取得、表示(今回)
第4回: 各種センサとGPSを組み合わせて本格的なナビシステムの完成!

 

第3回となる今回は、ナビづくりの中心となるGPSモジュールを使って、位置情報を取得する仕組みを作ります。ラズパイには地図を使ったナビアプリがあるので、それを使って現在地などを表示できるようにします。






reTerminalを使った自転車ナビ作り

今回の記事の流れ

  1. GPSモジュールをreTerminalに追加
  2. NAVITアプリをインストール
  3. オフラインのマップをインストールして地図表示
  4. まとめ

今回必要な部品

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モジュールの接続ができたら、ラズパイ側の設定をおこないます。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などインターネット接続がなくても、地図が表示できるようラズパイ自身に地図を保持し、現在地を表示できるようになりました。

 

次回は、全てのセンサと連動させ、実運用できるようなナビシステムの完成までを紹介していきます。お楽しみに!

普通の会社に勤めるサラリーマンですが、モノ作りが好きな週末メイカーで、電子書籍MESHBOOKを出したり、ブログを書いたりしています!

http://blog.ktrips.net

高専ロボコン2016 出場ロボット解剖計画