openFrameworksからTelloドローンを操縦する
はじめに
以前からProcessingやmicrobitなどからTelloドローンを操作する実験をやってきました.
今回はopenFrameworksからTelloを操縦したいと思います.
アドオンを作ってみた(ofxTello)
Processingの時と同様にUDP通信でコマンドを送って操縦するのですが,毎回コマンドを全て実装するのがめんどくさかったので,コマンドを簡単に実装できるようにaddonを作りました.
addonを作るのが初めてだったのであまり良い設計とは言えませんがとりあえず簡単に使えるようにはなっています.
ofxTello使い方
まずはofxTelloを自身のoF環境のaddonsにクローンしてきます.
次にProjectGeneratorでプロジェクトを作成する際に,クローンしてきたofxTelloとofxNetworkをアドオンに追加します.
コード
プログラムを実行する前に,TelloのWiFiに接続しておいてください.
#pragma once
#include "ofMain.h"
#include "ofxTello.h"
class ofApp : public ofBaseApp{
public:
void setup();
void update();
void draw();
void exit();
void keyPressed(int key);
ofxTello tello;
int distance, angle, speed;
};
#include "ofApp.h"
//--------------------------------------------------------------
void ofApp::setup(){
distance = 50;
angle = 45;
speed = 50;
tello.connect();
}
//--------------------------------------------------------------
void ofApp::update(){
tello.receiveUpdate();
if(tello.getReceiveMessage().length() > 0){
cout << tello.getReceiveMessage() << endl;
}
}
//--------------------------------------------------------------
void ofApp::draw(){
}
//--------------------------------------------------------------
void ofApp::keyPressed(int key){
if(key == 't'){
tello.takeoff();
} else if(key == 'l'){
tello.land();
} else if(key == 'w'){
tello.foward(distance);
} else if(key == 's'){
tello.back(distance);
} else if(key == 'a'){
tello.left(distance);
} else if(key == 'd'){
tello.right(distance);
} else if(key == OF_KEY_UP){
tello.up(distance);
} else if(key == OF_KEY_DOWN){
tello.down(distance);
} else if(key == OF_KEY_RIGHT){
tello.cw(angle);
} else if(key == OF_KEY_LEFT){
tello.ccw(angle);
}
}
//--------------------------------------------------------------
void ofApp::exit(){
tello.close();
}
コマンド送信時にTelloからの返信をtello.receiveUpdate()で常に受け取る感じです.
ストリーミング機能はopencvを使った方法で実装出来そうですが,今のところこのアドオンには実装していません.
使いづらい点,わかりづらい点などありましたら,コメントでよろしくお願いします.
Author And Source
この問題について(openFrameworksからTelloドローンを操縦する), 我々は、より多くの情報をここで見つけました https://qiita.com/kikpond15/items/3ef236354e460cd50d5d著者帰属:元の著者の情報は、元の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 .