C#でTelloを操作する。TelloLibを使って。前進後退左右旋回など
はじめに
前回はTelloLib
というライブラリを使ってプログラムからTelloを操作する、ということをやりました。
しかし、離陸と着陸だけでした。
まったく物足りませんよね。
ということで今回は前進や後退、右旋回、左旋回などをやってみたいと思います。
離着陸以外のTelloの操作
離着陸はそれぞれメソッドが用意されていました。
それでは前進後退、旋回などの操作を行うにはどうするかというと、以下のsetAxis
というメソッドがあり、それを使うことでそれらの動作を行うことができます。
Tello.controllerState.setAixs(float lx,float ly,float rx,float ry);
引数のそれぞれの役割は以下のとおりです。
各引数は-1.0~1.0の値をとります。
例えば、lxに-0.5を設定すると左方向に回転します。0.5を設定すれば右方向に回転します。
すべての引数に0を設定すると、その場に静止します。
- lx:右回転(+)、左回転(-)。
- ly:上昇(+)、下降(-)。
- rx:右スライド(+)、左スライド(-)。
- ry:前進(+)、後退(-)。
各引数の値を調整することで「ゆっくり左旋回」や「前進しながら上昇」といった動作を行うことができます。
さて、setAxis
メソッドでTelloの動きを設定しましたが、それだけでは動き始めません。
設定した内容をTelloに送る必要があります。
それがsendControllerUpdate
メソッドです。
このメソッドを呼び出すと、先ほど設定した内容でTelloが動き出します。
Tello.sendControllerUpdate();
では実際にやってみましょう、と言いたいところですが、ちょっと待ってください。
仮に以下のように記述して前進させたとしましょう。
Tello.controllerState.setAixs(0, 0, 0, 0.5);
Tello.sendControllerUpdate();
すると、ひたすら前進し続けて、室内であればやがて壁に激突するでしょう。
「40度右回転」とか「1m前進」といった指定はできないのです。
そこで、その動作を「何(ミリ)秒続けるか」といった考えで動作をコントロールします。
つまり、Telloにコマンドを送った後に任意の時間、待機してから静止させればよいということになります。
例えば以下のような感じです。
//前進開始
Tello.controllerState.setAixs(0, 0, 0, 0.5);
Tello.sendControllerUpdate();
await Task.Delay(1000);//1秒待つ
//静止
Tello.controllerState.setAixs(0, 0, 0, 0);
Tello.sendControllerUpdate();
このように秒数で進む距離をコントロールできます。
どのくらいの値で何秒間動かすと何mすすむのかは、試行錯誤が必要になると思いますが。
それによって引数の値と秒数、距離の関係式を求めることができれば「面舵いっぱいよーそろー!」みたいなこともできるかと思います。
Main
メソッドでawait
使う場合は言語バージョンをC#7.1以上にしてくださいね。
ついでに右旋回はこんな感じです。
//前進開始
Tello.controllerState.setAixs(0.5, 0, 0, 0.2);//遅めに右旋回
Tello.sendControllerUpdate();
await Task.Delay(1000);//1秒待つ
//静止
Tello.controllerState.setAixs(0, 0, 0, 0);
Tello.sendControllerUpdate();
おわりに
前回と今回合わせてTelloを自由自在に操作することができるようになりました。
おわかりのとおり、コード的にはまったく難しいところがありません。
このライブラリの素晴らしいことったらありません。
感謝です。
今回は入力コマンドに応じて動作させましたが、例えば矢印キーで操作することももちろんできますし、モバイルアプリケーションから利用することもできます(サンプルコードにもありますしね)。
もちろんAlexa(Google Homeでも)で操作することもできるはずです。
以前にngrok
を使ってローカルで実行しているAzure Functionsにインターネット側からアクセスする方法を書きましたが、この方法を使ってAlexaのエンドポイントとしてローカル上のAzure Functionosを指定してやれば、きっとできるはずです(試してない)。
追記
あと、Telloのアクションのメソッドとして離着陸以外にフリップ
があるのを忘れていました。
Tello.doFlip();
これで後ろに宙返りします。
バッテリー残量が規定値以上という制約がありますが。
Author And Source
この問題について(C#でTelloを操作する。TelloLibを使って。前進後退左右旋回など), 我々は、より多くの情報をここで見つけました https://qiita.com/shuhey/items/58ee0d238391a31fdcf2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .