3 Star 26 Fork 7

安乾军 / KCF系列算法无人机跟踪

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MulanPSL-2.0

KCF算法无人机跟踪

介绍

自己搭建的无人机跟踪实验,主要讲软件,硬件的需要等等

基础知识准备

整个系统需要两部分,识别程序和控制无人机运动的程序,都是Python脚本,但运行需要在Ubuntu下用ROS进行通讯,所以需要学习ROS的一些基础用法

首先安装Ubuntu双系统,不要用虚拟机,后面没法操作了,双系统不麻烦而且很香,看整个教程,讲的很详细:Ubuntu双系统安装教程

安装好Ubuntu之后需要安装ROS,这里推荐用小鱼的一键安装,上链接:小鱼的ROS一键安装

ROS教程看赵虚左的课程,简单看个3章就可以了,点这个链接:ROS机器人入门,后面还有他做的文档:ROS文档

ROS基本会用了以后,可以跑一些别人的代码例程,推荐一下肖坤的无人机仿真系列,继续上链接:肖坤教程,主要看以下几章:仿真平台基础配置、目标检测与跟踪、darknet环境安装。其实跟我之后要介绍的方法不太一样,但你可以玩玩这个仿真环境,有个感受,他用的是YOLO算法

除了他这个比较复杂的仿真,我自己搭建的很简单的仿真环境是看这个教程学习的,你也可以学习一下,看看Gazebo里面很多东西是怎么设置的,上链接:PX4无人机-Gazebo仿真实现移动物体的跟踪

