1、RTKLIB简介

RTKLIB是全球导航卫星系统GNSS(global navigation satellite system)的标准&精密定位开源程序包,RTKLIB由日本东京海洋大学(Tokyo University of Marine Science and Technology)的高须知二(Tomoji Takasu)开发。RTKLIB由一个便携式程序库和多个AP(应用程序)工具库组成。RTKLIB的主要功能有:

(1)支持多个GNSS系统的标准和精密定位算法,包括GPS,GLONASS,Beidou,Galileo,QZSS和SBAS

(2)支持多种GNSS实时和后处理定位模式:单点定位、DGPS/DGNSS,动态RTK、静态RTK、移动基站、PPP

(3)支持多种GNSS标准格式和协议:RINEX2.10、RINEX2.11、RINEX2.12、RINEX3.00、RINEX3.01、RINEX3.02、RTCM2.3、RTCM3.1、RTCM3.2、BINEX、NTRIP、NMEA0183、SP3、ANTEX1.4、IONEX1.0、NGS PCV、EMS 2.0

(4)支持多种GNSS接收机专有数据协议格式:NovAtel:OEM4/V/6,OEM3, OEMStar、Superstar II、 Hemisphere、Crescent、u‐blox:LEA-4T/5T/6T、SkyTraq、JAVAD 、GW10-II/III和NVS

(5)支持外部通信:Serial、TCP/IP、NTRIP、本地日志文件(记录和播发)和FTP/HTTP

(6)提供许多函数库和API(application program interfaces):卫星和导航系统函数、矩阵和向量函数,时间和字符串函数、坐标的转换,输入和输出函数、调试跟踪函数、平台依赖函数、定位模型、大气模型、天线模型、地球潮汐模型、大地水准面模型、基准转换、RINEX函数、星历和时钟函数、精密星历和时钟、接收机原始数据函数、RTCM函数,解算函数、谷歌地球KML转换、SBAS函数、选项(option)函数、流数据输入和输出函数、整周模糊度解算、标准定位、精密定位、后处理定位(解算)、流服务器函数、RTK服务器函数、下载函数。

2、基于VS的RTKLIB编译

基于VS的RTKLIB的编译范例在网络上已经有较多的版本,比较成熟且切实有效的当属博主【D10.天地弦(湖南桃江)】在博客园中发表的博客《VS2013使用rtklib中需要注意的一些问题(编译)》,里面详细阐述了利用VS2013编译RTKLIB的过程及可能遇到的问题,笔者也采用了其部分编译策略,初次编译RTKLIB的朋友可以去参考。

当我们深入研究RTKLIB代码后,会发现仅仅采用上述网友提供的问题解决方法仍不能完全解决RTKLIB编译过程中的问题,需要我们进一步的研究,以下是笔者在实际应用过程中发现的一些问题,分享出来供大家参考。

(1)预编译器定义的问题。

RTKLIB中为了适应不同的应用需求,定义了诸多的宏,常见的包括ENAGLO,ENACMP ,_CRT_SECURE_NO_WARNINGS,_WINSOCK_DEPRECATED_NO_WARNINGS等。这些预编译器定义存在的根本目的是为了控制代码编译的走向,以确保功能的实现,为此我们需要详细了解各个宏定义的存在的目的。例如,_CRT_SECURE_NO_WARNINGS存在的目的是确保strcmp等VS认为不安全的函数的有效执行。_WINSOCK_DEPRECATED_NO_WARNINGS存在的目的是确保通信sock函数的有效执行。ENAGLO,ENACMP,WIN_DLL,TRACE存在的目的是确保与GLONASS、与北斗、与windows动态库编译、与TRACE信息输出相关的函数的有效执行。通过合理的预编译器定义,我们可以得到不同功能的RTKLIB动态库。

(2)附加依赖项的问题

在《VS2013使用rtklib中需要注意的一些问题(编译)》博客中,作者为了规避"找不到error LNK2019: 无法解析的外部符号…"的问题,选择了在添加附加库[连接器->输入->附加依赖库]中添加winmm.lib, ws2_32.lib。虽然可以解决问题,但是不够直观,很容易被其他开发人员忽略。笔者认为直接在头文件代码中添加#pragma comment(lib, "winmm.lib")和#pragma comment(lib, "ws2_32.lib")更为直观明了,一劳永逸。

