AR.Drone に Flash から直接コマンドを送信して飛ばすことに成功しました
これまでの記事で AR.Drone を Prcessing のライブラリ ARDroneForP5 で飛ばしてみたり、ARDroneForP5 と Flash をソケット接続して Flash で Drone を飛ばしてみたりしてみましたが…
昨日 Twitter 上で、数名の Flash のエキスパートの方々にいろいろとご教授いただいたところ、「Flash から直接 AR.Drone へコマンドを送信しても飛ぶんじゃね?」ということになったので…
さっそく試してみました。
この「Flash から直接 AR.Drone へコマンドを送信しても飛ぶんじゃね?」というクエスチョンの答えからいうと飛びます。
もう一度言います。
Flash から直接 AR.Drone へコマンドを送信してもDrone は飛ばせます。
というわけで、取り急ぎ Takeoff と Landing のコマンドだけ送信できるようにしたテストアプリケーションをサクッと作って、またしても狭い部屋で飛ばしてみたところが下の映像です。
で、今回 Flash から Drone を飛ばすために何をやったかという話何ですが、大まかな手順は下記の通りです。
1. Drone の UDPソケットは「コマンド受信用」「センサ情報送信用」「カメラストリーム送信用」と3つあるので、Flash 側にも ソケット(DatagramSocket)を3つ用意する。
2. AR.Drone と Flash の UDPソケットをそれぞれのポート番号に合わせて接続する。
// Socket _commandSock = new DatagramSocket(); _navigationSock = new DatagramSocket(); _videoSock = new DatagramSocket(); _commandSock.addEventListener( IOErrorEvent.IO_ERROR, onConnectError ); // Error Handling. _navigationSock.addEventListener( IOErrorEvent.IO_ERROR, onConnectError ); // Error Handling. _videoSock.addEventListener( IOErrorEvent.IO_ERROR, onConnectError ); // Error Handling. try { _commandSock.connect( _droneIP, _commandPort ); } catch ( e:Error, "at commandSock" ) { trace( e ); } try { _navigationSock.connect( _droneIP, _navigationPort ); } catch ( e:Error ) { trace( e, "at navigationSock" ); } try { _videoSock.connect( _droneIP, _videoPort ); } catch ( e:Error ) { trace( e, "at videoSock" ); }
3. 接続が確認されたら AR.Drone SDK Developer Guide に書いてあるとおり初期化用のコマンドを送信して Drone (との接続?)を初期化。
private function initARDrone():void { sendCommand( "AT*CONFIG=" + ( seq++ ) + ",\"general:navdata_demo\",\"TRUE\"" + CR + "AT*FTRIM=" + ( seq++ )); sendCommand( "AT*PMODE=" + ( seq++ ) + ",2" + CR + "AT*MISC=" + ( seq++ ) + ",2,20,2000,3000" + CR + "AT*FTRIM=" + ( seq++ ) + CR + "AT*REF=" + ( seq++ ) + ",290717696" ); sendCommand( "AT*PCMD=" + ( seq++ ) + ",1,0,0,0,0" + CR + "AT*REF=" + ( seq++ ) + ",290717696" + CR + "AT*COMWDG=" + ( seq++ )); sendCommand( "AT*PCMD=" + ( seq++ ) + ",1,0,0,0,0" + CR + "AT*REF=" + ( seq++ ) + ",290717696" + CR + "AT*COMWDG=" + ( seq++ )); sendCommand( "AT*FTRIM=" + ( seq++ )); }
4. AR.Drone SDK Developer Guide に書いてあるテイクオフ用のコマンドを送信。
private function takeoff():void { _command = "AT*REF=" + ( seq++ ) + ",290718208"; _isLanding = false; }
5. 飛びました
6. このままずっと飛ばしておくわけにもいかないので AR.Drone SDK Developer Guide に書いてあるランディング用のコマンドを送信。
private function landing():void { _command = "AT*REF=" + ( seq++ ) + ",290717696"; _isLanding = true; }
7. 墜落せずに無事着地
今回の実験の流れはこんな感じでした。
この実験を始めるにあたって、いろいろとアドバイスをしていただいた裏社会(謎)の皆さん、ありがとうございました!
また、AR.Drone に送るコマンドと実装を調べるにあたっては ARDroneForP5のソースコードを大いに参考にさせていただきました。
というわけで…
次は移動や上昇下降のコマンドを送って(これが意外とめんどくさそう…)実際にコントロール出来るか試してみることにします。
“AR.Drone に Flash から直接コマンドを送信して飛ばすことに成功しました” に対して1件のコメントがあります。
コメントは受け付けていません。