您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 11928113陈思远工程训练及生产实习报告
信息工程学院工程设计训练及生产实习报告学院信息工程学院专业自动化班级11092811学号11928113学生姓名陈思远指导教师谷雨学期2014-2015学年第一学期完成日期2015.1.5第一章绪论1.1研究背景及意义目标跟踪是信息融合的经典应用,被广泛的应用于监控、导航、障碍规避等系统中,其主要目的是确定目标的个数、位置、运动信息和身份[1]。目标跟踪可以被定义为估计关注区域内的目标个数和目标状态的过程,其中,目标状态包括运动分量(速度、加速度、位置)和属性信息(信噪比、谱特征、雷达交叉区域等)[2]。在众多的领域,目标跟踪技术都起到了非常广泛且重要的作用。比如在民用上,交通管制、医疗器械、机器智能等都需要用到目标跟踪技术;在军事上,目标跟踪的意义更是重大,众所周知,雷达系统可谓是现代战场上的“眼睛”,起着目标识别、目标跟踪等重要的作用。要判断一个雷达跟踪系统优秀与否,关键就在于目标跟踪算法的选择与设计。目前使用较广泛的跟踪算法多种多样,大致包括:维纳滤波、卡尔曼滤波、粒子滤波、两点外推滤波、线性自回归滤波、α-β滤波、加权最小二乘滤波等。在未来,随着应用的推广,目标跟踪的滤波技术所衍生的各种新技术都将被应用到雷达目标跟踪领域,以适应更加复杂的现实环境。在目标跟踪领域,滤波方式的选择直接影响着滤波的效果。滤波这一概念起源于通信理论,它是一种从含有噪声的接收信号中提取出有用信号的技术。接收到的信号可以被当成是被观测的随机过程,而有用的信号则相当于是被估计的随机过程。整个滤波的目的即为将那些已经受到噪声污染的观测数据通过滤波技术的处理,恢复其原本的信息。噪声的来源途径可能有很多种,比如外界的干扰噪声、信道传输时的噪声、传感器的观测噪声等等。滤波器的基本任务就是实现信息处理,比如平滑、滤波、预测等。而滤波理论,则是在对目标信号可以进行测量的基础上,依据一定的滤波原理,采用某种最优统计的算法,对系统状态进行估计的理论和方法。具有最小方差的滤波或者估计也被称为最优滤波或者最优估计。1.2目标跟踪国内外研究现状维纳滤波是我们熟知的两种经典的最优滤波之一,在二十世纪四十年代,即第二次世界大战期间,各国对于军事技术的需求前所未有的高涨,也正是此时,Wiener和Kolmogorov相继创立了经典的维纳滤波理论,但这一滤波理论利用的是频域的思想,完全没有考虑到递推效果,因此也只是仅限于处理一些平稳随机的过程。这一局限性也使得它很难在实际的工程中得到实现和应用。到了二十世纪六十年代初期,匈牙利数学家Kalman提出了经典的卡尔曼滤波[3](KalmanFiltering,KF)。经典的卡尔曼滤波方法可以处理时变的、非平稳的乃至多维的信号系统。当系统满足线性且高斯的前提时,经过经典卡尔曼滤波后,我们可以得到线性、无偏且具有最小方差的系统状态[4]。经典卡尔曼滤波把频域的思维扩展到了时域的状态空间,完全打破了原有的维纳滤波频域方法的桎梏。卡尔曼把方程引入了滤波的思想,用状态方程描述出系统的动态模型,用观测方程描述出系统的观测模型,然后再结合递推计算的思想实现其算法。也正因为利用了递推求解这一思路,现代计算机可以很好地对其算法进行实现。虽然经典卡尔曼滤波有着种种优势,但是它也有着比较苛刻的前提条件,那就是该算法需要已知精确的系统模型,并且假设系统能够满足线性且高斯的条件。因此,当以上条件不能够得到充分满足时,再使用卡尔曼滤波进行计算将使得其计算量和存储量迅速膨胀,从而导致它的滤波性能也大幅度下滑。为了克服非线性非高斯系统对经典卡尔曼滤波造成的诸多不便,Sunahara、Bucy等人提出了一个新的理论——扩展卡尔曼滤波理论(ExtendedKalmanFiltering[5],EKF)。该理论成功地将卡尔曼滤波的思想扩展到了非线性领域。扩展卡尔曼滤波理论的基本思想为:先对原有非线性系统进行线性化,然后再按照原先的套路进行卡尔曼滤波。因此,该方法不是最优滤波,而是一种次优滤波。虽然EKF能够解决卡尔曼滤波不能应用于非线性领域的缺点,但是它也存在着两个缺点:首先,当滤波器需要处理非线性程度较高的系统时,EKF会将非线性的部较为强硬地进行线性化,而在这一过程中,将会给系统带来很大的误差,导致最后滤波结果的发散;第二,在EKF对非线性系统进行线性化的过程中,需要用到一个工具——雅克比矩阵(Jacobianmatrix)。雅克比矩阵是一阶偏导数以一定方式排列而成的矩阵,其计算过程相当繁琐,从而也导致了这种方法实现起来困难重重。在长时间的尝试中,人们发现,与EKF中的对非线性部分进行近似的线性化相比,考虑对高斯分布进行近似化处理似乎更加简单而且容易得到实现。于是,Julier和Uhlmann两人通过研究,把卡尔曼滤波和无迹变换(UT)相结合,提出一种滤波的新思路——无迹卡尔曼滤波理论(UnscentedKalmanFilter[6],UKF)。UKF保留了卡尔曼滤波中线性部分的框架,使这一精华部分得到沿用,同时,在一步预测的方程当中,加入了无迹变换这一步骤,以此处理均值以及协方差的非线性传递。当针对的系统满足线性条件时,UKF与EKF这两种滤波方法的估计性能基本相同,而当系统无法满足线性的条件时,UKF相比于EKF却能够得到更加准确的估计。在UKF诞生后没多久,高斯厄米特滤波器[7](GHF)、均差分滤波器等新型的滤波器相继被提出,它们同样不用计算Jacobian矩阵,而是使用了最小均方差估计准则(MMSE)。该准则虽然有一定的优势,但是随着状态维数的增加,它的运算量也会迅速增大。如果系统的非线性非高斯特性很强,使用MMSE的准则来进行滤波将使滤波的性能将大幅下降,使滤波结果发散,达不到较好的效果。由于现实生活中的非线性、非高斯因素对目标跟踪的机动性、准确性会产生很大的影响,人们不得不寻求新的方法去解决问题,粒子滤波应运而生。早在二十世纪五十年代初期,粒子滤波的思想已然萌芽,它被用于处理统计学和理论物理领域中的状态估计。该算法的理论基础基于蒙特卡罗方法(MonteCarlo)和序贯重要性采样方法(SequentialImportanceSampling,SIS),所以,又被称为序贯蒙特卡罗方法[8](SequentialMonteCarlo,SMC)。粒子滤波算法既能够针对线性系统,也能够针对非线性系统,可以应用于任意状态的空间模型。尽管和EKF、UKF一样,粒子滤波并不是最优估计算法,但它凭借自身的又是,依旧可以得到较高精度结果,因此,它是次优估计算法中较好的。在一段时间的应用后,人们发现序贯重要性采样方法算法存在权值退化的问题。所谓权值退化,即在进行几步迭代之后,许多粒子的权重变得很小,大量的计算浪费在小权值的粒子上,造成滤波结果的偏差。为了使该问题在一定程度上得到解决,有人又在原本序贯重要性采样的基础上加入了一个新的环节——重采样,于此同时也得到了一种新的算法——标准粒子滤波算法(SequentialImportanceResampling[9],SIR),这也是本次工程训练我选择要实现的滤波算法之一。在国内外各路学者专家几十年的不懈努力下,目标跟踪技术已经渐渐发展成为了现代社会不可或缺的高端技术。直至今日,依然有许多国内外的研究机构和学者针对目标跟踪的滤波技术进行着相关的研究工作。第二章基于OpenCV2的目标跟踪算法目标跟踪主要分为雷达跟踪和视频跟踪两大块,雷达目标跟踪是雷达数据处理中一个相当重要的环节,跟踪的任务是通过相关和滤波处理建立目标的运动轨迹,对目标的运动状态进行估计和预测。不同的滤波方法对目标最终运动轨迹的判断(滤波的效果)将产生轻重不同的影响。因此,滤波方法的选择显得尤为重要。目前的跟踪滤波方法多种多样,大致包括:维纳滤波、卡尔曼滤波、粒子滤波、两点外推滤波、α-β滤波、加权最小二乘滤波、线性自回归滤波等。其中经典卡尔曼滤波和标准粒子滤波是本次工程训练所要研究对象。2.1OpenCV简介OpenCV(OpenSourseComputerVisionLibrary),是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Windows,Android,Maemo,FreeBSD,OpenBSD,iOS,Linux等平台上。OpenCV由一系列C函数和少量C++类构成,有着轻量级且高效的特点,同时它提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理与计算机视觉方面的许多通用算法[10]。OpenCV从发布至今经历了十几年的时间,它的研发团队经过无数次的努力已经把这一软件的性能提升到了一个很高的水平。在今年的8月21日,OpenCv3.0alpha版本发布。但是考虑到这一版本应用还不是很广泛,本次工程训练中我依然选用之前比较主流的OpenCV2.4.9版本作为开发平台。2009年,OpenCV推出了2.0版本,主要基于C++。此时的OpenCV库被划分成多个模块。其中Opencv_core模块包含了核心功能,尤其是底层数据结构和算法函数;Opencv_improc模块包含了图像处理函数;Opencv_highgui模块包含了读写图像及视频的函数,以及操作图形用户界面函数;Opencv_features2d模块包含了兴趣点检测子,描述子以及兴趣点匹配框架;Opencv_calib3d模块包含了相机标定,双目几何估计以及立体视觉函数;Opencv_video模块包含了运动估算,特征跟踪以及前景提取函数与类;Opencv_objdetect模块包含了物体检测函数,如脸部和行人检测。以上这些模块被编译成库文件后,位于lib文件夹中。另外,在库中还包含着其它的工具模块,比如机器学习(opencv_ml),计算几何(opencv_flann),第三方代码(opencv_contrib)等。这些模块在OpenCV里的include文件夹中都对应着一个单独的头文件。相比于OpenCV1.0版本,其2.0版本的C++类和函数都定义在命名空间cv之内,需要调用时可以用usingnamespacecv或CV::Mat这两种方式。2.2经典卡尔曼滤波算法假设动态系统S具有线性、高斯的特性,则其状态空间模型可为:kkkkk1kkkVXCZUXAX(1)其中,kX为0k时刻的系统状态向量,kA为系统状态转移矩阵,由线性状态转移模型)(·F确定,kU为系统噪声;kZ为k时刻的系统观测向量,kC为系统观测矩阵,由线性观测模型)(·H确定,kV为观测噪声。其中kU和kV均服从高斯分布,且其协方差阵为:kkQUVar)(,kkRVVar)(。经典的卡尔曼滤波主要可分为一步预测和观测更新两个部分,其算法如下:(1)初始化:对于0k,给定初始状态0X的均值0|0X和方差0|0P;(2)递推求解:对于,2,1k,则有(a)一步预测:1|11|kkkkkXAX(2)11|11|kTkkkkkkQAPAP(3)(b)观测更新:11|1|)(kTkkkkTkkkkRCPCCPK(4))(1|1||kkkkkkkkkXCZKXX(5)1|1||kkkkkkkkPCKPP(6)由于式(2)-式(6)可由其均值和协方差阵完全表征,因此可以说经典卡尔曼滤波就是递推贝叶斯最优滤波的显式解。或者换句话说,在给定线性、高斯的假设条件下,经典卡尔曼滤波与贝叶斯最优滤波是如出一辙的。2.3卡尔曼滤波算法的实现在本次工程训练中,我首先使用CvMat类,调用OpenCV里原有的卡尔曼滤波函数和粒子滤波函数实现了这两种算法并以鼠标跟踪的形式体现,然后又使用Mat类来实现了整个经典卡尔曼滤波的过程。首先介绍一下调用OpenCV原有的卡尔曼滤波函数来实现滤波算法的过程:1.打开VisualStudio2010,在起始页面打开程序,目录所在位置:D:\Documents\VisualStudio2010\Projects\KF\ka.sln图2-1打开经典卡尔曼滤波工程2.生成解决方案-点击调试-启动调试
本文标题:11928113陈思远工程训练及生产实习报告
链接地址:https://www.777doc.com/doc-3058316 .html