You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Anaconda环境运行DJI Tello无人机控制代码时遭遇'Did not receive state packet from Tello'错误寻求帮助

解决Tello无人机连接时"Did not receive state packet from Tello"错误

我之前帮不少开发者排查过这个问题,这个错误本质是电脑和Tello之间的状态监听链路没建立起来,大概率是网络、端口或者环境配置的问题。结合你的代码和错误日志,给你几个针对性的解决步骤:

1. 先确认网络连接的正确性

  • 确保你的电脑只连接Tello的WiFi热点(默认名称是Tello-XXXXXX),关掉其他网络(比如以太网、手机热点),避免系统路由混乱导致状态包传不回来。
  • 打开命令提示符,执行ping 192.168.10.1,如果出现丢包或者请求超时,说明WiFi连接不稳定:重启Tello无人机,或者重新连接一次WiFi试试。

2. 检查状态监听端口是否被占用

djitellopy默认用8889端口发指令,8890端口接收状态包。如果这两个端口被其他程序占用,就会收不到状态包:

  • 在Windows上执行命令:
    netstat -ano | findstr :8890
    
    找到输出里的PID,打开任务管理器结束对应的进程。
  • 也可以尝试在初始化Tello时指定备用端口(如果默认端口确实被占用):
    me = tello.Tello(state_port=8891)  # 改用8891端口监听状态
    

3. 延长连接超时时间

有时候是状态包传输延迟,默认的超时时间不够。你可以修改connect()方法的超时参数:

me.connect(timeout=20)  # 把超时时间从默认的10秒改成20秒

4. 确保Anaconda环境的依赖兼容

Anaconda环境偶尔会有依赖冲突,建议你:

  • 创建一个干净的虚拟环境专门跑Tello代码:
    conda create -n tello_env python=3.9
    conda activate tello_env
    pip install djitellopy==2.4.0  # 这个版本稳定性很高,适配多数Python版本
    
  • 避免用太新的Python版本(比如3.11+),目前djitellopy对新版本的兼容性还在完善中。

5. 硬件层面排查

  • 确保Tello电量充足(低于20%会限制连接),重启无人机试试。
  • 远离WiFi干扰源(比如路由器、蓝牙音箱),找个空旷的地方测试。

修改后的测试代码

你可以试试这个带异常处理和超时设置的版本:

from djitellopy import tello
from time import sleep

try:
    me = tello.Tello()
    print("Tello对象初始化完成,正在连接...")
    me.connect(timeout=20)
    battery = me.get_battery()
    print(f"无人机电池电量: {battery}%")
    
    if battery > 20:  # 确保电量足够起飞
        me.takeoff()
        sleep(1)
        me.send_rc_control(0, 20, 0, 0)
        sleep(2)
        me.send_rc_control(0, 0, 0, 0)
        sleep(1)
        me.land()
    else:
        print("电量不足,请充电后再尝试")
except Exception as e:
    print(f"连接或控制出错: {str(e)}")
    if 'me' in locals():
        me.end()  # 确保断开连接

内容的提问来源于stack exchange,提问作者Mythili R6

火山引擎 最新活动