Gazeboシミュレーターで AR drone 2.0をコマンド操作する

Hadoopにドローンから収集した画像を蓄積する事を目標に
AR drone 2.0の実機を入手しました。

まずはシミュレーター環境で自動制御のプログラムを組もうと思いますが僕の性質上、自分でやっただけの事は覚えが良くなく
人に共有したり説明する過程で理解を含めていく（というかそうじゃないと質が上がらない）事が多いので
検証した内容をメモして手順を整理していきます。
面白いと思っていただけたり、先駆者の方がいらっしゃれば
至らない点等ご教授いただけますと有り難いです。

上手く組めたら実機でテストもしたいので
広島大学の工学部とかキャンパスでテストさせてもらう許可を頂けないか思案中です。
広島近辺で実機テスト出来る農地や広場や協力者がいらっしゃれば更に嬉しい。



環境
OSはUbuntu14.04で
GPUはGerforce GTX960の環境です。

ROSとシミューレーターの設定は下記
参考ページ手順に従い設定済みなので参考ページをご参照下さい。




## Gazeboシミュレーターでテスト環境起動
$roslaunch cvg_sim_gazebo ardrone_testworld.launch

## ドローン離陸
$rostopic pub -1 /ardrone/takeoff std_msgs/Empty

## ドローン着陸
$rostopic pub -1 /ardrone/land std_msgs/Empty


## リセット(らしい、初期配置に戻るかと思ったらそうでもなかったので不明)
$ rostopic pub -1 /ardrone/reset std_msgs/Empty

## 停止(ホバリング)
$ rostopic pub -r 10 /cmd_vel geometry_msgs/Twist  '{line:  {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'


## 前進
$ rostopic pub -r 10 /cmd_vel geometry_msgs/Twist  '{linear:  {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'

## 後退
rostopic pub -r 10 /cmd_vel geometry_msgs/Twist  '{linear:  {x: -1.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'

## 左前進
rostopic pub -r 10 /cmd_vel geometry_msgs/Twist  '{linear:  {x: 0.0, y: 1.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'

## 右前進
$ rostopic pub -r 10 /cmd_vel geometry_msgs/Twist  '{linear:  {x: 0.0, y: -1.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'

## 反時計周り旋回
$ rostopic pub -r 10 /cmd_vel geometry_msgs/Twist  '{linear:  {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 1.0}}

## 時計周り旋回
$ rostopic pub -r 10 /cmd_vel geometry_msgs/Twist  '{linear:  {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: -1.0}}'

## カメラ切り替え
$ rosservice call /ardrone/togglecam 


## カメラ出力
$ rosrun image_view image_view image:=/ardrone/image_raw

##フロントカメラ映像
$ rosrun image_view image_view image:=/ardrone/front/image_raw

##ボトムカメラ映像
rosrun image_view image_view image:=/ardrone/bottom/image_raw

##高度計
rostopic echo /sonar_height

##ナビ情報の取得
rostopic echo /ardrone/navdata


##pythonコードでの利用
takeoff.pyのような名前のファイルに下記のコードを
コピペします。

>　#!/usr/bin/env python 
>import rospy 
>from std_msgs.msg import String 
>from std_msgs.msg import Empty 

>def takeoff(): 
>   pub = rospy.Publisher("ardrone/takeoff", Empty, >queue_size=10 ) 
>   rospy.init_node('takeoff', anonymous=True) 
>   rate = rospy.Rate(10) # 10hz 
>   while not rospy.is_shutdown(): 
>       pub.publish(Empty()) 
>       rate.sleep()
>
>if __name__ == '__main__': 
>   try: 
>       takeoff() 
>   except rospy.ROSInterruptException: 
>       pass
>

シミュレーターを起動して実行すると離陸します。
$ rosrun drone_application takeoff.py

ドローンが離陸しました。

![Screenshot from 2016-10-30 15:42:34.png](https://qiita-image-store.s3.amazonaws.com/0/104856/42706083-cfb2-092e-8a2c-d746bba8bb9d.png)



#参考ページ

[ar drone autonomy公式サイト]
(http://ardrone-autonomy.readthedocs.io/en/latest/commands.html)

ドローン操作のコマンドはこちらを読みました
[AR drone 2.0 Simulator ウィキページ]
(http://wiki.coins-lab.org/index.php?title=Simulation_of_AR_Parrot_2)

[A.R. Drone 2.0をシミュレータで動かす(ubuntu)](http://qiita.com/kendemu/items/600210a2dd1954c9f2b8)

[Gazebo simulator　チュートリアル](http://gazebosim.org/tutorials?tut=ros_roslaunch)

ROS(Robot Operating System)については本家のページをご覧下さい。。
[ROS公式](http://wiki.ros.org/)