Dji RoboMaster Tello SDK封装.1(对视频接口使用cv2.VideoCapture接收))

云深之无迹 2021-03-21 00:00

首先导入一些编写SDK的一些必要的库

因为是无线的连接所以要加一个网络的线程库,用来连接TT

接着导入时间库,因为会有一些资源的监控函数

导入cv库,这里是cv2,因为底层是C++的实现

最后一个是另外一个资源的监控类

因为是打包SDK的指令,所以就写一个类就好

这里是已经封装好的一些指令

这里有的计算机是端口打开失败,这里的电脑是win10

这个是版本号


点击高级设置

新建一个入站的规则

选择端口

因为TT的通信方式都是UDP,所以这里UDP

允许所有,其实就8889就可以

都打开

写一些info,日后好看好改

重新打开可以设置更多的东西

 def __init__(self, tello_ip: str = '192.168.10.2', debug: bool = True): # 在初始化的函数里面就是传入一个ip以及是否要打开调试功能 # 打开本地的UDP端口在8889为了和Tello通信 self.local_ip = '' self.local_port = 8889 self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 开启新的插口,我这里是喜欢这么叫 self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 通常使用这个设置来加强网络程序的健壮性,后面的参数是断开重新绑定时间,Win系统最多可以留5分钟 self.socket.bind((self.local_ip, self.local_port)) # bind的意义是将已经建立的“空白的”socket绑定在网络上让大家在需要时能够找得到 # 设置Tello的ip和端口信息 self.tello_ip = tello_ip # 在类定义里面定义Tellode IP self.tello_port = 8889 # tello的端口是8889 self.tello_address = (self.tello_ip, self.tello_port) # 在将ip和端口打包成一个合成的地址 self.log = [] # 对于日志的记录是写用一个空列表来放 # 初始化接收线程 self.receive_thread = threading.Thread(target=self._receive_thread) # 这个是新建立一个线程的时候要执行的语句,target的参数是最重要的,要给一个callback对象才可以运行 # 后面的参数是一个函数,在后面有写 self.receive_thread.daemon = True # 子线程daemon默认跟随主线程 # 设置daemon=True会标记其为守护线程,如果剩下的线程只有守护线程时,整个python程序都会退出 self.receive_thread.start() # 开启线程 # Tello 运行时选项 self.stream_state = False # 检查视频流的情况 self.last_frame = None # 最后一帧 self.MAX_TIME_OUT = 15.0 # 最长的超时时间 self.debug = debug # 将Tello设置为命令模式 self.command()

首先写一个初始化的函数,我每一个变量都写了注释

日志功能的设计很简单,日志就是记录用的。

所以就是一个list,相关方法可用

发送命令的函数,比较健壮

是元组,就是sendto函数的地址参数

以及命令就是一个字符串

这个回复函数在另外一个文件里面,判断response是不是空

没错,就是判空

接着是线程函数,要不停的运行

这个是开关

这个函数,是我写整个SDK的初衷

官方的视频接口,我能力不够。一些操作来不了

def send_command(self, command: str, query: bool = False): # 后面的参数是查询,前面是一个字符串,发送给TT用 # 为发出的命令创建的新日志 self.log.append(Stats(command, len(self.log))) # 发送命令给TT self.socket.sendto(command.encode('utf-8'), self.tello_address) # 将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。 # 返回值是发送的字节数,函数主要用于UDP协议。 # 显示确认信息 (如果debug开) if self.debug is True: print('Sending command: {}'.format(command)) # 用Python的字符串方法打印 # 这两个语句就是日志 # 检查命令是否超时(基于“MAX_out_TINE”中的值) start = time.time() # 在日志中未接收到repsonse时运行 while not self.log[-1].got_response(): # 这got_response是以一个函数,在另外一个命令里面 now = time.time() # 现在的时间 difference = now - start # 计算完上面的函数,就是从log里面读取最后一个元素。是一个bool回复 if difference > self.MAX_TIME_OUT: # 如果超时, print('Connection timed out!') # 打印连接超时 break # 接着出去 # 打印Tello响应(如果“debug”为真) if self.debug is True and query is False: print('Response: {}'.format(self.log[-1].get_response()))def _receive_thread(self): # 记得我上面那个多线程函数的参数吗?,就是这个函数,注意写法。带下划线,就就不想用户用 # 回调函数把 while True: # 死循环检查Tello响应,抛出套接字错误(就是一直要保持连接) try: # 这里是错误处理 self.response, ip = self.socket.recvfrom(1024) # recvfrom的功能,以接收从所述设备发送数据的数据和源地址。 # 和参数response,ip相配合 # 返回值是一对(字符串,地址),其中字符串是表示接收数据的字符串, # 地址是发送数据的套接字的地址。 self.log[-1].add_response(self.response) # 接着把这个回复再添加到这个log里面 except socket.error as exc: print('Socket error: {}'.format(exc)) # 最后是抛出一个错误,打印一下def _video_thread(self): # 啊啊啊啊啊,我写这么多的程序就是为了这个接口,嘤嘤嘤 # cv2.VideoCapture这个接口我一定要写出来 cap = cv2.VideoCapture('udp://'+self.tello_ip+':11111') # 在“stream state”为真时运行 while self.stream_state: # 因为是真,下面的语句执行 ret, self.last_frame = cap.read() # 对于参数ret 为True 或者False,代表有没有读取到图片 # 第二个参数frame表示截取到一帧的图片 cv2.imshow('DJI Tello', self.last_frame) # 接着是打印这个照片 # 如果按escape键,视频流将关闭 k = cv2.waitKey(1) & 0xFF if k == 27: break cap.release() cv2.destroyAllWindows()

