Невозможно прочитать UDP-пакеты

#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 networkprint ('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 во время запуска вашей программы. Таким образом, вы можете точно видеть, какой трафик отправляется и принимается. Ваш друг может сделать то же самое, и вы можете сравнить результат, чтобы попытаться определить, где он терпит неудачу.

Проблема может быть вызвана сетевыми настройками вашего компьютера. Вы используете брандмауэр, который блокирует трафик дронов?