基于OpenCV的移动物体检测和目标追踪

视频链接:

https://www.bilibili.com/video/av24220271

https://www.bilibili.com/video/av24220271

https://www.bilibili.com/video/av24181594

无人机的未来在于机器视觉,而机器视觉是离不开摄像头的,也就是说无人机的未来离不开图像处理,去年电赛的经历,让我对此深有体会,包括电赛的寻线和追小车,我们都是使用的openmv,首先我要承认openmv的确不错,至少在色块检测中帮了我们很大的忙,关键是容易上手,调试方便快捷。但是其处理性能实在不敢恭维,尤其是做人脸识别,手势识别,光流定点之类的,性能不够用,我尤其是想做特征点检测的,但是openmv根本实现不了那些高大上的功能,而且距离也受限制。思考再三我们打算采用树莓派,但是实际测试尤其是跑光流的时候,也是比较卡,那就更不用说人脸识别和特征点检测之类的了。目前看来只有使用电脑处理了,但是电脑在现在的电赛中一般是不允许使用的,如果是真爱,你就不会为了比赛而比赛,所以我们现在的opencv地面站就诞生了。

基于OpenCV的移动物体检测和目标追踪

基于OpenCV的移动物体检测和目标追踪

基于OpenCV的移动物体检测和目标追踪

基于OpenCV的移动物体检测和目标追踪

基于OpenCV的移动物体检测和目标追踪

基于OpenCV的移动物体检测和目标追踪

基于OpenCV的移动物体检测和目标追踪

这就是目前地面站所融合的几个功能。大家不要先看这几个功能,和openmv比还是十分强大的。尤其是模式3和模式4,我可以不谦虚的说,这个技术已经是目前网上开源当中效果很好的了。目前我开放了地面站模式3的功能供大家使用,实现的功能就是鼠标点击感兴趣物体,鼠标选中到哪个位置飞机就飞到哪个位置,再也不用考虑到光线和颜色的差异了,其优点不知道比甩了简单的色块检测几条街,具体介绍请往下看。
1要连接USB摄像头或者USB接口的图传接收机
2在地面站打开运行之前,电脑必须先连接串口4(COM4),打开设备管理器查看com4是否正确打开,否则程序无法正常运行。可以使用USB转TTL模块,或者数传接口。上位机数据发送的波特率设置为115200,因此数传接口的波特率也必须设定为115200,否则接收数据会出现乱码。
3地面站功能展示仅限于模式3,鼠标选取感兴趣物体,地面站通过串口把目标物体的坐标发送出去。追踪区别于camshift,效果比camshift要好的多,检测距离可以达到几十米。
开发者可以用这个地面站来进行高空追踪,目标定位。
推荐:
图传接收机-->牛牛航模5.8G图传手机接收机 ,
图传发射机-->熊猫发射机5.8G 
图传摄像头-->弹弓摄像头
注意:图传测试的时候建议在空旷的室外,效果较好,室内也是可以的,但是由于墙壁反射的原因图像会不太稳定
通过测试,程序无论是在无人机运动状态下还是在静止状态下,追踪效果都很稳定。
测试视频效果展示:链接:https://pan.baidu.com/s/1IdUXxMEirfNXF0RXTpUhkg 密码:njur
注意我们的主要任务是图像处理,提取目标数据,至于你如何用数据来控制飞机飞行就靠你自己发挥了,不过我们也简单实现了一个点哪里飞哪里的飞控功能。
有问题请联系QQ:1628464345

地面站通讯协议:UAV地面站每隔10ms,发送一组字符串char[10]={‘s’,,,,’#’},波特率115200
Char[0]=’s’,Char[9]=’#’为校验字符

Char[1],char[2],分别代表目标中心坐标X的高8位和低8位 (16进制表示)

char[3],char[4]分别代表目标中心坐标Y的高8位和低8位(16进制表示)

剩余其他字符暂时保留。

以上就是图像处理部分。


无人机目标追踪代码编写
考虑到部分同学可能不知道怎么修改基于无人机地面站追踪的飞控程序,特此做了一个比较详细的教程。代码已经成功移植到飞控上,而且就在昨天3月25号已经测试了,代码可用,但是PID控制参数需要优化。仅供大家参考。以下程序适合市面上所有开源的无人机飞控。大家只需要把一个c文件和一个h头文件添加到你的飞控程序,然后按照下面的步骤修改即可。
第一步向飞控程序里面添加c文件和.h头文件

基于OpenCV的移动物体检测和目标追踪

这两个文件也是小编整理的哦,花了我一天时间呢。可以直接添加到任何开源飞控,不依赖于任何飞控平台。当然变量和函数的命名不能和你的自身飞控代码定义的冲突哈!其实这个代码我们电赛教学视频里面讲解的巡线和追踪思路一样,巡线和追车其都是属于位置控制。具体内容请结合电赛教学视频。

 基于OpenCV的移动物体检测和目标追踪

基于OpenCV的移动物体检测和目标追踪

基于OpenCV的移动物体检测和目标追踪

基于OpenCV的移动物体检测和目标追踪

第二步向飞控程序里面添加串口接收程序:
我这里以串口5为例。
首先在main函数初始化程序部分先初始化串口
 基于OpenCV的移动物体检测和目标追踪
其次粘贴串口部分:
初始化串口的函数
基于OpenCV的移动物体检测和目标追踪
基于OpenCV的移动物体检测和目标追踪
接下来写串口接收中断部分
 基于OpenCV的移动物体检测和目标追踪

 基于OpenCV的移动物体检测和目标追踪

好啦,写到这个位置我们的串口数据接收部分就完成了,那么接下来就该写我们拿这个数据来进行位置控制,
第三步 找到你的飞控程序的任务调度部分,添加第一步.c文件里面的位置控制函数
基于OpenCV的移动物体检测和目标追踪
位置控制函数在我们的.c 文件里面写好了哦
基于OpenCV的移动物体检测和目标追踪
最后通过PID控制就把我们自己的postion_Roll和Position_Pitch计算好了哦。
第四部姿态控制部分
找到你的飞控程序的串级姿态控制的的外环(角度环),添加我们的姿态控制角度
基于OpenCV的移动物体检测和目标追踪
好的,所有的都写完了,我们3月26号测试了一下数据的正确性,然后测了一下高空追踪追踪效果可以,但是PID参数不够好需要进一步优化,没时间啦,月底就出去工作了,剩下的就交给大家去调试吧。
哦忘了第五步了模式切换,通过六通道,也就是辅助2通道的阈值来进行模式切换。找到你的飞控程序的遥控接收部分,设置一下Mode的值吧
 基于OpenCV的移动物体检测和目标追踪
OpenCV处理源代码请联系QQ:1628464345