AR.Drone for AS3 で移動・上昇下降・回転までできるようになりました
AR.Drone ハックの一環として、AR.Drone を 他の言語は一切使わずに Flash (AS3) だけで飛ばせるようにする API を作ろうとしているのですが…
今日は前後左右への移動、上昇下降、水平回転と、AR.Drone の基本操作はある程度できるようになり、6畳の狭い部屋の中でもこんな感じで飛んでくれるようになりました。
そこで、この Drone の移動に関する実装なのですが、これも前回テイクオフとランディングまでを試した時と同様に、UDP ソケット経由で AR.Drone SDK Developer Guide に書いてあるコマンドを送信するだけです。
たとえば、移動の時はこんな感じ。
function moveAllDirection( dx:Number, dy:Number ):void { var sx:int = intOfFloat( dx ); var sy:int = intOfFloat( dy ); _command = "AT*PCMD=" + ( seq++ ) + ",1," + sx + "," + sy + ",0,0" + CR + "AT*REF=" + ( seq++ ) + ",290718208"; _isContinuance = true; }
ここで一つだけ注意したいのは、AR.Drone SDK Developer Guide にも書いてあるのですが、移動させたい距離のパラメータは 32 ビット浮動小数(float)をバイト配列化して、そのバイト配列から取り出した 32 ビット整数(int)をコマンドの文字列にくっつけて送信しないといけないということです。
上記のコードでいえば、intOfFloat 関数で float値(as なので Number)を int値に変換しています。
この値の変換はこんな感じで行います。
var buffer = new ByteArray(); function intOfFloat( n:Number ):int { buffer.clear(); buffer.writeFloat( n ); buffer.position = 0; return _buffer.readInt(); }
これさえ間違えなければ、あとはコマンドを送るだけで AR.Drone が操作できるようになります。
これで Drone を操作する部分はほぼできた感じなので、次は Drone から送信されてくる各種センサの情報取得に入りたいと思います。