ROSを利用したドローンの制御について(飛行制御)
第7回目となります今回は、ROSを利用したドローンの飛行制御方法について、紹介したいと思います。
安井政人のめざせ!ROSマスター! 第7回
- 2016年03月09日公開
はじめに
こんにちは。NTTソフトウェアの安井です。
第7回目となります今回は、ROSを利用したドローンの飛行制御方法について、紹介したいと思います。
準備
動作確認は、前回同様にUbuntu 14.04、Bebop Drone で行いました。
ドローンへの接続は、BebopDrone-xxxxx という名前のドローンを親機としたWiFi接続になっています。
ドライバインストールなどの環境設定については、第6回の記事に記載しております、「ROSを利用した制御」を参照いただければと思います。
飛行制御
それでは、コマンド実行による飛行制御を行っていきます。
実行するコマンドは、以下のとおりです。
$ rostopic pub /bebop/cmd_vel geometry_msgs/Twist "linear: x: 0.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0"
コマンドの説明です。
Publish のメッセージタイプ : geometry_msgs/Twist linear.x (+) 前 (-) 後 linear.y (+) 左 (-) 右 linear.z (+) 上 (-) 下 angular.z (+) 左回り(旋回) (-) 右回り(旋回)
それでは、コマンドを送信して、ドローンを制御していきましょう。といきたいところですが、コマンドの送信には注意が必要です。
まず一つ目は、挿入する値ですが、-1.0~1.0 が設定値の範囲内となっております。
しかし、-1.0 や 1.0 はかなりのスピードが出てしまうため、室内で飛行させているときなどは、おそらく壁などに衝突してしまいます。
また、値が小さすぎた場合でも、ドローン内部の飛行制御との競合(ここは検証による推測ですが、その場にとどまる処理や、ドローン下部にある衝突センサーによる処理が影響していると思われます)により、正常に制御できません。
お奨めの閾値としては、以下の値になります。
Publish のメッセージタイプ : geometry_msgs/Twist linear.x (+) 0.05~0.1 (-) 0.05~0.1 linear.y (+) 0.03~0.05 (-) 0.03~0.05 linear.z (+) 0.05~0.1 (-) 0.05~0.1 angular.z (+) 0.05~0.1 (-) 0.05~0.1
この辺の値は、ドローン個体差や空調の影響などを受けるため、チューニングが必要な箇所になってきます。
次に、二つ目ですが、コマンドを送信すると、ドローンはその命令に従い、動作し続けます。
動作を停止(ホバリング)させたい場合は、コマンドの説明で示したように、すべての値が「0.0」のメッセージを送信してあげる必要があります。
こちらを送信しないと、停止せず、進み続けてしまうため、かなり危険です。
というところで、コマンド送信による制御を試したい場合は、ターミナルを別々に立ち上げるなどして、すぐに動作を停止できる準備をしてから、実行する必要があります。
離陸&着陸用のターミナルと合わせて、3つのターミナルを立ち上げて、検証してみるのが、まずは良いかと思います。
/* terminal 1 (離陸&着陸) */ $ cd ~/bebop_ws/src // path を通す $ source devel/setup.bash // bebop_autnomy を起動する $ roslaunch bebop_driver bebop_node.launch // テイクオフ実行 $ rostopic pub /bebop/takeoff std_msgs/Empty
/* terminal 2 (前進) */ $ rostopic pub /bebop/cmd_vel geometry_msgs/Twist "linear: x: 0.1 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0"
/* terminal 3 (ホバリング(停止)) */ $ rostopic pub /bebop/cmd_vel geometry_msgs/Twist "linear: x: 0.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0"
という具合です。
緊急時は、以下ですぐに着陸できるようにしておけば、安全です。
/* terminal 1 (離陸&着陸) */ // 着陸実行 $ rostopic pub /bebop/land std_msgs/Empty
おまけ
ドローンの課題の一つに、「飛行時間」があります。
Bebop Drone の場合、10分程度となっており、数万~数十万で購入可能なドローンとしては、10分~20分が飛行時間の限界となっております。
そこで、少しでも長時間飛行(というよりも、長時間飛行による検証行う)を実現させたいと思い、強化バッテリーを購入しました。
これです。
あれ?!何か形が変です。正規のバッテリーと比較してみましょう。
あきらかに、重そうです。そして重いです。
不安になりながらも、いざ、テイクオフ。
飛、飛んだ。しかし、重そう!
そのため、重心が後ろに来てしまうこともあり、かなり不安定です。
いや、少し重心を前にかけてあげられるように、改造してみれば安定するのでは・・・(次回へ続く)
おわりに
次回も、ROSを利用した制御方法について紹介していきたいと思います。次回もご購読いただけると幸いです。
新しい技術や、スキルの習得を好み、幅広い分野に柔軟に対応できるオールマイティなシステムエンジニア。 最近ではドローンやロボットの技術に注目し、業務を通じてNTTテクノクロスのドローン先駆者になるべく、絶賛奮闘中。 プライベートでは三姉妹のパパ。家の中は男一人で少し肩身が狭いですが、逆境にも負けず子育ても頑張っています!!