我是一名 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()
我热切地等待反馈。
预先感谢您的帮助。
我遇到了你的确切问题,我也尝试使用
转发端口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相同,因此不再存在端口转发问题。