ラズパイでGPSを測位してみた話
ラズパイで準天頂衛星みちびきをロガーしました.
ざっくりまとめると...
- GPSモジュールをはんだ付け
- ラズパイにつないで測位してみた話
完成図
こんな感じのものが出来上がります.
用意した材料
- Raspberry Pi 3 Model B
- MicroSDカード 128GB
- GPS受信機キット 1PPS出力付き 「みちびき」3機受信対応
- 100均で買ったプラスチックケース電源
- モバイルバッテリー ラズパイに給電しつつバッテリーも充電できる点がミソ
- ジャンパー線 (導線/デュポンライン)
- ネジ(規格: M2.6)
だいたい9000円くらいです.
使った道具
- ラズパイの初期構築のために必要なもの
- ディスプレイ
- HDMIケーブル
- USBキーボードとマウス
- 電源
- はんだ付け
- はんだごて
- 鉛
- はんだ吸収線
- ブレッドボード
- ドリル
- ピンセット
1. GPSモジュールのはんだ付け
まずはGPSモジュールに付属のピンをはんだ付けします.
はんだ付けは下手っぴですが,適当な導線を見つけて練習したあと,くっつけました.
2. GPSモジュールとラズパイの接続
次の図を参考にまずはブレッドボードを使って接続しました.
出展: http://denor.daa.jp/wp-content/uploads/2018/01/RaspberryPiにGYSFDMAXB接続PPS付き.png
3. ラズパイで受信
作業はラズパイの中へ移ります.
ターミナルからラズパイの必要な設定を行っていきます.
コンソールをserial0からtty1へ変更
ラズパイのUARTを使うため,コンソールを変更します.
$ sudo nano /boot/cmdline.txt
ファイルの内容を次のように変更します.
#dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=2924e30a-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
シリアルを無効化し,コンソールをsirial0からtty1へ変更します.
$ sudo systemctl stop serial-getty@ttyS0.service $ sudo systemctl disable serial-getty@ttyS0.service
または,
$ sudo raspi-config
を実行し,「P5 Interfacing Options」を「P6 Serial (disable)」にします.
これにより,ブートメッセージがシリアルポートに送信されないようにし,ログインサービスが有効にならないようになります.
UARTの有効化
$ sudo nano /boot/config.txt
末尾に次の1行を変更します.
enable_uart=1
以上の操作で /dev/ttyS0
は,コンソールの標準入出力をシリアル接続0番(S0)からtty1へ変更されます.
試しに次のコマンドで確認してみてください.
$ tty /dev/pts/1
$ who pi tty7 2019-08-15 22:44 (:0) pi tty1 2019-08-15 22:44 pi pts/0 2019-08-15 22:44 (ここにIPアドレス)
タイムパルスの受信設定
GPSモジュールに1PPSのパルスを入力できるようにします.
GPIO18番の設定を変更し,パルスを出力するGPIOを指定します.
$ sudo nano /boot/config.txt
次の1行を追加します.
dtoverlay=pps-gpio,gpiopin=18
PPSを有効にする記述をします.
$ sudo nano /etc/modules
次の1行を追加します.
pps-gpio
再起動すると設定が読み込まれます.
確認コマンド
$ lsmod | grep pps pps_gpio 16384 0 pps_core 20480 1 pps_gpio
ソフトウェアのインストール
GPSを確認するためのソフトをインストールします.
$ sudo apt-get install gpsd gpsd-clients pps-tools
gpsd デーモンの有効化
gpsdの接続デバイスとオプションの設定
今回ははんだ付けでGPSモジュールにボタン電池を接続しており,ポーリングは行わないため,-n
オプションを有効にしました.
$ sudo nano /etc/default/gpsd
ファイルを次のように変更します.
START_DAEMON="true" USBAUTO="true" DEVICES="/dev/ttyS0 /dev/pps0" GPSD_OPTIONS="-n"
gpsd.socketの有効化
$ sudo systemctl enable gpsd.socket
私の環境では特に何も表示されませんでした.
再起動すると /dev/ttyS0
と /dev/pps0
をターゲットデバイスとしてgpsdが起動します.
確認コマンド
$ systemctl status gpsd.socket ● gpsd.socket - GPS (Global Positioning System) Daemon Sockets Loaded: loaded (/lib/systemd/system/gpsd.socket; enabled; vendor preset: enabled) Active: active (listening) since Mon 2019-08-19 21:17:05 JST; 1 weeks 6 days ago Listen: /var/run/gpsd.sock (Stream) [::1]:2947 (Stream) 127.0.0.1:2947 (Stream) CGroup: /system.slice/gpsd.socket 8月 19 21:17:05 raspberrypi systemd[1]: Listening on GPS (Global Positioning System) Daemon Sockets.
GPSの受信結果を見る
インストールしたgpsmonから確認します.
$ gpsmon
なお,GPSモジュールは衛星からPPS信号も受信しているため,次のコマンドで受信を確認できます.
$ sudo ppstest /dev/pps0 trying PPS source "/dev/pps0" found PPS source "/dev/pps0" ok, found 1 source(s), now start fetching data... source 0 - assert 1567342546.094455297, sequence: 331 - clear 0.000000000, sequence: 0 source 0 - assert 1567342547.094416198, sequence: 332 - clear 0.000000000, sequence: 0 source 0 - assert 1567342548.094373122, sequence: 333 - clear 0.000000000, sequence: 0
最後に
このモジュールで受信できるみちびきの衛星番号は,193,194, 195 なのでgpsmonでこの数字が表示されたときはみちびきも受信しています.
次は,ラズパイでGPSの受信結果を保存したいと思います.
この記事の内容で,準天頂衛星みちびきと従来GPSの測位結果を比較した記事はこちら!