作者:b01453901 | 来源:互联网 | 2023-09-09 17:10
GROOPS简化动力学定轨与精密单点定位
1.GROOPS简介
最近在学习GROOPS,分享一些学习成果及心得,主要涵盖GPS简化动力学定轨部分的内容与精密单点定位(ppp),官方给出的说明文档链接:https://groops-devs.github.io/groops/html/cookbook.gnssPpp.html。
首先介绍一下GROOPS:GROOPS(The Gravity Recovery Object Oriented Programming System )是由奥地利格拉茨科技大学开发的一款开源软件,该软件包含精密定轨、占网分析以及精密单点定位等众多内容,并发布于:https://github.com/groops-devs/groops
2.简化动力学定轨及精密单点定位
2.1.元数据准备
进行精密定轨及单点定位需要准备以下元数据,这些元数据需要再Groops数据网上(https://ftp.tugraz.at/outgoing/ITSG/groops/data/)下载或者是在IGS机构下载以及通过Groops软件转换得到(GROOPS支持的格式):
——可从Groops数据网直接下载得到的数据:
1)卫星相关数据
发射器列表(Transmitter List,此文件比较简单,可自己写)
发射器信息(Transmitter info)
天线定义文件(Antenna definition)
接收机信息(Receiver definition)
卫星宏观模型(Satellite macro model)
卫星姿态文件(Attitude)
2)测站相关数据
测站信息(Station info)
天线定义文件(Antenna definition)
精度定义文件(Accuracy definition)
测站位置文件(StationPosition,用以约束定位结果)
3)其他
重力场文件(Gravity field,GOCO06s_static_2010-01-01.gfc.txt)
潮汐文件(Tides and tidal deformation,earthAnelastic2003.xml,oceanTide_fes2014b_n180_version20170520.dat,oceanTide_fes2014b_admittance_linear_linear.txt,atmosphericTide_AOD1BRL06.dat,atmosphericTide_AOD1BRL06_admittance.txt,secularPole2018.xml)
地球自转文件(Earth orientation parameters)
全球气压及温度文件(Global Pressure and Temperature 3,GPT3)
JPL星历数据(ephemerides_JPL_DE432.dat)
love函数相关文件(deformationLoveNumbers_CM_Gegout97.txt,loadLoveNumbers_Gegout97.txt)
——需要从其他网站(CDDIS,WHU,CNT等机构,精密文件“P”最好使用同一机构下的)上下载的数据:
P-精密星历文件(.sp3)
P-精密钟差文件(.clk)
P-码偏差文件(.bia)
观测值文件(.**o)
对流层模型文件(VMF3)
*注:VMF3下载地址 https://vmf.geo.tuwien.ac.at/trop_products/ (格网式-GRID或测站式-GNSS)
需通过Groops转化或手动生成的数据:
1)卫星星相文件(Star Camera),在定轨过程中的中间产物,这里不做描述。
2)特定卫星的Prn钟差文件
打开Groops,添加项目LoopPrograms,在LoopPrograms中添加GnssClockRinex2InstrumentClock以循环获取所有GPS卫星的钟差文件。
LoopPrograms中的设置:
Loop->fileAscii,
inputfile->transmitter list
其余默认即可。
GnssClockRinex2InstrumentClock中的设置:
inputfileClockRinex->钟差文件(clk)
identifier->{loopstring}
intervals->uniformSampling, 起始时间为处理数据当天零时零分零秒,结束时间可设置为第二天零时零分零秒,采样间隔最好与钟差文件保持一致。
其余保持默认设置。
获取的钟差文件如下(文件名自定义,卫星prn会自动追加在文件名中):
3)每个卫星的信号偏差文件
GnssSinexBias2SingalBias:
inputfileSinexBias->bia文件
inputfileGlonassReceiverDefination->GLONASS卫星发射器的频率号映射(不用GLONASS卫星可不设置),部分结果如下:
注:注意,输出文件的名称必须为gnssSignalBias.{prn}.*,否则后续处理将会报错。
4)Groops格式的观测值文件
RinexObservation2GnssReceiver
inputfileRinexObservation->观测文件
inputStationInfo->站信息文件
inputfileSemiCodelessReceiver->Groops数据网上下载
5)对流层模型的时间序列
下载对当天00,06,12,18及第二天00的流层模型Grid 1×1数据。
运行ViennaMappingFunctionStation2File
inputfile->将下载的数据全部添加
timeSeries->uniformSampling
起始时间当天00:00:00,结束时间为第二天00:00:00,采样间隔6h。
2.2简化动力学定轨
基本认识:
精密单点定位需要精密轨道,从精密星历中获取精密轨道的方法主要有三种:
a)插值法
b)动力学方法
c)简化动力学方法
简化动力学方法是动力学方法的“简化版”,它估计了卫星所受到的主要摄动力(地球引力场,太阳光压等),而将除主要摄动力以外的摄动力视为一种随机脉冲误差,通过估计这一误差对轨道进行进一步改正获取精密轨道。
GROOPS软件实现:
LoopPrograms中的设置:
Loop->fileAscii,
inputfile->transmitter list
其余默认。
在LoopPrograms中依次添加如下项目:
loop->fileAscii(transmitter list)
Sp3Format2Orbit->输入sp3文件,获取每一个卫星的轨道。
InstrumentResample->对从sp3文件中获取的轨道插值
orbitSampling=900s
OrbitAddVelocityAndAcceleration->使用插值轨道获取卫星速度及加速度,输入插值轨道文件。
GnssPrn2SvnBlockVariables->获取卫星PRN对应的SVN号,将其转换得到的SVN号保存至变量中供后续使用(svn),输入文件为transmitter info。
SimulateStarCameraGnss->根据轨道文件、卫星姿态文件(根据SVN给出)及JPL星历获取星相数据。
PreprocessingVariationalEquation->输入添加速度及加速度的轨道、星相文件,获取变分方程文件(轨道积分结果)
包含以下设置
forces->摄动力模型
重力场、天文潮、地球潮汐以及相对论效应即可,除重力场maxDegree设置为20以外,其余参数默认(如图所示)。
PreprocessingVariationalEquation其余设置,添加地球自转文件、JPL星历及重力场模型(和上文一样再添加一次)
PreprocessingVariationalEquationOrbitFit->最小二乘法拟合获取其他轨道改正参数,对于每一个循环来说,这个项目需要进行两次,第一次估计太阳光压:
输入变分方程及添加了速度、加速度的轨道、JPL星历以估计太阳光压参数(至少估计前五个参数,也有文献提出五参数比七参数更好)
第二次估计随机脉冲误差,与上一步相比,输入的变分方程为估计太阳光压所得到的变分方程,并按下图的方式添加随机脉冲:
至此,简化动力学定轨已完成,所得变分方程包含了轨道及状态转换矩阵。
2.3精密单点定位
精密单点定位过程非常复杂,具体原理就不再赘述,仅分享如何设置GROOPS的定位策略文件。
a)首先,设置处理数据的采样策略,根据观测文件的采样间隔设置,一般为30s:
b)而后,设置卫星相关信息,输入准备好的卫星发射器列表、发射器信息、天线定义、卫星接收机定义、信号偏差、变分方程、JPL星历及钟差文件等。
设置estimateCodeBias及estimatePhaseBias为no,其余保持默认设置。
注:这里输入的信号文件名称必须为gnssSignalBias.{prn}.dat,否则报错(这个问题看了一堆源码才发现)。
c)其次,设置接收机信息
选择stationoNetwork模式
输入要处理的测站名列表文件(自己手动创建,每行一个测站)、测站信息文件、天线定义文件、接收机定义文件、精度文件、用以约束的测站位置文件以及观测值文件。
相关参数设置:
对流层设置:
viennaMapping中输入文件为上文准备的对流层模型时间序列文件,trend中开始时间应设置为处理当天的正午。
潮汐文件:
输入文件前文准备的潮汐数据文件(默认设置里有对应的名字),所有的minDegree设置为1,其余默认。
其余设置:
输入JPL星历、love函数相关文件。
设置codeMaxPositionDiff=200,minEstimableEpochRatio=0.25。(如果出现“”测站不可用“报错信息,可以将位置差适当调大,可用历元数适当调小),其余默认。
d)电离层设置->默认设置即可,地球自转文件,提供上文自转文件,保持默认设置即可,整周模糊度,默认设置。
e)constrains(约束)
f)processingStep:forEachReceiverSeparately
在processingStep:forEachReceiverSeparately,依次添加
(1)processingStep->selectParameters:
(2)processingStep->estimate:
(3)processingStep->Group:
processingStep->Group中再次添加processingStep->selectParameters,设置如下:
以及processingStep->estimate:
(4)processingStep->estimate:
(5)processingStep->resolveAmbiguities:
(6)processingStep->estimate:
(7)processingStep->printResidualStatistics
(8)processingStep->writeResults
为每个输出文件追加自定义文字吧!
Groops简化动力学定轨及精密单点定位的内容就分享到这里了,我是按照官网的教程结合一些源代码完成的这部分内容,由于源代码阅读不够充分,理论知识掌握不够全面,欢迎卫星定位及大地测量相关专业的同学指出不足并学习讨论。