然后建议自己跑一下YOLO算法,感受一下目标识别程序的大概,我自己当时就是这么学习的,放一下当时老师给我们的链接:YOLO V5的安装与使用,这个直接在Windows环境下跑就可以了,按照帖子里面的步骤即可,写的非常详细。把猫狗数据集放在了网盘里,最开始学习用猫狗是很容易上手的,上链接:[猫狗数据集](链接:https://pan.baidu.com/s/1LXnXUBP1HeC75UqqTdMbZA?pwd=tq1k 提取码:tq1k)

KCF的基本原理

原理在网上都是百度到,这是我自己画的图,是找到KCF的MATLAB代码一步一步运行程序跑出来的,可以看清楚每一步操作对图片做了什么工作,你也可以这么做,有利于对原理的理解

输入图片说明

在这部分,学习KCF原理的时候,会有一个图像的HOG特征,也就是颜色梯度直方图,当时在做实验的时候发现,人物处于草地这种复杂背景中时会比水泥地这种简单背景跟踪效果更好,因为HOG提取的是一个图像的轮廓信息,而草地本身就很复杂了,相对水泥地来说就特别不友好,针对这种问题可以用颜色来区分等等方法。我觉得如果单纯做图像的可以去考虑这些,,

草地水泥地

KCF的python程序

这部分介绍几个KCF的Python程序以及其改进版本 1.opencv-KCF,这个是直接用python第三方库直接封装好的代码直接运行的,可能需要安装一些第三方库,pip install opencv-python opencv-python-contrib,如果还有别的错误直接百度解决就好了。下面具体讲一下这个代码怎么运行的:

输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明 主要看这段函数,是最主要的内容 输入图片说明 输入图片说明

2.第二个主要是说明CSRT ,在上述图3那里能够添加一个新的算法:CSRT,没有其他的改动,这个算法的特点是能够适应尺度变化,而且对于非矩形目标的跟踪效果更好,不再具体讲代码,这个没有具体文件,自己改一下调用算法就行了。

3.第三个说一下DSST算法 ,这个对于目标的尺度大小变化最鲁棒,而且是在无人机上使用效果最好的,有了上述代码经验,我们在自此基础上,看DSST算法的代码: 输入图片说明 输入图片说明 这里调用的tracker.py是网上大佬手撸出来的,每一个小段都有详细的注释,可以参考学习一下,整个流程到底是啥意思。然后tracker.py中还调用了一个fhog.py的文件,这个是跟踪使用的图像特征HOG,fhog是其升级版,而且他的代码用了C++加速,所以最后运行速度还是很客观的,关于hog的性质理解可以参考这两个链接:HOG特征笔记HOG特征-简书

所以这个代码共有三个文件:run.py tracker.py fhog.py 需要运行的是run.py

4.第四个代码说一下动态框选 ,由于上述手撸的DSST程序,有个小小的缺点,就是他会在相机打开的那一瞬间的一帧中让你选择需要跟踪的目标进行框选,所以在无人机上的应用就会很麻烦,最好是画面一直在动, 等目标何时出现了,我再进行框选。 这个想法我目前认为可以跟YOLO算法结合一下,让YOLO也有可选择性,也挺好的。下面讲一下这个代码我怎么改的,也是跟网上的大佬写的代码拼接...需要运行的是run2.py 输入图片说明 输入图片说明 调用tracker函数就和DSST那个代码一样了,所以这个脚本主要功能是能 动态框选

5.第五个代码说一下如何初始化多个跟踪器,进行性能对比 ,这部分代码仍然是在上一个代码的基础上加以修改得到的,我们的目标即,通过一个同矩形进行初始化,保证每个算法得到的初始信息是相同的,进而对比各种算法性能优劣,需要运行的是run3.py,简略介绍如下: 输入图片说明 输入图片说明

效果图如下:

输入图片说明

至此,识别跟踪算法的python程序就讲解完毕了,我还上传了KCF的MATLAB代码版本,是原著作者的代码,写的比较清晰,可以自己一步一步进行运行看其数学远离,因为KCF是最典型的相关滤波跟踪算法,相比深度学习算法,它很多数学操作是仍然能看到的,对理解图像识别算法有很大的意义。

接下来,讲解一下如何将识别算法的信息可以用起来控制四旋翼无人机进行运动,即控制程序。

KCF及相关算法的MATLAB代码

写KCF那个大神的源代码在他的主页上,代码我也在这个帖子里的文件夹上传了,但视频序列的文件夹有点大,我弄个百度网盘放进来,其他的DSST代码和SAMF代码也是,可以直接百度网盘下载,大神的网页还有别的研究,可以自己去学习一下,这部分MATLAB的代码可以自己一步一步运行来看数学逻辑,比python要好懂,原理都一样,但由于我们后面用到的都是python文件,就不详细介绍了这块了,如果不懂可以和我联系

由于跑代码需要用到的视频集有点多放不太下,这里放上百度网盘链接:https://pan.baidu.com/s/1lTdPkDHkJppBgDq2-WD5Bw?pwd=gmao 提取码:gmao

直接下载百度网盘的代码吧,可以直接运行,这个帖子里的少视频集,直接运行run.m文件

无人机跟踪程序介绍

仿真

先上原理框图,这里需要稍微懂一点ROS(因为我也只是懂一点点),我理解到的ROS在这个任务中的工作主要就是收发信息,节点管理,统一接口方式这样。

无人机目标跟踪框架

这部分会有gazebo仿真和实物两部分,一般都先在Gazebo上先把代码跑通,然后开始调试无人机实物,这样效率比较高,前面也放了肖坤的大环境,可以跑跑里面的键盘控制无人机室内飞行,跟控制小海龟是一样的,这里也是放一个我学习Gazebo仿真时的一个网上的教程:PX4无人机-Gazebo仿真实现移动物体的跟踪

然后对上面这个例程进行一些小的修改:给四旋翼安装一个下置摄像头,在无人机升起到固定高度之后,运用摄像头捕获到的图像使用KCF系列算法对小车进行识别,然后根据小车识别框在整个视频画面中距离中心的距离来控制无人机飞行,这里的目标就是始终保持小车在无人机画面的中心。

无人机跟踪小车仿真 无人机跟踪小车仿真控制图

在这一块还有一个毕设中的小思考,因为在实物验证中,师兄帮忙飞四旋翼,每次飞行的高度肯定是不一样的,那么伴随着跟踪框在争个画面中的移动速度是不一样的,它反应速度也会不同,离得太近的时候过于灵敏,离得太远的时候反应很慢,跟不上,所以师兄的建议就是把高度信息引入控制回路中,这个高度信息是PX4就可以获取的,这个我也在仿真中跑通并在实物上运行成果了。

无人机ROS控制代码

首先讲Gazebo仿真的

Gazebo建模在文章开头给过链接了,按照那个文章进行建模然后修改核心代码;将控制C代码制作成工作空间的格式,然后运行,Python不需要这个,可以一个一个Python文件运行来打开节点;

在仿真中控制无人机垂直飞到一定高度,然后打开摄像头,跟踪下方小车,然后用键盘控制小车移动,无人机就会跟踪小车进行移动了。 hover1

在用这个程序将无人机飞起来之后,打开摄像头,运行KCF系列程序

Ubuntu_KCF

运行KCF,会手动框选目标小车,此时需要速度快一点,不然无人机会飘走;KCF程序会将目标框的坐标输出出来通过ROS程序发送给控制程序

然后运行控制程序,根据目标框中心的坐标与整个摄像头屏幕中心的偏离程度来进行控制,PID控制,输出无人机的速度信息,封装成MAVROS信息,发送给飞控板

control_h

上实物

在上面仿真跑通之后,就需要将程序移植到实物四旋翼上,对真实目标进行跟踪啦,当时我们测试了两套硬件设备。 NX

第一套:使用NVIDIA jetson xavier nx作为板载计算机,其GPU搭载48个Tensor核心的384核NVIDIA Volta™ GPU,视觉加速器采用7通道VLIW视觉处理器,此计算机适用于无人机、智能摄像头、高分辨率传感器和其他IoT嵌入式系统等高性能AI系统。目标识别使用USB单目摄像头,其下方的Inter T265是追踪摄像头用于室内吊挂飞行时的室内定位使用,其包含两个语言镜头传感器、一个IMU和一个VPU,这样其可以利用环境中的视觉特征进行定位追踪;GPS用于室外实验定位;使用Pixhawk飞控模块,其是一款无人机控制系统

NUC

第二套:使用Inter迷你电脑NUC11TNKi5 薄款作为板载计算机,其使用了i5-1135G7处理器,8G内存,整机功率可以达到120瓦,与NVIDIA jetson xavier nx相比,此板载计算机的优势在于其优异的CPU性能,对于相关滤波跟踪算法此类只需要元素点乘运算而不需要像基于深度学习的目标跟踪算法那样海量的矩阵运算,在此计算机上测试跟踪算法的帧率能够比nx计算机快3-4倍,这样更有利于目标的稳定跟踪。

如果用深度学习比如YOLO算法的话,还是NX更快的,而且那个T265i是专门用来室内定位的,室外直接用GPS,因为PX4的程序是只有在知道位置信息的情况下才能进入off broad模式的,即板外模式,这里的板是说pixhawk,pixhawk外就是无人机上携带的那个计算机NX或者NUC。还有一个inter的T435i摄像头,海智同学是用这个摄像头和NX板来做YOLO的跟踪,435i的特点是有红外测距,所以他需要将摄像头读到物体的距离信息引入到跟踪程序当中,但当时发现一个BUG就是,红外对阳光下和阴影下测距会产生极大的漂移,使无人机不知道该怎么飞,具体现象就是,无人机跟踪我好好的,我从阳光下进入阴影处的一刹那,无人机就傻眼了。而我用这种普通的USB摄像头,单目的是不能直接得到距离信息的,需要有一个相机倾斜安装角度和引入飞机高度以及视频像素来计算物体的距离,距离的测算写到代码中,应该不会出现这个温度影响的漂移,但这个代码我懒惰了,不想写了。。。

还发现了一个问题就是,DSST算法已经能够很好的跟随物体的前后移动,大小的变化来改变框的大小了,我根据这个框的大小来控制无人机的前后运动,使得跟踪框的大小基本保持一个固定的大小,但帧数提高后,会使得跟踪框大小变化速度快,传到控制无人机那块之后就使得无人机前后晃动很快,白杨师兄建议加一个均值滤波,这个我可没懒惰,给写出来了

这里有两种均值滤波,一种是每10帧取平均当作一帧数据用,但这样会降低帧率,使得控制还是阶跃,而当我们把前10帧取平均当作第1帧数据,第2帧到第11帧取平均当作第2帧数据,这样下来,帧率并没有变化,但目标框的大小变化会变得很平滑。 从3帧平均,5帧平均到10帧平均都试一下,最后会发现10帧平均的时候已经比较平滑啦。 均值滤波

实物无人机控制方法

在用实物飞行时,摄像头连接到NUC上时,会出现找不到那个是摄像头的USB的现象,就会使程序启动失败,而且好像是先在ROS中开启MAVROS,再开启摄像头进行识别,具体记不清了,时间有点久了....然后写了一个寻找Usb的小程序,当然更好的方法是绑定接口,我懒了也没学...

还有一个细节是,需要在地面站电脑上装远程桌面nomachine和录屏软件Kazam what_usb

实物飞行运行的代码是DSST算法,这个算法有更好的尺度适应能力,更好的跟踪目标的移动,这里的DSST代码也进行了加入ROS节点的修改,与上面介绍的KCF大同小异,代码已经上传,大家可以自己进行学习。

十次滤波控制程序,上面有提到,就是将十次速度输出进行均值滤波,但仍然是十次输出,不改变频率,这样无人机的运动就会变得光滑

control_10

最后,现场图如下,帅气智哥担当目标~无人机可以跟随目标前后上下左右移动,而且移动比较光滑 输入图片说明

至此,整个教程就结束啦,可能还有一些小细节没有写进去,时间太久了,记不太清了,很多硬件的东西没有详细介绍,比如飞控板和机载电脑以及摄像头的连接等等,这些大家可以自己去搜索一下。

与我联系

QQ邮箱:980439590@qq.com

木兰宽松许可证, 第2版 木兰宽松许可证, 第2版 2020年1月 http://license.coscl.org.cn/MulanPSL2 您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束: 0. 定义 “软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。 “贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。 “贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。 “法人实体”是指提交贡献的机构及其“关联实体”。 “关联实体”是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。 1. 授予版权许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。 2. 授予专利许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。 3. 无商标许可 “本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。 4. 分发限制 您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。 5. 免责声明与责任限制 “软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 6. 语言 “本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。 条款结束 如何将木兰宽松许可证,第2版,应用到您的软件 如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步: 1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字; 2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中; 3, 请将如下声明文本放入每个源文件的头部注释中。 Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details. Mulan Permissive Software License,Version 2 Mulan Permissive Software License,Version 2 (Mulan PSL v2) January 2020 http://license.coscl.org.cn/MulanPSL2 Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions: 0. Definition Software means the program and related documents which are licensed under this License and comprise all Contribution(s). Contribution means the copyrightable work licensed by a particular Contributor under this License. Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License. Legal Entity means the entity making a Contribution and all its Affiliates. Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity. 1. Grant of Copyright License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not. 2. Grant of Patent License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken. 3. No Trademark License No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4. 4. Distribution Restriction You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software. 5. Disclaimer of Warranty and Limitation of Liability THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 6. Language THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL. END OF THE TERMS AND CONDITIONS How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps: i Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner; ii Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package; iii Attach the statement to the appropriate annotated syntax at the beginning of each source file. Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details.

简介

自己搭建的无人机跟踪实验,主要讲软件,硬件的需要等等,为初学者提供学习建议及需要学习的内容,讲解使用到的代码等 展开 收起
Python 等 4 种语言
MulanPSL-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/an-qianjun/kcf-algorithm-uav-tracking.git
git@gitee.com:an-qianjun/kcf-algorithm-uav-tracking.git
an-qianjun
kcf-algorithm-uav-tracking
KCF系列算法无人机跟踪
master

搜索帮助