【CoDrone】規則的に左右に反復する飛行プログラムを実装してみた。

▼この記事をSNSでシェアする▼

スポンサーリンク

スポンサーリンク

 自動的に正確に飛行するプログラムを書きたい。

前回の記事では、左右のアナログスティックで上下飛行や前後左右の移動や回転を実装しました。

CoDroneのアナログスティック操作を実装してみた。

今回の記事はこれまでのプログラムを踏まえて書かれているので、これまでのCoDroneの開発記録は一番下にあるリンクを参照してください!

臨機応変にドローンを移動させるにはすごく便利だし、スティックを動かしてから、ドローンが動くまでのラグもほとんどなかった!これは素晴らしい限り。

ただ、

トンビ
ドローンの操作がむずい。

常にドローンの前面がどの方角を向いているかを把握してないと、思ったところに飛ばせないんですよ・・・

回転とかさせるとすぐ方向変わってしまうし、ドローンの動きは写真のようにドローンの中心の二つの赤い光の部分を前面として、そこを基準に移動します。

トンビ
ドローンの操作を自動化して、簡単に飛ばしたい!!

ということで今回はその第一歩として、小刻みに左右に反復するプログラムを書いてみた。

使うプログラム関数

今回実現したい動きは、左右に反復すること。

よって必要な機能は、

  • 一定時間左に動いたら、右に動く方向を変える
  • 一定時間右に動いたら、左に動く方向を変える

つまり、一定時間ある動きをしたことを判定する仕組みが必要なんです。

Flag

そこで条件を判定するのがFlag

Flagは判定条件の対象となる変数を指す。

今回

  • Flag=0:1秒間右に動く
  • Flag=1:1秒間左に動く

インクリメント

今回はそれぞれの左右の動きの後にFlagを設定する。

というのも、

  • 右に動いた後、Flagを1にして、左に動くようにする。
  • 左に動いた後、Flagを0にして、右に動くようにする。

という二つの判定をさせるために、インクリメントを用いてFlag変数の値をいじることにする。

Flag++;は

Flag = Flag +1;を指します。(これをインクリメントと呼びます。)

※Flag=1;でもいいんですけどね。インクリメントがチュートリアル推奨されていたので、一応使ってみる。

この場合、Flagの初期値は0なので、

足すと、1がFlagに代入され左に動く判定条件を満たす。

同様にFlag–;はFlag = Flag -1;を指し、

左に動いているときのFlagの値1を0にし、再び右に動く判定条件を満たす。

以下左右の動きを繰り返し・・・

delay(ミリ秒)

わすれてはいけないのがこれ。

上のプログラムでも書いてありますが、delay()がないと、同時にすべての行が読まれてしまうので、意図的に遅らせなければいけないです。

Linuxでいうsleepコマンドとイメージは同じ。

ちなみに単位はミリ秒なので上のプログラムではdelay(1000);

で一秒ごとに左右の動きが繰り返すように設定しています。

実際の飛行の様子

百聞は一見に如かずということで、動画を見てください。

IRセンサ11番に反応し、離陸して約1秒後、左右の反復を繰り返しています。

飛行がやや不安定で、離陸した場所からややずれていくのがやや痛い。

まあ思った動きは実装できたからいいかな・・・

実際のソースコード

ちなみにソースコードがこちら。

上で紹介した機能をまとめています。

おわりに

今回は左右に反復する計画飛行を実装させてみました。

決まったところから離陸して、決まった動きをして、決まったところに着陸するプログラムを書いてみたい。

ただ、飛行が安定しないのと、距離を判定するセンサがないから、何回もパラメータを調整して試行錯誤しないといけないから難しそう・・・

アナログスティックを使う操作には慣れてきたので、外で飛ばしてみたいが、最近週末雨ばっかだし、ドローンが軽量なので向かないかもな。

スポンサーリンク

▼この記事をSNSでシェアする▼

フォローする

メニュー・主な記事カテゴリ

おすすめ特集!




「ゆとり鳥日記」について
ITを中心に関心の赴くままに好きなように書いていく雑記ブログ!管理人が二人います。
◆フクロウ(19卒就活生)
◆トンビ(社会人1年目SE)

詳しいプロフィール
お仕事の依頼・ご要望

ゆとり鳥日記をBTCで応援する