質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
openFrameworks

openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

UDP

UDP(User Datagram Protocol)とは、トランスポート層のプロトコルであり、コネクション型のデータサービスです。IPネットワーク上の別のホストにコンピュータのアプリケーションがメッセージを送ることができ、転送チャンネルやデータ経路を設定する必要はありません。TCPに比べて高速であるが、信頼性が薄いという特徴があります。

Q&A

1回答

2132閲覧

openFrameworksでのUDP通信ができない

koup_0327

総合スコア12

openFrameworks

openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

UDP

UDP(User Datagram Protocol)とは、トランスポート層のプロトコルであり、コネクション型のデータサービスです。IPネットワーク上の別のホストにコンピュータのアプリケーションがメッセージを送ることができ、転送チャンネルやデータ経路を設定する必要はありません。TCPに比べて高速であるが、信頼性が薄いという特徴があります。

0グッド

0クリップ

投稿2019/06/30 09:08

編集2019/07/01 14:08

###概要

こんにちは。
openFrameworksを使ってTelloの制御アプリを組み立てていたんですが、初期の方でつまづきました。


Telloをご存知でない方へ少し説明をすると、
・小型のドローン
・スマホで簡単に操作できる
・公式からSDKが出てたりなどプログラミングしやすい(Python)
・UDP通信でも動き、カメラなどの制御ができる
など、汎用性が高いドローンです。

###やりたいこと
UDP通信を使ってTelloの動きを制御したいです。
予想では、"t"を押すとTelloに"takeoffを送り離陸、"l"を押すとTelloに"land"を送り着陸するはずでした。

###やったこと
アドオンはofxNetworkを使用しました。
oF公式のサイトを見つつUDP通信ができるよう書いたつもりです。
TelloとPCを接続し実行したのですが、無反応でした。

###環境
macOS Mojave 10.14.4
openFrameworks 10.1
Xcode 10.2.1

###以下コード

ofApph

1pragma once 2 3#include "ofMain.h" 4#include "ofxNetwork.h" 5 6class ofApp : public ofBaseApp{ 7 8 public: 9 void setup(); 10 void update(); 11 void draw(); 12 13 void keyPressed(int key); 14 void keyReleased(int key); 15 void mouseMoved(int x, int y ); 16 void mouseDragged(int x, int y, int button); 17 void mousePressed(int x, int y, int button); 18 void mouseReleased(int x, int y, int button); 19 void mouseEntered(int x, int y); 20 void mouseExited(int x, int y); 21 void windowResized(int w, int h); 22 void dragEvent(ofDragInfo dragInfo); 23 void gotMessage(ofMessage msg); 24 25 ofxUDPManager udpConnection; 26 27 ofTrueTypeFont mono; 28 29}; 30

ofAppcpp

1#include "ofApp.h" 2#define RECONNECT_TIME 400 3 4//-------------------------------------------------------------- 5void ofApp::setup(){ 6 7 ofSetVerticalSync(true); 8 ofSetFrameRate(60); 9 ofEnableAntiAliasing(); 10 ofBackground(0, 0, 0); 11 12 udpConnection.Create(); 13 udpConnection.Connect("192.168.10.1",8889); 14 udpConnection.SetNonBlocking(true); 15 16} 17 18//-------------------------------------------------------------- 19void ofApp::update(){ 20 21} 22 23//-------------------------------------------------------------- 24void ofApp::draw(){ 25 26 string buf = "Tello UDP test\n"; 27 buf += "takeoff -> t, land -> l"; 28 ofDrawBitmapStringHighlight(buf, 15, 30); 29} 30 31//-------------------------------------------------------------- 32void ofApp::keyPressed(int key){ 33 34 if(key == 't'){ 35 string message = "takeoff"; 36 udpConnection.Send(message.c_str(), message.length()); 37 }else if(key == 'l'){ 38 string message = "land"; 39 udpConnection.Send(message.c_str(), message.length()); 40 } 41 42}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

UDPで通信を受け付けるために,commandモードに設定する必要があります.

c++

1udpConnection.Create(); 2udpConnection.Connect("192.168.10.1", 8889); 3udpConnection.SetNonBlocking(true); 4 5 6//これやる 7string message = "command"; 8udpConnection.Send(message.c_str(), message.length());

自分の環境でも動作確認できました.
期間があいてしまってますが,お役に立てたら幸いです.

投稿2019/12/26 11:25

kikpond

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問