Ardupilotの忘備録
目次
コンパスレスの記事
Ardupilotのコンパスレスに関する記事を少しまとめておきます。日本語訳にしてます。
Compass-lessの設定方法
https://ardupilot.org/plane/docs/common-compassless.html
GPSでYawを取得する方法
https://ardupilot.org/plane/docs/common-gps-for-yaw.html
Forumの関係記事類
https://discuss.ardupilot.org/t/compass-less-operation-gsf/75985
https://discuss.ardupilot.org/t/testing-compass-less-copter-gsf-gps-glitch-yaw-aligned-using-gps/73338
Ardupilot Github内
GSFのCode検索
GSF
https://github.com/ArduPilot/ardupilot/search?q=GSF
- libraries/AP_NavEKF/AP_NavEKF_Source.cpp
- libraries/AP_NavEKF3/derivation/main.py
- libraries/AP_NavEKF3/AP_NavEKF3_VehicleStatus.cpp
EK3_SRC1_YAW
https://github.com/ArduPilot/ardupilot/search?q=EK3_SRC1_YAW
https://github.com/ArduPilot/ardupilot/pull/17983
Dual GPS
https://github.com/ArduPilot/ardupilot/commit/9fc57e40b4ceb89b1b63efec95f16183651c591f
https://github.com/ArduPilot/ardupilot/commit/c7907bb8fb48ece135f1ab3f296f38a19b92c7a2
コンパスレス操作
飛行機はコンパスなしでの運用が長い間可能でした。ただし、最近の代替ヨーソースの追加により、マルチコプター、クアッドプレーン、およびローバーのコンパスなしの操作の可能性が開かれました。使用可能なメカニズムは次のとおりです。
- 離陸後にヨーをGPSに合わせる(飛行機のみ)
- GSF(Gaussian Sum Filter)は、単一のGPSの出力をIMUの動きと比較することによって方位を推定します
- GPS-for-Yawは、2つのUBloxF9GPSの位置を使用してヨーを計算します
- Intel RealSense T265は、起動時のヨーに関連するヨーを提供できます
ヨーをGPSに合わせる(飛行機のみ)
飛行機では、離陸後に安定したGPS方位を使用して、ヨーの/姿勢/速度/位置/方位推定フィルター(EKF)を調整します。これは通常、コンパスのない飛行機で離陸してから数秒後に発生します。ただし、このアプローチはVTOLナビゲーションには使用できません。これは、GPS速度や方位入力がない場合、離陸直後に正確である必要があるためです。
GSF
ArduPilot 4.1(およびそれ以降)は、ヨーソース(コンパスなど)が利用できない場合、または異常な場合に、IMUおよびGPS入力を使用して推定方位を計算するガウス和フィルター(GSF)をサポートします。
ノート1
これまでのテストでは、精度はかなり許容範囲内ですが、これはまだ実験的であると考えられており、コミュニティによるより多くの経験とテスト飛行が必要です。また、現在、QuadPlane VTOLテールシッターでは、機首がVTOL飛行で垂直に向けられているため、うまく機能しません。テールシッターにはコンパスが引き続き推奨されます。
ノート2
GSFは、GPSからの良好な速度レポートに依存しています。古い世代のGPSを使用しないでください。少なくとも、UBloxM8または同等のパフォーマンスのGPSを使用してください。また、飛行中は空のGPSビューが遮られていないことを確認してください。そうしないと、方位の推定が不十分になります。
設定
単純に、COMPASS_ENABLE = 0に設定します。通常のデフォルト値がEKFパラメータに使用されている場合、GSFへのフォールバックは自動的に行われます。
常にGSFを使用するようにEKF3を構成するには、EK3_SRC1_YAW = 8(GSF)を設定します。
運用
現在、コンパス(またはALL)のARMING_CHECKが有効になっていて、コンパスが有効になっていない場合、プレーンのみが作動します。CopterとQuadPlaneは、事前準備の失敗を引き起こします。武装するための3つの可能な方法は次のとおりです。
- コンパスのARMING_CHECKを無効にします(他のものは保持します!)。
- 地上局からの武装を強制します。
- 武装する前、ただしGPSロックを取得し、EKF原点を設定して「GPSを使用」した後、車両を持ち上げて直径数メートルの円を歩き回ります。これにより、GSFがヨーアライメントを取得できるようになり、「EKFヨーアライメントが完了しました」というメッセージが地上局に送信されます。
警告
最初の2つの方法のいずれかを使用する場合、VTOL位置制御モードでの車両の最初の動きは、最初は間違った方向にある可能性がありますが、GSFのヨーアライメントが取得されるとすぐに停止するはずです。非位置コントローラーモード(STABILIZEやQHOVERなど)でビークルを少し飛ばすか、未知の初期移動方向に対してビークルに十分なクリアランスを与えます。
その後、飛行とナビゲーションは受け入れられるはずです。
ヨーのGPS(別名移動ベースライン)
2つのUBloxF9GPSモジュールを使用してヨーを推定できるため、地面や車両のモーターやESCからの磁気干渉に悩まされる可能性のあるコンパスが不要になります。これは、GPSにRTK修正がない場合でも機能します。
動作することが知られているArduPilotパートナーのGPSには次のものがあります。
-
SwiftNavigationのPiksiMultiRTKGPS受信機<common-piksi-multi-rtk-receiver>SeptentrioAsteRx-mUAS RTK GPS <common-gps-septentrio>
ノート
この機能は、Copter 4.0.4(およびそれ以降)、Plane 4.0.6(およびそれ以降)、およびRover 4.1.0(およびそれ以降)で使用できます。Ublox F9pは、ファームウェアバージョン1.13以降を実行し、コンステレーションを構成する必要があります。U-BloxF9Pファームウェアアップデートを参照してください。
ハードウェアのセットアップ
- 2つのUbloxF9GPSは、車両に少なくとも30cm離して配置する必要があります(水平方向)
- 2番目のGPSは、オートパイロットのシリアル/テレムポートに接続する必要があります。これらの手順は、Serial4 / Telem4が使用されていることを前提としていますが、どのシリアルポートも機能するはずです。
- シリアルGPSモジュールは、UART1コネクタを介してArduPilotに接続するか、CANを介してDroneCANモジュールに接続するか、製造元の指示に従って相互接続する必要があります。
構成
- 2番目のGPSがシリアルポート4に接続されていると仮定すると、 SERIAL4_PROTOCOL = 5(「GPS」)
- 必要に応じて、GPS_TYPE = 17(「UBlox移動ベースラインベース」)または22(DroneCAN-MovingBaseline-Base)。
- GPS_TYPE2 = 18(「UBlox移動ベースラインローバー」)または23(DroneCAN-MovingBaseline-ローバー)、必要に応じて。
- GPSのGPS_POS1_X /Y/ZおよびGPS_POS2_X /Y / Zパラメーターを設定します(センサー位置オフセットはこちらを参照)
- GPS_AUTO_SWITCH = 1
- AHRS_EKF_TYPE = 3(EKF3を使用する場合)
- EK2_ENABLE = 0(EKF2を無効にするため)
- EK3_ENABLE = 1(EKF3を有効にするため)
4.0を使用している場合
- EK3_MAG_CAL = 5(「外部ヨーセンサーを使用する」)
4.1(またはそれ以降)を使用している場合
- EK3_MAG_CALはこの機能には使用されないため、デフォルト値のままにしておくことができます(プレーンの場合は「0」、コプターの場合は「3」、ローバーの場合は「2」)。
- EK3_SRC1_YAW = 2(「GPS」)または3(「コンパスフォールバック付きGPS」)
上記の構成は、2つのGPSモジュール間のRTCMv3データがフライトコントローラーボードを経由することを前提としています。代わりに、2つのGPSモジュールの2つのUART2コネクタの間にクロスオーバーUARTケーブルを取り付けることができます。これを行う場合は、 GPS_DRV_OPTIONS = 1に設定できます。これにより、u-blox GPSドライバーに、UART2を介してRTCMv2データを送信するように2つのGPSモジュールを構成するように指示します。
テスト
GPSの受信状態が良好な場所で、車両を少し離れたランドマークに向けてから、地上局の方向が一致していることを確認します。車両を回転させ、地上局の方位が正しく更新されることを確認します。
見出しが逆になっている場合は、GPS_POS_xxxパラメータが正しく設定されていない可能性があります。
2つのGPSモジュールがヨーが機能するのに十分な修正を取得するまでに時間がかかる場合があることに注意してください。ArduPilot GPSドライバーは、修正がいくつかの方法で十分であることを検証します。
- ローバーGPSモジュールが修正タイプ6(固定RTK)であること
- 報告された2つのモジュール間の距離は、GPS位置パラメーターによって指定された距離と20%以内で一致します。
- 報告された2つのGPSモジュールの高さが車両の姿勢と一致していることは、2つのGPSモジュール間の距離の20%以内です。
コメントを残していただけるとありがたいです