注目の投稿

技術Note一覧

このブログのメインコンテンツである技術Noteの一覧

2015/10/29

RaspberryPiとROSでAR.Droneを自律飛行

AR.DroneというドローンにRaspberryPiを乗せて自律飛行をさせたので,その備忘録

システム全般

・使ったもの
  -Parrot社のAR.drone2
  -Raspberry Pi2 Model B+
  -QZPOD (GPS受信機)

搭載したらこんな感じ




ハードウェア

ペイロード
・だいたい合計120gくらいが安定して飛行できる限界っぽい.
  -RaspberryPiが60gくらい.
  -QZPOD50gくらい

・これ以上センサ等を詰む余力は無さそう

・付属のカバー(↓こんなの)があったけれど,20gくらいあったので付けない.
  -ダイビングキャッチでプロペラを守る心意気が大事



電源
・RaspberryPi用にモバイルバッテリー(2600mAh,70g)を追加搭載すると重すぎて飛べなかった

・ARDroneのUSBポート(動画保存用)が電源供給に使えた
  -RaspberryPiの消費電力最大2.3W=460mAらしい(参考
  -普通のUSBポートは500mAくらい出せるらしい(参考

・モバイルバッテリー重すぎたからダメ元でUSBポートに繋いだのだけれど,案外落ちることなく動いてくれてラッキーだった.

ソフトウェア

ROSの利用



・制御にはROS(Robot Operating System)を利用する.
  -マルチスレッド的なプログラミングが簡単にできて便利.
  -ログ取りが楽
  -OSと言いつつOSではなくミドルウェア(OSはLinux系のUbuntuを使うのが普通)
  -ロボット業界に精通してるっぽく見える

・マルチスレッド的なプログラミング?
  -ソースを細かく分割できる=処理の変更による影響範囲が小さい
 
・実験中ありがちな突然の仕様変更に対して対応が楽だった.


OSはRaspbian?Ubuntu?
 or

Raspbian
  -LinuxOSをRaspberryPi用に派生させたOS
  -RaspberryPiの公式配布OS

Ubuntu
  -これまたLinuxの派生OS
  -ROS使うならubuntuだろうみたいな風潮(Ubuntu以外はあんまり上手く動かない説がある)

ROSの導入
・RaspberryPi+Raspbian+ROS
  -手も足も出ない感じのエラー吐かれたので放置
    -No Definition of [nav_msgs] for OS [Debian]
    -ARDroneAutonomyというROSパッケージ導入時の話
    -rosdepという依存関係読み込みコマンド実行しようとしたときだったかな

・RaspberryPi+Ubuntu(+ROS)
  -RaspberryPi2に入れられるUbuntu,しかもROS(Indigo)導入済みという神のようなイメージファイルを配布してる人発見.ありがたや.
  -導入はこのブログを参考


ARdroneの操作






-ARDroneが生成するWifiアクセスポイントにアクセス(インターネットにはつながらない

-ARDroneに向かってUDP通信でコマンドを送ることで操作

-便利なスマホアプリが公式配布されてる

RaspberryPiからARDroneを操作するシステム案
①RaspberryPiを無線でARDroneに繋いで操作



-操作ライブラリが相当色々落ちている

困ったときにスマホアプリで簡単操作可能(ARDroneの設定が変わらないので)

-RaspberryPiをネットに繋げない
 ・GPS補正データが得られない
  =RTK測位できない
 
 ・遠隔操作不可.モニター必須.







②RaspberryPiとARDroneを有線で繋いでシリアル通信.受信したデータをARDrone自身に自分宛てのコマンドとして送信させる.

-Raspberryがネット接続できる

-RaspberryPiとARDrone内部PCの操作が必要でめんどくさい(めんどくさそう)

-ARDroneにプログラムを実行させようという資料があまり見当たらない
  -DroneDuinoとか
  -NodeCopterとかが参考になりそう.

-最近注目のNode.jsが要りそう
  -JavaScript分かんね
  



③ARDroneとRaspberryPiをインターネットに接続する.


-RaspberryPiがネット接続できる

-同一ネットワークなのでARDroneにもコマンド送信できる

-誤って変な設定をした
  -ドローンは二度とアクセスポイントを作ってくれなくなった

  -ARDrone内部へのアクセスはTelnetのみ(モニターを繋ぐことができない)

二度とアクセスできなくなり,使い物にならなくなった.つらい.



ということで①を採用
(ドローンもう一台買いました)
(RaspberryPiのイラストはこちらから拝借)


ROSでやること
ARDroneAutonomyは使わなかった
  -コンパイル通らなかった(実力不足)

NodeCopter + ROSBridge でもできそう
  -NodeCopter = JavaScript(Node.js)でARDroneを操作
  -ROSBridge = JavaScriptとROSの間のインターフェースを提供(橋渡し)してくれる
  -めんどくさそうだったからやってない

CVDroneを使った(ブログGitHub).
  -RaspberryPi(+ubuntu)上で一発でコンパイルできた
  -ソースがわかりやすい
  -作者が日本人(やっぱ国産が良いよね)



CVDroneはROS用ではなく普通にC++で書かれているので,少し改造する必要あり.
  -CMakeLists.txtの追加
  -ソース上にROSで使うためのおまじないを追加

・改造したら作者さんのGithubにPullリクエスト送ろう
  -FFMPEG(画像系ライブラリ)関連で上手く行かなかった
  -画像関連のソース全部コメントアウトするという恥ずかしいことしたからとても見せられない
  -その内再チャレンジしたい

・NavToolsという自律移動に使えそうなソースを集めたやつを作ってみた.
  -整理後Githubに公開予定
  -整理する気起きないので公開諦めました(2016.11.14)