APP下载

基于VisualC++伪距单点定位软件的实现

2018-08-29王景科

中国科技纵横 2018年15期
关键词:程序设计

王景科

摘 要:在VisualC++6.0编程平台上,采用C++对GPS伪距单点定位进行程序设计。叙述了GPS伪距单点定位原理及其误差分析与处理,利用编制的程序对导航电文和观测值文件进行解算,计算了接收机的三维坐标,并结合算例对定位精度进行了一定的分析。

关键词:VisualC++;单点定位;程序设计

中图分类号:P228 文献标识码:A 文章编号:1671-2064(2018)15-0031-03

全球定位系统,简称GPS,就是利用GPS定位卫星,在全球范围内实时进行定位、导航的系统。具有自动连续、全球覆盖、全天候、保密性强、实时定位速度快等特点,其应用领域正在不断的得到拓展。

伪距单点定位是根据计算出的卫星坐标,再以伪距为观测量,通过空间后方交会原理计算出地面测站点的位置。因其速度快捷、灵活方便且无多值性问题等特点,能够很好地满足实时测量的要求,在测绘、交通、建筑、环境监测和军事领域有着较为广泛的应用[1]。随着测绘科学技术的不断进步,测绘所涉及的领域也越来越广,其工作将不再是传统的外业测量,而是逐渐发展为以3S为技术背景的信息化技术,因此,程序开发将愈显重要。此次开发的GPS单点定位程序以学习实践程序开发为主要目的,从理论学习开始,不断总结研究,设计出程序的框架和编程算法,编写代码,逐步完成单点定位的功能。在整个编程过程中,对遇到的各种各样的问题,通过讨论分析,进一步解决,极大的加深了GPS理论的理解,并且在很大程度上提高了自己对开发语言的驾驭能力。

1 伪距单点定位解算平差步骤

1.1 伪距单点定位原理

GPS单点定位的实质是基于测量学中的空间距离后方交会的原理,在野外观测中,我们通过接收机得到有关卫星位置信息的数据,解读出这些卫星的位置和卫星到测点的距离(伪距),然后以卫星为球心,以距离为半径作球面[2]。如果同时观测了3颗卫星,我们便得到3个球面。用数学语言说,即可组成包括3个未知数(X,Y,Z)的3个方程式。这三个球面相交的这一点,即为我们所要求的测点的位置,也就是说,对这3个方程式联立求解,便可得到该点在WGS-84坐标系下的三维坐标。接收机测量的是伪距,其中包括3个坐标分量未知数和1个钟差未知数。为了实时求解这4个未知数,以实现单点定位,必须至少同时观测和得到4颗卫星的伪距观测值。

1.2 伪距单点定位基本方程

设为伪距观测量,R为接收机到卫星的真距离,为接收机钟差,则观测方程为:

式中,假定伪距观测量已经过星历中的对流层和电离层改正;为卫星的瞬时地心坐标,可由卫星星历电文中求出;为接收机的地心坐标,是待求量。

为了求解方便和数据处理的需要,将上式进行微分,作线性化处理,并将接收机的概略坐标作为初始值带入,得到:

式中,为平差参数的中误差;为伪距测量中误差(单位权中误差)。

2 程序设计

2.1 程序设计思路

C++是一门面向对象语言,相对于面向过程语言而言,其具有易维护、效率高、易扩展等优点[5]。同时C++的可视化开发环境让界面设计简单、代码具有条理性,以后的软件维护方便,兼容性和延展性也很好,适合测绘程序的开发,因此GPS单点定位程序选用VisualC++6.0作为开发平台。此次程序开发的思路具体过程如下:

(1)读取导航文件;(2)计算卫星t时刻的瞬时坐标;(3)提取伪距值,测站近似坐标;(4)建立误差方程并确定误差方程系数;(5)基于同一时刻4颗卫星以上不同卫星的数据,重复1-3步骤;(6)利用最小二乘法,计算求得测站坐标改正数;(7)求得t时刻测站的WGS绝对坐标。

根据程序开发的基本思路,设计程序基本框架如图1所示。

2.2 程序功能框图(如图2所示)

2.3 主要模块设计思路

2.3.1 读取导航电文文件模块

也就是通常说的N文件读取模块。程序采用了getline()函数逐行读取数据,并将读取的数据存储于自定义的Ephemeris结构体中。结构体代码及存储的部分内容如下:

Struct Ephemeris//定义N文件的数据记录结构体

