MULTICOPTERに挑戦(multiwii)

5、GPSの設定&調整手引書 R33ドキュメントの和訳

2013/07/5up
 ネット翻訳後、手直ししました。翻訳間違いもあるかもしれませんが参考にどうぞ・・・
尚、R33 ducumentationはmultiwii2.1の開発段階で書かれたものなので現在のバージョン2.2とは異なる部分もあります
紫色の文は私が補足として書いたものです。
リンク:R33 DOCUMENTATION 

MultiWii GPS assited Position Hold and RTH functions


コードリリースR33用
ドキュメントバージョン1.0
Written By EOSBandi

目次
 Implementations(実装)
 GPS受信機とその構成
 Multiwii GPS機能の設定と使用
  シリアル接続GPSの設定
  I2C GPSの設定
  Magnetic declination(磁気偏角)
  テールコントロール
 追加のGPSの設定
  GPS フィルターリング
  Low speed D term cancelation
  ウェイポイントの半径
  Minimum navigational speed(最小航行速度)
  Maximum navigational speed(最大航行速度)
  スローナビゲーション
  最大許容バンク
  PIDコントロール
 フライトのための準備
  EEPROMのクリア
  コードのコンパイル
 最初のテストと調整
  プリフライトテスト
  最初のテスト Position hold
  PosholdがOKなら、RTHを試せます
 追加情報


これは、MultiWiiのGPSアシストPOSITION HOLD とRETURN TO HOME(RTH)の最新の実装です。下記リンクから得るコードはMultiWii_dev_20120504バージョンに基づいています。 その暫定的なリリース後の変更は適用されません。 私は最終的にこの実装がメイントランクに組み込まれ、2.1リリースの一部になることを期待します。
ナビゲーションルーチンはJason ShortとArducopterチームの作品に基づいています
Link : http://code.google.com/p/i2c-gps-nav/downloads/list

 実装
現時点では、MultiWiiにGPSを追加するには2つの方法があります
1、 スペアシリアルポートがあるATMEGA1280または2560マイクロコントローラ・ベースのFCを持っている場合、そのポートにGPSを接続し、コード内でシリアルGPSコードを有効にする。
(下記の方法を見てください)
リソース(RAMおよびROM)の使用量が多いのでAtMega328ベースのボードにお勧めしません。
2、 シリアルGPSと一緒にGPS解析とナビゲーションの計算を実行する二次AtMega328プロセッサをもつI2C_GPSボードを使用することができます。 このボードは I2Cバスを介してFCと通信します。

 GPS受信機とその構成
信頼したPosHoldとRTHのために正確で高速なGPS受信機が必要です。 残念ながら更新速度1Hzの古いSiRF III受信機は適していません。 少なくとも5Hzの更新速度と115200bpsのシリアル速度もつMTK、uBloxまたは SiRFIVベースの受信機が必要です。 ベスト・ワンは 10Hzのリフレッシュレートと大きなパッチアンテナ持つ物です。 最も一般的に使用される受信機はMTK 3329チップセットを搭載したGTop PA6Bモジュールです。この受信機は、現在入手可能なI2C NAVモジュール (Navigatron、RushDuino)で使用されます。

MultiWiiのGPS受信機(I2Cとシリアルの両方)に求められることは
・10Hz(または5Hz)のアップデート・レートに設定できること
・115200bpsのボー・レートで通信できること
・GGA、GSAとRMCフレームの出力があること

これらの設定がデフォルトでない場合は、GPS受信機の設定を変更するMultiWiiとi2cgpsコードの初期化部にコマンドを追加する必要があります。将来のバージョンのコードでは異なるGPSモジュールの自動検出と自動構成を使用するかもしれませんが、現在、それはあなた次第です。
最善の解決策は、上記の要件と一致するようにGPS受信機のデフォルト設定を変更することです。

PA6B受信機のファームウェアは、これらのデフォルト設定を持つように更新することができます。
ダウンロードセクションでMTK-firmware-tools.rar を参照してください。MediaTek_programming.pdfファイルの説明に従うことができますが、AX1.30 .... .binの代わりにMTK3329_A1.5E_20110118_10Hz_115200.binファームウェアファイルを使用することが出来ます。

