GPSCAP
- 2017-02-01 初版 Raspberry Pi用GPS拡張ボード登場
- 2017-02-10 第2版 連続稼働時間予測追加
- 2017-06-10 第3版 PPS予備実験
- 2018-07-01 第4版 ソフトウェア更新
- 2021-11-23 第5版 bullseye対応
- 2023-10-24 第6版 bookworm対応
- 2024-03-07 第7版 Raspberry Pi 5対応
はじめに
- GPSCAP=ラズベリー・パイ用GPS拡張ボード
- ラズベリー・パイ(Raspberry Pi)にGPSCAPをさします。
- ラズパイマガジン2017年4月号の付録基板として誕生しました。
- 使い方はラズパイマガジン2017年4月号をご覧ください。
- 電子書籍はこちらです。
- 紙の本はこちらです。
- ここではすべての解説を行いません。
- 補足のみを行います。
- キットと完成品があります。
- 中級者向けの組み立てキットです。表面実装部品があります。ピン間1mmの部品があります。
- ハンダ付けに自信のない方は完成品をお勧めします。
- 電池CR2032は付属しません。
GPSCAPの特徴
- GPS衛星からの情報を取得し、リアルタイムで液晶表示します。
- バックライト付きの液晶のため、暗いところでも視認できます。
- 同時にデータをファイルに記録します。
- 表示はボタンスイッチで切り替えます。
- データはラズベリーパイのファイルとして記録されます。専用の読みだしソフトは必要ありません。
- データはテキストファイル形式です。後ほど自由に編集加工可能です。
著作権と免責事項
- 個人利用に限定され、著作権者の許可なく商用利用できません。
- 直接間接に関わらず、使用によって生じたいかなる損害も筆者は責任を負いません。
- GPSCAP (C)2017 All rights reserved by Y.Onodera.
情報のまとめ
動作確認情報
- 2024-03-07現在
- Raspberry Pi 2B/3B/3B+/4B/5B
- bullseye (kernel 5.10.x)
- bookworm (kernel 6.1.x)
- ※Raspberry Pi 3A+は未確認です。
- ※Lite版は未確認です。一部パッケージがインストールされていないことがあります。
- Raspberry Pi 4 の注意事項はこちらです。
- Raspberry Pi 5 の注意事項はこちらです。
RPI5:Raspberry Pi 5対応
- RPI5は多くの変更をしました。
- そのためRPI5対応しました。
- 多くのGPIO用Cライブラリ、PythonライブラリがRPI5に対応していません。
- WiringPiは廃止しました。
- GPIOのsysfs方式は廃止の予定です。libgpiod方式へ切り替えました。
- libgpiod方式はLinuxの標準機能として組み込まれています。
- 今後の主流になるでしょう。RPI5にも対応済みです。
- このため使用するライブラリをlibgpiodに変更しました。
- しばらく安心して使い続けられるでしょう。
- RPI5対応したgpiozeroライブラリも使います。
- gpioの代替コマンドraspi-gpioは廃止されました。pinctrlに切り替えました。
入手先情報
ご注意
ノイズでGPSを受信できない問題
- USBタイプのSSDやUSBメモリを接続するとGPS信号を受信できない問題が発覚しています。
- 原因はUSBに接続するとそこからCPUの動作周波数が漏れます。
- この現象はRPI4で顕著です。
- RPI4の動作周波数(1.5GHz or 1.8GHz)です。
- GPSのL1信号は1575.42MHz(約1.5GHz)です。
- 両方の周波数は近すぎます。
- CPUのノイズが漏れ、GPS信号を妨害します。
- GPS信号は非常に微弱なため、埋もれてしまいます。
- いわゆる電波干渉です。強い電波が弱い電波に勝ちます。
- USB端子にシールドされていない装置を接続したり、HDMIにシールドされていない装置を接続するとノイズを発生します。
- USBのシールドケーブルやHDMIのシールドケーブルでは発生しません。
- プラスチックケースの場合、ノイズを発生します。
- これは電波の宿命であり、妨害ノイズは大敵です。
- こうした周辺装置を接続しないでください。
GPS受信時の注意
- 初回のみ衛星を捕捉するまで、時間がかかります。
- 衛星を捕捉できる屋外にしばらく放置してください。
ログファイルの管理
- ログファイル名は「gYYYYMMDD.txt」です。
- 使用するにつれ、ログファイルが増えますので適切に管理してください。
電源の注意
- 十分な電圧と電流容量の電源(5V,2A以上)をお使いください。
- また大電流用USBケーブルをお使いください。500mAに制限しているUSBケーブルを使えません。
- 特にモバイルバッテリを使う場合はご注意ください。
- 電流不足は瞬間的な停電を引き起こし、何が起こっても不思議ではありません。
- エラーを起こすだけでなく、動作が不安定になったり停止するかもしれません。
- USB電源チェッカーを使い確認することをお勧めします。
- ※USB電源チェッカーは平均電流を表示します。瞬間電流を表示できません。
- 電子機器は電源なしに動作しません。電源品質は重要です。
補足説明
Google Mapでの軌跡表示方法(pdf)
- 概要
- ステップ1:txt2gpx.pyを使ってtxtファイルをgpxファイルに変換
- ステップ2:Google Mapにgpxファイルをインポート
- 注意事項
- ※Googleのアカウントが必要です。
- ※一つのファイルで2000ポイントまで表示可能です。
- ※1秒間隔のデータの場合、約30分までです。
- ※1分間隔のデータの場合、約30時間までです。
- ※5秒間隔のデータの場合、約2.5時間までです。
- ※10秒間隔のデータの場合、約5時間までです。
- ※データ数が多い場合、間引く必要があります。
- ※Google Mapが仕様を変更することがあり、将来にわたって動作保証するものではありません。
- データの間引き
- GPSCAPにあるomit.pyで秒単位から分単位にデータを間引きます。
- 入力ファイル=g20170201.txt、出力ファイル=minute.txtの場合
- $ ./GPSCAP/omit.py < g20170201.txt > minute.txt
- omit5.pyは5秒単位にデータを間引きます。
- omit10.pyは10秒単位にデータを間引きます。
- 詳細
- GPSCAPにあるtxt2gpx.pyでファイル変換をします。
- 入力ファイル=minute.txt、出力ファイル=log.gpxの場合
- $ ./GPSCAP/txt2gpx.py < minute.txt > log.gpx
- Google Mapを開きます。https://www.google.co.jp/maps/
- 「メニュー」から「マイプレイス」を開きます。このときログインが必要です。
- 「マイマップ」を開き、「地図を作成」を開きます。
- 「無題の地図」をクリックし、名前を変更します。
- 「インポート」を開き、gpxファイルをドラッグ&ドロップします。
- 自動的に軌跡を表示します。
- マイマップのリストに反映されるには少し時間がかかります。
- 地図の削除は「メニュー」から「この地図を削除」します。
- あるいは「マイマップをすべて見る」を開き、「メニュー」から「削除」します。
モバイルバッテリを使ったときの連続稼働時間予測
- それぞれの環境によって異なるので、動作を保証するものではありません。これは一例(参考情報)です。
- Raspberry Pi 3BとGPSCAPをモバイルバッテリ(容量8000mAh)で駆動したときの予測です。
- Raspberry Pi 3BとGPSCAPの平均消費電流は約300mAです。
- このときの稼働時間予測は8000mAh×60%÷300mA=16時間です。
- 10000mAhなどもっと容量の大きなモバイルバッテリなら稼働時間を伸ばせるでしょう。
- ※モバイルバッテリの容量はセル容量であり、実容量はその約6割です。
- モバイルバッテリは使うたびに劣化し、次第に容量が減ります。
- 余裕をみて運用しましょう。
- なおボタンスイッチによるPowerOff操作ができるので、GPS情報が不要なときは電源を切る(USB電源ケーブルを抜く)ことができます。
google map へのマーカーつき位置表示方法
- まず、座標変換します。
- 緯度の変換 1234.56789 = 12+34.56789/60 = 12.5761315
- 経度の変換 12345.6789 = 123+45.6789/60 = 123.761315
- google map に貼り付けます。
- https://www.google.co.jp/maps/?q=12.5761315,123.761315
準天頂衛星システム(QZSS)には未対応
- このGPSモジュールは準天頂衛星みちびきに対応していません。
- そもそも、準天頂衛星みちびきは1機しか上がっておらず、まだ試験運用中です。
- 2017年中にあと3機打ち上げられ、2018年に運用開始予定です。
- まだ運用開始していないので、現在みちびき対応のGPSモジュールでさえ、GPSデータに反映されないことが多いです。
- ※24時間運用できず、約8時間程度しかみちびきからの情報を拾えない。
- ※計画では3つの衛星が8時間ごとに入れ替わる。
- ※静止衛星は赤道上空しか配置できない。そこで南北に8の字の描く軌道で日本上空を通過するようにした。
- ※正確には角度をつけた円軌道。
- ※そのため、地球上からみると8の字の頭が小さくなったような軌道に見える。近づいたり遠ざかっている。
- なお、準天頂衛星みちびきに対応したからといって、通常は捕捉されるGPS衛星が増えた程度の精度向上しか見込めません。
- みちびきはGPS互換情報を送信します。劇的に精度向上するわけではありません。
- 本格運用が始まれば、ほぼ天頂(日本の上空)に常に一つGPS衛星があるので、安定して受信できるGPS衛星が増えます。
- 高精度な測位のためには準天頂衛星みちびき専用の仕組みに対応する必要があります。従来のGPSではなく、L1Sを受信するハードが必要です。
- 複数波(複数の周波数)を受信したり、電離層情報を受信して位置補正する仕組みが必要です。これらは2018年から運用開始予定です。
- なお、精度が上がらず、運用開始は2018年11月に延期されました。
ビル街の精度
- GPSの仕組み上、ビル街で位置精度が大幅に悪くなることが知られています。10mどころではありません。
- 例え、捕捉衛星数が多くてもです。
- 直接の電波はビルに遮られ、ビルの壁に反射した電波を受信するためです。
- GPSモジュールの感度が高いために、反射した電波を直接の電波と勘違いします。
- そのため、直接の電波を受け取ったものとして位置計算します。
- 鏡像関係になるため、計算上の位置が大幅にずれます。高いビルほど大きくずれます。
- 一つの衛星だけを例にしますが、いくつもの衛星が同じ状態になります。
- この現象を確認してみるのも面白いでしょう。
ケースのはめ込み方
- 水平にケースをはめ込んではいけません。
- 先に爪をひっかけないと入りません。
- ケースはそういう構造になっています。
- まずマイクロSDカードを外します。
- 爪を引っかけます。
- 折りたたむようにはめ込みます。
- マイクロSDカードをセットします。
PPSの予備実験
- GPSをタイムサーバとするための予備実験です。
- LinuxではNTPでタイムサーバと同期する仕組みをとっています。
- この基準となるタイムサーバをGPSを使って構築してしまおうという試みです。
- このモジュールはGPSのPPS(Pulse Per Second)に同期してUART出力することができます。
- そこで、PPS同期したときのGPS時刻とNTP同期した時刻の差がどの程度あるのか実験してみます。
- その前にNTP同期したときの精度は数ms程度です。ネットワークの遅延などを考慮していますがこの程度の精度です。
- ntpq -pコマンドで確認できます。
- GPS時刻とNTP時刻を比較してみました。
- GPS時刻を正としてNTP時刻をms単位で表示してみました。
- GPS= 090617 151958.000 CPU= 2017-06-10 00:19:58.184852
- GPS= 090617 151959.000 CPU= 2017-06-10 00:19:59.184856
- GPS= 090617 152000.000 CPU= 2017-06-10 00:20:00.184861
- 常に約185msの遅れがあります。これはUARTの転送時間とPythonの処理時間による遅延です。
- UARTの通信速度を115200bpsに上げ、GPSの出力メッセージもRMCだけに絞っています。
- この結果からGPSを使ってもNTPと同じ数ms程度の精度を確保できそうです。
- 処理時間の遅延を考慮して時刻同期させればよいだけです。
ダウンロード・ファイル
正誤表
改善情報
- gps.pyによる記録ファイルを日付別ファイル(gYYYYYMMDD.txt)にしました。
- 日本標準時(JST)を基準にした日付別ファイルのため、編集加工が容易になりました。
- bullseye(kernel 5.10.x)対応しました。
©2017-2024 All rights reserved by Y.Onodera.