以下の2つのコマンドを使用して、
TELLOが空中で正6角形を描くように飛ばしました。
・cw X(TELLOを時計回りにX°回転させる)
・forward X(TELLOを前方へX cm移動させる)
実際に作成したプログラムは、
以下のプログラムです。
(プログラムは、C#で組んでいます)
// TELLOへ送信するコマンドを生成する string connectCWMessage = "cw 60"; // ①cwコマンドへ60°を指定している理由 string connectFWessage = "forward 20"; int conerNum = 6; byte[] byteMessage1 = null; byte[] byteMessage2 = null; byteMessage1 = Encoding.UTF8.GetBytes(connectFWessage); byteMessage2 = Encoding.UTF8.GetBytes(connectCWMessage); for(var i = 0;i < conerNum;i++) // ②ループによるコマンドの送信 { // TELLOへ着陸コマンドを送信する udpClient.Send(byteMessage1, byteMessage1.Length, CONNECT_TELLO_IP, CONNECT_TELLO_PORT); Thread.Sleep(2000); // ③スレッドのSleep udpClient.Send(byteMessage2, byteMessage2.Length, CONNECT_TELLO_IP, CONNECT_TELLO_PORT); Thread.Sleep(2000); }
【プログラムの説明】
①cwコマンドへ60°を指定している理由
cwコマンドは、進行方向を0°として、
進行方向から時計回りにX°旋回させるコマンドです。
そのため、空中で正6角形を描くように飛ばす場合は、
正6角形の外角に相当する角度を指定する必要があります。
そのため、cwコマンドの旋回させる角度を60°に設定しています。
(正6角形の外角は60°)
②ループによるコマンドの送信
空中で正6角形を描くように飛ばすためには、
以下の2つの手順を6回繰り返す必要があります。
1.前方へX cm進める
2.時計回りに60°旋回する
そのため、コマンドの送信をforループで行っております。
③スレッドのSleep
TELLOは、コマンドを連続で送信した場合、
前のコマンドの完了を待たずに
次に送信したコマンドを実行します。
そのため、
前のコマンドによる動作が完了するまで次のコマンドを待機させる必要があります。
今回は、Thread.Sleepを使用し、
前のコマンドの実行が完了するまで、
次のコマンドの送信を待機しています。