赞
踩
上篇文章我们应该可以掌握使用socket调试工具操控Tello EDU无人机,那么本篇文章我们将使用“正宗”python语言来实现Tello EDU的的控制,接下来直接上代码,我会在代码注释中对代码进行讲解:
# # Tello EDU Control Demo # # Hopes_li # #2020/4/28 import threading #导入线程模块 import socket #导入套接字模块 import sys #导入系统模块(其实没用到) import time #导入时间模块 #设置主机及端口号 host = '' port = 8889 locaddr = (host,port) # 创建UDP的socket通信 #获取Udp/Ip套接字(socket就是套接字) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #第一个参数为socket家族:有AF_UNIX基于文件类型,及AF_INET基于网络类型 #第二个参数为socket_type:流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM(datagram)、原始套接字SOCK_RAW tello_address = ('192.168.10.1', 8889) #设置tello主机及端口号 sock.bind(locaddr) #绑定(主机,端口号)到套接字 #定义数据接收函数(从Tello EDU返回的信息) def recv(): count = 0 while True: try: data, server = sock.recvfrom(1518) #接收UDP数据;data为接收的数据,server为客户地址,1518为每次接收字节数 print(data.decode(encoding="utf-8")) #输出从socket接收的数据,并以编码为"utf-8"; except Exception: print ('\nExit . . .\n') break print ('\r\n\r\nTello EDU Demo.\r\n') print ('end -- 输入可退出.\r\n') #启动多线程 recvThread = threading.Thread(target=recv) #通过Thread类进行对象实例化为recvThread; recvThread.start() #启动多线程 while True: try: #使用异常 msg = input("") #输入指令 if not msg: break #如果没有指令则退出 if 'end' in msg: print ('...') sock.close() #关闭套接字 break # Send data msg = msg.encode(encoding="utf-8") #对要发送的信息进行编码 sock.sendto(msg, tello_address) #发送UDP数据 except KeyboardInterrupt: print ('\n . . .\n') sock.close() #关闭套接字 break
运行之后还没完,这是肯定的,因为我们还需要在控制台中输入相应的指令,然后回车发送(这点肯定不需要我讲了)就是这么简单,感觉这篇文章好像没讲点啥东西^ - ^ ,但是我们已经成功通过python来控制Tello EDU了。
另外我们每输入一条指令,Tello EDU都会给我们反馈一条信息,“ok”就代表发送成功,“error”就代表发送失败(这都是肯定的)。
有时候,特别是在发送“takeoff”指令的时候会反馈一条“error”,老是感觉没啥问题啊!其实大概率是Tello的电池电量不足了,所以会反馈“error”(为啥不任性话些捏,让我迟迟没找到error的点)
当然在SDK里不仅给我们提供了控制指令,还提供了读取命令用于读取此时Tello的信息,比如“电池电量”、“高度”等等,都可以在SDK文档中查询。
最后我觉得在所有的指令中唯独弧线飞行“curve”不太好理解,而且也是报错最多的,然后我就给睿炽发邮件咨询了,以下是回复的邮件(半天就回复了,还是蛮积极的)
以上就是本篇文章所有内容,使用Python示例程序控制Tello EDU就是这么简单!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。