I2C-GPSボード(例えばNavigatronなど)を持っている場合、シリアルポートを使用しないスケッチをアップロードする必要があります。
Arduino IDEの例として最も簡単なスケッチはBLINKです。 File->Examples->Basics->Blinkを選択して、ボードにUSB /シリアルドングルを接続してスケッチを一度アップロードしてみてください。(TX / RXをクロス接続)下線部分は書き込み方の例なので参考です
上記の手順にしたがいアップデートしてください。 (最新Navigatronモジュールは115200/10Hzにプリセットと報告あり)
新しいファームウェアで、更新パッケージから受信機をテストするMiniGPSプログラムを使用することができ、デフォルト・パラメータを設定することができます。(Shift+ Ctrl + Sキーを押し追加のタブ表示するように) GPS受信機のデフォルト設定が上記の設定と一致していることを確認してください。

 Multiwii GPS機能の設定と使用
  GPSをシリアルポートに接続する設定

#define GPS_SERIAL 2     //GPSのために使用するシリアルポートを設定します。
#define GPS_BAUD 115200  //シリアルポートの速度を設定します
//#define I2C_GPS      //シリアルGPSを使用するのでI2C_GPSをコメントアウト
  I2C_GPSの設定
//#define GPS_SERIAL 2    //シリアルGPSをコメントアウト
//#define GPS_BAUD 115200  //シリアルGPS速度をコメントアウト
#define I2C_GPS       // I2C-GPSを有効にする

  Magnetic declination(磁気偏角)
