ROBOMASTER TT巡线.1

这就是我们的小主角了

不加扩展件的样子,也可以完成所有的功能

http://www.opdown.com/soft/219172.htm
http://02.down.xindazheng.cn:9705/pcrj/XMind10.rar

这里附上一个思维导图软件的破解版(xmind)~。~

因为是记录过程,所以先不放成品上来,先来写之前的思路和一些中间使用的代码。

先要说明一点目前的飞行器还单独开不了这个摄像头,需要更新固件去开启。

,具体的升级过程后文有。

这个是测试下视摄像头的一段代码,因为是有了'__main__'所以是可以作为一个可执行的脚本去运行的

你收到的py文件会是这个样子的,如果双击的话会一闪而过

所以你需要一个Python的IDE或者是自带的编辑器

第一次打开会让你选择打开方式,我个人推荐VScode和Pycharm

这里为了演示方便使用了IDLE

如果找不到可以使用WIN+S搜索IDLE,注意选择自己的Python解释器

以为每一个版本的库都是在特定的版本下就是不可以混合使用的意思

用IDLE打开以后,运行这个模块

会出现后面的界面,注意。这个是由于没有连接飞机的WIFI造成的

这段代码是我在后面又加入了一个关于时间戳的功能


注意的是,先要选择对TT的IP地址,否则后面的都是空谈。你可以像上文中这样很明确的指定地址,也可以不用写。因为看源码来说,SDK是有自动获取IP的代码区域的。这个看自己的实际情况去写。

之后记得初始化机体,内部完成“command指令的发送。然后设置有没有直接的去播放捕获的视频。

在SDK内部,写到了相关的注释,这个IP仅供参考,具体去看你连接的飞机的IP地址

在WIN10系统下,先点击wifi图标,选择飞行器的连接名字

注意是IPv4的地址就是我们要的ip地址,在有多个网卡的情况下需要这样去做,一般情况下。SDK可以很智能的连接到你的设置设备。

继续看代码因为是对下视摄像头的捕获,所以发送了“dowmvision 1”的指令

以上的demo中用到了这个发送函数,其实是一个类,拥有很多的类方法

(可以考虑是函数一样提供特定功能的代码快)

这个是类的初始化的代码,具体的可以自己去研究

这个是上面下视demo里面的读取帧的SDK实例

这个是读取视频流的函数

这个是读取一帧的函数,可以看到是读的流视频

然后一帧一帧的分出来

里面的类都是在这里被定义,离实现已经很靠近了

具体的视频流的处理与输出看这个media的类

在初始化里面就完成了对机器视频流的获取

可以看到视频的编码是H.264的格式

可以看到,用到了多线程。有解码线程,显示线程,以及视频流的帧线程等

后面是关于声音相关的线程,TT没有扬声器,所以不读了

这些是它的一些优点

这个是conn的py文件里面的函数,主要是处理接收的各种流数据

主要是对各种线程的处理

以及析构函数,销毁对象时调用

这个地方我们就看这个UDP的参数的对应的代码段

如果是UDP的话就调用两条函数,关于网络的,不解释了

接着最后是开启新的线程来处理

以及对应还有断开的功能,就是先关闭线程

然后把队列弹出,把端口释放,队列清空,打印日志

这个是接收线程

先把标志位变为真,打印日志

接着因为上面标志位的原因,这个循环开始运行

接着是一个错误捕获,没有用if来实现,很有python味道。如果连接线程为空,直接跳出。真就继续,其实写代码就是在管理和维护各种标志位的状态。

如果是正常就按照4096的最佳接收数据来接收,如果标志位为假就断开,可以看到是不停的保证数据的直接传输的。失败重连会导致计数器+1,之后会去判断队列的情况,后面的队列的相关的函数,我不熟悉,不分析了。

如果队列没有满的话,而且是debug开启的话,就打印连接的次数,数据的长度,以及具体的数据。

最后是考虑其超时的问题,超时会打印日志,接着就抛出错误,然后将标志位重置~~~~

最后一个函数啦!就是读取缓存区的函数,超时的时间是2(我不知道单位)

可以看到这个函数的核心就是这个队列的get()方法

这个开启的视频流的方法,里面有三个参数,一个是要不要开始预览,一个是地址(元组传递),以及连接的方式(TCP和UDP二选一)

一开始的日志会打印,连接的地址和协议

接着调用连接线程,上面我写过

标志位更新,

然后进入下面的解码的线程

