tello edu 官方python接口的改进
2018-11-27 本文已影响0人
多啦A狗
大疆旗下子公司睿炽发布了一款新的教育、玩具领域的无人机tello edu,和上代产品相比,新产品增加了编队飞行和挑战卡功能,并提供了全新的SDK2.0。官方也给出了python接口的文档,GitHub地址:https://github.com/dji-sdk/Tello-Python
但是这个官方接口存在一些问题,例如使用多线程的方式接收tello的响应消息,而主线程和子线程之间并没有同步机制,导致接收到的相应信息不一定是刚刚发送的,也有可能是之前发送的某条命令。这个问题也导致执行命令文件时需要手动增加延时,以保证上一条代码执行完毕之后再执行下一条。tello在上条命令没有执行完毕的时候发送下一条命令会返回error,也就是如果延时设置不当tello就返回error。
我用python3.6重写一下这个接口,详细内容在GitHub上,GitHub地址:https://github.com/wikeex/tello-python。
我这里摒弃了多线程的方式接收响应消息,每个tello实例都是阻塞的方式执行命令,发送命令之后必须等到该条命令的响应才会发送下一条命令,保证命令的线性执行,也不需要设置延时,代码如下。
from tello import Tello
file_name = sys.argv[1]
with open(file_name, 'r') as f:
commands = f.readlines()
t1 = Tello(tello_ip='192.168.199.3')
for command in commands:
command = command.strip()
# 识别并忽略注释行
if '#' in command:
index = command.index('#')
command = command[0:index].strip()
if not command:
continue
if command:
t1.send_command(command)
print('process completed!')
这里我没有设置tello无响应的超时处理,有需要的可以自行实现。如果需要实现编队飞行,就实例化多个tello对象,并且每个tello对象放在一个线程中。 官方文档中的日志功能也删掉了,有需要的自行实现。