磁気偏角は磁北と真北との角度差です。 正確なナビゲーションのために、この差異を知っている必要があり、これを計算に使用しています。このウェブサイト(http://magnetic-declination.com/)からあなたの場所の磁気偏角を得ることができます。度+ 分(1/60)で表す値を小数度に変換する必要があります 。 例えばブダペストの磁気偏角は3°58'EASTなのでconfig.hに入れる値は3 +58(1/60)を表す3.96 です。EASTは 値が正であることを意味し、WESTは負であることを意味する。(ピッツバーグの9°13'WESTは -9.21です) 、config.hの#define MAG_DECLINIATIONラインに計算された値を入力してください。
10進数を示すために、数字の後にfを追加してください。
#define MAG_DECLINIATION 3.96f

  Tail control(テールコントロール)

RTH中にマルチコプターのヘディングを制御する3つの設定があります。これらは単にtrue or false(真偽)の値を変更するだけす。コメントアウトしないでください。

#define NAV_CONTROLS_HEADING  true
trueであれば、RTH中にマルチコプターは常にヘディングをホームポイントに向けて旋回します。ヘディングコントロールはMAG P値によって支配されます。 Pが低いとマルチコプターはゆっくりと旋回し、高いと早い旋回になります。 MAGHOLDは、この機能のためにアクティブでなければなりません。 (およびすべてのヘディングコントロール機能のため)

#define NAV_TAIL_FIRST false
これがtrueでNAV_CONTROLS_HEADINGもtrueなら、RTH中マルチコプターはtailをhome positionに向けるだろう。

#defineNAV_SET_TAKEOFF_HEADING true
これがtrueならば、マルチコプターはホームポイントに到着時、armしたときの方向と同じ方位にヘディングを向けるだろう。

 追加のGPSの設定
  
GPSフィルタリング

GPS測位が100%正確ではないため、GPS受信機によって与えられた座標に小さなランダム・エラーが常にあります。 この"ノイズ"はPosHoldをピクつかせます。GPSの不正確さに起因するピクつきと突然の姿勢の変化を克服するのに、5エレメント・ムービング・アベレージ・フィルタがあります。 これはGPS受信機によって与えられる座標をフィルタリングします。
10Hzの更新レートを持っている場合にのみ使用してください。
GPSフィルタリングを有効にするには、#defineGPS_FILTERING true を設定します。
  Low speed D term cancelation
ポジション・ホールド中、マルチコプターがゆっくり移動しているときに、制御ループのD値は、エラーを誘発します。
速度が0.5m/s以下のときにD値をキャンセルする#define GPS_LOW_SPEED_F_FILTER true を設定します。

  Waypoint radius (ウェイポイントの半径)
マルチコプターとアクティブ・ウェイポイント間の距離がこの値より小さい場合、 ウェイポイント(ホームポイント)に達したとみなされます。
あなたは#define GPS_WP_RADIUSでウェイポイントの半径を設定することができ、その値はcmです。
次の4つの定義は、現在(R33)MultiWii.inoになっています。 今後のリリースではconfig.hに移動されます 。

  Minimum navigational speed (最低航行速度)
ナビゲートしている間使用されている最低速度を設定することができます。 これはマルチコプターがウェイポイント(ホームポイント)に到達するときの目標速度となります。 値はcm/秒です。
#define NAV_SPEED_MIN  100

   Maximum navigational speed (最大航行速度)
ナビゲーションのための最高速度を設定することができます。 値はcm/秒です。 私は最初に200cm/secに下げ、後から増やすことをお勧めします。
#define NAV_SPEED_MAX  400

  Slow navigation (スローナビゲーション)
低速航行が設定されている場合、次のウェイポイントに近づくとき、マルチコプターの速度をゼロに低減することができます。
#define NAV_SLOW_NAV true
  Maximum allowed banking (最大許容バンク)
このパラメータには、ナビゲーション・ルーチンからバンクの出力を制限します。 デフォルトでは ナビゲーションルーチンによって誘導することができる最大バンクは30度(1deg = 100)です。
テストや開発では暴走を避けるために、それを減らすことができます。
#define NAV_BANK_MAX 3000

  PID制御
他の多くの飛行特性のように、ポジションホールドとRTHは、PID制御回路によって制御されます。

   Position Hold
位置誤差はPIコントローラに供給されるX(経度)とY(緯度)をセンチメートル単位で計算されます。 コントローラの第一段階は、XY位置誤差を取得し、マルチコプターが正しい場所に到達するにどのくらいの速さか判定します。

   PI Controler ― Poshold
パラメータ:POSHOL_Pは、デフォルトでは1mエラーで0.4または30cm/ sです。 所望の速度は150cm/秒を最大出力します。 これはマルチコプターのピッチを制限するものではありません、レートコントローラは その位置に近づくのに、この速度を維持するようにします。
パラメータ:POSHOLD_Iはターゲットから押し戻す風を克服するために使用されます。
数値が高いほど、より速くマルチコプターが補正されます。 数が高すぎる場合、振動やオーバーシュートが発生します。

   PID Poshold Rate Control
今、私たちは、所望のレートを持ってます、移動速度を与えるマルチコプターのピッチとロールを変更する必要があります 。
パラメータ:POSHOLD_RATE_Pは比例応答です。 あなたのマルチコプターの最適な設定はモーターの推力と重量に依存します。 マルチコプターがターゲットをオーバー・シュートする場合、値を下げなさい。

パラメータ:POSHOLD_RATE_Iは、デフォルトでは0に設定されています。マルチコプターのスピードを厳密なコントロールで維持するために、この値を使用します。マルチコプターが必要な速度を達成していない場合、この項目は、マルチコプターの傾斜を増減します。

パラメータ:POSHOLD_RATE_Dが減衰部分です。 値が高すぎる場合は、 ピッチやロールの小さな振動が現れます。 一度、POSHOLD_RATE_P値を0から初めて ゆっくりとダイヤルを増加してください。 振動が無くなるのがわかるでしょう。

   RTHとナビゲーション
ナビゲーション(RTH)は唯一のPID制御を有し、所望の速度はターゲットまでの距離から直接から計算され、定義されている速度で制限されます。 NAV_P、NAV_IとNAV_D パラメータはPOSHOLD_RATEと同様の機能を有する。

 飛行のための準備
  EEPROMのクリア

これは必要なステップではないが、一部の人々がコードをアップロードした後、奇妙な問題に遭遇した。 これらの問題の根本的な原因は、破損しているEEPROMの内容だった。 このような問題を回避するために、 最初に新しいコードをアップロードする前にEEPROMの内容を消去することをお勧めします。
Arduino IDEを起動し、File->Examples->EEPROM->eeprom_clear を選択、 スケッチをアップロードして待つ。 ステータスLEDがオンで終了です。 今、あなたは新しいコードをコンパイルしてアップロードできます。

  Compiling the code (コードのコンパイル)  開発時の処置なので現在は不要です
Arduino IDEでコンパイルされたコードを取得するために必要ないくつかの追加のステップがあります。 GPS 機能はPIおよびPIDコントローラの2つのライブラリーを使用しています。 これらのライブラリーはArduino-PID-libsフォルダにあり、Arduinoのフォルダ内のライブラリー・フォルダにコピーする必要があります。
i2c_gpsを使用することを計画した場合、追加のステップが必要になります。Arduinoの I2C通信ライブラリーはパッチを必要とします。 Arduino-twi-lib-patchからtwi.cとtwi.hを取って libraries\wire\utilities フォルダにコピーします。


 最初のテストとチューニング
  Pre flight tests (飛行前試験)

GPS機能をテストする前にマルチコプターがレベルモードで完璧に働きMAGセンサーが正確なことを確認してください 。MAGセンサーはモーター動力線に影響されるべきではない。 必要なら動力線からMAGセンサーを移動します。 固定して新しいマルチコプターの地上試験を行います。
スロットルを開き、GUIのMAGグラフを確認し、スロットルを上げたとき変化しないこと 。
最初のGPSのフライトでは、HEADFREEモードを使用することをお勧めします。
オリエンテーションが失われた時や何かがうまくいかない時に。 (開発中HEADFREEモードのおかげで、私は連続回転する私のマルチコプターをホームに持って来ることができました。)
GPS機能については、良好なGPS受信と強固なGPSロックが必要になります。 GPS 受信機は許容精度のために少なくとも5つの衛星を見っけなければならない。 GPSがロックを取得したことを示している2つのビジュアル・インジケータがあります。
マルチコプターがdisarmでGPSがロックされた時、フライトコントローラのステータスLEDが点滅し始めます。
I2C-GPSを使用する場合は、I2C-ボード上のLEDの状態を見ることができます。
(これはNavigatronの青色のLEDです )
*起動時に3回の短いフラッシュ
*GPSがデーターを送信しているがまだno position lockの場合は毎秒一回点滅
* GPSの2D位置が利用可能であれば、2回速く点滅、その後1秒off、
* GPSの3D位置が利用可能であれば、3回速く点滅、その後1秒off、
*NEMAのsentenceを5秒以上取得していない場合、1秒間on1秒間off(ロングパルス) GPSとフライトコントローラが通信しているときGUIでヘディング・インジケーターの周りの灰色ドーナツが点滅します。
マルチコプターがarmでGPSがロック(5個以上のサテライト)されたらGUIの posholdとRTHボックスで色が変わります。

  最初のテスト・Poshold(ポジションホールド)
GPSロックになり、マルチコプターがarmされたときホームポジションが設定されます。 バッテリーを繋ぎGPSロックを待ってホームポジションに飛ばします。(私は少なくとも5~10メートルの距離をお勧めします) 着陸させ、disarmし再びarmします。 これはホームポジションを設定します。 マルチコプターはレベルモードで十分に調整されていなければなりません。
離陸しPosHoldを試してみてください。 アクティブにするとき最小限の水平速度があればベストです。 PosHoldにしたときマルチコプターが動いていたなら、安定する前に2度揺れを経験するでしょう
poshold_rate Dは一度に0.001~0.002増やしてみることができます。 もし ホールドが十分でなければP値を増やすことができます、一度に0.01~0.02です。 もしマルチコプターがスイングしたり円を描くならそれを減らか、またはDを増やします。

  PosholdがOKならRTHを試すことができます。
ホーム・ポジションからいくらかの距離を飛ばし、最初にposholdをアクティブにして数秒間マルチコプターを安定さた後、RTHをアクティブにします。デフォルトのテールコントロールの設定でマルチコプターは ホームポイントに向けて回転し、アプローチを開始します。 到着するとposholdに切り替わり、アームしたときと同じ方向にヘディングを回転させます。 テールコントロールは magHoldが有効になっている場合にのみ機能します。

 追加情報
POSHOLD とPOSHOLD_RATEの役割を理解し助けることができる、優れたPIDチューニングシミュレータがあります。(http://diydrones.com/profiles/blogs/ac2-loiter-tuner-sim)
Arducopter設定コードの天才、DIYDronesのJason Shortによって作られています。 シミュレータは、現在のコードを使用し、同じアルゴリズムを使用している。 あなたはシミュレータから値を取ったり、MultiWiiにそれらを入力することは出来ませんが、異なる設定を試したり、値が何を行うかを学ぶことが出来ます。


BACK ・ NEXT



メインページに戻る