GPSを取り付けたRaspberry Piの現在位置をオフラインで地図に表示するには Navit版

Raspberry PiにGPS受信モジュールを取り付けて

そのRaspberry Piが現在どこにあるか、地図上にリアルタイムに表示したいと思います。

次の2種類の方法で表示可能です。

①Raspberry Piのディスプレイに表示する方法。地図をあらかじめダウンロードしておきますので、GPS信号を受信できればインターネット環境が無い山でも海でもリアルタイムに地図上に現在位置を表示可能です。②スマートフォンやPCのWebブラウザに表示する方法。①の画面にWi-Fi等のネットワーク経由で接続するかたちです。config.txtに画面サイズを設定することで、Raspberry Piにディスプレイを接続しなくても(ヘッドレスで)実現可能です。下図の青い丸が現在位置になります。

座標データをどこかにアップロードしたりせず、Raspberry Pi 1台のみで完結します。アカウント登録等は一切不要、位置データもRaspberry Piの外に出ることはありません(画像データのパケットはネットワーク上に流れますが)。地図もオープンなデータを使用させて頂き、費用もかかりませんでした。

このようなシステムの構築方法を記録しておこうと思います。


使用する機材と事前準備

タッチパネル付きディスプレイ

このような感じで、Raspberry Pi 3 Model Bに公式7インチタッチパネルとGPSモジュールを取り付けてみました。取り付け方法はこちらの記事になります。

もっと小さなカラーLCDでも大丈夫かと思いますが、DSI端子の場合Pi Zeroは対応しませんのでご注意下さい。

ディスプレイを取り付けて地図を表示しつつ、次のnoVNC設定を行うことで、同時にスマートフォンやPCで地図を表示することも可能です。

WebブラウザからRaspberry Piデスクトップ画面を操作

次の記事の設定を行うことで、Raspberry Piデスクトップ画面をWebブラウザで表示・操作することができます。

たとえばRaspberry Pi Zero WHに(ディスプレイを接続せずに)GPSのみ取り付け、Wi-Fiスマートフォンで現在位置を地図表示することも可能かと思います。


Navitのインストールと設定

地図の表示はNavitを使用させて頂きました。

Raspberry PiのOSはRaspbianを使用しました。aptコマンドでNavitのインストールが可能のようです。

ソフトウェアの設定は、全体的に次の流れになります。

  1. GPSモジュールを接続、gpsdが動作するように設定します。
  2. Navitをインストール、日本語表示設定を行います。
  3. 表示したい地域の地図をダウンロード、Navit用のバイナリファイル(binfile)にコンバートします。

3番のNavitのbinfile作成は、Raspberry Piではなく、Windows PCを使用しました。地図の大きさにより、Raspberry Piでは作業用メモリーが不足して、コンバートに失敗する場合があるためです。

GPSモジュールの取り付けとgpsd設定

基本的にこちらの記事と同じ内容になります。

2018年11月から3機の「みちびき」の運用が開始されました。再設定しつつ、gpsmonで「みちびき」の信号を受信できるかどうか確認してみました。

  1. 次の配線図に従い、GPSモジュールを接続します。
  2. /boot/cmdline.txtを編集して既存のシリアルコンソール(serial0)行をコメントアウト、tty1をコンソールとして設定します。

  3. systemd設定を変更し、シリアルコンソールを停止します。(Wi-Fi対応のRaspbrry Pi 3、Pi Zero Wの設定変更内容になります)
  4. UARTとPPSを有効にするため、/boot/config.txtに「enable_uart=1」行と「dtoverlay=pps-gpio,gpiopin=18」行を追加します。

  5. /etc/modulesに「pps-gpio」行を追加します。

  6. gpsd、gpsd-clients、pps-toolsをインストールします。

  7. /etc/default/gpsdを変更

    DEVICES、GPSD_OPTIONS等を設定します。
  8. systemd設定を変更し、gpsd.socketサービスを有効にします。

  9. 再起動して設定変更を有効にします。
  10. ppstestやgpsmonコマンドでGPS信号を受信できているかどうか確認します。

手持ちのGPSモジュールのファームウェアを更新させて頂いたところ、PRN番号193(みちびき初号機), 195(みちびき4号機)の2機のみちびきの信号を受信できていることを確認できました。


