RTKLIB超详细调试(VS),手把手教你全过程~(以PPP为例)第一篇——读取配置文件、精密星历、精密钟差篇
最近呢,由于科研中需要用到RTKLIB,之前用过它的GUI版本,功能很强大,但是要了解深入的逻辑,光是用那肯定是远远不够的,所以开这篇博客,记录一下调试过程
调试的版本:RTKLIB demo5版本(vs调试过程可见其它博客,很详细)
这里1,这里2,还有这
详细的调试过程我是以PPP(Precise Point Postioning)为例,使用数据:
观测数据abmf0010.20o,精密星历whr20863.sp3,精密钟差whr20863.clk
调试模式:使用配置文件(这个文件可以在GUI版本直接保存)
那么我们就话不多说直接开始
1.由于使用的是配置文件,所以程序会首先运行到这个位置,首先读取配置文件的信息
里面比较重要的是resetsysopt()这个函数,在options.c这个文件内
这是个逐行读取的函数,如果我在这个位置加一个监视
刚好读取到这个字段,对应于配置文件中的这里
重复这个过程,这样的话就把配置文件中的信息读取进来了,读取完毕,关闭文件
2.输入文件
这里设置n,以及给出输入文件的路径
第三步就是处理环节了,但是处理之前,我们先看下参数情况
3.处理环节
3.1来到postpos.c文件中的postpos函数,openses函数——预处理,大概流程是:先读取卫星和接收机天线参数,读取geoid数据,示例中这些都跳过了,读文件的逻辑是根据配置文件中的参数判断是否有文件,是否读取
3.2从openses函数出来,紧接着设置时间
3.3来到execses_b这个函数,处理每个基站,
3.3.1readpreceph读取精密星历,
首先放张精密星历参考图,我感觉写的很全面,参考了这个文档内容
精密星历比较重要的是第一行、第三至第七行、第十三行和第十五行
循环遍历文件,示例中只有当i=2才会读取到sp3文件,当文件对应的时候,读取的函数就开始工作了
首先是读文件头,用的是readsp3h这个函数,流程是最多22次循环(我看到精密星历前22行是头文件)利用fgets读取,内容存到buff里面,实例中选取的精密星历文件的头文件是这个样子
那么buff中就存储这些,这样就对应起来了
再截取buff中类型和时间,利用str2time这个函数,把时间换算成gtime_t形式,也就是是自1970年1月1日0时0分0秒至目标时间的秒数time
及不足整秒sec
,贴一个链接,讲这个内容的,讲的很好
typedef struct { /* time struct */time_t time; /* time (s) expressed by standard time_t */double sec; /* fraction of second under 1 s */
} gtime_t;
当读取到这行的时候,ns存储卫星的数量
遍历各个系统,更新sys、prn和sats等
基本上到此为止,精密星历的头文件就算是读取完毕了,紧接着读取文件的内容,使用的是readsp3b这个函数
从这一行开始读取,也就是第二十三行
还是和上述过程差不多的逐行读取,当读到数据行,也就是这里
时间转成gtime_t,记录精密星历时间和index(这个暂时还不知道啥意思)
紧接着创建这么几个二维矩阵,存储用
typedef struct { /* precise ephemeris type */gtime_t time; /* time (GPST) */int index; /* ephemeris index for multiple files */double pos[MAXSAT][4]; /* satellite position/clock (ecef) (m|s) */float std[MAXSAT][4]; /* satellite position/clock std (m|s) */double vel[MAXSAT][4]; /* satellite velocity/clk-rate (m/s|s/s) */float vst[MAXSAT][4]; /* satellite velocity/clk-rate std (m/s|s/s) */float cov[MAXSAT][3]; /* satellite position covariance (m^2) */float vco[MAXSAT][3]; /* satellite velocity covariance (m^2) */
} peph_t;
val一行一行读取,存储位置信息,记录有效历元
至于这里的std为什么是0,我想应该是文件中并未存储这个信息,参考这篇文章(也是讲sp3文件的),标准差的值要结合第15行的浮点基准值来算,比如第一颗卫星x方向标准差为12, 结合第15行第一个浮点基准值1.25,可以算出第一颗卫星x方向的标准差为,单位为毫米。钟差的标准差算法类似,不过用的是第15行第二个浮点基准值,即1.025
读出来的数据存入peph
合并精密星历
到此为止就完成了readsp3的全过程
3.3.2读取精密钟差,readrnxc函数(postpos.c)
来到readrnxfile函数
循环找到钟差文件
类似地,先是利用buff一行行读取头文件,包括卫星和测站信息
主体读取应用readrnxclk函数,读之前,先选择怎么读,也就是读取模式
来到读取函数,还是buff读取,strncpy函数复制卫星的编号,接下来读取以AS开头的卫星钟差数据,遇到AR开头的测站数据就跳过
以读取这一行为例,这是文件数据
钟差和标准差信息分别存入data[0]和data[1],再通过这个传入结构体变量
重复上述过程,读取历元的数据,到这个地方就基本读取完毕
再就是合并精密钟差,用的是这个函数
PS:这里好像只能合并GPS卫星的钟差
再就是关闭文件,清理存储
那么到这里读取配置文件、精密星历、精密钟差篇基本上就告一段落了,下次会接着更新
预告:postpos读取o文件等~
在csdn遇到了不少大佬,会帮助我解决问题,很nice,我也想做一些尝试,尽可能帮助大家,也是就当学习了,以记笔记的形式,所以第一次发博客,写的有点乱,有什么问题也请各位及时指正,不懂得也可以问,谢谢各位包涵!
那我们下次见!
RTKLIB超详细调试(VS),手把手教你全过程~(以PPP为例)第一篇——读取配置文件、精密星历、精密钟差篇相关推荐
- mac系统连接服务器教程视频教程,超详细教程:手把手教你15分钟在苹果Mac上装个Windows...
上期我们讲了:当电脑边卡,教你如何重装系统.(关注公众号 差评(chaping321),回复"重装系统"即可看到详细的重装系统操作的文章) 今天讲下如何给mac装Windows系统 ...
- MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单(安装mysql的步骤和方法)
目录 MySQL 压缩包下载地址: 下载方式: 安装步骤: 一.解压下载的文件: 二.给解压的文件改名 三.将这个包放到自己想要存放的电脑目录下 四.配置环境变量 1.右键我的电脑,选择属性 2.选择 ...
- vue超详细教程,手把手教你完成vue项目
Vue 一. Vue简介 Vue是于2013年(与React框架同年发布)推出的一个渐进式.自底向上的前端框架,它的作者叫尤雨溪.那么什么叫做渐进式框架呢?比较官方的说法就是:以Vue内核作为核心 ...
- MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单
目录 MySQL 压缩包下载地址:? 下载方式: 安装步骤: 一.解压下载的文件: 二.给解压的文件改名? ?三.将这个包放到自己想要存放的电脑目录下 ?四.配置环境变量 1.右键我的电脑,选择属性 ...
- 《手把手教你美股开户——Sogotrade为例(二)》http://xueqiu.com/4474116166/28363545 《手把手教你美股开户——Sog...
手把手教你美股开户 https://xueqiu.com/4474116166/28336417 <手把手教你美股开户--Sogotrade为例(二)>http://xueqiu.c ...
- egret白鹭引擎RES资源管理模块,资源动态加载失效BUG,加载卡死BUG,完整解决方案与超详细调试漏洞过程
我是千里马,是一位软件工程师,最近几天完成了用户中心全套内容设计和游戏中大大小小的各种bug处理解决,准备开始游戏的正式填充,突然想起来还有两件抛之脑后的事情没有做.因为之前一直都是忙碌大方向内容设计 ...
- 【程序员面试系列】手把手教你如何面试,你要的我都有(工作项目篇)
作者:Dimple Solgan:当你的才华还无法撑起你的野心时候,那应该静下心来好好学习 前面两篇文章的总结,我们学会了面试前简历的准备.技术知识准备和算法题准备.不知道你是否看完了呢,如果没看完的 ...
- Git使用教程:超详细、超傻瓜、超浅显、真正手把手教!
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:涂根华 原文链接: https://www.cnblogs.com/tugenhua0707/p ...
- Git使用教程:超详细、超傻瓜、超浅显、真正手把手教
作者:涂根华 原文链接: https://www.cnblogs.com/tugenhua0707/p/4050072.html https://mp.weixin.qq.com/s/M-DoeWWS ...
最新文章
- 一网打尽数据结构中线性表链表的相关算法
- Java中的比较总结
- java 网络通信协议_JAVA-基础-网络通信协议
- 阿里开源自主研发的 DFSMN 语音识别模型,引谷歌论文引用
- 软件测试用python一般用来做什么-python能够做软件的自动化测试吗?
- 临床医生如何解读Meta分析论文?
- LightOJ 1026 桥 1063 割点
- mac终端命令行总结
- 简述css样式的三种引入html的方式,css-1,css的三种引入方式 基本选择器
- 全套学习!mysql命令窗口执行sql文件
- oracle9i 是否安全,指纹识别与Oracle 9i安全特性解析
- Bandicam视频录制技巧总结+小丸工具箱压缩视频解决视频体积问题
- SQL执行insert into后返回主键ID
- flask 请求上下文
- Linux内核网络udp数据包发送(一)
- HTML5网页设计基础——LOGO的制作
- ArcGIS裁剪shp时输出结果为空
- 推荐10个国外的开源免费的.NET CMS系统
- A Typical Homework (a.k.a Shi Xiong Bang Bang Mang) UVA - 12412
- 5年经验Java程序员面试20天,拿下数个offer,总结出的经验感想!