名前が示す通り、Arduinoでフライトコントローラーを実装したのをきっかけに始まったオープンソースのフライトコントローラーソフトウェアです。現在では、Arduino系ボードのサポートは終了してますが、名前はArduPilotのままです。
PX4 Native Stack上のアプリケーションとして実装されています。
ArduPilotの歴史: - http://ardupilot.org/copter/docs/common-history-of-ardupilot.html
フライトモード
ArudPilotはフライトモードがいろいろあり、それぞれ挙動が微妙に違います
Stabilize、Acro, Alt-Hold, Loiter以外のモードではArm出来ないようになっていて、通常はStabilizeモードでARMし、離陸します
その後、Loiterモードに切り替えるとGPSが拾えていればそこで停止しますが、スティック入力には反応します
完全に定点に留まり、スロットル以外には反応しなくなるPositionモードはAPMv3.2以降では廃止されました
Loiterモードは、なるべく現在位置に留まるように制御される為、他のモードよりも操作に対する「抵抗」を感じるモードです
チューニング画面からLoiter Speed (WPNAV_LOIT_SPEED) パラメーターを変更することで、よりキビキビとした動きにも出来ます
Loiter中の加速度はこのパラメーターで設定した値の1/2に制限されるので、完全手放しで静止させる目的場合以外は、AltHoldかStabilizeモードを使用します
v3.2以降であれば、LoiterよりもPosHoldモードのほうが、スティックへの反応がよいです
PHLD_BRAKE_ANGLEと、PHLD_BRAKE_RATEの値を上げれば、スティックを離してから停止するまでの制動距離を縮めることが可能です
Armingチェック
- ArduPilotは、ARM前の自己診断でコンパスの診断、キャリブレーション、オフセット、さらに複数コンパスが接続されている場合はユニット間の数値の誤差などをチェックし、問題があれば手動で自己診断を解除しない限りARMできないようになっています(GPSも同様)
- この時点でエラーがでるかどうかで、飛行中のセンサーの誤作動などはかなり防げますので、この設定は変更しないようにしましょう
- ただし、キャリブレーションが頻繁に必要なコンパスユニットもあります
Need 3D Fix
- GPS系のフライトモードでARMするためにはGPSの衛星捕捉数、HDOOPなどがパラメーターで設定した最低値以上である必要があります(デフォルト6以上)
- GeoFenceを有効にしていると、GPS関連のPre-ARMチェックをオフにしていても、GPS不要モードでも、EKF_GPS_TYPE = 3 (OpticalFlow)にしていても、ARMできません
GPS Horiz Error
- Copter 3.3のEKFでは、GPSの水平方向のエラーが5M以下でないと、Pre-Armチェックを全て外して、HDOPパラメーターを最大値にしてもARMできないというバグがあります
PixhawkのマルチカラーLEDとアラーム音のステータス一覧
- http://copter.ardupilot.com/wiki/common-autopilots/common-pixhawk-overview/common-leds-pixhawk/
http://copter.ardupilot.com/wiki/common-autopilots/common-pixhawk-overview/common-sounds-pixhawkpx4/
電源投入時に赤が点灯する場合は、ジャイロの初期化状態です
赤点灯と同時にアラーム音がする場合は、EKFのエラーかSDカード未装着です
どちらの場合も、Pre-ARMチェックを全て行っている限り、キャリブレーションと電源投入時の初期化が正常に完了していなければ、青点灯(GPSなし)、緑点灯(GPS補足)せず、エラー状態のままARMされることはありません
フェールセーフ
- 複数センサーがある場合、どれか一つが故障した場合でも他のセンサーの値と比較する事で、異常のあるユニットを検出して、飛行中にフェイルオーバー可能です(気圧センサーは通常1ユニットのみ)
- 入出力専用の独立したI/Oコ・プロセッサーがあるので、固定翼機や、フライバー付きのヘリコプター等の場合、メインCPUがフリーズしても手動で下す事ができます。
- 制御不能になった場合、APM(ArduPilot)には、場合によっては主制御用とは電源も独立したCPUからモニタリングを行い、一定の条件がそろった場合(一定時間反応がない等)に強制的にミッションを終了(意図的に墜落)する機能もあります。重量が増えるが、より安全に運用する事も可能です
設定
コンパス詳細設定
- Auto Declinationにチェックを入れておけば、GPSの情報から自動で設定してくれます。GPSなしの場合、インターネットへのアクセスがない場合、事前に別の場所で設定する場合等は、以下のサイトで調べてマニュアルで入力しておきます。
S.BUS Out
S.BUS outポートへ16CHすべてを出力する機能は長い間サポートされていませんでしたが、アップストリームのPX4Firmwareがサポートしたのをきっかけに、マスターに取り込まれました。AC3.4以降では16CH使えますが、AC3.3.3では8CHまでです。
# S.BUS出力をオン
BRD_SBUS_OUT = 1
PIDチューニング
- Auto Tuneを使って、大まかな値を絞り込んで、その後マニュアルで細かく追い込むと楽です。
- 初期設定値でまともに飛ばないのであれば、CH6にボリュームつまみをアサインする方法が安全です。
- すべて手動で設定する場合も、CH6にチューニングする値を割り当て、飛行しながら調整すると楽です。
基本チューニング
CH6チューニング
Mission PlannerかAPM Planner 2.0のAdvanced Tuning画面で、CH6にボリュームノブをアサインし、ピッチとロール軸のPIDを同時に調整します
- Extended Tuning画面のCH6 Optで、Rate Roll/Pitch kP(またはCH6_RATE_KP)を選びます
- Minを0.08、Maxを0.25程度に設定します(この範囲でほとんどの機体がカバーできるはずです)
- Lock Pitch and Roll Valuesにチェックを入れ、PitchとRollが同じ値になるようにします(シングルローターやGimbal搭載機などで、ピッチとロール軸で極端に回転モーメントに差がある場合は、個別に調整します)
- Stabilizedモードで飛ばしながら、揺れ始める手前の最大ゲインを探します
- Pを下げすぎるとスティックへの反応が鈍くなりますが、センサー/FCマウントで振動対策をしていれば揺れは収まるはずです
- 着陸後に調整済みの値を確認し、キリのいい数値に切り捨てして書き込みます
- CH6をオフにするのも忘れずに
- 横風などで振動を誘発されれないように、上限よりすこし下げた値がベストです
- 吹き下ろし、横風等、外部の影響を受けやすいようであればIを調整します
ヨー軸
- PitchとRollが決まっても、Yawがまだ揺れるようであればYawのPを下げる方向で調整します
- Stabilize Yaw PとRate Yaw Pのどちらが高すぎても揺れだします
- 逆にYawのPを下げ過ぎると、方角を保てなくなるのですぐにわかります
- ACRO_YAW_Pはヨー軸の回転速度を指定します(デフォルトの4.5だと一秒に200度回転)
AltHold
- Pitch, Roll, Yawが安定してから、AltHoldを調整します
- Altitude Hold Pをあげすぎると、スティックの上下に過敏に反応するようになります
- Throttle Rateは変更不要です
- Throttle Accelはデフォルトの半分ぐらい(P = 0.5、I = 1.0)まで下げても大丈夫です
- Stabilizeモードでホバリング時にスロットルが70パーセント以上の場合、AltHoldに移行するのは危険です
GPSモード
- AltHoldが決まってから、LoiterやPosHoldでの動作を確認します
- 上記すべての調整が終わったら、最後にWaypoint/Loiterモードでのスピード調整して完了です
- WPNAV_LOIT_SPEED = 最大速度(Loiter中の最大加速度はこの値の50%)
- WPNAV_LOIT_MAXA = 加速度(停止状態から最大速度になるまでにかかる時間)
- WPNAV_LOIT_MINA = 減速度(スティックをニュートラルに戻した時に機体が停止するまでの時間)
トラブルシューティング
PIDトラブルシューティング
ホバリング時に上下に揺れる
- AltHoldやGPSモードが不安定なのであれば、まずはPixhawk内部のバロメーターに気圧調整用のスポンジがちゃんと取り付けられているか、またPixhawk本体にダウンワッシュがかかっていないか、外気圧と同じ圧力を保つ為の通気孔は確保されているか(密閉していないか)確認します
- 上記に問題がないようであれば、WPNAV_LOIT_JERKと、WPNAV_ACCEL_Zを下げてみましょう
- それでもまだ上下に揺れるのであれば、WPNAV_LOIT_SPEED、WPNAV_LOIT_MAXA、WPNAV_LOIT_MINAをさげてみます
- MAXAは最大加速度、MINAはスティックを離した(センターに戻した)時にどれだけ急激にブレーキがかかるか(機体の最大傾き角)に影響します
- どちらもWPNAV_LOIT_SPEED x 0.5が最大加速度の上限なので、WPNAV_LOIT_SPEEDが低い場合はMAXA、MINAは無視されます
AltHoldにした瞬間に急激に上昇する
- センサーマウントの振動対策(隔離と減衰の両方)を行います
どのモードでもスロットルスティックに過敏に反応する
- Altitude Hold Pを下げます
機体がオーバーパワーで、AltHold時に上下に揺れる
- Throttle AccelのPとIを1:2の比率を保ったまま下げます
- この数値は絶対に上げる方向では調整しない
- デフォルトの半分(P = 0.5、I = 1.0)程度まで下げても大丈夫
Stabilize, AltHold時は安定しているのに、GPSモードだけが不安定
- 上下にだけ揺れる場合は、Pixhawk本体へのダウンワッシュ、バロメーターのスポンジ取り付け状況、Pixhawk内部への通気状況を確認します
- 上記に問題がなければ、WPNAV_ACCEL_Z(上下方向の加速度)を下げます
- Lotier時の動きがガクガクする場合は、WPNAV_LOIT_JERKを下げます
- Loiterモード時にすりこぎ症状が出る場合は、コンパスに問題がある可能性が高いです
- Compass Declinationを正しく設定(GPSがある場合は自動設定を使用)
- コンパスキャリブレーションをやりなおす(気温が変わったり、飛行場所を変更するときは、できる限りやり直したほうが良い)
- 電磁波の干渉をチェックし、特に大型機の場合や電源周りやモーターリード線とFCの距離が近い場合は、Compass Motキャリブレーションを行う
WPNAV_LOIT_JERKを下げてもGPSモードが落ち着かない
- WPNAV_LOIT_SPEED、WPNAV_LOIT_MAXA、WPNAV_LOIT_MINAを下げてみます
大型機で、Loiterモードのみ振動が発生する場合
- YAWが揺れる場合は、ATC_ACCEL_Y_MAXを下げます
- デフォルトの18000の場合、一秒に180度回転しますが、大型機ではヨー軸をそんなに早く回すことはできないので、9000や6000まで落とします
PIDチューニング参考資料
- http://ardupilot.org/copter/docs/tuning.html
- http://ardupilot.org/copter/docs/ac_rollpitchtuning.html#ac-rollpitchtuning
- http://ardupilot.org/copter/docs/altholdmode.html#altholdmode
- http://discuss.ardupilot.org/t/tuning-big-quad-loiter-mode-t-motor-u8-28-props/3841/3
Waypointトラブルシューティング
Waypoint時にYaw操作で高度が落ちる
- Auto以外のモードでYawを最大に振った時にも高度が落ちる場合は、Yawスピードが速すぎるのでATC_SLEW_YAWを下げます
モーターとESCのレスポンスが追いついていない
- ログでDesYawとYaw、RC Outを確認し、出力が振り切れていないか確認します
Waypoint上で進行方向を切り替える時のYawレートが速すぎる
1) WPNAV_RADIUSを広めにとる 2) Spline Waypointを使用する 3) Conditio-Yawを複数使用して、Waypointの間に徐々にノーズの方向を変える 4) WPNAV_ACCEL、WPNAV_ACCEL_Zを調整する
Waypoint参考資料
RC_OUT/AUXトラブルシューティング
- AUX出力に繋いだランディングギヤやその他のPWM機器が動かない場合は、RC_SPEEDを50Hzに下げる