その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を使用させて頂きました。
Raspberry PiのOSはRaspbianを使用しました。aptコマンドでNavitのインストールが可能のようです。
ソフトウェアの設定は、全体的に次の流れになります。
- GPSモジュールを接続、gpsdが動作するように設定します。
- Navitをインストール、日本語表示設定を行います。
- 表示したい地域の地図をダウンロード、Navit用のバイナリファイル(binfile)にコンバートします。
3番のNavitのbinfile作成は、Raspberry Piではなく、Windows PCを使用しました。地図の大きさにより、Raspberry Piでは作業用メモリーが不足して、コンバートに失敗する場合があるためです。
GPSモジュールの取り付けとgpsd設定
基本的にこちらの記事と同じ内容になります。
2018年11月から3機の「みちびき」の運用が開始されました。再設定しつつ、gpsmonで「みちびき」の信号を受信できるかどうか確認してみました。
- 次の配線図に従い、GPSモジュールを接続します。
- /boot/cmdline.txtを編集して既存のシリアルコンソール(serial0)行をコメントアウト、tty1をコンソールとして設定します。
sudo sed -i 's/^dwc_org.lpm_enable/\#&/g' /boot/cmdline.txt echo 'dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait' | sudo tee -a /boot/cmdline.txt
- systemd設定を変更し、シリアルコンソールを停止します。(Wi-Fi対応のRaspbrry Pi 3、Pi Zero Wの設定変更内容になります)
sudo systemctl stop serial-getty@ttyS0.service sudo systemctl disable serial-getty@ttyS0.service
- UARTとPPSを有効にするため、/boot/config.txtに「enable_uart=1」行と「dtoverlay=pps-gpio,gpiopin=18」行を追加します。
echo 'enable_uart=1' | sudo tee -a /boot/config.txt echo 'dtoverlay=pps-gpio,gpiopin=18' | sudo tee -a /boot/config.txt
※20.7.5追記:「,assert_falling_edge=true」付きが正しいとのご指摘を頂きましたので追記致します。
echo 'enable_uart=1' | sudo tee -a /boot/config.txt echo 'dtoverlay=pps-gpio,gpiopin=18,assert_falling_edge=true' | sudo tee -a /boot/config.txt
- /etc/modulesに「pps-gpio」行を追加します。
echo 'pps-gpio' | sudo tee -a /etc/modules
- gpsd、gpsd-clients、pps-toolsをインストールします。
sudo apt-get install gpsd gpsd-clients pps-tools
- /etc/default/gpsdを変更
vi /etc/default/gpsd
DEVICES、GPSD_OPTIONS等を設定します。
START_DAEMON="true" DEVICES="/dev/ttyS0 /dev/pps0" GPSD_OPTIONS="-n"
- systemd設定を変更し、gpsd.socketサービスを有効にします。
sudo systemctl enable gpsd.socket
- 再起動して設定変更を有効にします。
sudo reboot
- ppstestやgpsmonコマンドでGPS信号を受信できているかどうか確認します。
sudo ppstest /dev/pps0 gpsmon
手持ちのGPSモジュールのファームウェアを更新させて頂いたところ、PRN番号193(みちびき初号機), 195(みちびき4号機)の2機のみちびきの信号を受信できていることを確認できました。
- aptコマンドでnavitをインストールします。
sudo apt install -y navit
Raspberry Piでnavit用の地図データを作る場合、maptoolを使用しますが、別のPCで作ることにしまして、インストールしませんでした。
- 日本語化するために各種フォントをインストールしました。
sudo apt install xfonts-jisx0213 xfonts-intl-japanese fonts-ipafont fonts-noto xfonts-shinonome ttf-mscorefonts-installer
このうち、Noto Sansフォントを設定させて頂きました。
- 使用可能なフォントファミリー名を確認します。
fc-list |grep Noto
- /etc/navit/navit.xml設定ファイルは、navitをアップデートした場合に上書きされるようです。~/.navitディレクトリを作成し、コピーしておきます。
mkdir ~/.navit cp /etc/navit/navit.xml ~/.navit
- navit.xmlのfont=行を変更して、日本語フォントを指定します。”Liberation Sans”を”Noto Sans CJK JP”に変更するかたちです。sedコマンドで書き換えてみました。
sed -e 's/Liberation Sans/Noto Sans CJK JP/g' ~/.navit/navit.xml |grep 'font=' # 問題なければ-iで実際に変更を反映します sed -i 's/Liberation Sans/Noto Sans CJK JP/g' ~/.navit/navit.xml
- 以上でNavitの日本語化が完了しました。実際に起動してみると、gpsdと連携して現在位置が表示されますが、地図が無いため寂しい感じです。
navit -c ~/.navit/navit.xml
上図はOSDのcompassとnavigation_next_turnを有効にしたため、画面左側に矢印(コンパス)が表示されています。navit.xmlを変更して、各種ボタンやメーターを表示、カスタマイズできるようです。
地図データのダウンロード
binファイルを直接ダウンロード
※19.3.2追記:地図は、こちらからbinファイルを直接ダウンロードする方法のほうが、正確で簡単のようです。
ダウンロード後、記事の後方「Navitのbinfile有効化」でXMLファイルに登録すると、ダウンロードした地図が表示されます。
pbfファイルのbinファイル変換手順
以下の方法は、pbfファイルからbinファイルを作成する方法になりますが、変換エラーでありえない道が表示される場合があるようです。
地図データは、Open Street Map(OSM)を使用させて頂こうと思います。
最初、日本全土の地図を入れようと思いましたが、データが大きすぎてうまく表示できませんでした。
データを分割して入れたほうが地図表示の速度も早いようですので、Asia→Japan→Kantō region(関東)のosm.pbfファイルをダウンロードさせて頂きました。ダウンロードしたpbfファイルをNavitのバイナリファイルに変換しようと思います。
Raspberry Piのメモリー使用可能量の問題から、PBFからNavitのbinfileへの変換はWindows PCを使用しました。
Linuxのmaptoolコマンドを使用する必要があるため、Vagrantをインストールして、Windowsの中でUbuntu 18.04を起動しました。
Vagrant環境作成のこちらの記事と同じ流れになります。
最近公開されましたVirtual Box 6.0を使用させて頂きましたが、問題なく動作致しました。
- VirtualBox本体、VirtualBox Extension Pack、Vagratをダウンロードしてインストールします。
- 動作用のフォルダを作成、boxにubunt 18.04公式イメージを追加、フォルダを初期化してVagrantfileを作成しました。
mkdir ubuntu-18.04 cd ubuntu-18.04 vagrant box add ubuntu/bionic64 vagrant init ubuntu/bionic64
- Vagrantfileを編集します。
config.vm.synced_folder "./", "/vagrant_data" config.vm.provider "virtualbox" do |vb| vb.memory = 8192 end
- 作業用フォルダを/vagrant_dataへマウント
- メモリー使用量を8192MB(8GB)に変更しました。
- 作成した作業用フォルダに、ダウンロードしたpbfファイルをコピーしておきます。ダウンロードした関東の地図は「kanto-latest.osm.pbf」というファイル名でした。
- ubuntuを起動、sshに接続します。
vagrant up vagrant ssh
- アップデート実行後、maptoolをインストールします。
sudo apt update sudo apt install maptool
- pbfファイルをnavitのbinfileへコンバートします。
cd /vagrant_data maptool --protobuf -i kanto-latest.osm.pbf kanto-latest.bin
- ファイル名をlatestから日付に変更しながら、Raspberry PiへSCPでコピーしました(Raspberry PiのSSHサーバ機能が有効になっている必要があります)。
scp kanto-latest.bin pi@<Raspberry PiのIPアドレス>:/home/pi/kanto-181223.bin
vagrantのシャットダウンは「vagrant halt」コマンド、vagrantマシンを削除する場合「vagrant destory」にて行えるようです。
最後に作成したbinfileを有効にします。
- Raspberry Piのターミナルにログインします。
- /home/pi/mapsに地図を入れようと思います。
mkdir maps mv kanto-181223.bin maps/
- ~/.navit/navit.xmlファイルを変更します。
vi ~/.navit/navit.xml
394行目付近、mapsetタグを追加します。
<mapset enabled="yes"> <map type="binfile" enabled="yes" data="/home/pi/maps/kanto-181223.bin"/> </mapset>
以上で設定が完了しました。navitを起動してみます。
navit -c ~/.navit/navit.xml
マウスホイールで拡大/縮小、左クリックでメインメニューが表示されます。
GPSの緯度・経度情報の表示、画面の最大化、地図の表示モード変更等を行えるようです。
現在位置を地図表示したい場合、拡大/縮小で倍率を調節すれば、場所がわかるかと思います。
Navitを本格的なカーナビとして使用したい場合、navit.xmlファイルをいろいろとカスタマイズして、ボタンや情報の表示を行う必要があるようです。
カーナビの自作にご興味がありましたら、いろいろと試してみるのも(少し大変かもしれませんが)面白いかと思います。
インターネットの常時接続が必要になりますが、Google Mapで地図を表示する記事はこちらになります。
コメント
初めまして!rasberypi最近きになって購入した超初心者のものですが、Navitがsudo apt install -y navitでは 入手できなくてこまっております。なにか手順が間違っているのかわからないのですが、他に入手する方法などはありますでしょうか???
クロさん はじめまして。
コメント頂きまして、誠にありがとうございます。
ふむふむ、navitが入手できないとのことで、お困りかと思います。
お使いのOSは、Raspberry Pi OSでしょうか?
手持ちのRaspberry Pi 4で動かしているUbuntu 20.04 LTSですが、次のコマンドで、navitがインストール可能かどうか検索してみました。
sudo apt update apt search navit
次のような感じで、検索結果が表示されました。
maptool/focal 0.5.4+dfsg.1-2 arm64 Converts OpenStreetMap maps to Navit navit/focal 0.5.4+dfsg.1-2 arm64 Car navigation system with routing engine navit-data/focal 0.5.4+dfsg.1-2 all Car navigation system with routing engine - data files navit-graphics-gtk-drawing-area/focal 0.5.4+dfsg.1-2 arm64 Car navigation system with routing engine - GTK+ graphic plugin navit-gui-gtk/focal 0.5.4+dfsg.1-2 arm64 Car navigation system with routing engine - GTK+ GUI navit-gui-internal/focal 0.5.4+dfsg.1-2 arm64 Car navigation system with routing engine - internal GUI
この場合、navitのバージョンfocal 0.5.4+dfsg.1-2が配布されているようですので
でインストールできそうです。
よろしければ、上記の
コマンドで、navitがダウンロード可能かどうか調べてみてはいかがでしょうか?
hideさん
お返事ありがとうございます!早速試してみようかと思います!後ほど結果をご報告いたします。
hideさん。
なんとかnavitをインストールして立ち上げることができました!
ありがとうございます。
そのまま進めていったのですが、
394行目付近、mapsetタグを追加します。
のxmlファイルを変更ができてなく、上書き保存ができないとでており行き詰ってしまいました。
通常ロックがかかっているものなのでしょうか?
クロさん こんばんは。
xmlファイルの編集ができないそうですが。ふむふむ。
vi ~/.navit/navit.xml
こちらのファイルの編集で、ロックがかかっている感じでしょうか?
~は、ホームディレクトリを表しています。
ログインしたユーザのホームですので、基本的にはファイルの作成・編集は自由のはずです。
ロックはかかっていないと思います。確認コマンドは以下になります。
ls -al ~/.navit/
もしもファイルの所有者がrootユーザに変わっている場合、ロックがかかってしまいます。
その場合、sudo付きでコマンドを実行することで、rootユーザとしてコマンドを実行して上書きできると思います。
sudo vi ~/.navit/navit.xml
sudo付きでコマンドを実行して、編集して頂く方法が良いかもしれません。
hideさん
色々試して、結果できるようになりました!大変おせわになりましたありがとうございます!
クロさん こんばんは。
うまく進められたようで、安心致しました。
解決されて、素晴らしいです!
こちらこそ、嬉しい書き込みを頂きまして、ありがとうございました。
hideさん ありがとうございました。
現在 無謀にもラズベリーパイを用いてのガジェットを作りたいと思い、いろいろ調べているのですが、手も足もでず、困っておりまして、よければ相談に乗っていただけないでしょうか。
クロさん こんばんは。
ガジェットをお作りとのことで、色々と試行錯誤されている感じでしょうか?
ご相談とのお話で、ふむふむ。
私など、なにかお役に立てるかわかりませんが、こちらのコメント欄に、クロさんが自由に書き込み頂くのは全く問題ありませんです。
コメント欄で差し支えなければ、いつでも何でも書き込み頂いて大丈夫です。