Navitのインストールと日本語表示設定

  1. aptコマンドでnavitをインストールします。

    Raspberry Piでnavit用の地図データを作る場合、maptoolを使用しますが、別のPCで作ることにしまして、インストールしませんでした。
  2. 日本語化するために各種フォントをインストールしました。

    このうち、Noto Sansフォントを設定させて頂きました。
  3. 使用可能なフォントファミリー名を確認します。

  4. /etc/navit/navit.xml設定ファイルは、navitをアップデートした場合に上書きされるようです。~/.navitディレクトリを作成し、コピーしておきます。
  5. navit.xmlのfont=行を変更して、日本語フォントを指定します。”Liberation Sans”を”Noto Sans CJK JP”に変更するかたちです。sedコマンドで書き換えてみました。

  6. 以上でNavitの日本語化が完了しました。実際に起動してみると、gpsdと連携して現在位置が表示されますが、地図が無いため寂しい感じです。

    上図はOSDのcompassとnavigation_next_turnを有効にしたため、画面左側に矢印(コンパス)が表示されています。navit.xmlを変更して、各種ボタンやメーターを表示、カスタマイズできるようです。

地図データのダウンロード

地図データは、Open Street Map(OSM)を使用させて頂こうと思います。

最初、日本全土の地図を入れようと思いましたが、データが大きすぎてうまく表示できませんでした。

データを分割して入れたほうが地図表示の速度も早いようですので、Asia→Japan→Kantō region(関東)のosm.pbfファイルをダウンロードさせて頂きました。ダウンロードしたpbfファイルをNavitのバイナリファイルに変換しようと思います。


OSM(PBF)ファイルからNavit用binfile作成

Raspberry Piのメモリー使用可能量の問題から、PBFからNavitのbinfileへの変換はWindows PCを使用しました。

Linuxのmaptoolコマンドを使用する必要があるため、Vagrantをインストールして、Windowsの中でUbuntu 18.04を起動しました。

Vagrant環境作成のこちらの記事と同じ流れになります。

最近公開されましたVirtual Box 6.0を使用させて頂きましたが、問題なく動作致しました。

  1. VirtualBox本体、VirtualBox Extension Pack、Vagratをダウンロードしてインストールします。
  2. 動作用のフォルダを作成、boxにubunt 18.04公式イメージを追加、フォルダを初期化してVagrantfileを作成しました。

  3. Vagrantfileを編集します。

    • 作業用フォルダを/vagrant_dataへマウント
    • メモリー使用量を8192MB(8GB)に変更しました。
  4. 作成した作業用フォルダに、ダウンロードしたpbfファイルをコピーしておきます。ダウンロードした関東の地図は「kanto-latest.osm.pbf」というファイル名でした。
  5. ubuntuを起動、sshに接続します。

  6. アップデート実行後、maptoolをインストールします。
  7. pbfファイルをnavitのbinfileへコンバートします。

  8. ファイル名をlatestから日付に変更しながら、Raspberry PiへSCPでコピーしました(Raspberry PiのSSHサーバ機能が有効になっている必要があります)。

vagrantのシャットダウンは「vagrant halt」コマンド、vagrantマシーンを削除する場合「vagrant destory」にて行えるようです。


Navitのbinfile有効化

最後に作成したbinfileを有効にします。

  1. Raspberry Piのターミナルにログインします。
  2. /home/pi/mapsに地図を入れようと思います。
  3. ~/.navit/navit.xmlファイルを変更します。

    394行目付近、mapsetタグを追加します。

    他のmapsetタグのenabled属性は”no”に変更しておきました。

以上で設定が完了しました。navitを起動してみます。

地図上に、現在位置が表示されましたでしょうか?

マウスホイールで拡大/縮小、左クリックでメインメニューが表示されます。

GPSの緯度・経度情報の表示、画面の最大化、地図の表示モード変更等を行えるようです。


現在位置を地図表示したい場合、拡大/縮小で倍率を調節すれば、場所がわかるかと思います。

Navitを本格的なカーナビとして使用したい場合、navit.xmlファイルをいろいろとカスタマイズして、ボタンや情報の表示を行う必要があるようです。

カーナビの自作にご興味がありましたら、いろいろと試してみるのも(少し大変かもしれませんが)面白いかと思います。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク