MULTICOPTERに挑戦(multiwii)

3、Multiwii I2C GPSの設定

2013/05/31~・・・・随時更新、訂正など行っていきます 

CRIUS GPS CN-06 V2.0とCRIUS I2C GPS NAV MODULEの設定(改訂版)

2013/6/25 I2C GPS NAV V2.2に合わせ設定方法を全面改訂しました
2013/7/10 UBLOXプロトコル使用時、ボーレートは38400や57600の方が良い
2013/8/2 NMEAプロトコル使用時の設定をボーレート115200から57600に変更した
これまで3台のGPSをI2C接続で取り付けてきました。GPSをI2C接続で取り付けるにはmultiwiiのファームウェア、I2C GPS NAV MODULEのファームウェア、GPS受信機の通信速度の3つの設定が合っていなければ使うことが出来ませんでした。 これまでいろいろな設定をやってきましたがGPSのボーレートの変更やI2C GPS NAV MODULEのファームウェアによつて設定が難しいことがあり、 設定について調べたことをここに纏めることにしました。Multiwii v2.2での使用を前提とします。
Multiwiiのバージョンが古い場合はMultiwii v2.2に変更してください。GPS POSITION HOLD、RETURN TO HOMEを快適に使う必須条件です。

I2C GPS NAV MODULEのファームウェア”I2C GPS NAV V2.2”からGPS受信機の自動検出、自動構成が出来るようになったので自分でGPS受信機の通信速度、更新レートの変更をする必要が無くなり設定が少し楽になっています。(但し、UBLOXプロトコル使用時)

[1] Multiwii ver2.2 config.hでGPSの設定
最初にフライト・コントローラー(FC)のファーム・ウェアをI2C GPS対応に書き換えます。(ボーレート、プロトコルの設定は不要です)
multiwii ver2.2のconfig.hの変更箇所は3行です
//#define GPS_BAUD 115200 ------この行はシリアル接続時の設定なので無効にします
#define I2C_GPS
#define MAG_DECLINIATION -7.1f
 ------私の地域の磁気偏角値です、 http://magnetic-declination.com/で調べます。
千葉や東京などは"-7f"ぐらいの値を入れます

[2] CRIUS I2C GPS NAV MODULEのファームウェアの書き換え 
CRIUS I2C GPS NAV MODULEに書き込まれているファームウェアにはいろいろなバージョンがありますが、どのようなバージョンが入っているか分かりません。 MultiwiiのバージョンとI2C GPS NAV MODULEのファームウェアのバージョンは揃えたほうが良いので”I2C GPS NAV V2.2”へ書き換えます。

ファームウェアは最新のファイルを i2c-gps-navのArduino based GPS and NAV co-processor with I2C protocolからダウンロードします。 ファイル名は"I2C GPS NAV V2.2 Beta1 (R62)"です。 rar圧縮ファイルの為、”Lhaplus”などの解凍ソフトが必要です。
このプログラムには2点問題があります。
①UBLOXプロトコルを選ぶと一部正常に働かないことがある
②I2C NAV MODULEのstatus LEDの点滅がGPSから正常にデーターを受け取っているのに通信できていないことを表す点滅になる
などの不具合があります。早く改善された正式版がリリースされれば良いのですがとりあえず修正したプログラムをダウンロードして置き換えます。 i2c-gps-navのIssueの中のublox initialization problemから、修正したプログラム”I2C_GPS_NAV_v2_2.ino”をダウンロードします。 正式なプログラムではありませんがこのプログラムに置き換えることにより正常に作動するようになります。

I2C GPS NAV V2.2は以前のバージョンとは異なりmultiwii v2.2のシリアル接続と同様にconfig.hで”UBLOX”を選んで”GPS_SERIAL_SPEED”を指定すればGPS受信機のボーレートをU-CENTERなどで変更しなくてもそのまま取り付けるだけでGPS受信機の設定を指定されたボーレート及びリフレッシュレートを5Hzにします。 ”GPS_SERIAL_SPEED”はターゲット・スピードになります。
以前のバージョンでは”GPS_SERIAL_SPEED”は初期の読み込みスピードでGPSのボーレートと同じボーレートを入れ、”UBLOX”を選んだ場合、自動的に115200bps(固定)に変更されていました。 またリフレッシュレートが10Hzとなっていたバージョンもあります。(NEO-6の最大リフレッシュレートは5Hzですが間違って設定されていました)

I2C GPS NAV V2.2のデフォルトからのconfig.hの変更ヶ所
 下記設定はGPSを57600bps、5Hz、UBLOXプロトコルで使う設定例です、通常は設定が楽になるUBLOXを選びます
/* Serial speed of the GPS */
#define GPS_SERIAL_SPEED 57600-------ここで指定したボーレートに自動的に変更されます(38400又は57600を指定する)
/* GPS protocol
//#define NMEA------------コメントを付けて無効にする
#define UBLOX ------------コメントを外して有効にする
//#define MTK_BINARY16
//#define MTK_BINARY19
//#define INIT_MTK_GPS----コメントを付けて無効にする
(UBLOXプロトコルの場合は38400bps以上の通信速度を選ぶことができます。ただし通信速度は遅い方が通信エラーが起こりづらいので”GPS_SERIAL_SPEED”で指定するボーレートは115200bpsより38400bps又は57600bps方が良いでしょう、 もしもGPS受信機の通信速度をU-CENTERで115200bpsに変更していた場合はデフォルト設定の9800bpsなどに戻してください。上記設定は115200bpsからでは働きませんでした)

 下記設定はGPSを57600bps、5Hz、NMEAプロトコルで使う設定例です。通常はUBLOXを選ぶので参考として掲載しました
 (以前は115200bpsに設定していましたがよりエラーの少ない57600bpsに変更しました)

/* Serial speed of the GPS */
#define GPS_SERIAL_SPEED 57600-------GPSをu-centerで57600bps、5Hzに設定する必要があります
/* GPS protocol
#define NMEA------------有効にする
//#define UBLOX
//#define MTK_BINARY16
//#define MTK_BINARY19
//#define INIT_MTK_GPS----コメントを付けて無効にする
(NMEAプロトコルを使う場合はGPS_SERIAL_SPEEDとGPS受信機のボーレートは同じ値にする必要があります)

書き換え方法は
multiwiiのプログラムの書き換えに使うarduino IDEとFTDIを用います。I2C NAVボードとの接続は付属していたピンをボードに差込、テンションを掛けた状態で書き込みます。 ピンを半田付けしてやる方が接触不良が起きなくて良いのですが書き込みが終わったら邪魔になるので外せる状態で行います。 私は書き換え終わったときエラーが出て何回かやり直しました。ピンを差し込んで抑えるだけなのでテンションの掛け方が あまり弱いと接触不良でエラーがでるし、強すぎると壊しそうなのでちょっとコツがいります。
HOBBY ROBOT FACTORYさんのCRIUS GPSの接続 にやり方が書かれていますので参考にしました。

FTDIを差し込んだとき隙間が出来ないように注意して抑え、FTDIのケーブル側を軽く持ち上げて斜めにしてピンとボードの接点部分が良く接触するようにします。
パソコンと繋ぐとI2C GPS NAV MODULEのLEDが点滅を始めます。点滅しない場合は接触不良なので抑え方を変えてみます。 書き込み中はFTDIのLEDが点滅します。書き込み終了後パソコン画面にエラー・メッセージが表示されなければOKです。


[3] CRIUS GPS CN-06 V2.0のボーレートとリフレッシュ・レートの変更について
I2C GPS NAVのファームウェア設定により必要によって変更します。
(NMEAプロトコルを使用する場合は変更が必要です。UBLOXプロトコルを選んだ場合は変更しなくてもデフォルトのまま使えます

CRIUS GPS CN-06 V2.0はU-blox NEO-6M GPS moduleが使われています。ボーレートとリフレッシュ・レートの初期値は9600bps、1Hzです。設定を変更した場合、EEPROM(不揮発性メモリ)に設定を保存することができ、バックアップ電源が無くなっても設定値を保持することができます。

ネットで調べると2つのやり方がありました。
①GPSモジュールのジャンパー・ピンを半田付けして初期値を38400bpsに変更する方法
②UBLOXのU-CENTER GPS 評価ソフトでGPSモジュールの設定を変更する方法
①の方法はCRIUS GPS CN-06 V1.Oの受信機を初期値の9600bpsままI2C GPS NAV MODULEに接続したときうまく働かない物があったので モジュールのピンをジャンプしてボーレートの初期値を強制的に38400bpsにするための処置です。CRIUS GPS CN-06 V1.Oの受信機がEEPROMを持たなかったので設定を変更しても初期値の9600bpsに戻るのでこのような処置が考え出されました。
CRIUS GPS CN-06 V2.0ではこのような処置は不要です。
注意:GPS受信機はElectrostatic Sensitive Devices (ESD)&Moisture Sensitive Devices (MSD)なので静電気や湿気に注意を払わなければなりません
②のU-CENTER GPS 評価ソフトでGPSモジュールの設定を変更する方法をAOさんのホームページを参考に設定方法をまとめてみました。

準備:
1、GPSモジュールとFTDIアダプターを接続するピン・アダプターが必要なので作ります。
2、U-BLOXのホームページからu-center GPS評価ソフトウェアをダウンロードしてPCにインストールします。
(2013/6/21現在のバージョンは7.02です)
3、一緒に”U-CENTERユーザーガイド”もダウンロードして使い方を読みましょう。

設定方法(デフォルト9800bps、1Hzから57600bps、5Hzへの変更の仕方です)
1、GPSモジュールとFTDIアダプター使いパソコンと接続する。
  GPSモジュールとピンアダプターを繋ぐ配線はGPSモジュールに付属していた配線を使います
2、U-CENTER GPS 評価ソフトを起動する
3、『Receiver』ツール・バーの『Connect/Disconnect』ボタンでGPSを繋いだCOMM ポートを選択する。(又はメニューの"receiver"から"port"を選択)
コネクト/ディスコネクト表示は緑のコネクト表示になる。

4、ボー・レート9600を選択する。CRIUS GPS CN-06 V2.0のボー・レートは初期値9600です。評価ソフトの初期値も9600なのでCOMM ポートを選択した段階で GPSと通信が始っています。『通信情報』アイコン(画面右下)の色が緑の点滅に変わり衛星群、信号対雑音比、時刻などの情報が画面に表示されはじめます。 室内の場合、窓際でなければ受信できないことがあり、コールド・スタートではGPSデータ(3D FIX)が表示されるのに数分かかる場合があります。
GPSモジュールが正常に働くことを確認したら設定の変更に移れます。
 u-centerのボー・レートがGPSレシーバーのものと同じ値に設定されなかった場合、『通信情報』アイコン(画面右下)は点滅しません。(設定値により赤色のアイコンに変わる)
5、GPSの設定をMultiWii FCの設定(ボー・レート57600、リフレッシュレート5HZ)に変更します。
  メニューの"Message"から『Message View』を選択し『UBX』→『CFG』→『PRT』を選択します。
  ports選択時protcol outは「1-NMEA」を選び、NMEAプロトコル出力のみにします。(protcol inはデフォルトのままで良い)
  ボー・レートを57600に変更してSENDを押します。
  GPSのボーレートが57600に変更されるため、通信が出来なくなり、『通信情報』アイコンが点滅から点灯になりGPSからのデーターが更新されなくなる。
6、評価ソフトのボーレートを変更されたGPSのボーレートに合わせるため、『Receiver』ツール・バーでボーレートを9600から57600に変更する。
  GPSとの通信が再開されデーターが更新されるようになる。『通信情報』アイコンも緑の点滅にもどる。
7、再度メニューから『Message View』を選択し『UBX』→『CFG』→『RATE』を選択します。
  Measurement Periodを1000ms(1Hz)から200ms(5Hz)に書き換えてSENDを押します。CRIUS GPS CN-06 V2.0の最大リフレッシュレートは5Hzまでです。
8、EEPROMに設定を保存します。『UBX』→『CFG』→『CFG』を選択します。
  ”Devices”はデフォルトでは上から2つが選択されているが4つのDevicesをすべて選択して表示を反転させる。
  ”save current configuration”(デフォルトで選ばれています)を選択しSENDを押します。
『通信情報』アイコンが緑の点滅のままでGPSからのデーターがキチンと更新表示されていればOKです。
『Receiver』ツール・バーの『Connect/Disconnect』ボタンでDisconnectをします。設定がキチンとEEPROMに保存されたか確認するためソフトを終了しGPSを一旦USBポートから取り外します。少し時間を置いてから再度接続して U-CENTER GPS 評価ソフトでもう一度、動作と設定が保持されているかを確認すれば終わりです。(評価ソフトを起動したときの初期ボーレートは9600なので57600に変更して通信されることを確認)

NMEAプロトコルを使う場合、以前は115200bpsに設定しましたが57600bpsの方がエラーが少ないようなので57600bpsに設定することをお勧めします。
I2C GPS NAVの設定も57600bps、NMEAを選びます

『通信情報』とアイコンの色について(U-CENTER USER GUIDE(日本語 旧バージョン)からのメモ)
通信情報アイコンを見れば現在の通信状態がわかるのでコネクトしたときや設定を変更したときなどは通信状態を確認してください
通信情報:アクティブなCOMポートとボー・レートが表示されます。(ボー・レートは評価ソフトのボー・レートです)
アイコン の色分け
緑   :データを適切なボーレートで受信中(アイコンが点滅します、ボー・レートにより点滅の速さも変わる)
○暗い緑:有効なデータを受信後、現在は受信データがないため受信待ち
赤   :データを受信中、ただしエラーを検出
○暗い赤:現在はデータ受信待ち、ただし過去にエラーを検出
グレー:最初のデータの受信待ち
例1:緑のプラグ=u-centerとGPSレシーバーの同期がとれている
例2:赤のプラグ=u-centerとGPSレシーバーの同期がとれていない

[4] GPS受信確認
設定が終わったらGPS受信機をI2C GPS NAV ボードと接続してFCに接続します。FCにバッテリーをつなぎ受信を確認します。u-centerで設定直後であればGPSはホット・スタートになるので直ぐに受信状態が3D FIXになるので I2C NAVボードのSTATUS LEDは速い点滅3回、1秒OFFを繰り返すようになります。もしLEDの点滅が1秒ON、1秒OFF(ロング・パルス)を繰り返すようであれば通信がうまくいっていないのでI2C NAV ボードのファーム・ウェアの設定が合っているか、配線が正しいか再確認してください。
コールドスタートの場合、短い点灯、1秒間OFFを繰り返した後、1~2分で3D FIXを表す点滅に変わります。
Multiwii2.1ではMultiwii FCの青色のstatus LEDが点滅していましたが、Multiwii2.2ではバージョンが違うので点滅はしません。crius AIO proのようなボードで黄色のLEDが点滅するように変更されています。
うまくいったならPCとFCを接続してwinGUIで受信確認、MAPを選ぶと自宅が表示され緯度経度や受信衛星数などを確認することが出来ます。
木造の我が家では曇りの日でも窓際で受信して衛星を7-8個受信できています。緯度経度の表示を見ただけでは位置が分かりづらいので黄色い線で表示されるマルチコプターの航跡を確認して大きくずれていかないことを確認しましょう。
後はAUX SWにPOSI HOLDとRETURN TO HOMEを設定して終わりです。

I2C NAV ボードのstatus LEDとmultiwii config GUIでGPSの受信状態の確認 
I2C-GPS NAVボードを使用する場合は、I2C-ボード上のLED(赤色のLED )の点滅の仕方でGPSの受信状態を知ることが出来ます。
R33 DOCUMENTATIONおよびV2.2 LED点滅プログラムから)
*起動時に3回の短いフラッシュ -------バージョンによっては異なる
*GPSと通信ができていますが、まだ2D fixや3D fixになっていない場合は短い点灯1回、1秒OFFを繰り返す
*GPSの2D位置(2D fix)が利用可能であれば、速い点滅2回、1秒offを繰り返す
(すぐに3D fixになるのでほとんど見ることはありません)
*GPSの3D位置(3D fix)が利用可能である場合、速い点滅3回、1秒offを繰り返す-----この点滅になること
("I2C GPS NAV V2.2 Beta1 (R62)"の修正プログラムを適用していない場合は5個以上のサテライトを受信&3D FIX)

*5秒以上データを受け取っていない場合、1秒間点灯1秒間オフ(ロングパルス)を繰り返す(GPSと通信が出来ていない状態)

上記はI2C GPS NAVのファームウェアによって少し異なる場合があります。

multiwii 2.2 config GUIではGPSとフライトコントローラが通信しているときヘディング・インジケーターの周りの灰色ドーナツが点滅し、3D FIXになるとGPS fix インジケーターの色が緑に変わりますが、GPSを実際に利用できるには5個以上のサテライトを受信しGPSがロックされなければなりません。
5個以上のサテライトを受信しGPSがロックできればAUX SWでPOSITION HOLD又はRTHを選択するとボックスの色が変わります。 GPSが受信できていても利用できないときは選択しても色は変わりません。
winGUIではGPSの受信状況にかかわらず選択すると色が変わります。multiwii 2.2 config GUIと異なります。

フライトではGPS衛星が受信され3D FIXしたことを示すI2C NAV ボードのLEDが速い点滅(速い点滅3回、1秒OFF)になったのを確認してからフライトです。(フライト前に必ず確認すること)


<I2C GPSの設定記録 参考として>
これまで3台のGPSをI2C接続で取り付けましたがそれぞれ設定方法が異なっていました。
①hobby robot factryさんから購入したHOLYBRO HOBBY製のNEO-6M GPS ModuleとI2C GPS NAV MODULE
GPSはデフォルトの38400bpsのまま、I2C NAV MODULEのファームウェアはhobby robot factoryで書き換え済み。(おそらくボーレートを38400bps、プロトコルはUBLOXを選択した"I2C GPS NAV latest"が入っていると思われる)
②A社から購入したCRIUS GPS CN-06 V2.0とI2C GPS NAV MODULE
GPSのボーレートとリフレッシュレートをU-CENTERで115200bps、5Hzに変更、I2C NAV MODULEのファームウェアは書き換え無しでそのまま使用
③B社から購入したCRIUS GPS CN-06 V2.0とI2C GPS NAV MODULE
GPSのボーレートとリフレッシュレートをU-CENETRで38400bps、5Hzに変更、I2C NAV MODULEのファームウェアをI2C GPS NAV V2.2 Beta1 (R62)に書き換え(A:内容は変更せずボーレートは38400bps、プロトコルはNMEAのまま使用 B:ボーレートは38400bps、プロトコルをUBLOXに変更)

推測になりますが、multiwii ver2.2での実際の動作ボーレートとリフレッシュレートは下記のようになっていると思います。
①はUBLOX、115200bps、10Hz(10Hzに変更するコマンドがでますが最大更新レートは5Hzなので実際は?)
②はNMEA、115200bps、5Hz
③はA:NMEA、38400bps、5Hz  B:UBLOX、38400bps、5Hz

3台とも違う設定ですがRTH、POSITION HOLDとも正常に働いているようにみえます。
ただ、I2C NAVボードのLEDの点滅の仕方を比べると、
①の場合、短い点灯1回と1秒OFFを繰り返した後、3D FIXを示す、速い点滅3回、1秒offに変わります。(設計プログラムどうりの表示)
②と③の場合は、1秒間点灯1秒間オフ(ロングパルス)を繰り返した後、3D FIXを示す速い点滅3回、1秒offに変わります。 I2C GPS NAVのLEDを点滅させるプログラムにバグがありcold start時、3D FIXになるまで受信状態が正常に受信できているかわかりません。

これらの設定は一応働いていますがバージョンが合っていなかったりバグがあるので、I2C GPS NAVのファームウェアを変更しました。(いろいろな設定を試しました。①、②はクラブ仲間の機体です)
①のGPSはI2C GPS NAV v2.2&修正プログラムを適用してUBLOX、57600で動作させています。
I2C GPS NAV v2.2を適用したことでRTHでホーム・ポジションでの動きが改善されたように感じます。 以前は風が強いときオーバーシュートすることがあったり、他のI2C GPS NAV V2.2適用機体と比べるとRTHのホームポジションに到達したとき、速度制御や向き変更の動作が遅いように感じていましたが明らかに改善されました。
②のGPSはI2C GPS NAV v2.2&修正プログラムを適用してNMEA、115200で作動を確認、その後、UBLOX 57600を試しましたが動作せず、とりあえずUBLOX 115200で動作確認後、GPS受信機をu-centerで38400bps、5Hzに変更して、UBLOX、38400で動作させています。
③のGPSは修正プログラムに変更してUBLOX、115200及びGPS受信機をデフォルトの9600bps、1Hz設定に戻しUBLOX、115200の作動を確認しています。 その後、UBLOX、57600に変更して動作させています。
(青色が最終設定です)

いろいろ設定を変更して試してきましたがUBLOXとNMEA、どちらを選ぶのが良いのでしょうか? GPSからの受信データを5Hz以上で更新できればどちらを使っても変わらないのではないでしょうか? Crius AIO PROのようにGPSをシリアルポートに直接付けて処理する場合はプロトコルが違うと Multiwii FCのCPU負荷は変わってくるかもしれませんがGPSをI2Cで接続した場合、プロトコルが違ってもI2C GPS NAV MODULEのCPUが処理するのでFCのCPUに対する負荷は変わりありません。
I2C GPS NAVの以前のバージョンではUBLOXを選んだ場合、うまく働かないことがあり、NMEAを選ぶほうが確実な動作を期待できましたが、 修正プログラムを適用することでUBLOXプロトコルを選んだ場合、GPS受信機の通信速度やリフレッシュレートの変更を自分でやる必要が無くなり設定が楽になりました。
RC GROUPS.COMのディスカッションでpm1氏の書き込みを読むと5Hzに設定した理由は10Hzの場合、同じデータを2度送信していると述べています。 従って10Hzにする必要はありません(CN-06の最大リフレッシュレートは5Hzなので実際はこれで制限されます)。
また、UBLOXプロトコルでは5Hzの場合、通信速度(ボー・レート)は38400bpsあれば十分で115200bpsにしてもメリットがありません。 NMEAプロトコルでは115200bpsが必要だと述べています。
通信速度は遅い方が通信エラーが起きづらいので遅い方が良いようです。
multiwii 2.2 r1514のconfig.hの中に書かれているコメントを読むと115200bpsでは2%以上のスピード・エラーがあり57600bpsでは0.8%だと書かれていてデフォルトを115200bpsから57600bpsに変更しています。 (// avoid using 115200 baud because with 16MHz arduino the 115200 baudrate have more than 2% speed error (57600 have 0.8% error))
pm1氏はNMEAプロトコルでは115200bps必要だと述べていますが、CN-06の初期値は9600bps、1Hz、NMEAプロトコル出力となっています。単純に考えれば5Hzの場合、5倍のボーレートであればデーターを送ることができると言えます。 従ってu-centerで57600bps、5Hz、NMEAプロトコルのみ出力するように設定すれば57600bpsでも問題なく使えると思います。
NMEAプロトコルは安心感(通信速度、更新レートなどが固定で使える)がありますが通常は設定しやすく通信速度を低くできるUBLOXプロトコルを選らぶのが良いでしょう。

参考:HOBBY KING販売のHOLYBRO HOBBY製NEO-6M GPS Moduleはボー・レートとリフレッシュ・レートは38400bps、5HzでPOWER表示LEDがアンテナ側にあり電源が入ると点灯しGPSが受信でき3D FIXになると点滅しました。 CRIUS製のGPS CN-06 V2.0はPOWER表示LEDが裏側にあり直接LEDが見えません。室内なら点灯したときに緑色の明かりが漏れて見えるのですが、明るい屋外ではわかりません。 GPSを受信できてもLEDは点灯のままで点滅はしません。HOLYBRO HOBBY製の方が電源を入れるだけでGPSの受信状態が3d fix LEDで分かるのでトラブルシューティングに役立ちます。



BACK ・ NEXT



メインページに戻る