利用RTKLIB处理GPS以及北斗数据
RTKPPP定位算法流程

1基础知识1.1GPS精密单点定位的基本原理GPS精密单点定位一般采用单台双频GPS接收机,利用IGS提供的精密星历和卫星钟差,基于载波相位观测值进行的高精度定位。
观测值中的电离层延迟误差通过双频信号组合消除,对流层延迟误差通过引入未知参数进行估计。
1.2时间系统RTKLIB内部使用GPST(GPST时间)用于GNSS的数据处理和定位算法。
数据在RTKLIB内部处理之前,需要转换成GPST时间。
使用GPST的原因是避免处理润秒。
RTKLIB使用以下结构体表示时间:typedef structtime_t time; /* time(s) expressed by standard time_t */double sec; /* fraction of second under 1 s */} gtime_t;1.2.1GPST和UTC(Universal Time Coordinated)关系参考【图1】,参考【图2】:图1 转换关系公式图 2通过使用GPS导航信息中的UTC参数,GPST到UTC或者UTC到GPST之前的转换可以用更准确的表达方式,如【图3】。
这些参数是由GPS导航消息提供的。
1.2.2BDT(北斗导航卫星系统时间)BDT(北斗导航卫星系统时间)是一个连续的时间系统,没有润秒。
开始历元的时间是【UTC 2006年1月1号00:00:00】。
北斗时间计算公式【图4】:图 4UTC和GPST时间转换同上面的GPS一样,只不过UTC参数来自与北斗导航信息中。
1.3坐标系统接收机和卫星的位置在RTKLIB中表示为在ECEF(地心地固坐标系)坐标系统中的X, Y, Z 组件。
1.3.1大地坐标到ECEF坐标的转换转换公式如【图5】。
第三个公式最后一行有错,应该为: (v(1 – e2)+h)sin图 5参数说明: a :地球参考椭球的长半径f : 地球参考椭球的扁平率h: 椭球高度:纬度: 经度当前版本的RTKLIB使用的值为【图6】:图 6图7 参考椭球体1.3.2ECEF坐系到大地坐标的转换转换公式如【图8】图 81.3.3本地坐标到ECEF坐标的转换在接收机位置的本地坐标,也被称为ENU坐标,通常使用在GNSS导航处理。
rtklib convbin 用法 -回复

