A.R. Drone 2.0をシミュレータで動かす(ubuntu)

#環境
Ubuntu LTS 14.04

#ROSを入れる/設定する(ROSを設定してある人は飛ばしてください)
terminalを開く
`$sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list'
$wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -
$sudo apt-get update
$sudo apt-get install python python-pip git ruby-full g++ cmake qtcreator make automake autoconf doxygen libboost-dev libopencv-dev subversion mercurial openjdk-7-jdk freeglut3-dev
$sudo apt-get install ros-indigo-desktop-full
$rosdep init
$rosdep update
$echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc && source ~/bashrc
$sudo apt-get install python-rosinstall
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src && catkin_init_workspace
$cd ~/catkin_ws/ && catkin_make
$souce ~/.bashrc`

#DRONEシミュレータを入れる
![drone-sim.png](https://qiita-image-store.s3.amazonaws.com/0/54829/5e0fa0e0-62ad-061d-345b-02a6bcf9a5bf.png)

terminalを開く
`$cd ~/catkin_ws/src && git clone git clone https://github.com/AutonomyLab/ardrone_autonomy.git
$rosdep install ardrone_autonomy
↑でエラー出ても無視
$ cd ardrone_autonomy
$sudo ./build_sdk.sh
$cd ../
$rosmake ardrone_autonomy
$cd ~/catkin_ws && catkin_make
$source ~/.bashrc
$rospack profile && rosstack profile
$cd ~/catkin_ws/src && svn checkout https://svncvpr.informatik.tu-muenchen.de/cvpr-ros-pkg/trunk/ardrone_helpers
$cd ardrone_helpers
$rosdep install joy`
rosdepはエラー出ても無視
`$rosdep install ardrone_joystick`
rosdepはエラー出ても無視
`$rosmake joy
$rosmake ardrone_joystick
$cd ~/catkin_ws/
$catkin_make
$source ~/.bashrc
$rospack profile && rosstack profile
$cd ~/catkin_ws/src && git clone https://github.com/kendemu/tum_simulator_ros_ingido/`
シミュレータがROS Indigo Distributionでは動かなかったので動くようにリポジトリ作りました
`$cd tum_simulator_ros_indigo
$rosdep install cvg_sim_gazebo_plugins`
rosdepはエラー出ても無視
`$rosmake cvg_sim_gazebo_plugins
$rospack profile && rosstack profile
$rosdep install cvg_sim_gazebo`
rosdepはエラー出ても無視
`$rosmake cvg_sim_gazebo
$rosdep instal cvg_sim_msgs`
rosdepはエラー出ても無視
`$rosmake cvg_sim_msgs
$rosdep install tum_simulator`
rosdepはエラー出ても無視
`$cd ~/catkin_ws && catkin_make
$source ~/.bashrc
$rospack profile && rosstack profile`

#シミュレータを動かす
![movement.png](https://qiita-image-store.s3.amazonaws.com/0/54829/ba60483a-6ac0-3c18-1452-82a7345a4e5f.png)

`$roslaunch cvg_sim_gazebo ardrone_testworld.launch`
Gazeboというアプリケーションに注目
別のターミナルを開く
`$rostopic pub -1 /ardrone/takeoff std_msgs/Empty`
Droneが離陸します！

#DRONEでSLAMを行うには
![drone-slam.png](https://qiita-image-store.s3.amazonaws.com/0/54829/7ec4d1a5-4ee7-3e9d-c1d9-9fa81e92cb57.png)

SLAMは地図生成と自己位置推定を行うアルゴリズムのことを言います。
SLAMができるとDroneの自律操縦も可能になります。
http://wiki.ros.org/tum_ardrone
DRONEナビゲーションパッケージのインストール
`$cd ~/catkin_ws/src
$git clone git://github.com/tum-vision/tum_ardrone.git tum_ardrone
$rosdep install tum_ardrone
$rosmake tum_ardrone
$cd ~/catkin_ws
$catkin_make
$rosstack profile && rospack profile`
実行
`$roslaunch cvg_sim_gazebo ardrone_testworld.launch
$roslaunch tum_ardrone tum_ardrone.launch
$rosrun tum_ardrone drone_autopilot
$rosrun tum_ardrone drone_gui`

#ps3(sixaxis)でのDRONEの動かし方（simulator）
![sixaxis.jpeg](https://qiita-image-store.s3.amazonaws.com/0/54829/7d03ea6a-05d3-6788-eb8b-b508580cc1d4.jpeg)

ターミナルを開く
`$sudo apt-add-repository ppa:falk-t-j/qtsixa
$sudo apt-get update
$sudo apt-get install sixad`
ps3コントローラをUSB経由で繋いでください
`$ sudo sixpair`
ps3コントローラをUSBから抜いて
`$ sixad --start`
無線の状態でPSのボタンを押してください。
設定完了です！

別のターミナルを開く
`$roslaunch cvg_sim_gazebo ardrone_testworld.launch`
別のターミナルを開く
`$ roslaunch ardrone_joystick teleop.launch`
L1を押す（teleop.launchのエラーメッセージは無視）
動きます！

#画像追跡
![camshift_node.png](https://qiita-image-store.s3.amazonaws.com/0/54829/5710ac7e-7b37-827e-6937-5cad27fcf06a.png)
https://www.youtube.com/watch?feature=player_embedded&v=UaZtiBNVVpM
Turtlebot　http://wiki.ros.org/Robots/TurtleBot　
で色情報(CamShiftアルゴリズム）を元に画像追跡を行うプログラムを書きました。追跡画像の角度をpublishします。ソースに書かれてあるカメラのFOVを随時換え、geometry_msgs/Twistのlinear.y/linear.zへの値を変更してください。
https://github.com/kendemu/followme
![facerec.jpg](https://qiita-image-store.s3.amazonaws.com/0/54829/91caf96b-ef52-bb78-f719-02aa13f340e3.jpeg)

さらにロバストに画像追跡を行いたい場合はHaarCascadeやR-CNNがあります。顔の角度をpublishするros nodeを作りましたのでご活用ください。こちらは4つのhaarcascade識別器の推論結果をクラスタリングして要素数でフィルタリングすることによってさらにロバストに顔追跡が可能です。
https://github.com/demulab/face_detector