最近呢,由于科研中需要用到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为例)第一篇——读取配置文件、精密星历、精密钟差篇相关推荐

  1. mac系统连接服务器教程视频教程,超详细教程:手把手教你15分钟在苹果Mac上装个Windows...

    上期我们讲了:当电脑边卡,教你如何重装系统.(关注公众号 差评(chaping321),回复"重装系统"即可看到详细的重装系统操作的文章) 今天讲下如何给mac装Windows系统 ...

  2. MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单(安装mysql的步骤和方法)

    目录 MySQL 压缩包下载地址: 下载方式: 安装步骤: 一.解压下载的文件: 二.给解压的文件改名 三.将这个包放到自己想要存放的电脑目录下 四.配置环境变量 1.右键我的电脑,选择属性 2.选择 ...

  3. vue超详细教程,手把手教你完成vue项目

    Vue 一. Vue简介 ​ Vue是于2013年(与React框架同年发布)推出的一个渐进式.自底向上的前端框架,它的作者叫尤雨溪.那么什么叫做渐进式框架呢?比较官方的说法就是:以Vue内核作为核心 ...

  4. MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单

    目录 MySQL 压缩包下载地址:? 下载方式: 安装步骤: 一.解压下载的文件: 二.给解压的文件改名? ?三.将这个包放到自己想要存放的电脑目录下 ?四.配置环境变量 1.右键我的电脑,选择属性 ...

  5. 《手把手教你美股开户——Sogotrade为例(二)》http://xueqiu.com/4474116166/28363545 《手把手教你美股开户——Sog...

    手把手教你美股开户    https://xueqiu.com/4474116166/28336417 <手把手教你美股开户--Sogotrade为例(二)>http://xueqiu.c ...

  6. egret白鹭引擎RES资源管理模块,资源动态加载失效BUG,加载卡死BUG,完整解决方案与超详细调试漏洞过程

    我是千里马,是一位软件工程师,最近几天完成了用户中心全套内容设计和游戏中大大小小的各种bug处理解决,准备开始游戏的正式填充,突然想起来还有两件抛之脑后的事情没有做.因为之前一直都是忙碌大方向内容设计 ...

  7. 【程序员面试系列】手把手教你如何面试,你要的我都有(工作项目篇)

    作者:Dimple Solgan:当你的才华还无法撑起你的野心时候,那应该静下心来好好学习 前面两篇文章的总结,我们学会了面试前简历的准备.技术知识准备和算法题准备.不知道你是否看完了呢,如果没看完的 ...

  8. Git使用教程:超详细、超傻瓜、超浅显、真正手把手教!

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:涂根华 原文链接: https://www.cnblogs.com/tugenhua0707/p ...

  9. Git使用教程:超详细、超傻瓜、超浅显、真正手把手教

    作者:涂根华 原文链接: https://www.cnblogs.com/tugenhua0707/p/4050072.html https://mp.weixin.qq.com/s/M-DoeWWS ...

最新文章

  1. 一网打尽数据结构中线性表链表的相关算法
  2. Java中的比较总结
  3. java 网络通信协议_JAVA-基础-网络通信协议
  4. 阿里开源自主研发的 DFSMN 语音识别模型,引谷歌论文引用
  5. 软件测试用python一般用来做什么-python能够做软件的自动化测试吗?
  6. 临床医生如何解读Meta分析论文?
  7. LightOJ 1026 桥 1063 割点
  8. mac终端命令行总结
  9. 简述css样式的三种引入html的方式,css-1,css的三种引入方式 基本选择器
  10. 全套学习!mysql命令窗口执行sql文件
  11. oracle9i 是否安全,指纹识别与Oracle 9i安全特性解析
  12. Bandicam视频录制技巧总结+小丸工具箱压缩视频解决视频体积问题
  13. SQL执行insert into后返回主键ID
  14. flask 请求上下文
  15. Linux内核网络udp数据包发送(一)
  16. HTML5网页设计基础——LOGO的制作
  17. ArcGIS裁剪shp时输出结果为空
  18. 推荐10个国外的开源免费的.NET CMS系统
  19. A Typical Homework (a.k.a Shi Xiong Bang Bang Mang) UVA - 12412
  20. 5年经验Java程序员面试20天,拿下数个offer,总结出的经验感想!

热门文章

  1. 龙芯1B200按键控制led
  2. 计算机网络错误是什么意思,电脑网络错误00050是什么意思?
  3. #数理基础# 线性代数及其应用 第一章 线性代数中的线性方程组
  4. python 如何输出中文_python3如何输出中文
  5. Python雪花代码
  6. 火山PC【视窗】调试器使用2-DLL的调试
  7. MySQL5.7免安装教程
  8. 随机数字信号处理实验报告二——自适应滤波MATLAB
  9. 中小学和幼儿园教师资格考试大纲(试行) (面试部分)
  10. 基于STM32 电机库(5.4.4)的单电阻采样调试总结