AR.Drone for AS3 緊急停止モードからの復帰


AR.Drone for AS3 で、重要な機能であるにもかかわらず、これまでコマンドがわからずに実装していなかった機能を実装したのでちょっとメモ。

AR.Drone が飛ばせる状態(スタンバイ状態?)はローターの下のパイロットランプがグリーンで点灯している時なのですが、飛行中に墜落したり、起動中に持ち運ぶときにセンサの傾きが許容値を超えると赤点灯に変わって緊急停止モードとなり、そのままでは飛ばせなくなります。

Drone_LED

ちなみに、Drone から送信されてくるナビゲーションデータでも、この通常モード時(Control State = 131072)と緊急停止モード時(Control State = 0)は判定できます。

こうなったとき、純正のアプリではテイクオフボタンにタッチすると「状態復帰 → テイクオフ」と自動で緊急停止モードから復帰して飛んでくれるのですが、このやりかたがわからず、AR.Drone for AS3 では実装していなかったので…

Drone を持ち運ぶときに傾けすぎないように恐る恐る持ち歩いたり、墜落して緊急停止モードになってしまうと一度バッテリを抜いて再起動させたりしていました。
そして、Drone を再起動すると、WiFi のコネクトも切れるため、AR.Drone for AS3 を使用して自作したアプリケーションも再起動しないといけないという、とても面倒なことになってしまっていました。

これではさすがに使い物にならないので、いろいろググってみると…
ここ の下の方に書いてありました!

この wiki によると「AR.Drone に AT*REF コマンドを送る際、Bit 8 をたてた状態でコマンドを送ると、緊急モードと通常モードを入れ替えることができる」ということだったので、さっそく AR.Drone for AS3 にも下記の関数を実装して試してみたところ、無事自動復帰できるようになりました。

public function reset():void
{
	_command = "AT*REF=" + ( seq++ ) + ",290717952";
	_isLanding = true;
}

たったこれだけで緊急停止状態から復帰できるようになるとは、これまで墜落する度に Drone再起動を行って、WiFiの接続もやり直して、アプリを再起動させていた自分が、とてつもない間抜けに思えてきて…

そんな自分にうんざりしているところです。