3、RTCM数据读取样例

在完成了RTKLIB动态库编译后,笔者利用动态库构建了简单的RTCM数据读取的Demo。Demo程序读取保存的实时RTCM观测信息并输出观测值文件、导航文件以及TRACE日志信息。Demo代码如下:

1 #include "rtklib.h"

2 intmain()3 {4     char ifile[1024] = "C:xxx.rtcm";5     char ofile[9][1024] = { "", "", "", "", "", "", "", ""};6     char *pofile[9] = { ""};7     char tracefile[1024] = "";8     int format =STRFMT_RTCM3;9 10     double ep_rtcm[6] = { 2017, 9, 4, 14, 00, 00};11     gtime_t time_rtcm =epoch2time(ep_rtcm);12 13     rnxopt_t opt = { 0};14     opt.tint = 0.00;15     opt.tunit = 86400;16     opt.rnxver = 3.02;17     opt.navsys = 37;18     opt.obstype =OBSTYPE_ALL;19     opt.freqtype = 0x03;20     opt.scanobs = 1;21     opt.outiono = 1;22     opt.outtime = 1;23     opt.trtcm =time_rtcm;24 25     strcpy(ofile[0], ifile);26     strcat(ofile[0], ".obs");27 28     strcpy(ofile[1], ifile);29     strcat(ofile[1], ".nav");30 31 strcpy(tracefile, ifile);32     strcat(tracefile, ".trace");33 traceopen(tracefile);34     tracelevel(5);35     for (int i = 0; i < 9; i++) {36         pofile[i] = malloc(sizeof(char) * 1024);37         memcpy(pofile[i], &ofile[i], 1024);38 }39     if (convrnx(format, &opt, ifile, pofile)) printf("\n数据转换成功!\n");40 traceclose();41 getchar();42     return 0;43 }

在调试Demo过程中,笔者发现RTKLIB库仍存在两个问题:

(1)添加TRACE预编译器定义后,软件运行到scan_obstype函数的trace(3,"scan_obstype: nf=%s, opt=%s\n",nf,opt)语句时会提示内存出错,调试后发现该语句中nf的输出类型出错,应将"%s"更改为"%d",即trace(3,"scan_obstype: nf=%d, opt=%s\n",nf,opt)。这反映了RTKLIB原始编码系统环境与VS IDE的差异,后续应用库文件时需要多加注意。

(2)convrnx函数在执行完成退出动态库回到主函数main时,Debug模式下会弹出"Run-Time Check Failure #2 - Stack around the variable 'opt_' was corrupted."异常。Release模式下不弹出该异常。网络上关于该异常主体上认为时由于内存越界造成的,笔者暂未找出opt_变量越界的原因,后续会做深入研究。该异常的最快捷的解决方案时将"project->配置属性->c/c++->代码生成->基本运行时检查"改为"默认值"即可。

