通过ROS将DJI Ryze Tello无人机连接至WSL

问题描述 投票:0回答:1

我是一名 Python 初学者程序员,目前正在开展一个项目,该项目涉及使用 ROS2(Humble 发行版)将 Tello 无人机连接到 WSL(Ubuntu 22.04)。 我正在使用 DJItelloPy 库,这是我的测试代码。

import logging
from djitellopy import Tello
Tello.LOGGER.setLevel(logging.DEBUG)

tello = Tello()
tello.connect()
print(tello.get_battery())

我连接到无人机的 wifi,未启用 Windows 防火墙,我在 WSL 中运行代码,但出现错误:

File "/home/maeri_n/.local/lib/python3.10/site-packages/djitellopy/tello.py", line 533, in connect
    raise Exception('Did not receive a state packet from the Tello')
Exception: Did not receive a state packet from the Tello

我什至将所需的端口(8889、8890、11111)转发到 WSL,但出现同样的错误。我不知道是否还有其他问题阻止连接。

此外,无人机与Windows完美连接,因为显示无人机视频帧的代码在Windows中完美运行(我使用VSCode):

import logging
from djitellopy import tello, Tello
import cv2
Tello.LOGGER.setLevel(logging.DEBUG)

def video_tello(drone):
    while True:
        frame = drone.get_frame_read().frame
        cv2.imshow("Frame",frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cv2.destroyAllWindows()
    drone.end()

def main():
    drone = tello.Tello()

    drone.connect()

    drone.streamon()

    video_tello(drone)

main()

我热切地等待反馈。

预先感谢您的帮助。

python port ros windows-subsystem-for-linux tello-drone
1个回答
0
投票

我遇到了你的确切问题,我也尝试使用

转发端口
netsh interface portproxy add v4tov4 listenport=8890 listenaddress=0.0.0.0 connectport=8890 connectaddress=<WSL_IP_Address>

但是好像只转发tcp端口。所以我尝试在 .wslconfig 中设置

networkingMode=mirrored
并且它成功了! 这是文档 我认为它在某种程度上将wsl的ip设置为与windows相同,因此不再存在端口转发问题。

© www.soinside.com 2019 - 2024. All rights reserved.