基于GPS技术的救援目标定位_第1页
基于GPS技术的救援目标定位_第2页
基于GPS技术的救援目标定位_第3页
基于GPS技术的救援目标定位_第4页
基于GPS技术的救援目标定位_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京理工大学珠海学院2020届本科生毕业设计基于GPS技术的救援目标定位基于GPS技术的救援目标定位摘要随着社会不断发展,国内外救援无人机需求日益增加,对救援无人机救援目标定位的要求也越来越高,本篇论文主要研究基于GPS技术的救援目标定位,对GPS组成以及基本原理进行剖析。确定了总体方案后,基于STC89C52单片机的控制下进行整体的系统设计,利用Keil以及C语言进行系统软件开发设计。运用卡尔曼滤波改进算法对GPS目标定位算法进行优化处理,并使用MATLAB软件进行仿真。最终在老师的指导下完成论文。关键词:GPS、卡尔曼滤波、STC89C52单片机、目标定位算法LocationofrescuetargetbasedonGPSTechnologyAbstractWiththecontinuousdevelopmentofsociety,thedemandforrescueUAVisincreasingathomeandabroad,andthedemandforrescueUAVrescuetargetpositioningisalsoincreasing.ThispapermainlystudiestherescuetargetpositioningbasedonGPStechnology,andanalyzesthecompositionandbasicprinciplesofGPS.Aftertheoverallschemeisdetermined,thewholesystemisdesignedbasedonSTC89C52singlechipmicrocomputer,andthesystemsoftwareisdevelopedanddesignedwithkeilandClanguage.TheimprovedKalmanfilteralgorithmisusedtooptimizetheGPStargetpositioningalgorithm,andMATLABsoftwareisusedforsimulation.Finally,thethesisiscompletedundertheguidanceoftheteacher.Keywords:GPS、Kalmanfiltering、STC89C52singlechipmicrocomputer、Targetpositioningalgorithm目录1绪论 11.1设计目的、意义及技术要求 11.2国内外发展概况 11.3本设计应解决的主要问题 21.4开发系统及工具的选择 22GPS相关技术研究 42.1GPS基本组成部份 42.2GPS目标定位方式 43设计方案说明 63.1系统功能说明 63.2模块设计大致方案 63.3总体方案确定 83.4系统软件总体设计 83.5系统原理图 93.6软件详细设计 103.7系统实物测试 114基于卡尔曼滤波的改进算法 134.1卡尔曼滤波的基本原理 134.2基于卡尔曼滤波的改进算法 145卡尔曼滤波改进算法在GPS定位中的应用 165.1野值处理方式 165.2对状态以及观测噪声方差阵的处理 165.3对观测噪声和测量噪声的处理 175.4MATLAB仿真卡尔曼滤波算法 175.5实验测试 18结论 20参考文献 21谢辞 23附录 24PAGE71绪论无人机就最近的时代潮流而言,是一个朝阳产业。无论是中国还是其他国家都在争先恐后的抢占无人机的市场。最开始为了满足各国军方对于战略装备的需求无人机因此出现。后来民用无人机开始大规模的进行使用,广泛的运用在各行各业。与此同时,救援方式在慢慢变化,由最开始十分传统的人工搜索到现在人们关注的智能救援。救援无人机的诞生水到渠成,这是一种全新的救援方式。救援无人机有救援效率高,救援速度快,更安全等等优点。在特殊环境的救援任务下能够发挥传统救援所无法企及的高度。在这样的情况下,救援无人机未来的发展就让人们特别关注了,这是能够在救援领域实实在在的帮助救援人员的优秀辅助工具。未来的发展潜力非常大。GPS技术是运用在救援无人机上的关键技术,为了对救援无人机目标定位进行更好的设计技术要求。本文在前人的高度上,分别研究了GPS的具体组成方式、GPS系统的定位原理、卡尔曼滤波算法对提高GPS定位精度的帮助等。并设计定位系统,使其可以应用在救援无人机上,从而满足高精度,高效率,高品质的救援无人机要求。应用潜力非常乐观,可以让融合了GPS技术的救援无人机实现更加高效率,高准确度的目标定位信息。满足在各种条件下救援无人机的市场需求,完成优秀的救援任务。1.1设计目的、意义及技术要求在当今时代,有许多特殊的环境比如核电站,化学实验室等地方,对这些地方执行救援任务时需要特别的注意,城市火灾、地震、海啸等诸多灾难来临时,高效率、高灵活、高品质的救援侦查工作格外的重要。如何安排人手都会在这些灾难面前显得薄弱。而救援无人机天生的高机动性,高效率,高灵活度,可以第一时间为救援人员提供救援现场的情况,从而辅助展开救援,随着社会不断地发展救援无人机必将是时代的潮流。本文将确定所使用的GPS系统的基本原理,确定所使用的硬件,然后对其进行可行性分析,其次对GPS算法进行研究,使用MATLAB软件对卡尔曼滤波算法对GPS定位精度的改善进行仿真,验证GPS和目标定位算法的精度,对其进行误差分析。将现实生活中的影响因素纳入误差考虑范围,对无人机进行精度分析,在解算过程中,确定无人机高度、飞行速度方向等对目标定位精度的影响,并进行误差分析。通过查找资料,分析国内外研究背景和现有技术。使用基于GPS定位算法进行定位。并且自主搭建硬件平台,完成硬件的选型、通讯及测试。研究目标定位算法,使用KEIL以及C语言完成编程并进行测试。1.2国内外发展概况国外的研究情况比较可观,早在一百多年前的英国,就研制开发了世界上首架无人飞机。可惜无人机最开始的研发重心主要是如何将其运用在国外频繁的战争上面。直到海湾战争之后,民用无人机才开始发展,从勘察侦查、地质勘探、气候预报、农业喷施、电力监控等各行各业都在进行无人机的发展。发展速度迅速,成效显著。在救援任务中同样建功不少,是救援人员在进行救援时候不可缺少的辅助工具。无论是地震还是海啸,国内外对救援无人机的应用都在不断增加,同时也在不断地开发救援无人机更多的功能,以满足日趋增加的无人机需求市场。我相信国内外会不断的对效率高,功能优,性价比高的无人机进行研发,使其结构更加的模块化、功能标准化。从而研究出更多的救援工作需要的功能。1.3本设计应解决的主要问题(1)运用软件进行模拟仿真(2)对硬件平台的搭建、选型、通讯、测试(3)对GPS算法以及目标定位算法进行研究(4)环境影响因素下的误差范围(5)解算大地坐标系下无人机目标位置(6)安装救援无人机的GPS系统 1.4开发系统及工具的选择1.4.1STC89C52单片机简介一块完整单片机里面有电路芯片,还有装载了微型计算机的主要功能部件,大体部分有中央处理器以及包括存储器、定时器、I/O接口电路等在内的模块。能够实现稳定而又高效的控制,功能单一的微型电脑就是单片机,可以将其看作是一部很小的电脑,只能实现固定的部分功能。尽管单片机只是一个集成电路芯片,它一样可以满足对微型计算机系统的定义。因此单片机就是“SingleChipMicrocomputer”直译过来的。如图1.1所示。图1.1单片机基本结构单片机是嵌入式的系统,也是微型计算机系统,它可以在一块电子芯片上实现计算机运算的过程,同时因为其微型的特性,可以大大提高系统信号传递速度,有效的提高系统的运行效率。1.4.2开发工具Proteus简介目前享誉全球的Proteus仿真软件可以将电路仿真、PCB设计、虚拟模型仿真融合在一起进行运用。Proteus仿真软件在进行设计的仿真同时,还可以对单片机的元器件进行仿真,包括各种单片机都能够进行仿真设计。从实现设计的理念到实际产品的选择都可以一步到位,使用者可以随时切换PCB设计、自行布图、调试代码、协调单片机与电路的仿真。使用方便快捷,能够为单片机自学者、从事单片机工作者提供完整而又优秀的帮助。1.4.3Keil简介51系列单片机C语言的软件开发最常使用的就是Keil,这是一款非常实用的软件,包含了丰富的库函数以及提供给用户的非常方便操作的Windows界面,在与其他设计开发系统相比,Keil软件的模块结构完善性、编译代码生成效率、紧凑的语句汇编代码等诸多方面都非常适合单片机系统设计开发使用。同时生成的代码简单易懂,供用户理解、后期维护上有得天独厚的优势。是一款非常容易上手使用的开发软件。2GPS相关技术研究2.1GPS基本组成部份GPS的主要组成部份分为三个部份:第一个是处于太空的空间部份,由太空中的GPS卫星组成;第二个是地面监控,由地面监控监测以及计算空间中GPS所在位置运行轨道的信息组成;第三部份是接收卫星信号的用户设备部份,这部分将会接收轨道信息等微型数据,从而进行计算得出所处位置。图2.1描述了GPS卫星的工作原理。图2.1GPS组成及工作原理2.2GPS目标定位方式在GPS定位各式各样的方法里面,在不同的定位过程中都存在许多误差,但是其定位方式都是根据空间中的卫星信号被地面监控部份拦截后对信号进行加工。然后经过计算机的解算将GPS卫星的位置确定,同时确定地面接收机距离卫星的距离,也被定义为伪距。由于实际的距离和有误差的测量距离数据不一,因此在GPS的定位中,大家将观测量定义为码相位观测量也就是GPS接收机和空间中的GPS卫星之间的伪距,和载波相位观察量。2.2.1GPS定位原理在目标定位原理中,使用码相位观测量和载波相位观察量的距离通过求解,最后将定位结果解算出来的方法。就是GPS定位使用的数学原理后方交会测量法。这种解算方法可以设时间t的GPS接收机收到了空间中3个卫星的信号。图2.4GPS目标定位原理图我们将地面观测到t时间的3个卫星分别命名为S1、S2、S3,然后建立空间直角坐标系,分别将三个卫星的坐标系以X、Y、Z表示,设空间中的卫星和地面接收机的距离为ρ1、ρ2、ρ3,列出数学方程(2.1):((式2.1)在理想条件下通过解算上式方程,可以求解得到GPS接收机的位置。但在实际计算时需要将接收机时钟误差考虑进去,最少需要4个卫星数据才能将实际的GPS地面接收机定位解算出来,ρ是接收机测量时间乘以光速的已知值。空间卫星实际位置已知。列数学公式如下(2.2):((式2.2)在(2.2)式中,δt3设计方案说明通过单片机控制输入ASCII码,进入液晶显示屏的内部从而显示内容。电子液晶显示用LCD12864,设计方案控制核心使用STC89C52单片机,初步要求整体方便使用,外观大方得体,便于操作,观看简便,能耗低。完成用单片机控制在LCD上显示的速度、海拔、经纬度等的程序设计。系统主要分为电源电路模块,用来输入稳定电压维持系统运行。主控模块,控制整个系统稳定运行。LCD12864模块,显示当前状态,如时间、海拔、速度、方向、经纬度等数据以供观看。GPS定位模块,将GPS的接收的位置信息进行运算,将结果输入单片机,由单片机内部程序转换为ASCII码,输入LCD模块显示。单片机模块主要负责控制,以及读取数据并进行处理。GPS模块GPS模块定位导航信息定位导航信息LCD12864液晶显示屏用户交互LCD12864液晶显示屏用户交互单片机系统电源电路单片机系统电源电路指示灯模块复位电路指示灯模块复位电路图3.1系统结构图3.1系统功能说明(1)定位目标功能地面接收机收到空间卫星信号之后GPS模块将数据运算出来,然后发送到单片机中,转换成代码发送到显示屏,从而精准的将当前海拔、速度、方向、经纬度以及时间等信息显示出来。(2)实时时间功能由单片机控制的GPS模块可以不断与空间中的单片机进行联系,通过解算卫星的时间空间信息,可以方便快捷的显示出来,从而监测当前时间。3.2模块设计大致方案3.2.1控制模块设计本设计运用STC89C52控制两个部份,第一部份是数据接收控制,将控制GPS进行与空间卫星的数据交换,以及GPS解算过程的发送。第二部分是显示控制,将控制灯、LCD显示模块,由晶振、复位、电源电路组合的单片机将控制发送ASCII码从而控制LCD上的字符发送以及显示时序。3.2.2显示电路设计本设计选用LCD12864液晶显示,通过单片机控制GPS输出数据到LCD上,改变字符发送、显示时序,按照程序,将复杂的数据以简单明了的方式显示。串行口串行口52单片机GPS模块LCD12864电源图3.2设计原理图3.2.3GPS模块方案设计(1)使用传统的串口接口单机控制的GPS模块,速度快,传输稳定,驱动简便,程序相对简单。虽然价格也更加便宜,但是整体体积也会更加的大。(2)选用USB的接口单片机控制GPS,体积能做的较小,不太稳定,需要复杂的程序支持,同时驱动难。最终选择第一种方法接口GPS以及单片机控制卫星数据的接收。3.2.4电源模块设计所有的模块所需要的电源供电电压都是5V,本设计选用稳压芯片做稳压核心,通过USB输入220V交流电,用稳压芯片从而实现5V的单一稳定电源供电。电路图如下。图3.3电源模块电路图3.3总体方案确定3.3.1系统硬件方案表3.1系统硬件方案名称说明CPUAT89S52单片机显示屏LCD12864GPSGPS模块3.3.2应用软件表3.2应用软件名称说明开发语言C语言开发工具Keil3.4系统软件总体设计本设计总体设计由STC89C52单片机控制数据的输入输出,控制空间GPS卫星与地面接收机的信息交换数据,并通过卡尔曼滤波减少GPS模块的误差,提高效率。然后LCD在单片机的控制之下,传出位置信息等等开发工具为Keil。通过C程序定义许多子程序来分别管理各个模块,对各个子程序的操作,来构建整个程序框架。如下图所示。开始系统初始化开始系统初始化显示开机信息显示数据信息符合NY进入中断清除接收中断标志退出中断数据格式判断不符合标志位符合数据接收标志位01数据接收完毕清除标志图3.4系统主程序主要结构图3.5数据接收程序流程图先是系统初始化,显示开机信息,最后将系统接收到的信息综合处理,得到数据通过单片机控制字符发送到显示屏上。3.5系统原理图图3.6系统原理图3.6软件详细设计3.6.1头文件设计时运用了头文件,包含了不同子模块的信息,不同的头文件包含不同子模块的内容,从而将减小互相的影响,增强了系统稳定性和移植性,为后续工作做好了基础,如果要使用其中的某个头文件,只需要将C文件和H文件复制过去就行了。包含的头文件如下:#include<reg52.h>#include<stdio.h>#include<string.h>#include"GPS.h"#include"LCD.h"#include"display.h"3.6.2系统I/O定义系统中运用了不同的I/O对电源、LCD显示屏、GPS模块、提示灯电路等进行分开定义控制,更加的便捷高效。sbitled1=P2^4;//接收数据指示灯sbitled2=P2^5;//GPRMC数据有效指示灯sbitled3=P2^6;//GPGGA数据有效指示灯#defineLCD_dataP2//数据口sbitLCD_RS=P0^7;//寄存器选择输入sbitLCD_RW=P0^6;//液晶读/写控制sbitLCD_EN=P0^5;//液晶使能控制sbitLCD_PSB=P0^4;//串/并方式控制3.6.3主函数主函数的具体内容见附录1,一方面主函数可以控制启动其他任何模块,命令显示,命令传输数据等。本设计中GPS模块选择的是串口,在单片机控制下更加稳定。初始化串口、液晶屏、定位系统后等待GPS传输数据即可。3.6.4延时子函数延时函数在任何系统中都要使用,延时时间的长短直接决定了整个系统工作的效率,液晶显示屏会因为延时时间过短而显示失败,同样不正常的延时会导致GPS的数据传输失败。液晶显示会因为延时过长而响应时间很长,影响系统工作效率voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voidtimer0(void)interrupt1{ staticucharcount=0; TH0=0x3c; TL0=0xb0; count++; if(count==200)//2*5秒钟 { count=0; change_page++;//换页 if(change_page==10) change_page=0; } }3.6.5LCD12864子模块12864的显示函数,是系统对外的窗口,对于LCD模块的函数要将数据输出放在地址后面,并且增加检测步骤,确定系统没有在工作,上一次的数据已经清理。具体的函数如附录2。LCD12864的地址分别为,0x80、0x90、0x88、0x98。3.6.6GPS子模块GPS模块的函数用卡尔曼滤波处理,可以减少误差,增加运算精度以及效率,让系统读取GPS接收器的数据进行分析处理的时候更加快速。具体函数如附录3。3.7系统实物测试在室内进行的系统测试,GPS模块无法正常使用。通过查找资料,将系统测试由室内转移室外进行测试,系统正常运行,并实现快速搜星,准确目标定位功能。正常显示年月日、时间、经纬度。运用在救援无人机上,可以显示当前速度、航向、高度、海拔。具体如下图:图3.7系统测试图1图3.8系统测试图2图3.9实物图4基于卡尔曼滤波的改进算法在GPS的定位运算中,最关键也是难点是对载波相位的求解。有两个方式可以高效率的对单频GPS整周模糊度进行运算。先取一个高精度的浮点解,再建立模糊度的搜索模型,从而可以实现对快速模糊度的计算。卡尔曼滤波和差分GPS定位相结合就可以更加高效率的进行计算。4.1卡尔曼滤波的基本原理卡尔曼滤波将最小均方误差作为标准,把系统前估计值和当前观测值当作变量参考的一部分,用来估算当前的最佳值。卡尔曼滤波只需要有系统的状态方程和观测方程就可以完成。当我们在现实生活中,运用卡尔曼滤波的前提是系统的状态转换离散而且并不连续在一起的,其次系统的状态会受到外部的影响。第三无论是转换还是观测过程都会受到噪声的干扰,最后是无法直接观测的是系统的状态,可以将整个系统的变化宏观看成不同状态的转换。假设Xt是t时刻系统的状态变量,状态转换矩阵为A,状态控制输入为Ut,状态控制为B,状态变换过程中噪声为X(式4.1)式中,满足方差为Q、均值为零正态分布的噪声wt。假设观测噪声、观测量分别是Z(式4.2)式中,Ht为从状态变量到观测量的转换矩阵,Vt在正态分布中均值是0,方差是R。图4.1卡尔曼滤波应用示意图4.2基于卡尔曼滤波的改进算法为了求解整周模糊度,运用LAMBDA进行模糊度搜索,再使用Kalman滤波算法对浮点结果进行滤波修正,从而实现更加高效、精准的运行。卡尔曼滤波算法可以建立模型,运用线性最小方差估计的运算方法对系统模型中的动态变换过程进行修正和诠释,而改进后的卡尔曼滤波可以利用不同时刻的估计值和观测值来随时对动态状态向量进行评估更新。可以让系统更加便捷快速的对当前时刻最优估计值进行高效计算。4.2.1Kalman滤波系统状态方程为了更好的假设系统状态正在动态变换下的方程,把地面GPS接收信号机器上接收到的时间观测历元和状态向量分别假设为t、Xt。X(式4.3)Xt−1为历元t-1时刻的状态向量;Ft为状态转移矩阵;w为历元t-1时刻的系统噪声向量,它服从均值为零、方差为QF(式4.4)4.2.2Kalman滤波观测方程卡尔曼滤波算法的观测方程使用相位伪距观测值导出Z(式4.5)式中,Zt表示观测值,λ为波长,ϕ表示相位观测值,Vλ(式4.6)式中,噪声ε服从正态分布,均值0、方差R。∅ij,rb为双差载波相位观测值,rij,rb表示双差伪距观测值,整周模糊度r(式4.7)式中,GPS接收机移动站指向卫星j、卫星i的单位向量为aj,r、ai.rH=(式4.8)卡尔曼滤波可在建立了状态、观测方程后,进行状态向量的估计,估计值的计算、观测修正两个部分,计算公式为X(式4.9)P(式4.10)K(式4.11)X(式4.12)P(式4.13)式中,Pt为t时刻Xt状态向量所对应的协方差矩阵,双差观测值协方差矩阵5卡尔曼滤波改进算法在GPS定位中的应用5.1野值处理方式观测时会因为测量设备和数据传输之类的问题在观测序列中包含突发性野值,从而造成测量结果出现偏差。经分析认为,与一般的误差对比,野值误差会有很大的差异,可以明显体现出来,可以使用大数定理的野值修正算法,将其转化为定常系统。如式5.1(式5.1)采用基本卡尔曼滤波递推算法进行的滤波达到稳态时,新息序列为(式5.2)为零均值独立正态同分布随机序列。在观测量为一维的情况下,有:(式5.3)由切比雪夫大数定律可知(式5.4)如果观测数据中出现野值,就一定会导致新息序列的紊乱,因此修正出现野值后的新息序列就可以尽可能地避免卡尔曼滤波的准确度由于野值的影响5.2对状态以及观测噪声方差阵的处理获得卡尔曼滤波最优估计值的前提条件是准确掌握系统中的状态、观测噪声方差阵Q、R。Q、R对于滤波精度、滤波发散程度影响至关重要。经过研究发现,Q、R是随着在观测的物体不断地变化地值。因此将状态、观测噪声方差阵Q、R的时变性质考虑进卡尔曼滤波算法中是不可避免的,不能为了方便滤波模型的建立而随意的对Q、R进行取值。经过研究参考文献发现,利用状态、观测噪声方差阵Q、R来对信息进行更新的方法被命名为自适应卡尔曼滤波。自适应卡尔曼滤波算法已经出现了很多的研究方法,其中模型方差自适应补偿法在预测残差和统计相应的计算量生成卡尔曼滤波的模型的时候可以利用自身的观测数据对模型中误差进行更新,保证了系统的稳定性和统一性。而逼近法所使用的新息序列自适应卡尔曼滤波被称为Sage滤波,其预估状态误差协方差阵的方法是利用了前m步里面的残差序列对系统中的状态、观测噪声方差阵Q、R进行实时性的观测和记录。在不同的使用前提下使用不同的自适应卡尔曼滤波方法会给研究带来更加便捷的体会。为了处理GPS目标定位获取的动态数据选择使用自适应滤波算法的前提是掌握GPS动态数据平稳而又随机过程的特点,通过这一特点和参考文献[20]提出新的Q、R自适应估计方法,能够将最新的观测量实时输入。从而提高了Q、R估计值的更新效率,实验证实这一方法使得精度提高、发散减少,被称为差分Q/R自适应卡尔曼滤波。5.3对观测噪声和测量噪声的处理随机误差并不是0均值的白噪声,会对GPS目标定位带来很多误差。在进行卡尔曼滤波的公式进行运算时正确处理误差的方法是建立不同的误差模型,有针对性地选择卡尔曼滤波改进算法对不同的随机误差进行处理。而不是直接调用卡尔曼滤波函数进行运算,这样可以取得最优的估计值。点估计理论算法对卡尔曼滤波运算GPS定位数据的动态模型建立有很好的帮助,一方面可以从空间卫星和地面接收机的伪距进行误差因素汇总,将随机误差的不一致等效位伪距的误差。将随机误差的影响因素汇总为定位数据中的整体误差,稳定性好、运算量少、效率更高。利用卡尔曼滤波器对动态变换数据的处理。减少了中间误差分类处理建模过程以及运算量。让GPS定位精度更高。效果更好。5.4MATLAB仿真卡尔曼滤波算法在研究实际误差对滤波影响的改进后使用MATLAB进行仿真,在软件对卡尔曼滤波仿真的时候会发生,因为计算机字节等问题而导致的误差过大,可能会破坏卡尔曼滤波算法的计算条件导致计算不准确,仿真结果发散的情况。因此在将卡尔曼滤波运用在GPS目标定位的数据处理的时候,要结合具体情况,对卡尔曼滤波算法进行针对性的改进和避免,从而进行精准定位。在进行改进后的卡尔曼滤波处理GPS数据后的观测图如下所示。MATLAB具体仿真程序见附录4。图5.1带有噪声的观测量图5.2理想的观测量图5.3滤波后的观测量5.5实验测试对卡尔曼滤波改进算法进行仿真试验前将GPS的数据进行采样,再将改进后进行采样,从而验证设计的卡尔曼滤波改进算法对GPS定位精度的影响。图5.1系统实验测试图图5.2系统实验测试图测试过程将系统实验采集的数据作为定位参考数据,将实际测量的静态GPS数据作为误差,进行滤波计算。结果如表5.1。表5.1卡尔曼滤波得到的误差统计表滤波前滤波后经度方向位置误差最大正偏差4.56m2.15m最大负偏差-4.56m0.17m均方根2.13m0.54m纬度方向位置误差最大正偏差11.46m3.27m最大负偏差-18.96m-4.9m均方根6.9m1.36m高度方向位置误差最大正偏差25m0.45m最大负偏差-22.58m-10.79m均方根12.49m3.2m经度方向速度估计误差均方根0.015m/s0.001m/s纬度方向速度估计误差均方根0.052m/s0.003m/s高度方向速度估计误差均方根0.066m/s0.006m/s使用了卡尔曼滤波算法后的误差明显减小,在经纬度方向位置误差的正偏差、负偏差减少明显,分别有一半和数十倍的差距,表格可以明显看出来各个方面的误差都明显减少,作用非常显著。明显增强了GPS目标定位精度,显著改善了系统动态性能。结论通过这次的毕业设计,让我更加清楚、明白地、牢固掌握了,大学四年所学的相关专业知识。大量自学了有关单片机方面的很多知识。至此,GPS救援目标定位系统经过一开始的懵懂设计、初步完善及最终的应用检验,具备基本的功能。研究了GPS的目标定位算法,自学了卡尔曼滤波算法、Keil单片机开发软件、MATLAB仿真软件、C语言,熟练掌握了单片机元器件焊接方法,最终完成了毕业设计。同时由于时间安排不当和个人能力的不足,本设计也有很多的缺憾,值得进一步的深入学习研究。在对系统软件设计的时候,遭遇了很多挫折,在导师的帮助下一步步克服难题。码代码、焊元器件、实物测试过程、对算法的研究。一路走来收获满满,也明白自己能力不足还要不断地学习。比如对于引脚的定义,比如怎么将设计的GPS目标定位结合地图更加直观的展现出来,如何将LCD上的内容通过物联网的方式传输到手机,或者蓝牙链接等等诸多问题值得去学习完善,让我充分明白了学无止境。参考文献[1]杨元喜何海波徐天河.论动态自适应滤波[J].测绘学报,2001(04):13-18.[2]刘涛.陆基MMS中GPSINS滤波器的探讨[J].邵阳学院学报(自然科学版),2008(04):39-41.[3]杨元喜文援兰.卫星精密轨道综合自适应抗差滤波技术[J].中国科学(D辑:地球科学),2003(11):90-97.[4]房建成万德钧吴秋平申功勋.GPS动态滤波的新方法[J].中国惯性技术学报,1997(02):4-10.[5]杨子俊廖凤英韦庆.GPS在移动机器人导航定位系统中的应用[J].舰船电子工程,2005(06):9-11.[6]徐天河杨元喜.改进的Sage自适应滤波方法[J].测绘科学,2000(03):28-30.[7]房建成申功勋高洪霞.民用导航型CA码GPS接收机动态定位的强跟踪卡尔曼滤波研究[J].电子测量与仪器学报,1998(02):1-6.[8]高怡高社生冯志华.一种新的非线性模型预测UPF算法[J].西北工业大学学报,2012(05):113-117.[9]宋迎春陈正阳.GPS/INS组合导航中的自适应滤波算法[J].湘潭大学自然科学学报,2006(2):5-5.[10]冯志华高社生陈丽容焦雅林.动力学模型系统误差及其协方差阵的随机加权拟合法[J].系统工程与电子技术,2012(02):134-138.[11]魏武魏敏.基于小波神经网络的卡尔曼滤波在GPSDR系统中的应用[J].微电子学与计算机,2010(07):27-30.[12]张强孙红胜胡泽明.目标跟踪中野值的判别与剔除方法[J].太赫兹科学与电子信息学报,2014(02):108-111.[13]李岩任睿王旭刚.两种卡尔曼滤波模型在修正弹弹道数据处理中的应用比较[J].弹道学报,2011(01):31-34.[14]钟珊尹斌.基于Proteus的温度测控系统仿真研究[J].电子设计工程,2011(24):129-131.[15]房建成高洪霞.民用导航型C/A码GPS接收机动态定位的强跟踪卡尔曼滤波研究[J].电子测量与仪器学报,1998(2):6-6.[16]马华玲.仿真软件在高校电子类课程设计中的应用[J].教育教学论坛,2013(32):173-174.[17]高梅马睿.浅谈基于Proteus的电子类实训平台构建[J].数字技术与应用,2015(10):229-229.[18]张晓培常二框.智能住宅小区安防系统的设计[J].河南科技,2016(23):2-2.[19]葛昌利.高精度GPS定位方法及其在无人机定位系统中应用的研究[D].南京邮电大学,2018[20]CWJang,JCJuang,FCKung.Adaptivefaultdetectioninreal-timeGPSpositioning[J].IEEProc.-Radar.SonarNavig,2000,147(5):676-684.附录1:主函数模块/****************************************主函数 /****************************************/voidmain(void){ ucharerror_num=0; Uart_Init();//初始化串口 Lcd_Init(); //初始化LCD GPS_Init();//初始化GPS rev_stop=0; REV_NO; while(1) { if(rev_stop)//如果接收完一行 { TR0=1;//开启定时器 REV_YES; if(change_page%2==1)//换页 { if(GPS_GGA_Parse(rev_buf,&GPS))//解析GPGGA { GGA_YES; GPS_DisplayTwo();//显示第二页信息 error_num=0; gps_flag=0; rev_stop=0; REV_NO; } else { error_num++; if(error_num>=20)//如果数据无效超过20次 { GGA_NO; error_num=20; GPS_Init();//返回初始化 } gps_flag=0; rev_stop=0; REV_NO; } } else { if(GPS_RMC_Parse(rev_buf,&GPS))//解析GPRMC { RMC_YES; GPS_DisplayOne(); //显示GPS第一页信息 error_num=0; gps_flag=0; rev_stop=0; led1=1; } else { error_num++; if(error_num>=20)//如果数据无效超过20次 { RMC_NO; error_num=20; GPS_Init();//返回初始化 } gps_flag=0; rev_stop=0; REV_NO; } } } }}2:延时子函数模块#ifndef__LCD_H_#define__LCD_H_#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineLCD_dataP2//数据口sbitLCD_RS=P0^7;//寄存器选择输入sbitLCD_RW=P0^6;//液晶读/写控制sbitLCD_EN=P0^5;//液晶使能控制sbitLCD_PSB=P0^4;//串/并方式控制#defineDelayNOP();{_nop_();_nop_();_nop_();_nop_();};voidclr_screen();voiddelay(uintz);voidLcd_WriteCmd(ucharcmd);voidLcd_WriteDat(uchardat);voidLcd_Init(void);voidLcd_SetPos(ucharX,ucharY);voidLcd_DispLine(ucharline,ucharpos,uchar*str);#endif//__LCD_H_#include"LCD.h"voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voidclr_screen(){Lcd_WriteCmd(0x34);//扩充指令操作delay(5);Lcd_WriteCmd(0x30);//基本指令操作delay(5);Lcd_WriteCmd(0x01);//清屏delay(5);}staticbitLcd_Busy(void){ bitresult; LCD_RS=0; LCD_RW=1; LCD_EN=1; DelayNOP(); result=(bit)(P0&0x80); LCD_EN=0; return(result);}voidLcd_WriteCmd(ucharcmd){ LCD_RS=0; LCD_RW=0; LCD_EN=0; _nop_(); _nop_(); LCD_data=cmd; DelayNOP(); LCD_EN=1; DelayNOP(); LCD_EN=0;}voidLcd_WriteDat(uchardat){ LCD_RS=1; LCD_RW=0; LCD_EN=0;LCD_data=dat; DelayNOP(); LCD_EN=1; DelayNOP(); LCD_EN=0;}voidLcd_Init(void){ LCD_PSB=1;//并口方式 Lcd_WriteCmd(0x34);//扩充指令操作 delay(5); Lcd_WriteCmd(0x30);//基本指令操作 delay(5); Lcd_WriteCmd(0x0C);//显示开,关光标 delay(5); Lcd_WriteCmd(0x01);//清除LCD的显示内容 delay(5);}voidLcd_SetPos(ucharX,ucharY){ucharpos;if(X==0){X=0x80;}elseif(X==1){X=0x90;}elseif(X==2){X=0x88;}elseif(X==3){X=0x98;}pos=X+Y;Lcd_WriteCmd(pos);//显示地址}voidLcd_DispLine(ucharline,ucharpos,uchar*str){ inti=0; Lcd_SetPos(line,pos); while(str[i]!='\0') { Lcd_WriteDat(str[i]); i++; }}3:GPS子模块voidGPS_Init(void){ Lcd_DispLine(0,0,init1); Lcd_DispLine(1,0,init2); Lcd_DispLine(2,0,init3); Lcd_DispLine(3,0,init4);}intGPS_RMC_Parse(char*line,GPS_INFO*GPS){ ucharch,status,tmp; floatlati_cent_tmp,lati_second_tmp; floatlong_cent_tmp,long_second_tmp; floatspeed_tmp; char*buf=line; ch=buf[5]; status=buf[GetComma(2,buf)]; if(ch=='C')//如果第五个字符是C,($GPRMC) { if(status=='A')//如果数据有效,则分析 { GPS->NS=buf[GetComma(4,buf)]; GPS->EW=buf[GetComma(6,buf)]; GPS->latitude=Get_Double_Number(&buf[GetComma(3,buf)]); GPS->longitude=Get_Double_Number(&buf[GetComma(5,buf)]); GPS->latitude_Degree=(int)GPS->latitude/100;//分离纬度 lati_cent_tmp=(GPS->latitude-GPS->latitude_Degree*100); GPS->latitude_Cent=(int)lati_cent_tmp; lati_second_tmp=(lati_cent_tmp-GPS->latitude_Cent)*60; GPS->latitude_Second=(int)lati_second_tmp; GPS->longitude_Degree=(int)GPS->longitude/100; //分离经度 long_cent_tmp=(GPS->longitude-GPS->longitude_Degree*100); GPS->longitude_Cent=(int)long_cent_tmp; long_second_tmp=(long_cent_tmp-GPS->longitude_Cent)*60; GPS->longitude_Second=(int)long_second_tmp; speed_tmp=Get_Float_Number(&buf[GetComma(7,buf)]);//速度(单位:海里/时) GPS->speed=speed_tmp*1.85;//1海里=1.85公里 GPS->direction=Get_Float_Number(&buf[GetComma(8,buf)]);//角度 GPS->D.hour=(buf[7]-'0')*10+(buf[8]-'0'); //时间 GPS->D.minute=(buf[9]-'0')*10+(buf[10]-'0'); GPS->D.second=(buf[11]-'0')*10+(buf[12]-'0'); tmp=GetComma(9,buf); GPS->D.day=(buf[tmp+0]-'0')*10+(buf[tmp+1]-'0');//日期 GPS->D.month=(buf[tmp+2]-'0')*10+(buf[tmp+3]-'0'); GPS->D.year=(buf[tmp+4]-'0')*10+(buf[tmp+5]-'0')+2000; UTC2BTC(&GPS->D); return1; } } return0;}intGPS_GGA_Parse(char*line,GPS_INFO*GPS){ ucharch,status; char*buf=line; ch=buf[4]; status=buf[GetComma(2,buf)]; if(ch=='G')//$GPGGA { if(status!=',') { GPS->height_sea=Get_Float_Number(&buf[GetComma(9,buf)]); GPS->height_ground=Get_Float_Number(&buf[GetComma(11,buf)]); return1; } } return0;}staticfloatStr_To_Float(char*buf){ floatrev=0; floatdat; intinteger=1; char*str=buf; inti; while(*str!='\0') { switch(*str) { case'0': dat=0; break; case'1': dat=1; break; case'2': dat=2; break; case'3': dat=3; break; case'4': dat=4; break; case'5': dat=5; break; case'6': dat=6; break; case'7': dat=7; break; case'8': dat=8; break; case'9': dat=9; break; case'.': dat='.'; break; } if(dat=='.') { integer=0; i=1; str++; continue; } if(integer==1) { rev=rev*10+dat; } else { rev=rev+dat/(10*i); i=i*10; } str++; } returnrev;} staticfloatGet_Float_Number(char*s){ charbuf[10]; uchari; floatrev; i=GetComma(1,s); i=i-1; strncpy(buf,s,i); buf[i]=0; rev=Str_To_Float(buf); returnrev; }staticdoubleStr_To_Double(char*buf){ doublerev=0; doubledat; intinteger=1; char*str=buf; inti; while(*str!='\0') { switch(*str) { case'0': dat=0; break; case'1': dat=1; break; case'2': dat=2; break; case'3': dat=3; break; case'4': dat=4; break; case'5': dat=5; break; case'6': dat=6; break; case'7': dat=7; break; case'8': dat=8; break; case'9': dat=9; break; case'.': dat='.'; break; } if(dat=='.') { integer= i=1; str++; continue; } if(integer==1) { rev=rev*10+dat; } else { rev=rev+dat/(10*i); i=i*10; } str++; } returnrev;} staticdoubleGet_Double_Number(char*s){ charbuf[10]; uchari; doublerev; i=GetComma(1,s); i=i-1; strncpy(buf,s,i); buf[i]=0; rev=Str_To_Double(buf); returnrev; }staticucharGetComma(ucharnum,char*str){ uchari,j=0; intlen=strlen(str); for(i=0;i<len;i++) { if(str[i]==',') j++; if(j==num) returni+1; } return0; }staticvoidUTC2BTC(DATE_TIME*GPS){ GPS->second++; if(GPS->second>59) { GPS->second=0; GPS->minute++; if(GPS->minute>59) { GPS->minute=0; GPS->hour++; } } GPS->hour=GPS->hour+8; if(GPS->hour>23) { GPS->hour-=24; GPS->day+=1; if(GPS->month==2|| GPS->month==4|| GPS->month==6|| GPS->month==9|| GPS->month==11) { if(GPS->day>30) { GPS->day=1; GPS->month++; } } else { if(GPS->day>31) { GPS->day=1; GPS->month++; } } if(GPS->year%4==0) { if(GPS->day>29&&GPS->month==2) { GPS->day=1; GPS->month++; } } else { if(GPS->

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论