VIVITAの新居 hnii@twitterです。
今回は、ラズパイとRTK-GPSを使って1m移動する毎に一度ピッと鳴る装置を試作したので、紹介します。完成までは時間がかかりそうなので、今回はその1です。
はじめに
最近、ヨット(ヨット ディンギー - Google 検索)の操船を体験してきました。その時に欲しいなと思った装置が市販されていないので、試作実験することにしました。
欲しいのは海の上で使えるスピードメータです。
ヨットを操船しているときに、追い風に入るとまったく速度感がなくなる感じがしました。もちろん上達すれば分かるそうですけど。 また、風が弱いときに帆が正しい角度になっていないと速度がガクンと落ちるのですが、(自分の速度が分からないために)学習のためのフィードバックがしにくい感じがしました。
そこでスピードメータがあれば、より短時間で上達できるのではと思ったわけです。
基本方針
必要な要件は以下の通りです。
- 最大移動速度5m/s (初心者は風が5m/s以下の時に海に出るので)
- 2時間ぐらいキャリブレーションなしで使える
- 音で速度がわかる(船上で表示器を見るのは難しいので)
速度計測法
最初はIMUIMU - Google 検索を使う方法を考えましたが、ドリフトをキャンセルするのが大変だと思い却下。
次にGPSに着目しました。 GPSであればドリフトは発生しないし、精度も最近は向上しています。今回は1cm精度で位置が求められるRTK-GPSRTK-GPS - Google 検索を用いて速度を求めることにします。
音について
速度をそのまま音程に割り当てても分かりにくいので、1m移動する度に電子ブザーでピッと音が出るようにします。 また、RTK-GPSが正しく動いていることが前提なので、1cm精度で動作している(FIX解と呼ばれる状態)場合には短い切れの良い音、そこまでの精度に達していない状態ではちょっと長めの音、通常のGPSとしてしか動いていない時(精度は数m)には長い音を出すようにします。それにより機器が正しく動作しているか、聞くだけでわかるようになるはずです。
そろえるもの
- GPS受信機: ublox ZED-F9P 1台1
- アンテナ: TOPGNSS 107型2
- コントローラ: Raspberry pi zero w 1台3
- バッテリールーター: MF855 1台 4
- 電子ブザー: 直径12mm 5
- LEDと細々としたケーブル
以下のソフトを準備します。
- ntripclient パッケージ:GitHub - nunojpg/ntripclient: Ntrip Version 2.0 Command Line Client
- micropyGPSパッケージ: GitHub - inmcm/micropyGPS: A Full Featured GPS NMEA-0183 sentence parser for use with Micropython and the PyBoard embedded platform
つくりかた
RTK-GPSを使うためには基準局で受信した衛星信号を手元のGPS受信機に与える必要があります。その補正情報を用いてGPS受信機は内部でRTK-GPSの計算をおこないます。その結果には現在の座標、出力精度などの情報が入っています。そのデータから1mおきに音がでるようなソフトを作りました。
ラズパイについて
- Raspbianの最新版を16Gのmicro SDカードに焼き込み利用
- ケースを付けた状態で、内部のLEDを見たいので、穴を空けておくと便利
- 穴は右から13mm, 下から10mmのところに2mm程度で空け、その後大きなドリルでさらっておく
GPS受信機の設定
GPS受信機をUSBでWindowsパソコンにつなぎ、u-centerという設定ソフトで書き込みをおこないます。詳しくはCQ出版社トランジスタ技術 2019年2月号付録冊子参照。
今回は以下の設定を行いました。
- RTKモードをONに。
- UBX-CFG-DGNSS -> 3: RTK fixed
- 取得する衛星種類を決定。 GPS QZSS GLONASS BeiDouを利用
- UBX-CFG-DGNSS -> GPS, BeiDou, QZSS, GLONASS をenableに
- 出力データ種類 UBX-CFG-MSG
- 測位結果データ NMEA0183 GPGGAだけを出力
- F0-00 NEMA GxGGA の出力をUSBに出力
- ublox独自メッセージなどを全て出力しない
- UBX-CFG-MSG -> 残りを全てoffに
- 測位結果データ NMEA0183 GPGGAだけを出力
- ナビゲーションモードの設定
- UBX-CFG-NAV5を以下の様に設定
- Dynamic Model: 0-Portable
- Fix Mode: 3 Auto 2D/3D
- Min SV Elevation: 25
- UBX-CFG-NAV5を以下の様に設定
- ポート設定(どのポートから補正データを受け入れるかなど)
- UBX-CFG-PRTを以下の様に設定
- Target: 3-USB
- Protocol In: 0+1+5-UBX+NMEA+RTCM3
- Protocol Out: 0+1+5-UBX+NMEA+RTCM3
- UBX-CFG-PRTを以下の様に設定
- 計測・計算周期
- UBX-CFG-RATE -> 50mS
自作したハード部分について
電子ブザーは電圧を加えるだけなので、直接GPIOにつなぎました。また、ビデオでわかりやすいように緑色LEDも光るようにしてみました。
今回はRaspberry piボードのGPIO PORT 21とGNDの間に接続しています。
使ったソフトについて
- Raspbery pi上でntripclientというソフトを用いて、基準局の情報をGPS受信機に送る
- GPS受信機の計算結果を20Hzの周期で出力し、Raspberry pi上のmicropyGPSというライブラリでパースし、現在の位置を算出
- 基準点から1m移動する度に、音を出し基準点を移動
この処理を繰り返すことになります。 RTK-GPS必要な基準局として、CQ出版社の公開サーバを利用させてもらいました。
私の書いたスクリプトはこちらにおきます。 https://github.com/hnii2006/beepbyONEm.git
こちらのpythonスクリプトでやっていることは以下の通りです。
- 緯度、経度が1度かわった場合の長さを計算しておき(今回は東京での緯度を利用)GPSの緯度経度情報を換算
- 現在の精度情報に合わせ電子音の長さを決めておく
- 基準緯度経度からの緯度方向、経度方向の距離を計算
- その距離が1mを超えた場合は、基準点から現在地点に近い方向に1m基準点を移動
- 同時に音を出す
実験
試作した装置を持って、地上を歩いて実験してみました。 vimeo.com
しかしながら今のシステムではどこかにデータがたまってしまうところがあるようです。GPS受信機からRaspberry piに1秒に1~2回づつ固まってデータが到着するため、歩く速度でも周期が安定していません。ピピ、ピ、ピピ、ピみたいに等間隔に並びません。 そこで、それぞれのプロセスのniceとかを調整してみましたがまったく変わらずでした。 一方で、GPSとして動作している短い音とちょっと長めの音について、聞いていて簡単に判別できたのは良かった点でした。
まとめ
ヨットの操船に使えるような海上用スピードメータを試作してみました。一応動作しましたが、音の間隔が安定しませんでした。 次回はGPS受信機からの出力を時間遅れが無いように処理するソフトを書いてみたいと思います。
続編へつづく RTK-GPSを使った1m毎のパルス発生装置の試作(その2) - VIVITABLOG
-
CSG SHOPのボードを購入Eltehs GNSS OEM Store↩
-
aliexpressで購入、u-bloxから発売されている純正アンテナより感度が高いようにみえるので利用↩
-
WiFiが付いている小型タイプ↩
-
テザリングを提供+電源供給を同時にできるので使用、どんな機種でも良い↩