前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Robomaster SDK源码解读.Camera.上

Robomaster SDK源码解读.Camera.上

作者头像
云深无际
发布2021-03-30 16:59:55
9527
发布2021-03-30 16:59:55
举报
文章被收录于专栏:云深之无迹

先搜索关键字

在这里

对应的引入的库,机器库

相机的库,里面有TT

开始读这个camera的源码,主要是要了解是有什么方法。

我主要是要一个逐帧的方法,因为需要算法去处理每一帧的照片

里面主要是有三个相机类

我们还是主要看TT的方法,我们的硬件是这个

一共10个方法,从第三个开始用了一个装饰器

用了一个@property的装饰器

这个是它的作用

一开始的是初始化的方法,可以看到是继承到robot的,我们稍微看一下

在robot里面看到了drone

这是robot里面对无人机的所有的SDK的封装

所有的SDK方法

对应的用户的文档是在这里

这个是我写的一个demo,在我这里可以看到一个红框

因为这个方法是我们下面要说的方法

可以看到,对于一些涉及硬件的方法都是设置保护了

接着是两个方法

可以看到对于一个

接着是一个传感器函数,这个方法返回的是

在这里破案了,我一直以为是飞机下面的红外对管

接下来是tello的LED灯

搜索

总之这些就是对扩展件灯特效的设置,我之前看SDK,还以为是哪里的灯

注意的是,要想实现这些个功能,扩展件的固件需要是出厂的固件

在SDK里面有说明

我们看一个最简单的例子,设置点阵屏幕的亮度

这个是在代码中的体现,老早就说研究SDK的封装方式。

大疆的这个整的真好~

这个地方的函数有点有趣,get_module是一个方法。

注意我图中画的框子

这个模块有点看不懂

搜索了一圈,看上去应该是一个初始化里面要执行的代码

按照这个函数的命名方法,应该是调用一个方法以后

里面进行的自动化的方法

里面有一些方法是没有在SDK里面写得

这个方法是自动的扫描无人机在局域网里面

可以看到是开启了多线程去扫描的,返回的是一个TT的IP地址

这个方法是当扫描到这个TT的地址以后

去开一个TCP的方法去监听TT的回应,一次缓存区是1024个字节那么大

看这个写的,将Ip以strings的形式加到ip这个列表里面

然后去判断TT返回的信息,是OK的情况的然后在去检测上个方法里面看我下面的打码部分的返回列表里面的ip列表

如果有的话就把这个ip加到机器维护的ip列表里面

而且以日志的方式来打印这个ip列表

这个一开始就是先看源码阅配置的ip,优先级高

如果没有就看自己的程序在电脑里面维护的ip列表

实现了自动的连接

接着用一个元组(不可变),来放IP和端口号码

因为是UDP的连接方式,所以上面的代码也有体现

更加具体的可以参考我以上的说明,等待TT返回的数据

初始化的方法太长了,大部分逻辑都是在写如何稳定的建立连接

这个翻译,我emmmm

这个是所有的程序最后要执行的一个方法,释放所有的资源

这个方法是比较主要的,发送命令用的方法

我们来主要的看一下这个使能sdk的方法

这个里面是写的向端口的8889发送command

在这个方法里面就是对所有连接在主机的TT循环发送开启SDK的指令

我们继续看这个使能的方法,确定这个标识位为1重新发送

如果是0,就用log打印警告

这个方法我后面会用到,就是要保证我的飞行器定高。因为图像识别是要稳定的环境才可以保证成功率

先看这个发送的命令

在协议的文件里面有,参数是这样的

找到参数,这个是打包数据的顺序

返回的是打包好的数据流

这个是打包的逆向过程,解包过程

我们还需要再程序里面获得飞机的三轴信息,因为在决定下一个动作之前

是要知道自己当前的姿态再进行调整。

这里说下具体的发送步骤,首先在程序里面你不用考虑这么多细节。写个函数名字就好~首先是将这个查询的命令去用cmd承接,接着用协议.文字包装协议()创建一个新的对象。接着这个新对象还有一个叫Text_cmd的方法,

这个是设置信道来获得更好的连接性能

组队模式设置

设置订阅的信息

最后是一个对于所有的信息的订阅

在SDK文档内的具体对应表

还记得在协议里面哪个奇怪的字符吗

我们终于读完了关于robot的源码,现在来看我们的camera的类

初始化的时候会初始化5个私有的bianl

有它的连接方式,视频或者音频的开启,以及是不是开启图像窗口预览

接下来是一对功能,开和关闭视频流。这个display的参数我们去探索一下

搜索一下

对于在多媒体的关闭是要关闭视频和音频的接口

这个是默认开启视频流的功能,可以知道可以放三个参数

第一个是要不要直接预览,以及一个地址+协议的类型。视频是TCP的连接

具体是有个叫conn的文件里面有源码,其实我是觉得这个的文件的作用就是管连接。

如果是tcp的协议的话,下面就是建立连接的过程

还有设置3s的超时时间。还用log打印出相应的地址

接着延时0.1继续连接

以及UDP的连接

这个是读取一帧的视频

这个是函数的实现,后面是策略。就是视频流的传出方式

这个是管道的输出方式

代码语言:javascript
复制
http://www.opencv.org.cn/opencvdoc/2.3.2/html/modules/stitching/doc/introduction.html

快12点了,先发了吧

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档