接着是这个解码线程,从队列里面读取一帧数据,将它送入

_h264_decode这个方法内解码,接着是一个循环来进行单帧的处理,包括单帧计数,%30以后得到一帧,接着将完整的一帧存入队列,即使队列满了也没有关系,只是打日志。解码一帧完成,大部分功能是进行帧计数,具体的运算过程看不上。

视频流显示线程,在同时满足视频显示打开和有视频流的情况下,继续执行,从上面的解码队列里面得到一帧画面。下面是一个判断,不分析了。

如果没有什么错误的话,就将这一帧画面就用numpy的array来存放,再赋值给img,接着用cv2去打印~~~

后面的代码实现也是用了这个官方的SDK,官方好在是将解码直接集成了


上面的是对于官方SDK从连接设备到获取视频,到屏幕出现动态画面的完整流程做了简单的分析。

这个也是一个小demo,来验证TT的基本功能,以及连接情况。

https://robomaster-dev.readthedocs.io/zh_CN/latest/python_sdk/beginner_drone.html

对于SDK的使用,可以去看官方的文档

也可以看我写过的一些文章Robomaster SDK安装(Win10+Py3.8)

Robomaster SDK源码解读.Camera.上

RoboMaster SDK 解读(TT无人机)

RoboMaster SDK解读.1

RoboMaster SDK 解读.3

RoboMaster SDK 解读.4

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

Dji RoboMaster Tello SDK封装.2

Dji RoboMaster Tello SDK封装.3(回复指令解包类)

Dji RoboMaster Tello SDK封装.4(打包,安装)

基于大疆EP和opencv完成人脸跟随项目(没EP车车哈)

openmv(opencv)无人机巡线代码(参考用,还没有上机)


虽然上面我这些自己写的东西没有什么技术含量,但是胜在关于Dji SDK的文章比较少,我这些个文章算是先河。大家可以参考用。


(0)

相关推荐

  • 【精品博文】用我的SDK亲吻你的FreeRTOS

    赢一个双肩背包 有多难? 戳一下试试看! →_→ 长摁识别 屌丝男们,题目是不是很诱惑?刚开始接触,这个过程算是强吻吧,本来我是想用Vivado16.2来开发的,这个版本上SDK已经添加了FreeRT ...

  • ROBOMASTER TT巡线.6(后记)

    这篇写一些之后需要改进的地方: 图像算法不会再用简单的边缘算法了,会使用快速回归算法来拟合赛道.我正在将openmv中的相关函数转换为通用的Python接口 在控制方面会使用完整的PID控制,相关的工 ...

  • ROBOMASTER TT巡线.5(汇总)

    预备知识 预备知识分为两块,分别是:软件+硬件.相应的知识体系在下面的思维导图中有所体现. 最重要的是软件的搭建: Python环境搭建 Robomaster SDK安装 相关Python库的安装 注 ...

  • ROBOMASTER TT巡线.4(基础知识+外链)

    https://blog.csdn.net/aidem_brown/article/details/81357428 https://blog.csdn.net/weixin_39911998/art ...

  • ROBOMASTER TT巡线.3

    继续接着上篇文章.我们现在为止已经获得处理好的二值化图像了,接着就是提取线的特征了. 这里我们插一个小细节,就是图像的方向不对 怎么处理? 可能最牛逼的做法就是,飞机横着飞了,相对的图像就正了. em ...

  • ROBOMASTER TT巡线.2

    我们上篇文章完成了对TT下视摄像头的测试,以及相应的使用了内置的RC指令,完成了对飞行器的实时控制. 具体的RC参数含义在这里 这篇文章我们来分析完成无人机的巡线操作需要的一个大致的流程. 我们的TT ...

  • 电力高空巡线,了不起的女电工

    电力高空巡线,了不起的女电工

  • 【青少年编程】【二级】巡线小车

    Scratch竞赛交流群已成立(适合6至18周岁的青少年),公众号后台回复[Scratch],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载"可获取以往学习 ...

  • 大疆推编程无人机RoboMaster TT、大疆将发布全新Osmo Mobile 4稳定器、俄展示新...

    热点资讯 1.大疆新推出编程无人机RoboMaster TT创造力套装 2.大疆即将发布全新Osmo Mobile 4稳定器 3.俄罗斯把无人机塞进远程火箭弹里 发射后能快速侦察目标 4.坦桑尼亚民航 ...

  • 高温之下,供电小哥巡线时间太长,结果……

    高温之下,供电小哥巡线时间太长,结果……