メニュー 閉じる

099. Processingでトイドローン「Tello」を動かしてみる02

先日ドローンの勉強会に参加して、Telloについて色々教えていただきました。
またTelloを使った制御コンテストもすっごい楽しかったです!

それを踏まえて、ちょっとテストして動かしてみたんですが、こっちから
制御コマンドをどんどん送ってもダメで、一つのコマンドが終了するまで
待たないとダメなんですね。

いつまで待つのか・・・TelloからUDP通信で返ってくるメッセージの中に「ok」
があれば次のコマンド実行いけるようです。

http://www.velvet-number.com/atsushi/wp-content/uploads/2019/02/20190201_mov.mov

import hypermedia.net.*;

UDP udp;

String address = "192.168.10.1";

int port = 8889;

int comm_count = 0;

String[] commands = {"forward 50", "cw 360", "down 50", "back 50", "up 50", "ccw 360"};

boolean init_flag = true;
boolean comm_flag = false;

void setup () {

	size (1000, 1000);
	colorMode (RGB, 256);
	background (0);

	udp = new UDP (this, port);

	udp.listen (true);

	udp.send("command", address, port);
	udp.send("battery?", address, port);
}

void draw () {

	background (0);

	if (comm_flag == true) {
		udp.send (commands[comm_count], address, port);
		comm_flag = false;
		comm_count += 1;
	}

	if (comm_count > commands.length - 1) {
		comm_count = 0;
	}


}

void keyPressed () {

	if (key == 't') {
		udp.send ("takeoff", address, port);
		init_flag = false;
	} else if (key == 'l') {
		udp.send ("land", address, port);
	}

}

void receive (byte[] data, String address, int port) {

	data = subset (data, 0, data.length);

	String message = new String (data);

	if (message.equals ("ok") == true && init_flag == false) {
		comm_flag = true;
	}

	println (message);

}

 

Posted in processing