解析rtcm32报文工具_RTKLIB编译及RTCM数据读取样例相关推荐

  1. 解析rtcm32报文工具_RTCM32编解码中的一些概念及相关文献阅读

    1. IODC和 IODE --  导航电文相关.iode/iodc是在GPS系统的ICD2中定义的参数,iode指星历数据事件,iodc指星钟数据事件. IOD 是 issue of data ,数 ...

  2. java 8583报文解析_ISO8583报文工具类(组装和解析报文) | 学步园

    很久没来csdn了.现在的工作地点在银行,妈的,不让上网啊. 写写博客其实是对自己知识的总结,这么长时间了,也该写点东西了.接触银行的项目,避免不了 遇上8583报文.具体介绍就不细讲了,这个网上一大 ...

  3. python之用scapy分层解析pcap报文(Ethernet帧、IP数据包、TCP数据包、UDP数据包、Raw数据包)

    一.工具准备 下载安装scapy库(https://blog.csdn.net/qq_23977687/article/details/88046257) 安装完后: ls()  命令可以查看所有支持 ...

  4. ISO8583报文工具类(组装和解析报文)

    很久没来csdn了.现在的工作地点在银行,妈的,不让上网啊. 写写博客其实是对自己知识的总结,这么长时间了,也该写点东西了.接触银行的项目,避免不了 遇上8583报文.具体介绍就不细讲了,这个网上一大 ...

  5. java发送iso8583报文接口框架,ISO8583报文工具类(组装和解析报文)

    package com.lsy.common.util; import java.io.FileInputStream; import java.io.UnsupportedEncodingExcep ...

  6. JDOM是JAVA中最常用的一种解析XML的工具

    JDOM是JAVA中最常用的一种解析XML的工具,我们可以从JDOM的官方网站www.jdom.org 下载JDOM1.0.ZIP压缩包,将其解压,将JDOM.JAR文件配置到classpath当中去 ...

  7. Java解析XML报文内容及标签属性

    前言 JSON格式的报文解析,虽然json串短小精悍,也能有效表达层次结构,但是每个元素只能找到对应的元素值,不能体现更丰富的样式特征.比如某个元素除了要传输它的字符串文本,还想传输该文本的类型.字体 ...

  8. crash工具解析_Android Crash 工具

    crash工具解析_Android Crash 工具_weixin_39543655的博客-CSDN博客本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一.Cra ...

  9. Android开发常用工具,编译调试工具,性能优化工具,工具集

    分析具体耗时的Trace view;布局复杂度工具Hierarchy View;应用启动时间;Memory.CPU.Network分析;静态代码检查工具Lint;程序稳定性monkey.adb调试桥. ...

  10. Vue 项目 build 流程解析(webpack工具解析)

    Vue 项目 build 流程解析(webpack工具解析) 注:本篇文章解析框架为 vue2.0 本篇文章通过解析简单的项目打包步骤试着去了解我们的 Vue 项目是怎么打包的. build.js 干 ...

最新文章

  1. 阿里老P8,被大学天天打游戏的室友吊打了!
  2. flutter 真机无法调试 sdk报错_Flutter - 不一样的跨平台解决方案
  3. 密度图的密度估计_基于核密度的宝鸡地名文化特征与时空分布研究
  4. angular-ui-tab-scroll
  5. JDK 9 –给圣诞老人的信?
  6. RaySSH文件传输加速介绍!
  7. HDU 2063:过山车(匈牙利算法模板题)
  8. windows使用小技巧 ━━ windows11的WLAN图标突然消失的解决办法,wifi没了可以找回来,一般的驱动突然坏了都可以用这个方法找回
  9. (转)DirectX不是全部!3D游戏图形技术解析
  10. 一杯免费咖啡引发的ERP上云思考
  11. # 3 网页实现吃豆子动画
  12. Ubuntu18.04之有道词典安装(五十九)
  13. 应用容器化之Kubernetes实践
  14. jQuery学习笔记总结
  15. 每秒1.28万亿行,最快的分布式关系数据库MemSQL又破记录了!
  16. STL 大理石在那儿
  17. 云米冰箱能控制扫地机器人_在云米的大屏冰箱就能操控其他智能家电?一起到京东618了解更多...
  18. 使用传统算法进行红色印章区域的提取
  19. CDN有用吗?我的网站到底需不需要CDN加速?
  20. Open3d GUI

热门文章

  1. 【问】安装SQL 2012R2时提示NetFx3
  2. 单片机之步进电机速度控制篇(三)
  3. java制作游戏开始界面,太香了
  4. 中职计算机课应用的内容,信息技术手段在中职学校计算机课程教学中的应用
  5. MikroTik RouterOS U盘安装工具netinstall的使用
  6. 腾讯X5 内核 的导入
  7. 防火墙转发流量的原理
  8. 芯片验证工作初有感--没落骑士
  9. ajax传给后台json数据,通过ajax和spring 后台传输json数据
  10. slice_input_producer在2.0版本里怎么用_EPrime2.0安装避坑指南