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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1180閲覧

pythonを使ったドローンの制御に関して、ライブ画像がフリーズする問題

253064

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/07 07:09

編集2020/10/07 07:15

#目的
pythonを使ったドローン(tello)の操作。操作内容はPCへドローンのライブ画像を表示し、pc側からコマンド操作にてドローンを制御する。

#できていること
①ライブ画像を表示すること
②コマンドにてドローンを操作すること

#問題
①②を組み合わせるとライブ画像がフリーズしてしまう。(コマンド操作は可能)
whileのループにてドローンの映像を更新しているのですが、2周目でフリーズしてしまいます。

#エラーメッセージ
なし

#環境
windows10 64bit
python 3.8.3
visual studio code 1.49.3
opencv-python 4.4.0.42

import socket import threading import cv2 import time #オブジェクト準備 sock = None #通信ソケット用 cap = None #VideoCapture用 # telloのコマンドの送信&応答の受信 tello_ip = '192.168.10.1' tello_port = 8889 tello_address = (tello_ip, tello_port) #UDP通信のリッスンで使用するがどういう意味? host = '0.0.0.0' port = 9000 locaddr = (host,port) # telloからのビデオストリーミングの受信用 VS_UDP_IP = '0.0.0.0' VS_UDP_PORT = 11111 udp_video_address = 'udp://@' + VS_UDP_IP + ':' + str(VS_UDP_PORT) # 通信用のソケットを作成 #アドレスファミリ:AF_INET(IPv4)、ソケットタイプ:SOCK_DGRAM(UDP) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(locaddr) ##以下からメインプログラム #プログラムの起動メッセージ print ('Tello プログラム開始') def recvtello(): #recv関数が以下のように定義される data, server = sock.recvfrom(1518) #ポート番号1518のサーバと繋ぐ print(data.decode(encoding="utf-8")) #サーバからの返答を書き込む→Telloからの返答 print('a') #Telloがコマンドモードへ突入 sock.sendto('command'.encode('utf-8'), tello_address) #コマンドモードへ切り替える print ('command OK?') time.sleep(1) sock.sendto('streamon'.encode('utf-8'), tello_address) #ストリーミングのON print ('streamon OK?') #データ送信用関数の定義。ここでは定義のみで実行はまだ def sendtello(): msg = input(""); #キーボードからの入力をmsgとする msg = msg.encode(encoding="utf-8") #msgをutf-8形式で書き換える sent = sock.sendto(msg, tello_address) #Telloアドレスへ変換したmsgを送る #画像受信用関数の定義。ここでは定義のみで実行はまだ def livetello(): ret, frame = cap.read() #フレーム画像の読み込み #cv2.imshow('tello', frame) cv2.imshow('tello', cv2.resize(frame, (360, 240))) cv2.waitKey(100) #キー入力を1msだけ待つ cap = cv2.VideoCapture(udp_video_address) #capをTelloアドレスとアクセスしたVideocaputureのコントラクタと定義する while True: #以下の処理がtrueの間は繰り返す try: #以下の処理を実施する livetello() #sendtello() #recvtello() except KeyboardInterrupt: #Ctrl+cが押されたら以下の処理を実行する print('Cntl+c') sock.sendto('land'.encode('utf-8'), tello_address) #着陸 print ('land OK?') time.sleep(3) sock.sendto('streamoff'.encode('utf-8'), tello_address) #ストリーミングOFF print ('streamoff OK?') sock.close() print ('sock close') cv2.destroyAllWindows() #すべてのウィンドウを閉じる cap.release() #cap.readで読み込んだフレーム画像を閉じる break

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

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

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

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

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

y_waiwai

2020/10/07 07:10

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
y_waiwai

2020/10/07 07:11

で、しつもんはなんでしょうか
253064

2020/10/07 07:16

コメント有難う御座います。内容を追記しました。お手数をお掛けしますが、ご確認をお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問