rtklib convbin 用法-回复RTKLIB是一个开源的GNSS数据处理软件包,它提供了一系列用于处理和分析GNSS(全球卫星导航系统)数据的工具和算法。
其中之一是convbin工具,它用于将GNSS数据从原始格式转换为RTKLIB可以处理的格式。
本文将一步一步回答关于rtklib convbin工具的用法。
第一步:安装RTKLIB首先,您需要下载并安装RTKLIB软件包。
它可以从RTKLIB官方网站(第二步:了解convbin工具convbin工具是RTKLIB软件包的一部分,用于将GNSS数据从原始格式转换为RTKLIB的BINEX(Binary Exchange)格式。
它支持多种原始数据格式,包括RINEX(Receiver Independent Exchange Format)、SP3(Satellite Precise Ephemerides)、IONEX(Ionospheric Grid Exchange Format)等。
第三步:查看convbin的命令行选项在命令行中输入"convbin",可以看到convbin工具的命令行选项和用法。
以下是一些常用的选项:- "convbin -h":显示帮助信息,包括命令行选项和参数的说明。
- "convbin -v":显示版本信息。
- "convbin -ot":输出BINEX文件。
- "convbin -yr":重新计算周跳。
- "convbin -od":输出RINEX文件。
第四步:将原始数据转换为BINEX格式使用convbin工具最常见的用法是将原始数据转换为BINEX格式。
假设你有一个RINEX格式的GNSS观测数据文件,可以使用以下命令将其转换为BINEX格式:"convbin -ot input.obs output.binex"其中,"input.obs"是输入文件的路径和文件名,"output.binex"是输出文件的路径和文件名。
rtklib差分解算流程

rtklib差分解算流程
RTKLIB是一个用于实时运动定位和运动学应用的开源软件包。
它支持多种GNSS接收机,并提供了差分定位的功能。
差分定位是一种利用基准站观测数据对移动站观测数据进行校正,从而提高定位精度的技术。
差分解算流程一般包括以下步骤:
1. 数据采集,首先需要收集移动站和至少一个基准站的GNSS 观测数据。
这些数据包括卫星的伪距观测值、载波相位观测值等。
2. 数据预处理,接下来对观测数据进行预处理,包括数据格式转换、数据质量控制、数据编辑等。
3. 数据解算,在数据预处理后,利用RTKLIB中的差分解算模块,对观测数据进行解算,得到移动站的高精度定位结果。
这一步包括载波相位双差解算、模糊度固定、模糊度模糊性解决等过程。
4. 结果输出,最后,将解算结果输出到文件或者显示在用户界面上,以便用户进行后续的应用。
需要注意的是,RTKLIB的差分解算流程可能会因具体的应用场景、GNSS接收机类型、观测数据质量等因素而有所差异。
在实际应用中,用户需要根据具体情况进行参数配置和数据处理,以获得最佳的定位精度和稳定性。
总的来说,RTKLIB的差分解算流程涉及数据采集、预处理、解算和结果输出等多个环节,通过这些步骤可以实现高精度的实时运动定位和运动学应用。
基于RTKLIB 软件的“卫星导航原理及应用”课程教学实践

一、引言卫星导航系统不仅是国家安全和经济的基础设施,也是体现现代化大国地位和国家综合国力的重要标志。
卫星导航为民用领域带来巨大的经济效益。
当今社会,卫星导航已成为经济发展的强大发动机,全球导航卫星系统已成为重要的基础。
军事应用历来是卫星导航的重要领域。
卫星导航可为各种军事运载体导航,已成为武装力量的支撑系统和倍增器。
当今世界正面临一场新军事革命,卫星导航系统作为一个功能强大的军事传感器,已经成为天战、远程作战、导弹战、电子战、信息战及导航战的重要武器[1]。
“卫星导航原理及应用”是我校导航工程专业学历教育的核心课程,该课程是导航工程专业学员学习卫星导航知识与导航学科其他相关知识的基础[2]。
鉴于卫星导航系统具有较强的民用价值和军事意义,该课程被大学列为导航工程专业必修课程和其他专业选修课程[3]。
该课程主要讲授卫星导航系统的发展和应用、卫星导航常用坐标与时间系统、卫星轨道理论、卫星导航系统组成、定位原理、定位性能、全球卫星导航系统、卫星导航增强系统及卫星导航新技术与展望等内容[4,5]。
由于涉及导航电文、观测数据、星历、钟差、卫星可见性、精度因子、信噪比、多路径、截止高度角等许多复杂抽象的概念和实时定位解算、后处理分析、可视化分析等大量枯燥烦琐的数学推导,传统上仅依赖于教员课堂语言描述结合板书的教学方法,不仅讲授难度较大,而且由于不能直观展示卫星导航系统运行情况,对学员的空间想象能力要求较高,常常造成学员理解上的困难,甚至使其产生厌烦情绪,教学效果不佳。
计算机技术和数据分析处理软件因其便捷性与生动性,近年来在专业课程教学中得到了广泛应用[6-8]。
为了丰富教学手段,近年来课程组将开源程序包RTKLIB (Open Source Program Package )软件引入“卫星导航原理及应用”课程教学中,制作了许多形象生动的图像,把适合动态演示的内基于RTKLIB 软件的“卫星导航原理及应用”课程教学实践余德荧a ,李厚朴b ,程海军c ,纪兵a(海军工程大学a.导航工程教研室;b.控制工程教研室;c.教务处,湖北武汉430033)[摘要]“卫星导航原理及应用”是海军工程大学导航工程专业学历教育的核心课程,该课程是导航工程专业学员学习卫星导航知识与导航学科其他相关知识的基础。
RTKLIB使用数据分析

RTKLIB使用数据分析Rtklib算法使用和芯星通板卡输出的两种类型数据:1)BD2 ephemeris data(星历数据)2)Range information(测距信息)1.BD2 ephemeris dataRtklib算法中使用到的星历数据项及说明:数据项数据类型说明RtkLib是否使用Y PRN ulong PRN编号:根据卫星所采用的伪随机噪声码(PRN码)对卫星编号Tow double Time Stamp of Subframe 0(seconds) YHealth ulong 卫星健康状况YIODE1 ulong Issue of ephemeris data 1 YN IODE2 ulong Issue of ephemeris data 2 = IODE1 forBD2Week ulong 星期数YN Z Week ulong Z count week number.This is the weeknumber from subframe 1 of theephemeris. The ‘toe week’ (field #7) isderived from this to accountfor rollover.Toe double 星历参考时间YA double Semi-major axis, meters Y∆double 平均运动角速度校正值YNM0 double Toe时的平近点角YEcc double 轨道偏心率Yωdouble 轨道近地角距YCuc double 升交点角距余弦调和校正振幅YCus double 升交点角距正弦调和校正振幅Ycrc double 轨道半径余弦调和校正振幅Ycrs double 轨道半径正弦调和校正振幅Ycic double 轨道倾角余弦调和校正振幅Ycis double 轨道倾角正弦调和校正振幅Yi0 double Toe时的轨道倾角Ydouble 轨道倾角对时间的变化率Y ∙Iωdouble 周内时等于0时的轨道升交点赤经Y 0double 轨道升交点赤经对时间的变化率Y ∙ωiodc ulong 时钟数据块的“期刊号”Ytoc double 卫星时钟校正时间参考点Ytgd double 群波延时校正值Naf0 double 卫星时钟校正模型方程中的系数Yaf1 double 卫星时钟校正模型方程中的系数Yaf2 double 卫星时钟校正模型方程中的系数YN AS Enum Anti-spoofing on:0 = FALSE1 = TRUEN double Corrected mean motion,Nradians/secondURA double 用户测距精度NCRC Hex CRC校验码N2.Range informationRtklib算法中使用到的测距信息数据项及说明:数据项数据类型说明RtkLib是否使用nobs long 将要输出的观测数量YPRN/ slot ushort 当前卫星测距信息伪随机码Y(GPS:1-32;SBAS:120-138;GLONASS:38-61;BD2:161-197)glofreq ushort GLONASS频率+7 Npsr double 伪距测量值Ypsr std float 伪距测量值标准偏差Nadr double 载波相位Yadr std float 载波相位标准偏差Ndopp float 即时载波多普勒频率YC/No float 载噪比YN locktime float 锁定时间,即在不失周下持续跟踪的时间ch-tr-status Ug Tracking status N CRC Hex CRC校验码N。
基于北斗卫星导航系统的RTK 在城市测量中的优势

基于北斗卫星导航系统的RTK 在城市测量中的优势北斗卫星导航系统(BDS)作为我国自主研发并建设的全球卫星导航系统,具有完全自主知识产权和完全自主控制权,已经成为我国重要的国家战略和基础设施。
在城市测量中,基于北斗卫星导航系统的实时动态差分定位技术(RTK)可以大大提高测量精度,具有以下优势:1. 高精度定位技术RTK技术是实时动态差分定位技术的缩写,其核心思想是通过测量移动接收器和一组基准站的距离差异,来计算出接收器的精确位置。
而北斗卫星导航系统具有高精度的定位技术,可以提供更加准确的定位服务。
在城市测量中,由于城市环境复杂,信号容易被阻挡或者反射,导致传统定位技术的精度大打折扣。
而基于北斗卫星导航系统的RTK技术可以通过多基准站建立起基线,有效地解决城市环境下信号多次反射、噪声干扰等问题,提高定位精度。
2. 强大的鲁棒性由于城市环境复杂,传统的测量技术经常面临信号干扰、误差累积等问题,从而导致定位精度下降。
而基于北斗卫星导航系统的RTK技术具有强大的鲁棒性,能够克服这些问题。
基于北斗卫星导航系统的RTK技术可以通过多星定位、动态差分等技术,减小误差的影响,大幅提高定位精度和鲁棒性,在城市测量中表现出色。
3. 高效的数据处理能力基于北斗卫星导航系统的RTK技术能够提供高效的数据处理能力。
在城市测量中,要处理的数据量往往十分庞大,需要进行实时计算,这对数据处理能力提出了很高的要求。
而基于北斗卫星导航系统的RTK技术可以通过高效的算法和优化的数据处理流程,快速处理大量的数据,并实现高精度、实时的定位服务。
4. 广泛的应用场景基于北斗卫星导航系统的RTK技术可以广泛应用于城市测量领域,包括城市规划、建筑物测量、道路测量、隧道测量等。
在城市规划中,基于北斗卫星导航系统的RTK技术可以实现地形测量、建筑物立面测量、道路测量等工作。
在建筑物测量中,基于北斗卫星导航系统的RTK技术可以实现大型建筑物的立面测量、悬挑物的测量、建筑物维修和施工等工作。
总结rtklib

RTKlib关于高精度GPS动态定位处理过程第一章引言 (4)1.1调用主函数main(rnx2rtkp.c) (4)1.2调用后处理函数postpos(postpos.c) (4)1.3 处理基站信息execses_b(postpos.c) (4)1.4 处理流动站信息execses_r(postpos.c) (4)1.5执行处理操作execses(postpos.c) (5)1.6函数调用流程图 (5)第二章文件读取 (6)2.1观测文件读取readobsnav (postpos.c) (6)2.1.1 文件头读取redarnxh (rinex.c) (6)2.1.2 文件的记录数据读取readrnxobs (rinex.c) (7)2.2导航电文文件读取 (8)2.2.1 文件头读取 (8)2.2.2 文件的记录数据读取 (8)第三章计算基准站位置和速度 (9)3.1利用导航文件与基准站观测文件求卫星位置、速度和卫星钟钟差satposs(ephemeris.c) (9)3.1.1卫星钟钟差计算ephclk(ephemeris.c) (9)3.1.2 卫星位置计算satpos(ephemeris.c) (10)3.2 码伪距单点定位estpos(pntpos.c) (11)3.3函数调用流程图 (12)第四章动态相对定位求流动站位置 (13)4.1 码伪距单点定位求流动站的近似坐标pntpos (13)4.2 载波相位动态相对定位relpos(rtkpos.c) (13)4.2.1 利用导航文件和流动站观测文件求卫星位置和卫星钟钟差satposs(ephemeris.c) (13)4.2.2 求基准站对应的非差残差项zdres(rtkpos.c) (13)4.2.3 实时状态更新udstate(rtkpos.c) (14)4.2.4 求流动站对应的非差残差项zdres(rtkpos.c) (15)4.2.5 求双差残差项ddres(rtkpos.c) (15)4.2.6 卡尔曼滤波filter(rtkcmn.c) (18)4.2.7 模糊度整数估计resamb_LAMBDA() (19)4.3 函数调用流程图 (21)第五章总结 (22)5.1结果输出 (22)5.2 不足之处 (22)5.3 下一阶段计划与安排 (22)第一章引言精密GPS动态测量采用载波相位差分技术,其标准测量模式为,一台GPS接收机置于已知点,作为基准站来进行静态测量,另一台GPS接收机置于载体上,作为流动站来进行动态测量。
RTKLIB源码解析(一)——单点定位(pntpos.c)

RTKLIB源码解析(⼀)——单点定位(pntpos.c)RTKLIB源码解析(⼀)——单点定位(pntpos.c)标签: GNSS RTKLIB 单点定位前段时间⼀直忙着写毕业论⽂,所以也没有太多时间来阅读 RTKLIB源码,最近好⽍把 pntpos中的相关代码看了⼀遍,知道了 RTKLIB是如何实现单点伪距定位的。
这⾥把每⼀个函数都做成了⼩卡⽚的形式,每个函数⼤都包含函数签名、所在⽂件、功能说明、参数说明、处理过程、注意事项和我的疑惑这⼏个部分,介绍了阅读代码时我⾃⼰的看法和疑惑。
所以希望诸位看官能帮忙解答我的疑惑,与我交流,也希望能帮助后来也有需要阅读 RTKLIB源码的⼈,给他们多提供⼀份思路。
总⽽⾔之,既为⼈,也为⼰。
这份⽂档是使⽤ Cmd Markdown完成的,在作业部落上其格式显式的⾮常完整,但是在博客园中⽬录、代码块和流程图似乎都没有显⽰出来,所以这⾥也贴上本⽂在作业部落上的链接,对格式“零容忍”的同学请移步那⾥。
⽬录pntposint pntpos (const obsd_t *obs, int n, const nav_t *nav, const prcopt_t *opt, sol_t *sol,double *azel, ssat_t *ssat, char *msg)所在⽂件:pntpos.c功能说明:依靠多普勒频移测量值和伪距来进⾏单点定位,给出接收机的位置、速度和钟差参数说明:函数参数,8个:obsd_t *obs I observation dataint n I number of observation datanav_t *nav I navigation dataprcopt_t *opt I processing optionssol_t *sol IO solutiondouble *azel IO azimuth/elevation angle (rad) (NULL: no output)ssat_t *ssat IO satellite status (NULL: no output)char *msg O error message for error exit返回类型:int O (1:ok,0:error)调⽤关系:如⽆特别说明,本⽂所出现的流程图中,纵向代表时间上的先后调⽤顺序,横向代表层次上的逐级调⽤顺序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用rtklib开源代码处理GPS以及北斗数据详解在GNSS领域最基础的工作是这些GNSS系统的定位工作,对于绝大多数研究者,自己着手完成这些工作是一个“鸡肋”:完全独立设计的话费时费力,运用开源代码又很难弄懂。
我当初也是如此。
但想到毕竟开源代码已经做了很多工作,不用实在可惜,最终毅然决定咬紧牙关弄懂rtklib。
尝试用过rtklib的人都知道,其功能固然完全,然而代码却太过复杂,把人搅得一头雾水。
想用vs2008使用那些代码,从添加文件到使用函数,简直是步步艰难。
我已经从中吃了不少苦头,在用的时候也找不到比较详细的使用方法。
不想后来者也像我一样,在rtklib使用中痛苦万分,故以现有的研究程度,对rtklib做个入门介绍。
关于rtklib的基本介绍,网上一堆,在此不再赘言,本文重点介绍如何用vs2008使用其src文件中的开源代码以及修改以完成自己需要的功能。
一、rtklib代码的添加由于习惯了vs2008,在开发程序时用到这个编译器。
添加过程如下:1、在vs中新建一个控制台项目(含预编译头);2、在建好的项目中添加rtklib.h以及需要用到的source文件(.c文件),然后将.c 改为.cpp并在每个文件首句增加一行#include "stdafx.h",当然在stdafx.h文件中添加#include "rtklib.h";这样编译基本可以通过了;3、一般而言,我们不会需要用到rtklib程序集中的所有文件,只是需要部分。
比如我需要用到其中的pntpos这个标准单点定位函数,这个时候就需要添加该函数所在实现文件(pntpos.c)。
于是添加了这个文件。
但是一般而言,只添加这一个可能不能解决问题,因为rtklib的各个文件之间并不是完全独立,pntpos文件中某些函数可能会调用到其他文件中实现的函数。
于是需要再把相关文件添加到工程中。
对于这个问题,可以根据自己添加的文件,编译时候的提示,依次添加进来相应文件。
这样可以解决fatal error的问题;4、在添加完成后,可能会遇到一些其他问题。
主要问题有:a.关于某些地方数组越界或为空(主要是glonass),这个时候,查看rtklib.h头文件,可以发现关于系统启用的#define语句,其中除GPS系统外,其他系统数目都是0。
解决办法如截图:主要是注释掉这个判断语句。
(当然,这样造成的是所有系统直接启用,这是我的处理办法,不是最佳的办法,读者有更好的办法求赐教哈)b.关于很多地方会出现const char*与char*的不能转化问题,这个很简单,在相应地方进行强制转化就行。
c.还存在字符集采用的问题,这个只需要在项目属性中使用多字节字符集即可(见下图)。
d.关于某些函数存在未实现的问题,这个时候,可以网上直接搜索那些没有实现的函数,进行替换,或是直接屏蔽掉。
rtklib中代码的添加工作基本就这些问题,解决后应该就可以使用了。
二、rtklib代码的修改rtkilib的头疼之处不只在于添加工作一堆问题,还在于即便添加好了,在使用其中函数的时候还是一堆问题。
我这次使用主要是用最新版本rtklib_2.4.2进行GPS与北斗的标准单点定位:主要会用到readrnx、pntpos、postpos等函数(函数里面又有一堆子函数),本以为调用成功就可以了,没想到根本不是那么顺利。
rtklib虽然声称能处理北斗数据和rinex3.0以上版本,但实际上并没完全实现。
要想处理这些问题,还得自己修改代码。
我这次主要是修改了文件读取和定位部分。
1、rinex文件读取函数的修改a. 读取北斗导航文件的问题:rtklib在读取导航文件的时候没法区分GPS n文件与北斗c文件,这会导致后面没法进行北斗的定位。
下面详述修改方法:本人的方法是在readrnxfp函数的readrnxh函数里面进行系统的标示。
如上图,在type确认出文件为导航n文件时,区分GPS与北斗。
并将系统标示赋在sys里面。
增加这些后,区分没问题了。
但还不够,如果这样,后面还是无法区分,而且sys一直是GPS。
当时这个破问题废了我两个多小时(无语死了)。
后来仔细调试,才终于发现,问题出在该函数后面的一个语句有误。
如下图,只需要在该处添加一个break!!!(小问题害死人!)不要以为这样就行了,这还只是解决了系统辨认的问题,革命尚未成功!在导航文件的文件体读取中,还得修改。
Readrnxnavb中需要增加处理北斗系统的语句,以与GPS区分。
在增加了处理部分后,区分并读取北斗导航文件就没问题了,就不会影响到后面北斗的定位了。
b. rinex3.0以上版本北斗观测值文件的读取:如果没进行修改就去读取含北斗的rinex3.0以上版本o文件,会发现北斗数据压根就没有读取进去。
(虽然声称已解决,但不够完美)这个时候,又需要修改读取函数了。
首先需要修改读取观测值文件头的函数decode_obsh中的convcode。
由于3.0版本的观测值类型跟低版本的差别较大,而且GNSS系统较多,观测值类型的存储有一定转化规律,然而这个究竟如何,暂时也没有一定之规。
该函数中的转化不够合理,没法处理北斗的部分这个需要自己增加处理北斗的语句,至于具体怎么添加,主要是采用截图所示方法,但具体编码之间的对应,则各人见仁见智了。
在文件体中则需要修改readrnxobsb中用到的set_index。
这个是将改为:方法很笨拙,目前还没仔细思考更好的办法(多交流。
),不过这样就可以了。
2、 GPS以及北斗单点定位的代码修改a.pntpos的使用:如果直接在读取了rinex文件后进行pntpos的定位操作,会发现定位结果为0。
这是直接用pntpos会存在的问题。
单步调试会发现其实是因为函数中用到的lam为0,仔细查找,发现其实根本没有地方给这个变量赋值。
这时候需要在外部直接赋值。
在处理北斗时候,由于14s(得感谢何师兄的点拨才解决)的存在,需要再卫星位置计算函数里面设置判断,当处理北斗时进行14s的处理。
然后就行了。
在用此函数定位时,参数输入会很多,代码里面自带一个默认参数配置,如果切换定位系统则需要相应的修改参数。
主要是将navsys相应的切换就行。
c. postpos的使用:postpos的单点定位实际上是用到了前述的所有函数,而且一般是作为外部调用的最佳接口。
前面各个部分都改好了的话,直接使用这个函数是没问题的,如果GPS或是北斗没法定位那绝对是前面没改好。
在处理好上述问题后,用代码单独处理北斗数据或者GPS数据都是没问题的。
至于如何同时都利用则是一个更复杂的问题,rtklib提供的可执行程序也没实现这个问题,这需要在以后的工作中继续研究。
三、调用函数时候参数的设置代码函数怎么用也是一个问题,为了方便使用,贴出我的调用代码作为参考,相信可以减少不少时间。
1、 pntpos模式:// const char *file="d:\\rinex\\*.*";//cent1530.12o";// int rcv=0;//接收机编号// const char *opt="";//选择提取信号类型// obs_t *obs=new obs_t();//函数里面会分配内存// nav_t *nav=new nav_t();//同上// sta_t *sta=new sta_t();//同上// for (int ii=0;ii// {// nav->lam[ii][0]=CLIGHT/FREQ1;// nav->lam[ii][1]=CLIGHT/FREQ2;// nav->lam[ii][2]=CLIGHT/FREQ5;// }// for(intii=NSATGPS+NSATGLO+NSATGAL;ii// {// nav->lam[ii][0]=CLIGHT/FREQ2_CMP;// nav->lam[ii][1]=CLIGHT/FREQ7_CMP;// nav->lam[ii][2]=CLIGHT/FREQ6_CMP;// }// readrnx(file, rcv, opt, obs, nav, sta);//全部读取//// char sat[4]="";// for (int i=0;i<25;i++)// {// satno2id(obs->data[i].sat,sat);// printf("%d %s ",obs->data[i].sat,sat);// cout<<setiosflags(ios::fixed)<<setprecision(4)<<obs->data[i].P[ 0]<<" "// <<obs->data[i].P[1]<<" "// <<obs->data[i].P[2]<<endl; //// }// for (int i=9;i<18;i++)// {// satno2id(nav->eph[i].sat,sat);// printf("%d %s ",nav->eph[i].sat,sat);// cout<<setiosflags(ios::fixed)<<setprecision(4)<<nav->eph[i].toe s<<" "// <<nav->eph[i].week<<endl;// }//// cout<<"read rinex over"<<endl;//// const prcopt_t prcopt_df={// PMODE_SINGLE,0,2,SYS_CMP,// 15.0*D2R,{{0,0}},// EPHOPT_BRDC,1,1,5,0,10,// IONOOPT_BRDC,TROPOPT_SAAS,0,0, //edit by wfb// 1,0,0,0,0,// 0,0,// {100.0,100.0},// {100.0,0.003,0.003,0.0,1.0},// {30.0,0.03,0.3},// {1E-4,1E-3,1E-4,1E-1,1E-2},// 5E-12,// {3.0,0.9999,0.20},// 0.0,0.0,0.05,// 30.0,30.0,30.0,// {0},{0},{0},// {"",""},// {{0}},{{0}},{0}//};// int nn=18-9;// const prcopt_t *optn=new prcopt_t(prcopt_df);//前面设置好系统(GPS、北斗等)// sol_t *sol=new sol_t();//(sol_t*)malloc(sizeof(sol_t)*1);// //ssat_t *ssat=(ssat_t*)malloc(sizeof(ssat_t)*obs->n);// double *azel=zeros(2,nn);//// char *msg=new char(1024);//同上// //ssat_t *ssat=NULL;// pntpos(obs->data+9,nn,nav,optn,sol,azel,NULL,msg);//// for (int i=0;i// {// satno2id(obs->data[i].sat,sat);// printf("%s ",sat);// cout<<azel[i*2]<<" "<<azel[i*2+1]<<endl;// }//// cout<<"single postioning over\n\npos and vel:\n"<<endl;// for (int i=0;i<2;i++)// {// printf("%.4f %.4f %.4f\n",sol->rr[i*3],sol->rr[i*3+1],sol- >rr[i* 3+2]);// }// cout<<"all over"<<endl;//// free(azel);free(obs);free(nav);free(sta);free(sol);//free(ssat);// return 0;2、 postpose模式:const prcopt_t prcopt_df={PMODE_SINGLE,0,2,SYS_CMP, // 15.0*D2R,{{0,0}},EPHOPT_BRDC,1,1,5,0,10,IONOOPT_BRDC,TROPOPT_SAAS,0,0, //edit by wfb1,0,0,0,0,0,0,{100.0,100.0},{100.0,0.003,0.003,0.0,1.0},{30.0,0.03,0.3},{1E-4,1E-3,1E-4,1E-1,1E-2},5E-12,{3.0,0.9999,0.20},0.0,0.0,0.05,30.0,30.0,30.0,{0},{0},{0},{"",""},{{0}},{{0}},{0}};const solopt_t solopt_df={SOLF_XYZ,TIMES_GPST,1,3, //times 0,1,0,0,0,0,0,0,0,{0.0,0.0}," ",""};gtime_t ts={0,0};gtime_t te={0,0};double ti=0;double tu=0;const prcopt_t *popt=new prcopt_t(prcopt_df);const solopt_t *sopt=new solopt_t(solopt_df);const filopt_t *fopt=new filopt_t();char *infile[]={"d:\\rinex\\huashicom3.12O","d:\\rinex\\huashicom3.12C"}; int n=2;char *outfile="D:\\pos.txt";const char *rov="";const char *base="";cout<<"*********postpos start*********"<<endl;postpos(ts,te,ti,tu,popt,sopt,fopt,infile,n,outfile,rov,base);cout<<"*********postpos over*********"<<endl;。