AR.Drone自律飛行AR.Drone自律飛行

AR.Droneとは

AR.Drone(*1)は、

  • スマートフォンやタブレット型端末による直感的な操作
  • 加速度センサ、ジャイロセンサ、気圧センサといった多数のセンサを用いた機体制御による安定した飛行
  • 搭載しているカメラからのビデオ映像を手元の端末にライブストリーミング

といった機能を備えたquadrocopterです。

ARDrone1

AR.Droneは、WiFi経由で制御コマンド(離陸、前進、着陸など)を送信することで操作することができます。
製品としてはスマートフォンアプリで操作することが想定されていますが、制御コマンドをUDPパケットとして送信することができればPCからでも操作出来ます。
実際にProcessingやPythonといった言語でも、AR.Droneを操作するためのライブラリが開発されています(*2,*3)

また、OSにLinuxが使われているので、telnetでログインしAR.Drone上でコマンドを実行したり、設定を変更したりすることができます。

ARDrone5

今回はこのAR.DroneをMessage Ferryとして用いるために自律飛行させました。

Message Ferryとは

Message Ferryとは、Delay Tolerant NetworkやMobile Ad-hoc Networkといった研究分野おいて、無線の通信範囲にないノード間のメッセージを中継する目的で物理的に移動するノードのことを言います。

具体的に想定される場面としては、

  • 被災地で一時的に通信インフラが機能しなくなった際の代替手段
  • 発展途上地域などでの低コストなインターネット回線の提供
  • 広域に設置されたセンサーノードからのデータ収集

などが考えられています。

Message Ferryには、広範囲を一定の経路で移動できるようなデバイスが適しています。
そこでAR.Droneに自律飛行させることで、Message Ferryとして使いたいというのが目的です。
今回の自律飛行の目標は、AR.Droneが人の操縦なしで予め決めておいた地点まで飛行し、停止することとします。

GPSデータによる自律飛行

自律飛行にはGPSを使いました。
AR.Droneの機体の底面にはシリアル接続用のピンがあるので、外部デバイスを接続することが出来ます。

ARDrone2

少し分かりづらいですが、上の写真で緑色の基盤が見えているところがシリアル接続用のピンになっています。
今回はGPSモジュールをArduinoに接続し、Arduinoから制御コマンドをAR.Droneにシリアル経由で送信することにしました。

Arduinoの役割は、

  • GPSデータを解析する
  • 目的の地点に到達したかどうかを判断する
  • AR.Droneに制御コマンドを送信する

という3点です。

GPSモジュールからの受信データはNMEAというフォーマットに従って記述されています。
緯度経度を取得する際に必要となるのは「$GPRMC」で始まる行なので、この行を見つけ数値を取り出します(*4)
Arduinoは、GPSモジュールから送られてくる現在位置と予め決めておいた目標地点の緯度経度を比較し、前進、停止などの制御コマンドをAR.Droneが接続されているシリアルポートに送信します。
これで飛行してきたAR.Droneが目標地点にくれば停止するはずです。

ArduinoとGPSを載せたAR.Droneの写真です。

ARDrone3

これだけでAR.Droneが動けばいいのですが、もう一つやらなければいけないことがあります。
上でも述べましたが、通常AR.Droneは、WiFi経由で送られてきた制御コマンドを受信して動きます。
そのため実際にAR.Droneを動かすには、Arduinoからのシリアル経由の受信データを自身宛のUDPパケットとして送信するプログラムがAR.Drone側に必要となります。

最後に、このプログラムを実行する前に、シリアルの通信速度をArduino側と合わせます。
AR.Droneのシリアルポートに対応するデバイスファイルは/dev/ttyPA0です。

これでArduinoからシリアル経由で送られてくる制御コマンドに合わせた動作が出来るようになりました。

98b688ac720399e0df300975bdda03ad

テスト飛行は50mほどの距離ですが、無事目標地点まで飛んでくれました。

参考文献

*1 AR.Drone
http://ardrone2.parrot.com/

*2 ARDroneForP5
http://kougaku-navi.net/ARDroneForP5/

*3 python-ardrone
https://projects.ardrone.org/boards/1/topics/show/2952

*4 NMEAフォーマット
http://szparts.com/?mode=f9

By Kensaku Hatanaka