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代码如下:

 #include "rtklib.h"
int main()
{
    char ifile[] = "C:xxx.rtcm";    
    char ofile[][] = { "", "", "", "", "", "", "", "" };
    char *pofile[] = { "" };
    char tracefile[] = "";
    int format = STRFMT_RTCM3;
 
    double ep_rtcm[] = { , , , , , };    
    gtime_t time_rtcm = epoch2time(ep_rtcm);    
    
    rnxopt_t opt = { };    
    opt.tint = 0.00;
    opt.tunit = ;
    opt.rnxver = 3.02;
    opt.navsys = ;
    opt.obstype = OBSTYPE_ALL;
    opt.freqtype = 0x03;
    opt.scanobs = ;
    opt.outiono = ;
    opt.outtime = ;
    opt.trtcm = time_rtcm;
 
    strcpy(ofile[], ifile);
    strcat(ofile[], ".obs");
 
    strcpy(ofile[], ifile);
    strcat(ofile[], ".nav");
 
    strcpy(tracefile, ifile);
    strcat(tracefile, ".trace");
    traceopen(tracefile);
    tracelevel();     
    for (int i = ; i < ; i++) {
        pofile[i] = malloc(sizeof(char) * );
        memcpy(pofile[i], &ofile[i], );
    }    
    if (convrnx(format, &opt, ifile, pofile)) printf("\n数据转换成功!\n");    
    traceclose();
    getchar();
    return ;
}

在调试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++->代码生成->基本运行时检查"改为"默认值"即可。

RTKLIB编译及RTCM数据读取样例的更多相关文章

  1. [libpng]CMake+VS2015下编译libpng,及使用小例

    编译前的工作 在编译libpng前,需要把zlib编译好,并加载到编译环境里. CMake + VS2015 下编译zlib,及使用小例 下载与解压 libpng的官网是 http://www.lib ...

  2. spring boot: @Entity @Repository一个简单的数据读存储读取

    spring boot: @Entity @Repository一个简单的数据读存储读取 创建了一个实体类. 如何持久化呢?1.使用@Entity进行实体类的持久化操作,当JPA检测到我们的实体类当中 ...

  3. Libcurl的编译_HTTP/HTTPSclient源代码演示样例

    HTTP/HTTPSclient源代码演示样例 环境:  zlib-1.2.8  openssl-1.0.1g  curl-7.36 Author:  Kagula LastUpdateDate: 2 ...

  4. python : 将txt文件中的数据读为numpy数组或列表

    很多时候,我们将数据存在txt或者csv格式的文件里,最后再用python读取出来,存到数组或者列表里,再做相应计算.本文首先介绍写入txt的方法,再根据不同的需求(存为数组还是list),介绍从tx ...

  5. PHP 扩展在 Linux(centos7)系统下的编译与安装 以 mysqli 为例

    (操作系统 Centos7,环境版本 php7) 01,进入到 PHP 解压后的源码包的的 ext 文件夹 02,查看是否存在 mysqli 扩展 => ls, 如果不存在需要去响应网站下载 ( ...

  6. 2016/4/2 json:js和jquery中轻量级数据交换格式 例: 窗口弹出 popwindow

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...

  7. <数据可视化>样例+数据+画图

    1 样例 1.1样例1 子图系列 from pylab import * def f(x): return np.exp(-x) * np.cos(2*np.pi*x) x1 = np.arange( ...

  8. selenium模块获得js动态数据-17track为例

    通过selenium模块驱动Chrome浏览器,获得js动态数据,以17track为例:通过运单号查询最新的物流信息 1 import re 2 from time import sleep 3 fr ...

  9. DJANGO输出HIGHCHARTS数据的样例

    XXX,DJANGO ORM里确实有很深的水,需要慢慢理解.. 比如: 获取指定时间段的数据: app.deployversion_set.filter(add_date__range=(date_s ...

随机推荐

  1. PowerShell: 问题,此系统上禁止运行脚本解决方法

    刚学Django,在PowerShell上建立一个虚拟环境,准备激活,问题来了:    激活的时候报错了,有点儿懵,之前在命令行没问题啊,我又去命令行试了下,果然可以: 感受到了暴击,赶紧上网求助大神 ...

  2. Excel表单的读取与处理 PHPExcel与Apache POI

    近日,连续遇到需要对Excel表单内容进行读取的需求.一个是在php环境下,一个是在java环境下.这里简要记录这两种环境,利用第三方提供的函数库对Excel进行处理的方法. d0710 : Fini ...

  3. 转:【Java并发编程】之二十三:并发新特性—信号量Semaphore(含代码)

    载请注明出处:http://blog.csdn.net/ns_code/article/details/17524153 在操作系统中,信号量是个很重要的概念,它在控制进程间的协作方面有着非常重要的作 ...

  4. java1.8新特性

    转自:http://www.oschina.NET/translate/everything-about-Java-8 建议去看原文,此处转载只是为了记录. 这篇文章是对Java8中即将到来的改进做一 ...

  5. 团队作业5——测试与发布(Alpha版本)

    Deadline: 2017-5-7 22:00PM,以博客发表日期为准 评分基准: 按时交 - 有分,检查的项目包括后文的两个方面 测试报告 发布说明 晚交 - 0分 迟交一周以上 - 倒扣本次作业 ...

  6. 【Beta】Daily Scrum Meeting——Day7

    站立式会议照片 1.本次会议为第七次Meeting会议: 2.本次会议在中午12点,在陆大楼召开,本次会议为30分钟讨论今天要完成的任务以及接下来的任务安排. 燃尽图 每个人的工作分配 成 员 昨天已 ...

  7. 201521123071《java程序设计》第三周学习总结

    1. 本周学习总结 这周主要学习了构造函数,类与对象,就是这周事情很多,还没来得及好好复习,所以有很多知识都没有认识透彻.但我会尽力补上的. http://images2015.cnblogs.com ...

  8. 201521123025《java程序设计》第11周学习总结

    1. 本周学习总结 2. 书面作业 Q1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法实现互斥同步 ...

  9. 201521123115 《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  10. php中的多条件查询

    首先是查询所有,步骤不详述,连接数据库,查询表中的所有信息,foreach循环以表格的形式打印出来 然后就是form表单中提交查询的数据,这里以post方式提交到本页面,所以要判断post中是否有值, ...