无法从 tello 无人机接收视频流

Unable to receive vídeo Stream from tello drone

我正在写一个 python 脚本,以便通过 wifi 与我的 tello 无人机通信。 一旦与无人机连接,我就可以发送 UDP 数据包来发送命令(这非常有效)。 我想通过到达端口 11111 上的 udp 服务器的 UDP 数据包接收来自无人机的视频流。SDK 文档“https://dl-cdn.ryzerobotics.com/downloads/tello/20180910/Tello%20SDK 对此进行了描述%20Documentation%20EN_1.3.pdf".


print ('\r\n\r\nTello drone communication tool\r\n')

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 :
        ret, frame = drone_videostream.read()
        img = cv2.resize(frame, (width, height))
        cv2.imshow("LiveStream", frame)
        cv2.waitKey(1)
        drone_videostream.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


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()

receiveStreamThread = threading.Thread(target=receiveStream)


while True :
    message = input(str("Enter a command :\r\n"))
    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)


当我向无人机发送“streamon”命令时,我无法读取发送的UDP数据包。我收到以下错误:

error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'

这意味着帧是空的,因此没有收到图像。

你知道我为什么收不到吗?

非常感谢您的提前帮助, 最好 :)

最近经常玩tello

我从你的代码中看到的是你在右侧输入了“命令”,灯应该变成绿色。一旦您“流式传输”,应该是一条 return 消息。检查此消息以查看是否有任何错误。

唯一明显的错误是视频源 ID。你按照手动说的做了。

但根据我的经验,我能够获得 UDP 流的唯一 IP 是来自 udp://192.168.10.1:11111

你可以从ffplay udp://192.168.10.1:11111看看能不能看到

嗨那些正在关注 murtaza 研讨会的人, 并且无法获取视频流, 使用 Open CV 库版本 4.4.0.46 和 python 解释器 3.9.0。 尽量确保您使用以上指定的版本。

我这边的问题已解决如下,看来我的防病毒软件阻止了来自 tello 无人机的传入视频数据包。如果您有 windows 防御者,请在使用 tello 无人机时关闭 public 和专用网络防火墙。