大疆旗下子公司睿熾發(fā)布了一款新的教育、玩具領域的無人機tello edu雷滋,和上代產品相比平绩,新產品增加了編隊飛行和挑戰(zhàn)卡功能,并提供了全新的SDK2.0快毛。官方也給出了python接口的文檔格嗅,GitHub地址:https://github.com/dji-sdk/Tello-Python
但是這個官方接口存在一些問題番挺,例如使用多線程的方式接收tello的響應消息,而主線程和子線程之間并沒有同步機制屯掖,導致接收到的相應信息不一定是剛剛發(fā)送的玄柏,也有可能是之前發(fā)送的某條命令。這個問題也導致執(zhí)行命令文件時需要手動增加延時贴铜,以保證上一條代碼執(zhí)行完畢之后再執(zhí)行下一條粪摘。tello在上條命令沒有執(zhí)行完畢的時候發(fā)送下一條命令會返回error,也就是如果延時設置不當tello就返回error绍坝。
我用python3.6重寫一下這個接口徘意,詳細內容在GitHub上,GitHub地址:https://github.com/wikeex/tello-python轩褐。
我這里摒棄了多線程的方式接收響應消息椎咧,每個tello實例都是阻塞的方式執(zhí)行命令,發(fā)送命令之后必須等到該條命令的響應才會發(fā)送下一條命令把介,保證命令的線性執(zhí)行勤讽,也不需要設置延時,代碼如下劳澄。
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對象放在一個線程中。 官方文檔中的日志功能也刪掉了砂缩,有需要的自行實現作谚。