質問編集履歴

11

誤字

2020/09/07 04:04

投稿

tiffany
tiffany

スコア1

test CHANGED
File without changes
test CHANGED
File without changes

10

誤字

2020/09/07 04:04

投稿

tiffany
tiffany

スコア1

test CHANGED
File without changes
test CHANGED
@@ -78,7 +78,7 @@
78
78
 
79
79
  ('udp://0.0.0.0:11111')
80
80
 
81
- を使用していますが、映像を取得できませんでした。「streamon」はきちんと送れているようなので、telloのIPアドレスは正しく、カメラのUDPが間違っているのではないかと考えています。
81
+ を使用していますが、映像を取得できませんでした。「streamon」はきちんと送れているようなので、telloのIPアドレスは正しく、映像受信時のUDPが間違っているのではないかと考えています。
82
82
 
83
83
 
84
84
 

9

誤字

2020/09/07 03:42

投稿

tiffany
tiffany

スコア1

test CHANGED
File without changes
test CHANGED
@@ -314,7 +314,7 @@
314
314
 
315
315
 
316
316
 
317
- cap1 = cv2.VideoCapture('udp://0.0.0.0:12000')
317
+ cap1 = cv2.VideoCapture('udp://0.0.0.0:11111')
318
318
 
319
319
 
320
320
 

8

補足説明追加

2020/09/07 03:31

投稿

tiffany
tiffany

スコア1

test CHANGED
File without changes
test CHANGED
@@ -12,6 +12,12 @@
12
12
 
