経緯
2020年にPX4でラジコン飛行機の自動飛行に成功した時に、将来の希望として自動曲技飛行機能の開発を夢見ました。私にはプログラム知識が無いので本HPで同調者を募ったのですが、誰も現れず諦めていました。その後、もう一つの自動飛行ファームウエアであるArduPilotの飛行機バージョンであるArduPlaneに背面飛行やグライダーの自動ソアリング等の多彩な機能があることを発見し挑戦してみました。それでも当時は自動曲技飛行の機能も開発情報も無く、一通り全機能を確認した後は暫く自動飛行から遠のいていました。
2023年の初め、久し振りにArduPlaneのマニュアルを眺めていると飛行機能(Flight Features)の中に何と"Automated Aerobatics"のタイトルを見つけました。早速そこを開いてみると"Scripted Aerobatics"という項目がたてられていてArduPlane 4.2以降で利用可能と記されていました。当時の最新版は4.3です。当初Scriptedの意味が判らなかったのですが、読み進めるとLUA Scriptという言語で書かれた曲技飛行のプログラムをFCU(フライトコントローラー)のSDカードに読み込ませておくと、飛行中に送信機のS/W操作かミッション飛行中の一つのミッションとしてそのプログラムを起動して曲技飛行が行える仕組みのようです。
更に、ArduPlaneのマニュアルの"Upcoming Features"を見ると、ファームウエア4.4からTrajectory Precise Plane Aerobatics LUA scriptと言う機能が追加されるようです。これは演技のフライトパスを決めてそれを忠実に辿る正確な曲技飛行を実行するためのLUA Scriptのようです。中身を覗いてみると、フィギャ8、ループ、インメルマン、ローリングサークル、キューバン8、スプリットS…等々の演技項目が出てきます。これらの演技を単独で行うことは勿論、組み合わせてF3Aのような演技も可能なようです。こんな魅力的な絵が乗っていました。
ファームウエアの更新頻度を見ると4.4は2023年中にリリースされるものと思われました。そこで俄然この新機能に挑戦してみたくなった次第です。しかし、そもそもLUA Scriptなるものがどのようなものなのか、それをFCUのSDカードにどのようにしてインストールするのか、更にいきなり実機で試験する前にMission PlannerでSITL(Software In The Loop)シミュレーションをして確認するように促されていますが、私はMission Plannerを殆ど使用していないので、その使い方から調査しなければなりません。そんな訳で先は遠いですが一歩ずつ進めていこうと思い同年2月から挑戦を開始しました。途中諸々の要因で何度か中断しましたが、本年9月初めに日本無線航空機協会の規定演技であるスポーツマンクラスの演技を離陸と着陸を含めて完全自動で飛行させることに成功しました。本小論でその過程を紹介して同好の志の参考にさせて頂きます。
スクリプトとは
IT分野でスクリプトというのは、
「ソースプログラムを即座に実行できるプログラムのことで、通常のプログラムのように機械語へコンパイルする工程を取る必要が無く、それを自動的に行ってくれるのでプログラム作成後即座に実行できるもの」
のようです。色々なスクリプト言語があるようで、JavaScriptやPythonなどがその範疇に入るようです。今回ArduPlaneが採用したスクリプト言語LUAというのもその内の一つです。また、
「多くのスクリプトは何らかのホストプログラムの上で実行され、そのソフトが持つ機能を呼び出して作業を自動化したり機能を拡張するために用いられる」
ようで、LUAスクリプトはC言語のホストプログラムに組み込まれることを目的にブラジルで開発されたもののようです。高速動作、高い移植性、容易な組込が特徴のようで、正にC++で記述されたArduPlaneの機能拡張に適したものと思われます。
Scripted Aerobaticsを行うに必要な条件
LUAスクリプトで自動曲技を行うには次の条件があります。
LUAスクリプトで自動曲技を行うための条件
- FCU(フライトコントローラ)のCPUは高速なSTM32F7またはH7で、2MBのフラッシュメモリーを持っていること
- FCUに載せるファームウエアはArduPlaneは4.3以降であること
- 機体は曲技を行える運動性を備えたものであること
私はその時点で3の条件を満たすスタント機やアクロ機を持っていませんでしたが、まずは手持ちの機材で手っ取り早く実験することを優先して、自動操縦実験に用いたPanther(図2)を用いることにしました。PantherにはDurandal FCUが搭載してあり1&2の条件を満たします。Pantherは翼幅が大きく軽量でユッタリ飛行系の機体で曲技向きではありませんが、それでも宙返りやロール程度は可能なのでまずこれで実験して、上手くできるようになったら専用の機体を考えることにした訳です。
ファームウエア4.3で実行できるスクリプト
ファームウエア4.3で実行できる曲技は角速度を指定したレート制御の演技で、次のものがあります。
ID | Name | Arg1 | Arg2 | Turnaround |
---|---|---|---|---|
1 | Roll(s) | rollrate(dps) | num rolls | No |
2 | Loop(s)/TurnAround | pitchrate(dps) | num loops or turnaround(0) | if num=0 |
3 | Rolling Circle | yawrate(dps) | rollrate(dps) | No |
4 | KnifeEdge | roll angle(deg) | length(sec) | No |
5 | Pause | length(sec) | na | No |
6 | KnifeEdge Circle | yawrate(dps) | na | No |
7 | 4 point roll | rollrate(dps) | pause in sec at each point | No |
8 | Split-S | pitchrate(dps) | rollrate(dps) | Yes |
これらの演技を記述したスクリプトはGitHubの、https://github.com/ArduPilot/ardupilot/tree/master/libraries/AP_Scripting/applets/Aerobatics/FixedWing/RateBasedにsports.aerobatics.luaと名付けられて保存されています。
これらの演技は後で説明するようにIDナンバーとそれに伴う引数(Argument)を指定することで使用します。レート指示の演技ですのでロールやピッチの角速度が引数になっています。尚、表1はファームウエア4.4がリリース済みの現状でのレート指示演技項目一覧ですが、私が試験した4.4がリリースされる前の時点では、ハーフキューバンエイト等の他の演技も含まれていました。
スクリプトの使用方法
スクリプトsports.aerobatics.luaの使用は次の手順で行います。
FCUのSDカードにスクリプトを格納するフォルダーを設けてスクリプトを格納する
まず最初にすることはスクリプトをFCUのSDカードに読み込む場所を確保して、そこにスクリプトをGitHubからコピーすることです。この作業はSDカードをFCUから抜きだしてPCにセットしておいた方がやり易いです。SDカードの「APM」フォルダーにscripts名のフォルダーを作ってから、そこにGitHubからsport_aerobatics.luaをダウンロードして、ファイル名称をsport_aerobatics.luaとして保存します。ファイル名称がsport_aerobatics.txtとなっていないことに注意が必要です。
FCUがスクリプトを扱えるようにする
スクリプトをSDカードに格納しただけでは未だそれを利用できません。利用するにはFCUに格納されたファームウエアのパラメタを設定する必要があります。それはFCUをMissionPlannerに繋いで「CONFIG」画面でFull Parameter Listを表示して次のようにします。
SCR_ENABLE = 1
SCR_HEAP_SIZE = 300000
SCR_VMI_I_COUNT = 200000
スクリプトの実行方法
SDカード上のスクリプトを実行するには次の2通りの方法があります。
SDカード上のスクリプトを実行する方法
- ラジコン送信機のS/W操作で実行する
- ミッションフライトのミッションに組み込む
しかし詳しく調べてみると前者は送信機の3ポジション式トグルS/Wを2つ必要とします。私の送信機(FUTABA 10J)はそれが2つありますが、一つはフライトモード切替用に使用済で空きは一つしかありません。それで送信機S/Wで実行させる方法は諦めました。
スクリプトをミッションの中に組み込む具体的方法
スクリプトを起動させるミッションを作るには、MissionPlannerのフライト・プラン画面で2つのwaypointの間にもうひとつのWaypointを設けて、その機能を選択する小窓を開けてSCRIPT_TIMEを選択します。そしてその右側にあるcommand欄に表1の実施したい演技のID番号を記入し、arg1からarg4には対応する引数の値を記入します。
下の例は右中央のホームポジション(H)から上向きに離陸してwp1から順に反時計回りに回り、wp3通過直後に20m半径の正ループを一回行ってからwp7で着陸するものです。
このミッションをAutoモードで実行すれば宙返りを行う筈です。
機体側のチューニング
自動曲技を可能にするには機体側のチューニングも必要です。激しい運動に対応するためにArduPlaneの次のパラメタをあらかじめ変更しておきます。
SCHED_LOOP_RATE=200; これは制御計算のサイクルで通常の50Hzから200Hzに上げます。
ONESHOT_MASKをセット; これはデジタルサーボの動きを速めるもののようです。(詳細不明)
INS_GYRO_FILTER=40Hz; ジャイロのフィルターのカットオフ周波数で通常の20Hzの倍に上げます。
更に、適切なナイフエッジ飛行ができるようにAEROM_KE_ANGLEを5~15degの範囲で設定します。
機体3軸周りの最大角速度(レート)能力の確認とパラメタ設定
曲技飛行中の機体3軸周りの最大角速度を指定するパラメタである、ACRO_PITCH_RATE、ACRO_ROLL_RATE、ACRO_YAW_RATEにその機体の最大角速度能力を超えた値をセットする過ちを避けるために、マニュアルモードで飛行して送信機のスティックを最大に倒して各軸の最大角速度を測定します。そしてそれらの値を上回らない範囲で上記パラメタの値をセットします。下の図はその例です。
ピッチ、ロール、ヨーそれぞれの値が360、180、90deg/sあれば曲技には十分とのことですが、図2に示した実験機は翼幅の長いゆったり飛行系の機体なので、試験の結果、最大角速度はピッチ=91deg/s、ロール=115deg/s、ヨー=143deg/sでした。そこでそれぞれの軸に関するパラメタを全て90deg/sとしました。
オートチューニングでパラメタをチューニング
最後にオートチューニング機能を使って各軸周りの制御パラメタをチューニングします。通常のチューニングとは次が異なります。
オートチューニング時のポイント
- ヨー軸のチューニングもします。通常のチューニングはピッチ軸とロール軸だけでしたが、曲技用にはヨー軸が追加されます。その為に、YAW_RATE_ENABLE=1にセットします。
- AUTOTUNE_LEVEL=8にセットして激しい運動に適したチューニングにします。
図2の実験機は既にAUTOTUNE_LEVEL=7で通常のチューニングを実施済ですが、改めて自動曲技用にチューニングを行った結果図5、6、7のデータが得られました。それぞれピッチ、ロール、ヨー軸のP、Dゲインの収束状況です。
赤線がPゲイン、緑線がDゲインです。青線は不安定現象の判別に使われるもので、ゲインを上げ過ぎると不安定現象が起こって青線が急激に落ち込みます。するとシステムは自動的にゲインを1/3に落として十分な安定性を確保します。
得られたゲインを以前のレベル7と比較したものが下表です。大分ゲインが上がっていることが判ります。
軸 | Pゲイン | Iゲイン | Dゲイン |
---|---|---|---|
ピッチ(レベル7) | 0.137 | 0.040 | 0.00000 |
ピッチ(レベル8) | 0.195 | 0.563 | 0.00748 |
ロール(レベル7) | 0.103 | 0.040 | 0.00000 |
ロール(レベル8) | 0.111 | 0.111 | 0.00576 |
ヨー(レベル8) | 0.114 | 0.454 | 0.00973 |
P&Dゲインの最終調整
マニュアルではP&Dゲインの最終調整としてTighteningが奨励されています。それは上に述べたようにそれぞれのゲインを不安定が発生する時の値の1/3に落としたのは安全側に過ぎ、その為に機体の運動性を犠牲にしているとして、上に求まった値を1.5~2.0倍して飛行試験で不具合が無いか否かを確認することを奨励しています。
しかし、実験機はレベル8で得られたゲインで飛行するとこれまでのレベル7よりかなり敏感なフライト特性になったので、その性格から考えてこの状態で良しとすることにしました。
初めての自動曲技飛行
以上で全ての準備作業が終わったのでいよいよ飛行試験に移行しました。初めての自動曲技飛行は実験機の特性を考えて次の3フライトとして全て成功しました。
初自動曲技飛行の演目
- 宙返り
- ハーフキューバンエイト
- 自動ロール
初めてのことなので安全を取って高度100mで行い、宙返りもロールもそれぞれ1旋転に抑えました。その様子をいくつか紹介します。
これはハーフキューバンエイトを行った時の映像です。
地上からカメラで追うのはかなり難しく時々見失っていますが、曲技成功時の興奮が伝ってきます
下の動画はこのフライトで機体のSDカードに記録されたフライトログを再現したものです。飛行軌跡が判ります。上部のタイムヒストリーは速度で、オレンジ=対気、ブルー=対地速度です。
だいぶ崩れていますがそれらしい軌跡を描いています。非常に激しい速度変化が見られます。
次は宙返りを行った時のフライトログを再現したものです。
宙返りはピッチ角速度を70deg/sと指定しました。指定対気速度は20m/sですが宙返り中は大きく速度が変動し、最低で10.49m/s、最大で28.54m/sとなっています。搭載モーターとLiPoの能力限界とTECS制御のチューニング不足が原因と思われます。また真円ではなく捩れた上に下に大きく膨らんでしまいました。レート制御の限界です。
経路指定の正確な曲技(Ttrajectory Precise Plane Aerobatics LUA script)
このようにファームウエア4.3を使って自動曲技の使い方を習得しているうちに、2023年8月に待望の4.4.0がリースされました。4.4.0ではTrajectory Precise Aerobatics(経路指定の正確な曲技)と称して、これまでの曲技より正確な演技が行えます。
例えば宙返りでは、上に示したようにこれまでは角速度を指定したオープンループ制御の為に、演技中のパワーや速度変化、風の影響等で、真円にならず崩れた円になってしまいました。これに対して4.4.0からは宙返りの円の半径を指定して空中に真円経路を設定します。機体はこの真円経路(trajectory)を辿るようにクローズドループ制御されるのではるかに正確な演技が期待できます。
実行できる演技(trick)を表3に示します。これらはplane.aerobatics.luaとして、https://github.com/ArduPilot/ardupilot/blob/master/libraries/AP_Scripting/applets/Aerobatics/FixedWing/plane_aerobatics.luaに在ります。それをダウンロードしてFCUのSDカードのscriptsフォルダーに格納するのは4.3と同じです。
ID | Name | Arg1 | Arg2 | Arg3 | Arg4 | Turnaround |
---|---|---|---|---|---|---|
1 | Figure Eight | radius | bank angle | No | ||
2 | Loop | radius | bank angle | num loops | No | |
3 | Horizontal Rectangle | length | width | radius | bank angle | No |
4 | Climbing Circle | radius | height | bank angle | No | |
5 | vertical Box | length | height | radius | No | |
6 | Immelmann (FastRoll) | radius | Yes | |||
7 | Straight Roll | length | num rolls | No | ||
8 | Rolling Circle | radius | num rolls | No | ||
9 | Half Cuban Eight | radius | Yes | |||
10 | Half Reverse Cuban Eight | radius | Yes | |||
11 | Cuban Eight | radius | No | |||
12 | Humpty Bump | radius | height | Yes | ||
13 | Straight Flight | length | bank angle | No | ||
14 | Scale Figure Eight | radius | bank angle | No | ||
15 | Immelmann Turn | radius | Yes | |||
16 | Split-S | radius | Yes | |||
17 | Upline-45 | radius | height gain | No | ||
18 | Downline-45 | radius | height loss | No | ||
19 | Stall Turn(experimental) | radius | height | direction | Yes | |
20 | Procedure Turn | radius | bank angle | step-out | Yes | |
23 | Half Climbing Circle | radius | height | bank angle | Yes | |
25 | Laydown Humpty | radius | height | Yes | ||
26 | Barrel Roll | radius | length | num spirals | No | |
27 | Straight Hold | length | bank angle | No | ||
28 | Partial Circle | radius | bank angle | arc angle | No | |
31 | Multi Point Roll | length | num points | hold frac | pts to do | No |
32 | Side Step | width | length | No |
使い方も表1と同じです。但し引数がレートから空中に描く飛行航路の形を指定するものに替わっています。尚、v4.4.0からはスケジュール機能が追加されて、複数の異なる演技を繋げた連続演技も可能になりました。
新たな機体とFCUの準備
これ迄用いてきた機体ではその飛行特性上、表3にある全ての演技を行うことは無理です。そこでファームウエア4.4に合わせて曲技専門機とそれに搭載するFCUを新たに準備しました。
機体は小型の3Dプリント製のEclipson 3D(翼幅1.2m、重量1.4kg)と、中型のバルサ機Sbach(翼幅1.4m、重量2.4kg)です。
FCUはMATEK H743-WLITEです。大きさは44×29×14.5で重さは22gと小型です。2層構造で電源モジュール、BEC(3.3V,/9V/12V/5V,6V,7.2Vajustable)、OSDも内蔵です。FCUのCPUはSTM32H743VIH6(480MHz)で512KB RAM、2MB Flashと強力です。センサーはICM42688-P IMUとDPS310 大気圧センサーを備えています。これに同じMATEK製のM8Q-5883GPS/コンパスとXBEEを繋げました。
経路指定の正確な演技の確認
Sbachによる連続2回宙返りと垂直矩形宙返り(Vertical Box)
早速、SbachとMATEK H743-WLITEの組合せでv4.4.0のファームウエアを使った連続2回宙返りと垂直矩形宙返りを実行しました。これが試験で得られたログデータを使って飛行軌跡を3D再現したものです。
飛行はFBWAモードで離陸後、空中でAutoモードに切り替えて自律周回飛行をさせます。最初に目前に来た時に連続2回宙返り、次に目前に来た時に垂直矩形宙返りを行うミッションを与えました。飛行軌跡に見るように、連続2回宙返りは綺麗な真円を同一経路に繰り返して描いています。垂直矩形宙返りも略満足の行く出来栄えです。この時の飛行を地上から撮影したものがこれです。
ナイフエッジとスケールフィギャエイト
これは同じ機体でナイフエッジとスケールフィギャエイトを行った時の動画です。最初にナイフエッジを、2回目にフィギャエイトを実施しています。
その後、表3の演技を一つづつ実行してその様子を確認しました。
曲技飛行を含む自動離着陸
一通り個々の自動曲技の試験を済ませ、次のステップとして曲技を含む自動離着陸を行って成功しました。これはこれまでのMissionの最初をTake Offに、最後をLandingに書き換えることで実行できます。滑走路に機体を置いて送信機のスィッチをAutoに入れるだけで、自動的にプロペラが回りだして滑走離陸してから指定コースを辿る飛行をして、その途中で2回宙返りと360度ロールの曲技飛行を行い、終わると自動で出発点に戻って着陸するという難易度の高い自動飛行です。その飛行のフライトログを再現したアニメーションがこれです。機体は小型のEclipson 3Dです。
連続宙返りは綺麗な真円を描いていますが、360度ロールは軸が若干畝っています。チューニング不足が原因なのか、それともArduPlaneのソフトの限界なのか、はたまた機体の飛行特性の問題なのか現状の私には判断する知識が不足しています。
スケジュール機能の確認
自動曲技の仕上げとして個々の演技を繋ぎ合わせた一連の演技を行うスケジュール機能を確認しました。幾つかのスケジュールが既にGitHub上に登録されていてそれをコピーすれことも可能ですが、自分の思い通りの演技をさせることを目論み、日本無線航空協会の規定演技であるスポーツマンクラスの演技のスケジュールスクリプトを自作することにしました。
演技スケジュールは次の順番です。
演技スケジュール
- 離陸(テイクオフ)
- 四角宙返り(スクウェア・ループ)
- 1/2 リバースキューバンエイト
- 2回ロール
- ストール・ターン
- 2回正宙返り(ツー・インサイド・ループス)
- 1/2 スクエア ループ ウィズ 1/2 ロール
- 2回逆宙返り(ツー・アウトサイド・ループス)
- スプリットS
- コブラロール ウィズ 1/2ロールズ
- 着陸(ランディング)
大半の演技のスクリプトはplane_aerobatics.luaに含まれているのでそれを呼び出せば済むのですが、7と10は用意されていません。それで既存の連続曲技のプログラムを参照しながら次のように作りました。
スポーツマンクラスのLUAスクリプト
name: Sports Man
function half_square_loop(total_length, total_width, r, bank_angle)
local l = total_length – 2*r
local w = total_width – 2*r
return make_paths(“half_square_loop”, {
{ path_straight(0.5*l), roll_angle_entry(bank_angle) },
{ path_vertical_arc(r, 90), roll_angle(0) },
{ path_straight(w), roll_angle(0) },
{ path_vertical_arc(r, 90), roll_angle(0) },
{ path_straight(0.5*l), roll_angle_exit(-bank_angle) },
})
end
function cobraroll_with_halfrolls(r, arg2, arg3, arg4)
return make_paths(“cobraroll_with_halfrolls”, {
{ path_vertical_arc(r, 45), roll_angle(0) },
{ path_straight(r), roll_angle(0) },
{ path_straight(r), roll_angle(180) },
{ path_straight(r), roll_angle(0) },
{ path_vertical_arc(-r, 90), roll_angle(0) },
{ path_straight(r), roll_angle(0) },
{ path_straight(r), roll_angle(180) },
{ path_straight(r), roll_angle(0) },
{ path_vertical_arc(r, 45), roll_angle(0) },
})
end
# Start tricks
message: VerticalBox
vertical_aerobatic_box 80 80 20
align_box 1
message: HalfReverseCubanEight
half_reverse_cuban_eight 25
align_center
message: DobleRoll
straight_roll 80 2
align_box 1
message: StallTurn
stall_turn 30 60 180 5
align_center
message: DoubleLoop
loop 40 0 2
align_box 1
message: HalfSquareLoopWithHalfRoll
half_square_loop 80 80 20
straight_roll 10 0.5
align_center
message: DoubleOutsideLoops
loop -40 0 2
align_box 1
message: SplitS
split_s 40
message: CobraRollwithHalfRolls
straight_flight 70
cobraroll_with_halfrolls 25
straight_flight 70
スケジュールスクリプトの格納と呼び出し方
作成したスケジュールスクリプトはtrickxx.txtと名付けてSDカードのscriptsフォルダーに格納します。xxは任意の番号ですが、表3にある既定演技のID番号とダブらないものにします。私はスポーツマンクラスのスケジュールはtrick99.txtとしました。
呼び出し方は既定演技と同じで、Mission PlanのSCRIPT_TIMEのcommand欄にxxに相当する番号を記入すればOKです。
スポーツマンクラスの演技を行うミッションプラン
このスポーツマンクラスの演技を完全自動で行うミッションプランを作りました。
滑走路上のホームポジションから風上の画面下向きに向かって自動離陸してWP1で90度左に旋回し、WP2で再度左旋回して北向きに進みます。WP3で180度旋回して南東に向かい、ホームポジションの前方のWP4に来たところで図12の2番演技が開始されます。後は図12と同じ演技を行い、全ての演技が終了したところで自動着陸させる目論見です。演技を行うルートが滑走路と並行ではなく斜めになっているのは図中に見えるビニールハウスを避けるためです。
SITLシミュレーションでの確認
作成したスクリプトに間違いがある可能性があります。いきなり実機でこの機能を確認することは無謀で墜落させる危険があります。そこでマニュアルでは実際の飛行試験を行う前にSITL(Software In The Loop)シミュレーションで、上に作ったスクリプトを確認することが推奨されています。SITLシミュレーションとは、作ったスクリプトを含むMissionとFCUに搭載されているファームウエアをPC上にコピーして、飛行機の運動計算(Flight Dynamics)ソフトと連携して飛行をシミュレーションすることです。
MissionPlannerではJSBSimと言うフライトダイナミクスソフトとリンクしてSITLシミュレーションを行う機能がありますのでそれを用いて確認できます。その手順は次の通りです。
SITLシミュレーション実行の流れ
- FCUのSDカードに格納したplane/aerobatics.luaとtrickxx.txtと同じものをMission Plannerを搭載したPCに格納します。格納先はPCのフォルダーをMissin Planner → sitl → plane-3d → scriptsの順に開いて出てきたscriptsフォルダーです。
-
次はシミュレーションの実行です。
- MissionPlannerを立ち上げる。
- 上部の右から2つ目の「シミュレーション」メニューを選ぶ。
- 下のAdvanced users only内にあるModelの▼をクリックして開けて、最下部にあるplane-3dを選ぶ。
- 更にその右にあるWipeにチェックマークをいれる。これを入れないと機体のパラメタが更新されない。
- Please select a firmware to runにあるPlaneをクリックする。
- ロードするファームウエアのバージョンを選択するメニューが表示されるのでstable若しくはLatest(Dev)を選ぶ。
- 次いで「フライト・プラン」画面に移って作成済のミッションを呼び出してplane-3dにロードする。
- 次はシミュレーションの実施です。「フライト・データ」画面に移って、HUD画面の下にある「アクション」ボタンを押し → 現れた左上のコマンド選択画面で「Scripting_cmd_stop_and_restart」を選択 → 「アクション実行」を押します。するとHUD画面にScripting stopped → Scripting restarted → Loaded plane_aerobatics.luaと順に表示されて、スクリプトがロードされたことが判ります。
- 後は「Arm/Disarm」を押してArmedにした上で、上から3番目のフライトモード選択画面で「Auto」を選べばシミュレーションが始まります。
シミュレーションの結果です。Mission Planner上でのアニメーション表示は平面図だけで機体の姿勢が3次元的に判らないので、シミュレーションのログデータをフライトプロッターと言うソフトで3次元表示しました。
どうやらバグは無いようです。
飛行試験
SITLシミュレーションでバグが無さそうなことが確認できたので実際の飛行を行いました。
左下のアニメはフライトログデータを再現したものです。アニメ映像の時間送りの調整ができないので同期させるのが難しく、離陸直後は少しズレが目立ちますが、途中から略同期できています。ロールの軸がぶれていること、ストールターンの上昇経路と下降経路がズレていること等の不満がありますが、略満足の行く演技が実行できました。これでArduPilotの自動曲技の概要が全て確認できました。
おわりに
これで長年の夢でした自動曲技が実現しました。操縦技術の未熟な私でも曲技飛行が楽しめます。この拙い記事を参考に同好の志が増えることを期待します。尚、本記事では細かい説明は省略しました。興味のある方は私のブログをご覧ください。