#python #sockets #opencv #udp #tello-drone
#python #сокеты #opencv #udp #tello-drone
Вопрос:
У меня небольшая проблема, связанная с моим скриптом python, который взаимодействует с моим дроном. Моя программа работает отлично, но после отправки команды «streamon» дрону я должен получить видеопоток дрона. Однако я ничего не получаю. Чтобы сузить проблему, я отправляю свой код другу, чтобы он мог его попробовать. Он может получать видео, я попробовал его с помощью своего дрона на своем ПК, он также работает. Итак, я предполагаю, что проблема связана с моим компьютером. Я перепробовал все, начиная с обновления python, терминала для отладки, пробуя его на виртуальной машине Linux…. Есть ли у вас какие-либо идеи, в чем может быть проблема? вот мой скрипт на python :
# Communication script with tello drone, connected via TELLO wifi network
print ('rnrnTello drone communication toolrn')
print("...importing modules...")
import threading
import socket
import sys
import time
import platform
import cv2
print("Modules imported")
print("...Initialiasing UDP server to get video stream....")
drone_videostream = cv2.VideoCapture('udp://@0.0.0.0:11111')
print("Server initialised")
# my local adress to receive UDP packets from tello DRONE
host = ''
port = 9000
locaddr = (host,port)
print("...creation of UDP socket...")
# Create a UDP socket (UDP Portocol to receive and send UDP packets from/to drone)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Got drone port and ip adress from network (explained in official SDK documentation)
tello_address = ('192.168.10.1', 8889)
print("UDP socket created")
sock.bind(locaddr)
width = 320
height = 240
def receiveStream() :
print("...receiving stream...")
while True :
try :
ret, frame = drone_videostream.read()
except Exception :
print(Exception)
if ret :
cv2.imshow("LiveStream", frame)
if cv2.waitKey(25) amp; 0xFF == ord('q') :
break
cap.release()
cv2.destroyAllWindows()
def receiving():
while True:
try:
data, server = sock.recvfrom(1518)
print(data.decode(encoding="utf-8"))
except Exception:
print ('nExit . . .n')
break
receiveStreamThread = threading.Thread(target=receiveStream)
print ("...initialiazing connection with tello drone...")
message = "command"
message = message.encode(encoding="utf-8")
sent = sock.sendto(message, tello_address)
print("Connection established")
#create a thread that will excute the receiving() function
receiveThread = threading.Thread(target=receiving)
receiveThread.start()
while True :
message = input(str("Enter a command :rn"))
if message == "streamon":
message = message.encode(encoding="utf-8")
sent = sock.sendto(message, tello_address)
receiveStreamThread.start()
else :
message = message.encode(encoding="utf-8")
sent = sock.sendto(message, tello_address)
Лучшие
Ответ №1:
Попробуйте запустить wireshark во время запуска вашей программы. Таким образом, вы можете точно видеть, какой трафик отправляется и принимается. Ваш друг может сделать то же самое, и вы можете сравнить результат, чтобы попытаться определить, где он терпит неудачу.
Проблема может быть вызвана сетевыми настройками вашего компьютера. Вы используете брандмауэр, который блокирует трафик дронов?