大疆睿炽Tello EDU无人机python操控之二——使用Tello-Python-master示例程序控制Tello EDU无人机

使用Tello-Python-master示例程序控制Tello EDU

上篇文章我们应该可以掌握使用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”不太好理解,而且也是报错最多的,然后我就给睿炽发邮件咨询了,以下是回复的邮件(半天就回复了,还是蛮积极的)
大疆睿炽Tello EDU无人机python操控之二——使用Tello-Python-master示例程序控制Tello EDU无人机_第1张图片
以上就是本篇文章所有内容,使用Python示例程序控制Tello EDU就是这么简单!

你可能感兴趣的:(Python教学,Tello,Python)