{int PRN;//卫星PRN号

Int year;int month;int dat;int hour;int minute;double second;//卫星钟的参考时刻年月日时分秒

double GPSTIME;//GPS周当前秒

double TTLSEC; //GPS时中的总秒数

double a0;//卫星中的偏差

double a1;//卫星中的漂移

double a2;//卫星中的偏差

double IDOE;//数据,星历的发布时间

… ………

2.3.2 读取观测文件函数模块

观测值文件的文件头存放有文件的创建日期、单位名称、测站名、天线信息、测站近似坐标、观测值数量及类型、观测历元间隔等信息。观测文件的数据纪录区存放的是观测过程中在某一观测历元所观测到的卫星伪距观测数据,所包含的实际观测类型与接收机记录的类型的格式转换时的参数设置有关。观测文件的文件头只读取测站近似位置及测站偏移量。而文件的数据记录需要逐个历元全部读取,读取方法和读取导航电文相似,用到的是自定义EPH结构体。

2.3.3 卫星位置计算函数模块

主要功能是计算观测时刻卫星的瞬时位置,其主要步骤为计算卫星平均角速度、相对于参考历元的时间计算、计算平近点角及偏近点角、计算真近点角和升交点角距、计算各项改正数、计算卫星在轨道平面上的位置及卫星在地心坐标系下的坐标。经过循环,每个观测历元下每颗卫星瞬时位置在地心坐标系的坐标已经计算出来。其中运算中涉及的编程技术是准确调用已经读入的觀测值和导航电文数据。

2.3.4 参数估计模块

根据线性化后的误差条件方程,首先给A矩阵赋值,A矩阵的列数即为未知参数个数,即三个坐标改正值,三个接收机钟差参数,与连续观测到的卫星个数相等的整周模糊度参数。通过最小二乘法求出最可靠的参数估计值。

3 程序算例和精度分析

3.1 程序算例

以2015年11月23日某大学校区控制点观测数据为例,利用该程序计算地面点坐标。该数据利用中海达GPS接收机观测,观测时间为2小时。

利用本程序计算得到的控制点的坐标,由于历元较多,篇幅较大,选取了所有历元求得的地面点坐标的平均值,如表1所示。

以该大学校 区控制网GPS静态观测数据为例,利用中海达GPS數据处理软件HDS2003计算得到该控制点的坐标如表2所示。

二者坐标残差如表3所示。

则点位误差=6.937m。

3.2 精度分析

几何精度因子(Geometric Dilution Precision,缩写为GDOP)是衡量定位精度的很重要的一个系数,它代表GPS 测距误差造成的接收机与空间卫星间的距离矢量放大因子[6]。实际表征参与定位解的从接收机至空间卫星的单位矢量所勾勒的形体体积与GDOP成反比,故又称为几何精度因子。实际上,GDOP的数值越大,所代表的单位矢量形体体积越小,即接收机至空间卫星的角度十分相似导致的结果,此时的GDOP会导致定位精度变差。好的GDOP,是指其数值小,代表大的单位矢量形体体积,导致高的定位精度。好的几何因子实际上是指卫星在空间分布不集中于一个区域,同时能在不同方位区域均匀分布。

利用本程序计算得到的算例控制点的坐标,其GDOP值如图3所示。

根据分析可知:刚开始观测的几个历元的GDOP值大于2,随着观测时间的增加,伪距单点定位的GDOP值稳定在2以下,波动较小,且点位误差d=6.937m,综上,认为本程序定位精度为10m是合理的。

4 结语

伪距单点定位在车辆导航等很多方面有很广泛应用,但是因其精度较低,在应用过程中总会一些不如意的情况,本文阐述的程序开发思想,虽然在基本原理上与以往程序相同,但是达到了笔者加深对GPS理论理解,对以后GPS学习有很大的帮助。并且程序充分利用了C++面向对象的特点,把很多方法封装成类,增加了程序的可拓展性与可读性,达到了提高编程能力的目的。

参考文献

[1]GPS测量与数据处理[M].武汉大学出版社,2010.

[2]误差理论与测量平差基础[M].测绘出版社,2010.

[3]陈艺军,杨善婷,郑加柱.GPS单点定位程序开发几点思考[J].无线通信技术,2011,(1):13-14.

[4]徐振堂,鲍峰.GPS伪距单点定位[J].硅谷,2012,(8):7-8.

[5]Watson K.C入门经典[M].清华大学出版社,2002.

[6]赵彦刚,党军勇.GPS精密单点定位精度分析与应用[J].北京测绘,2013,(5):80-82.

猜你喜欢

程序设计
基于SolidWorks和VBA的电机阶梯轴建模程序设计
高职Java程序设计课程体系建设思考
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
基于LabVIEW的车载充电机控制程序设计
浅谈基于C语言的计算机软件程序设计
高职高专院校C语言程序设计教学改革探索
OBE理念下基于Greenfoot的Java程序设计课程教学改革
模块化程序设计在一体化检定平台中的应用
PLC梯形图程序设计技巧及应用