13
13
  [http://qiita.com/tiffany1098/questions/70c0cbfba80ec8ffa1f1](http://qiita.com/tiffany1098/questions/70c0cbfba80ec8ffa1f1)
14
14
 
15
+
16
+
17
+ UDPやIPアドレスについてあまり詳しくないため、間違っていましたらご指摘お願いします。
18
+
19
+
20
+
15
21
  ### 発生している問題
16
22
 
17
23
 
@@ -36,13 +42,11 @@
36
42
 
37
43
 
38
44
 
39
- ご回答宜しくお願いいたします。
40
-
41
45
 
42
46
 
43
47
  #補足説明
44
48
 
45
- tello 1台のときは
49
+ tello 1台のときはtello自体がwifiアクセスポイントとなります。
46
50
 
47
51
  telloのIPアドレス、ポート番号は公式通りに
48
52
 
@@ -50,7 +54,7 @@
50
54
 
51
55
  を使用しています。
52
56
 
53
- telloカメラのUDPも公式通りに
57
+ 映像受信時のUDPも公式通りに
54
58
 
55
59
  ('udp://0.0.0.0:11111')
56
60
 
@@ -70,7 +74,7 @@
70
74
 
71
75
  を使用しています。このIPアドレスはwifiにつなげた状態でパソコンでIPアドレススキャナーのアプリでスキャンして得ました。
72
76
 
73
- telloカメラのUDPは1台の時と変わらず
77
+ 映像受信時のUDPは1台の時と変わらず
74
78
 
75
79
  ('udp://0.0.0.0:11111')
76
80
 
@@ -86,12 +90,308 @@
86
90
 
87
91
 
88
92
 
93
+ #試したこと
94
+
95
+
96
+
97
+
98
+
89
99
  [https://joho-ka.mints.ne.jp/multi-camras-with-opencv?doing_wp_cron=1599214242.8721311092376708984375](https://joho-ka.mints.ne.jp/multi-camras-with-opencv?doing_wp_cron=1599214242.8721311092376708984375)
90
100
 
91
101
  こちらのサイトのcapture = cv2.VideoCapture(i)のiの値を変えていく方法はうまくいきませんでした。この方法はパソコンに直接つなぐタイプのカメラにしか使えないようで、通信で映像を取得するtelloには使うことができませんでした。
92
102
 
93
103
 
94
104
 
105
+
106
+
107
+ wi-fiルーターにパソコンとドローン3台ではなく、1台のみ接続し試しました。
108
+
109
+ ドローン1:('192.168.100.112',8889)
110
+
111
+ ('udp://0.0.0.0:11111')
112
+
113
+ で試しましたが、「streamon OK」で止まり、映像の取得はできませんでした。
114
+
115
+ つまり、混信以前のUDPなどが間違っていることになるのでしょうか。
116
+
117
+ ```Python
118
+
119
+ #試したこと②
120
+
121
+ import socket
122
+
123
+ import threading
124
+
125
+ import time
126
+
127
+ import cv2
128
+
129
+
130
+
131
+ event = threading.Event()
132
+
133
+
134
+
135
+ sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
136
+
137
+ sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
138
+
139
+ sock.bind(('',9000))
140
+
141
+
142
+
143
+ tello1_address = ('192.168.100.112',8889)
144
+
145
+
146
+
147
+ def send_command1(msg):
148
+
149
+ print(msg)
150
+
151
+ msg = msg.encode(encoding="utf-8")
152
+
153
+ sock.sendto(msg,tello1_address)
154
+
155
+ event.wait()
156
+
157
+ event.clear()
158
+
159
+
160
+
161
+ def send_command2(msg):
162
+
163
+ print(msg)
164
+
165
+ msg = msg.encode(encoding="utf-8")
166
+
167
+ sock.sendto(msg,tello2_address)
168
+
169
+ event.wait()
170
+
171
+ event.clear()
172
+
173
+
174
+
175
+ def send_command3(msg):
176
+
177
+ print(msg)
178
+
179
+ msg = msg.encode(encoding="utf-8")
180
+
181
+ sock.sendto(msg,tello3_address)
182
+
183
+ event.wait()
184
+
185
+ event.clear()
186
+
187
+
188
+
189
+ def send_command(msg):
190
+
191
+ print(msg,msg,msg, sep='\n', end='\n')
192
+
193
+ msg = msg.encode(encoding="utf-8")
194
+
195
+ sock.sendto(msg,tello1_address)
196
+
197
+ sock.sendto(msg,tello2_address)
198
+
199
+ sock.sendto(msg,tello3_address)
200
+
201
+ event.wait()
202
+
203
+ event.clear()
204
+
205
+
206
+
207
+ def send_command12(msg1,msg2):
208
+
209
+ print(msg1,msg2, sep='\n', end='\n')
210
+
211
+ msg1 = msg1.encode(encoding="utf-8")
212
+
213
+ msg2 = msg2.encode(encoding="utf-8")
214
+
215
+ sock.sendto(msg1,tello1_address)
216
+
217
+ sock.sendto(msg2,tello2_address)
218
+
219
+ event.wait()
220
+
221
+ event.clear()
222
+
223
+
224
+
225
+ def send_command23(msg2,msg3):
226
+
227
+ print(msg2,msg3, sep='\n', end='\n')
228
+
229
+ msg2 = msg2.encode(encoding="utf-8")
230
+
231
+ msg3 = msg3.encode(encoding="utf-8")
232
+
233
+ sock.sendto(msg2,tello2_address)
234
+
235
+ sock.sendto(msg3,tello3_address)
236
+
237
+ event.wait()
238
+
239
+ event.clear()
240
+
241
+
242
+
243
+ def send_command13(msg1,msg3):
244
+
245
+ print(msg1,msg3, sep='\n', end='\n')
246
+
247
+ msg1 = msg1.encode(encoding="utf-8")
248
+
249
+ msg3 = msg3.encode(encoding="utf-8")
250
+
251
+ sock.sendto(msg1,tello1_address)
252
+
253
+ sock.sendto(msg3,tello3_address)
254
+
255
+ event.wait()
256
+
257
+ event.clear()
258
+
259
+
260
+
261
+ def send_command123(msg1,msg2,msg3):
262
+
263
+ print(msg1,msg2,msg3, sep='\n', end='\n')
264
+
265
+ msg1 = msg1.encode(encoding="utf-8")
266
+
267
+ msg2 = msg2.encode(encoding="utf-8")
268
+
269
+ msg3 = msg3.encode(encoding="utf-8")
270
+
271
+ sock.sendto(msg1,tello1_address)
272
+
273
+ sock.sendto(msg2,tello2_address)
274
+
275
+ sock.sendto(msg3,tello3_address)
276
+
277
+ event.wait()
278
+
279
+ event.clear()
280
+
281
+
282
+
283
+ def recv():
284
+
285
+ while True:
286
+
287
+ try:
288
+
289
+ data,server = sock.recvfrom(1518)
290
+
291
+ print(data.decode(encoding="utf-8"))
292
+
293
+ event.set()
294
+
295
+ except Exception:
296
+
297
+ break
298
+
299
+ recvThread = threading.Thread(target=recv)
300
+
301
+ recvThread.start()
302
+
303
+
304
+
305
+
306
+
307
+ def main():
308
+
309
+ try:
310
+
311
+ send_command1('command')
312
+
313
+ send_command1('streamon')
314
+
315
+
316
+
317
+ cap1 = cv2.VideoCapture('udp://0.0.0.0:12000')
318
+
319
+
320
+
321
+ while True:
322
+
323
+ ret,frame1 = cap1.read()
324
+
325
+ cv2.imshow('TelloEDU1',frame1)
326
+
327
+
328
+
329
+ key = cv2.waitKey(1)
330
+
331
+ if key == 27:
332
+
333
+ break
334
+
335
+
336
+
337
+
338
+
339
+ except Exception as ex:
340
+
341
+ print(ex)
342
+
343
+ finally:
344
+
345
+ cap1.release()
346
+
347
+ cv2.destroyAllWindows()
348
+
349
+ send_command1('streamoff')
350
+
351
+ sock.close()
352
+
353
+ print('--- END ---')
354
+
355
+
356
+
357
+ if __name__ == '__main__':
358
+
359
+ main()
360
+
361
+ ```
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+ ('192.168.10.1',8889)と('udp://0.0.0.0:11111')がセットになっている(対になっている)可能性があるか調べました。wi-fiルーターにパソコンとドローンを1台接続し、ドローンは192.168.10.1に割り振られるようにルーター側で設定しました。
370
+
371
+ この方法もうまくいかず、「streamon OK」で止まりました。
372
+
373
+
374
+
375
+
376
+
377
+ ドローン自体をwi-fiアクセスポイントとしたとき(パソコンとドローンを1対1で接続)、
378
+
379
+ ('192.168.10.1',8889)('udp://0.0.0.0:11111')
380
+
381
+ ('192.168.10.1',8889)('udp://127.0.0.1:11111')
382
+
383
+ ('192.168.10.1',8889)('udp://192.168.10.2:11111')
384
+
385
+ のように映像受信時のIPアドレスを変えても、映像を受信できました。
386
+
387
+
388
+
389
+
390
+
391
+ wi-fiルーターではなく、ドローンをwi-fiのアクセスポイントとしたとき、このアクセスポイントに他のドローンも接続できるか試しましたができませんでした。
392
+
393
+
394
+
95
395
 
96
396
 
97
397
 

7

補足説明追加

2020/09/07 03:25

投稿

tiffany
tiffany

スコア1

test CHANGED
File without changes
test CHANGED
@@ -86,6 +86,12 @@
86
86
 
87
87
 
88
88
 
89
+ [https://joho-ka.mints.ne.jp/multi-camras-with-opencv?doing_wp_cron=1599214242.8721311092376708984375](https://joho-ka.mints.ne.jp/multi-camras-with-opencv?doing_wp_cron=1599214242.8721311092376708984375)
90
+
91
+ こちらのサイトのcapture = cv2.VideoCapture(i)のiの値を変えていく方法はうまくいきませんでした。この方法はパソコンに直接つなぐタイプのカメラにしか使えないようで、通信で映像を取得するtelloには使うことができませんでした。
92
+
93
+
94
+
89
95
 
90
96
 
91
97
 

6

補足説明追加

2020/09/04 10:55

投稿

tiffany
tiffany

スコア1

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  分かったこと、補足説明や解決方法はどちらのサイトにも更新します。
12
12
 
13
- https://qiita.com/tiffany1098/questions/70c0cbfba80ec8ffa1f1
13
+ [http://qiita.com/tiffany1098/questions/70c0cbfba80ec8ffa1f1](http://qiita.com/tiffany1098/questions/70c0cbfba80ec8ffa1f1)
14
14
 
15
15
  ### 発生している問題
16
16
 

5

補足説明追加

2020/09/04 10:47

投稿

tiffany
tiffany

スコア1

test CHANGED
File without changes
test CHANGED
@@ -6,6 +6,12 @@
6
6
 
7
7
 
8
8
 
9
+ この質問は以下のサイトでマルチポストしています。
10
+
11
+ 分かったこと、補足説明や解決方法はどちらのサイトにも更新します。
12
+
13
+ https://qiita.com/tiffany1098/questions/70c0cbfba80ec8ffa1f1
14
+
9
15
  ### 発生している問題
10
16
 
11
17
 

4

誤字

2020/09/04 10:39

投稿

tiffany
tiffany

スコア1

test CHANGED
File without changes
test CHANGED
@@ -46,28 +46,28 @@
46
46
 
47
47
  telloカメラのUDPも公式通りに
48
48
 
49
+ ('udp://0.0.0.0:11111')
50
+
49
51
  を使用しています。
50
52
 
53
+
54
+
55
+ tello3台のときは
56
+
57
+ wifiルーターにtello3台とパソコンをつなげているため、IPアドレスが変わるため
58
+
59
+ ドローン1:('192.168.100.112',8889)
60
+
61
+ ドローン2:('192.168.100.113',8889)
62
+
63
+ ドローン3:('192.168.100.114',8889)
64
+
65
+ を使用しています。このIPアドレスはwifiにつなげた状態でパソコンでIPアドレススキャナーのアプリでスキャンして得ました。
66
+
67
+ telloカメラのUDPは1台の時と変わらず
68
+
51
69
  ('udp://0.0.0.0:11111')
52
70
 
53
-
54
-
55
- tello3台のときは
56
-
57
- wifiルーターにtello3台とパソコンをつなげているため、IPアドレスが変わるため
58
-
59
- ドローン1:('192.168.100.112',8889)
60
-
61
- ドローン2:('192.168.100.113',8889)
62
-
63
- ドローン3:('192.168.100.114',8889)
64
-
65
- を使用しています。このIPアドレスはwifiにつなげた状態でパソコンでIPアドレススキャナーのアプリでスキャンして得ました。
66
-
67
- telloカメラのUDPは1台の時と変わらず
68
-
69
- ('udp://0.0.0.0:11111')
70
-
71
71
  を使用していますが、映像を取得できませんでした。「streamon」はきちんと送れているようなので、telloのIPアドレスは正しく、カメラのUDPが間違っているのではないかと考えています。
72
72
 
73
73
 

3

誤字

2020/09/04 03:56

投稿

tiffany
tiffany

スコア1

test CHANGED
File without changes
test CHANGED
@@ -68,7 +68,7 @@
68
68
 
69
69
  ('udp://0.0.0.0:11111')
70
70
 
71
- を使用していますが、映像を取得できませんでした。「streamon」はきちんと送れているようなので、tello1nのIPアドレスは正しく、カメラのUDPが間違っているのではないかと考えています。
71
+ を使用していますが、映像を取得できませんでした。「streamon」はきちんと送れているようなので、telloのIPアドレスは正しく、カメラのUDPが間違っているのではないかと考えています。
72
72
 
73
73
 
74
74
 

2

補足説明追加

2020/09/04 03:48

投稿

tiffany
tiffany

スコア1

test CHANGED
File without changes
test CHANGED
@@ -34,6 +34,52 @@
34
34
 
35
35
 
36
36
 
37
+ #補足説明
38
+
39
+ tello 1台のときは
40
+
41
+ telloのIPアドレス、ポート番号は公式通りに
42
+
43
+ ('192.168.10.1',8889)
44
+
45
+ を使用しています。
46
+
47
+ telloカメラのUDPも公式通りに
48
+
49
+ を使用しています。
50
+
51
+ ('udp://0.0.0.0:11111')
52
+
53
+
54
+
55
+ tello3台のときは
56
+
57
+ wifiルーターにtello3台とパソコンをつなげているため、IPアドレスが変わるため
58
+
59
+ ドローン1:('192.168.100.112',8889)
60
+
61
+ ドローン2:('192.168.100.113',8889)
62
+
63
+ ドローン3:('192.168.100.114',8889)
64
+
65
+ を使用しています。このIPアドレスはwifiにつなげた状態でパソコンでIPアドレススキャナーのアプリでスキャンして得ました。
66
+
67
+ telloカメラのUDPは1台の時と変わらず
68
+
69
+ ('udp://0.0.0.0:11111')
70
+
71
+ を使用していますが、映像を取得できませんでした。「streamon」はきちんと送れているようなので、tello1nのIPアドレスは正しく、カメラのUDPが間違っているのではないかと考えています。
72
+
73
+
74
+
75
+ IPアドレスを変更するとUDPも変わるのでしょうか。変わるとしても、変更後の値が分かりません。そもそも編隊飛行ではカメラを使えないのでしょうか。
76
+
77
+
78
+
79
+ ご回答宜しくお願い致します。
80
+
81
+
82
+
37
83
 
38
84
 
39
85
 

1

書式変更

2020/09/04 03:47

投稿

tiffany
tiffany

スコア1

test CHANGED
File without changes
test CHANGED
@@ -10,312 +10,310 @@
10
10
 
11
11
 
12
12
 
13
+ tellopyなどは使わず、TelloSDK2.0のコマンド送信によるプログラムを書いています。
14
+
15
+ TelloEdu1台での飛行時のカメラ映像は「command」の次に「streamon」とコマンドを送信したのち、OpecCVで
16
+
17
+ cap = cv2.VideoCapture('udp://0.0.0.0:11111')
18
+
19
+ ret,frame = cap.read()
20
+
21
+ cv2.imshow('',frame)
22
+
23
+ と書きtelloの映像を取得していました。1台の時はこの方法でPC画面に映像を表示させることに成功しました。
24
+
25
+ しかし、telloEDU3台の編隊飛行の際はこの方法では成功しません。実行画面ではstreamon OK まで進み、その後何も起こりません。3台使うことによりカメラのUDPが変わるなど、何か原因があると思うのですがそれが分かりません。
26
+
27
+
28
+
29
+ telloEDUの編隊飛行(前進、後退などの単純な動き)自体はうまくいっています。
30
+
31
+
32
+
33
+ ご回答宜しくお願いいたします。
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+ ### 該当のソースコード
44
+
45
+
46
+
47
+ ```Python
48
+
49
+ import socket
50
+
51
+ import threading
52
+
53
+ import time
54
+
55
+ import cv2
56
+
57
+ '''
58
+
59
+ from formationflight.multi_1.tello1 import Tello1
60
+
61
+ from formationflight.multi_1.tello2 import Tello2
62
+
63
+ from formationflight.multi_1.tello3 import Tello3
64
+
65
+
66
+
67
+ tello1 = Tello1()
68
+
69
+ tello2 = Tello2()
70
+
71
+ tello3 = Tello3()
72
+
73
+ '''
74
+
75
+
76
+
77
+ event = threading.Event()
78
+
79
+
80
+
81
+ sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
82
+
83
+ sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
84
+
85
+ sock.bind(('',9000))
86
+
87
+
88
+
89
+ tello1_address = ('192.168.100.112',8889)
90
+
91
+ tello2_address = ('192.168.100.113',8889)
92
+
93
+ tello3_address = ('192.168.100.114',8889)
94
+
95
+
96
+
97
+ def send_command1(msg):
98
+
99
+ print(msg)
100
+
101
+ msg = msg.encode(encoding="utf-8")
102
+
103
+ sock.sendto(msg,tello1_address)
104
+
105
+ event.wait()
106
+
107
+ event.clear()
108
+
109
+
110
+
111
+ def send_command2(msg):
112
+
113
+ print(msg)
114
+
115
+ msg = msg.encode(encoding="utf-8")
116
+
117
+ sock.sendto(msg,tello2_address)
118
+
119
+ event.wait()
120
+
121
+ event.clear()
122
+
123
+
124
+
125
+ def send_command3(msg):
126
+
127
+ print(msg)
128
+
129
+ msg = msg.encode(encoding="utf-8")
130
+
131
+ sock.sendto(msg,tello3_address)
132
+
133
+ event.wait()
134
+
135
+ event.clear()
136
+
137
+
138
+
139
+ def send_command(msg):
140
+
141
+ print(msg,msg,msg, sep='\n', end='\n')
142
+
143
+ msg = msg.encode(encoding="utf-8")
144
+
145
+ sock.sendto(msg,tello1_address)
146
+
147
+ sock.sendto(msg,tello2_address)
148
+
149
+ sock.sendto(msg,tello3_address)
150
+
151
+ event.wait()
152
+
153
+ event.clear()
154
+
155
+
156
+
157
+ def send_command12(msg1,msg2):
158
+
159
+ print(msg1,msg2, sep='\n', end='\n')
160
+
161
+ msg1 = msg1.encode(encoding="utf-8")
162
+
163
+ msg2 = msg2.encode(encoding="utf-8")
164
+
165
+ sock.sendto(msg1,tello1_address)
166
+
167
+ sock.sendto(msg2,tello2_address)
168
+
169
+ event.wait()
170
+
171
+ event.clear()
172
+
173
+
174
+
175
+ def send_command23(msg2,msg3):
176
+
177
+ print(msg2,msg3, sep='\n', end='\n')
178
+
179
+ msg2 = msg2.encode(encoding="utf-8")
180
+
181
+ msg3 = msg3.encode(encoding="utf-8")
182
+
183
+ sock.sendto(msg2,tello2_address)
184
+
185
+ sock.sendto(msg3,tello3_address)
186
+
187
+ event.wait()
188
+
189
+ event.clear()
190
+
191
+
192
+
193
+ def send_command13(msg1,msg3):
194
+
195
+ print(msg1,msg3, sep='\n', end='\n')
196
+
197
+ msg1 = msg1.encode(encoding="utf-8")
198
+
199
+ msg3 = msg3.encode(encoding="utf-8")
200
+
201
+ sock.sendto(msg1,tello1_address)
202
+
203
+ sock.sendto(msg3,tello3_address)
204
+
205
+ event.wait()
206
+
207
+ event.clear()
208
+
209
+
210
+
211
+ def send_command123(msg1,msg2,msg3):
212
+
213
+ print(msg1,msg2,msg3, sep='\n', end='\n')
214
+
215
+ msg1 = msg1.encode(encoding="utf-8")
216
+
217
+ msg2 = msg2.encode(encoding="utf-8")
218
+
219
+ msg3 = msg3.encode(encoding="utf-8")
220
+
221
+ sock.sendto(msg1,tello1_address)
222
+
223
+ sock.sendto(msg2,tello2_address)
224
+
225
+ sock.sendto(msg3,tello3_address)
226
+
227
+ event.wait()
228
+
229
+ event.clear()
230
+
231
+
232
+
233
+ def recv():
234
+
235
+ while True:
236
+
237
+ try:
238
+
239
+ data,server = sock.recvfrom(1518)
240
+
241
+ print(data.decode(encoding="utf-8"))
242
+
243
+ event.set()
244
+
245
+ except Exception:
246
+
247
+ break
248
+
249
+ recvThread = threading.Thread(target=recv)
250
+
251
+ recvThread.start()
252
+
253
+
254
+
255
+
256
+
257
+ def main():
258
+
259
+ try:
260
+
261
+ send_command('command')
262
+
263
+ send_command1('streamon')
264
+
265
+
266
+
267
+ cap1 = cv2.VideoCapture('udp://0.0.0.0:11111')
268
+
269
+ #cap2 = cv2.VideoCapture('udp://0.0.0.0:11111')
270
+
271
+ #cap3 = cv2.VideoCapture('udp://0.0.0.0:11111')
272
+
273
+
274
+
275
+ while True:
276
+
277
+ ret,frame1 = cap1.read()
278
+
279
+ cv2.imshow('TelloEDU',frame1)
280
+
281
+
282
+
283
+ key = cv2.waitKey(1)
284
+
285
+ if key == 27:
286
+
287
+ break
288
+
289
+
290
+
291
+
292
+
293
+ except Exception as ex:
294
+
295
+ print(ex)
296
+
297
+ finally:
298
+
299
+ cap.release()
300
+
301
+ cv2.destroyAllWindows()
302
+
303
+ send_command('streamoff')
304
+
305
+ sock.close()
306
+
307
+ print('--- END ---')
308
+
309
+
310
+
311
+ if __name__ == '__main__':
312
+
313
+ main()
314
+
13
315
  ```
14
316
 
15
- tellopyなどは使わず、TelloSDK2.0のコマンド送信によるプログラムを書いています。
16
-
17
- TelloEdu1台での飛行時のカメラ映像は「command」の次に「streamon」とコマンドを送信したのち、OpecCVで
18
-
19
- cap = cv2.VideoCapture('udp://0.0.0.0:11111')
20
-
21
- ret,frame = cap.read()
22
-
23
- cv2.imshow('',frame)
24
-
25
- と書きtelloの映像を取得していました。1台の時はこの方法でPC画面に映像を表示させることに成功しました。
26
-
27
- しかし、telloEDU3台の編隊飛行の際はこの方法では成功しません。実行画面ではstreamon OK まで進み、その後何も起こりません。3台使うことによりカメラのUDPが変わるなど、何か原因があると思うのですがそれが分かりません。
28
-
29
-
30
-
31
- telloEDUの編隊飛行(前進、後退などの単純な動き)自体はうまくいっています。
32
-
33
-
34
-
35
- ご回答宜しくお願いいたします。
36
-
37
-
38
-
39
-
40
-
41
- ```
42
-
43
-
44
-
45
- ### 該当のソースコード
46
-
47
-
48
-
49
- ```Python
50
-
51
- import socket
52
-
53
- import threading
54
-
55
- import time
56
-
57
- import cv2
58
-
59
- '''
60
-
61
- from formationflight.multi_1.tello1 import Tello1
62
-
63
- from formationflight.multi_1.tello2 import Tello2
64
-
65
- from formationflight.multi_1.tello3 import Tello3
66
-
67
-
68
-
69
- tello1 = Tello1()
70
-
71
- tello2 = Tello2()
72
-
73
- tello3 = Tello3()
74
-
75
- '''
76
-
77
-
78
-
79
- event = threading.Event()
80
-
81
-
82
-
83
- sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
84
-
85
- sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
86
-
87
- sock.bind(('',9000))
88
-
89
-
90
-
91
- tello1_address = ('192.168.100.112',8889)
92
-
93
- tello2_address = ('192.168.100.113',8889)
94
-
95
- tello3_address = ('192.168.100.114',8889)
96
-
97
-
98
-
99
- def send_command1(msg):
100
-
101
- print(msg)
102
-
103
- msg = msg.encode(encoding="utf-8")
104
-
105
- sock.sendto(msg,tello1_address)
106
-
107
- event.wait()
108
-
109
- event.clear()
110
-
111
-
112
-
113
- def send_command2(msg):
114
-
115
- print(msg)
116
-
117
- msg = msg.encode(encoding="utf-8")
118
-
119
- sock.sendto(msg,tello2_address)
120
-
121
- event.wait()
122
-
123
- event.clear()
124
-
125
-
126
-
127
- def send_command3(msg):
128
-
129
- print(msg)
130
-
131
- msg = msg.encode(encoding="utf-8")
132
-
133
- sock.sendto(msg,tello3_address)
134
-
135
- event.wait()
136
-
137
- event.clear()
138
-
139
-
140
-
141
- def send_command(msg):
142
-
143
- print(msg,msg,msg, sep='\n', end='\n')
144
-
145
- msg = msg.encode(encoding="utf-8")
146
-
147
- sock.sendto(msg,tello1_address)
148
-
149
- sock.sendto(msg,tello2_address)
150
-
151
- sock.sendto(msg,tello3_address)
152
-
153
- event.wait()
154
-
155
- event.clear()
156
-
157
-
158
-
159
- def send_command12(msg1,msg2):
160
-
161
- print(msg1,msg2, sep='\n', end='\n')
162
-
163
- msg1 = msg1.encode(encoding="utf-8")
164
-
165
- msg2 = msg2.encode(encoding="utf-8")
166
-
167
- sock.sendto(msg1,tello1_address)
168
-
169
- sock.sendto(msg2,tello2_address)
170
-
171
- event.wait()
172
-
173
- event.clear()
174
-
175
-
176
-
177
- def send_command23(msg2,msg3):
178
-
179
- print(msg2,msg3, sep='\n', end='\n')
180
-
181
- msg2 = msg2.encode(encoding="utf-8")
182
-
183
- msg3 = msg3.encode(encoding="utf-8")
184
-
185
- sock.sendto(msg2,tello2_address)
186
-
187
- sock.sendto(msg3,tello3_address)
188
-
189
- event.wait()
190
-
191
- event.clear()
192
-
193
-
194
-
195
- def send_command13(msg1,msg3):
196
-
197
- print(msg1,msg3, sep='\n', end='\n')
198
-
199
- msg1 = msg1.encode(encoding="utf-8")
200
-
201
- msg3 = msg3.encode(encoding="utf-8")
202
-
203
- sock.sendto(msg1,tello1_address)
204
-
205
- sock.sendto(msg3,tello3_address)
206
-
207
- event.wait()
208
-
209
- event.clear()
210
-
211
-
212
-
213
- def send_command123(msg1,msg2,msg3):
214
-
215
- print(msg1,msg2,msg3, sep='\n', end='\n')
216
-
217
- msg1 = msg1.encode(encoding="utf-8")
218
-
219
- msg2 = msg2.encode(encoding="utf-8")
220
-
221
- msg3 = msg3.encode(encoding="utf-8")
222
-
223
- sock.sendto(msg1,tello1_address)
224
-
225
- sock.sendto(msg2,tello2_address)
226
-
227
- sock.sendto(msg3,tello3_address)
228
-
229
- event.wait()
230
-
231
- event.clear()
232
-
233
-
234
-
235
- def recv():
236
-
237
- while True:
238
-
239
- try:
240
-
241
- data,server = sock.recvfrom(1518)
242
-
243
- print(data.decode(encoding="utf-8"))
244
-
245
- event.set()
246
-
247
- except Exception:
248
-
249
- break
250
-
251
- recvThread = threading.Thread(target=recv)
252
-
253
- recvThread.start()
254
-
255
-
256
-
257
-
258
-
259
- def main():
260
-
261
- try:
262
-
263
- send_command('command')
264
-
265
- send_command1('streamon')
266
-
267
-
268
-
269
- cap1 = cv2.VideoCapture('udp://0.0.0.0:11111')
270
-
271
- #cap2 = cv2.VideoCapture('udp://0.0.0.0:11111')
272
-
273
- #cap3 = cv2.VideoCapture('udp://0.0.0.0:11111')
274
-
275
-
276
-
277
- while True:
278
-
279
- ret,frame1 = cap1.read()
280
-
281
- cv2.imshow('TelloEDU',frame1)
282
-
283
-
284
-
285
- key = cv2.waitKey(1)
286
-
287
- if key == 27:
288
-
289
- break
290
-
291
-
292
-
293
-
294
-
295
- except Exception as ex:
296
-
297
- print(ex)
298
-
299
- finally:
300
-
301
- cap.release()
302
-
303
- cv2.destroyAllWindows()
304
-
305
- send_command('streamoff')
306
-
307
- sock.close()
308
-
309
- print('--- END ---')
310
-
311
-
312
-
313
- if __name__ == '__main__':
314
-
315
- main()
316
-
317
- ```
318
-
319
317
 
320
318
 
321
319