此时是两个函数的代码

这个是延时得函数

这个是打印日志列表

关闭得函数,就是把端口得资源释放。比较简单得实现

这个函数,记得初始化完毕就调用

分别是起飞和降落,以及最后得下视得摄像头得开启要用最新的测试的固件来打开


评论
  •         温度传感器的精度受哪些因素影响,要先看所用的温度传感器输出哪种信号,不同信号输出的温度传感器影响精度的因素也不同。        现在常用的温度传感器输出信号有以下几种:电阻信号、电流信号、电压信号、数字信号等。以输出电阻信号的温度传感器为例,还细分为正温度系数温度传感器和负温度系数温度传感器,常用的铂电阻PT100/1000温度传感器就是正温度系数,就是说随着温度的升高,输出的电阻值会增大。对于输出
    锦正茂科技 2024-12-03 11:50 141浏览
  • 最近几年,新能源汽车愈发受到消费者的青睐,其销量也是一路走高。据中汽协公布的数据显示,2024年10月,新能源汽车产销分别完成146.3万辆和143万辆,同比分别增长48%和49.6%。而结合各家新能源车企所公布的销量数据来看,比亚迪再度夺得了销冠宝座,其10月新能源汽车销量达到了502657辆,同比增长66.53%。众所周知,比亚迪是新能源汽车领域的重要参与者,其一举一动向来为外界所关注。日前,比亚迪汽车旗下品牌方程豹汽车推出了新车方程豹豹8,该款车型一上市就迅速吸引了消费者的目光,成为SUV
    刘旷 2024-12-02 09:32 138浏览
  • 概述 说明(三)探讨的是比较器一般带有滞回(Hysteresis)功能,为了解决输入信号转换速率不够的问题。前文还提到,即便使能滞回(Hysteresis)功能,还是无法解决SiPM读出测试系统需要解决的问题。本文在说明(三)的基础上,继续探讨为SiPM读出测试系统寻求合适的模拟脉冲检出方案。前四代SiPM使用的高速比较器指标缺陷 由于前端模拟信号属于典型的指数脉冲,所以下降沿转换速率(Slew Rate)过慢,导致比较器检出出现不必要的问题。尽管比较器可以使能滞回(Hysteresis)模块功
    coyoo 2024-12-03 12:20 170浏览
  • 作为优秀工程师的你,已身经百战、阅板无数!请先醒醒,新的项目来了,这是一个既要、又要、还要的产品需求,ARM核心板中一个处理器怎么能实现这么丰富的外围接口?踌躇之际,你偶阅此文。于是,“潘多拉”的魔盒打开了!没错,USB资源就是你打开新世界得钥匙,它能做哪些扩展呢?1.1  USB扩网口通用ARM处理器大多带两路网口,如果项目中有多路网路接口的需求,一般会选择在主板外部加交换机/路由器。当然,出于成本考虑,也可以将Switch芯片集成到ARM核心板或底板上,如KSZ9897、
    万象奥科 2024-12-03 10:24 96浏览
  • 遇到部分串口工具不支持1500000波特率,这时候就需要进行修改,本文以触觉智能RK3562开发板修改系统波特率为115200为例,介绍瑞芯微方案主板Linux修改系统串口波特率教程。温馨提示:瑞芯微方案主板/开发板串口波特率只支持115200或1500000。修改Loader打印波特率查看对应芯片的MINIALL.ini确定要修改的bin文件#查看对应芯片的MINIALL.ini cat rkbin/RKBOOT/RK3562MINIALL.ini修改uart baudrate参数修改以下目
    Industio_触觉智能 2024-12-03 11:28 112浏览
  • TOF多区传感器: ND06   ND06是一款微型多区高集成度ToF测距传感器,其支持24个区域(6 x 4)同步测距,测距范围远达5m,具有测距范围广、精度高、测距稳定等特点。适用于投影仪的无感自动对焦和梯形校正、AIoT、手势识别、智能面板和智能灯具等多种场景。                 如果用ND06进行手势识别,只需要经过三个步骤: 第一步&
    esad0 2024-12-04 11:20 103浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2024-12-02 10:40 144浏览
  • RDDI-DAP错误通常与调试接口相关,特别是在使用CMSIS-DAP协议进行嵌入式系统开发时。以下是一些可能的原因和解决方法: 1. 硬件连接问题:     检查调试器(如ST-Link)与目标板之间的连接是否牢固。     确保所有必要的引脚都已正确连接,没有松动或短路。 2. 电源问题:     确保目标板和调试器都有足够的电源供应。     检查电源电压是否符合目标板的规格要求。 3. 固件问题: &n
    丙丁先生 2024-12-01 17:37 114浏览
  • 当前,智能汽车产业迎来重大变局,随着人工智能、5G、大数据等新一代信息技术的迅猛发展,智能网联汽车正呈现强劲发展势头。11月26日,在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上,紫光展锐与上汽海外出行联合发布搭载紫光展锐A7870的上汽海外MG量产车型,并发布A7710系列UWB数字钥匙解决方案平台,可应用于数字钥匙、活体检测、脚踢雷达、自动泊车等多种智能汽车场景。 联合发布量产车型,推动汽车智能化出海紫光展锐与上汽海外出行达成战略合作,联合发布搭载紫光展锐A7870的量产车型
    紫光展锐 2024-12-03 11:38 126浏览
  • 11-29学习笔记11-29学习笔记习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-02 23:58 92浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