【Rtklib入门指南】1. Rtklib下载及编译

news2024/11/20 11:50:57

写在前面

其实前几年还在校的时候出过一个还不太成熟的教程,回头看的时候发现有诸多不够成熟的地方,如今的工作自由时间相对较多,因此萌生了重新梳理,提升博客质量的想法。因此,就有了这个新的系列。对于大多数GNSS的从业者,大部分人的生涯起点都是Rtklib,而我也不例外。希望该系列博客能够给GNSS的入门者提供相应的参考,那这个系列的博客也就有了它存在的意义。写的不够专业和严谨的地方,还请各位专家多多指教。

该教程面向对象为GNSS初学者,建议掌握一定的GNSS原理和C语言基础作为知识背景,使用的IDE为Visual Studio2022。

Rtklib概述

Rtklib是东京海洋大学的高须知二教授(Tomoji Takasu)开发的一款开源软件,主要功能覆盖GNSS标准单点定位(SPP)/伪距差分定位(DGPS)/精密单点定位(PPP)/实时动态定位(RTK),而服从宽松的BDS2-Clause协议,使用户能够自由地使用,修改源代码,也可以将修改后的代码选择继续开源或者闭源,仅须遵守如下两项要求:

1)如果分发的软件包含源代码,则必须在源代码中保留原始的BSD许可证声明;

2)如果分发的软件仅包含二进制程序,则必须在文档或版权说明中保留原始的BSD许可证声明。

Rtklib在代码上优雅、规范、性能相对较好,具有很强的教学价值和实践价值,是大多数GNSS入门者推荐学习的代码。

Rtklib下载

Rtklib的开源库包括Rtklib的源代码库和Rtklib的可执行程序,两者的下载地址分别如下:

源代码库地址:https://github.com/tomojitakasu/RTKLIB/tree/master

GUI:https://github.com/tomojitakasu/RTKLIB_bin/tree/master

此外,也有一些Rtklib的衍生版本,比如:

面向低成本方案的Rtklib demo5:https://github.com/rtklibexplorer/RTKLIB/tree/demo5

该作者也同样提供了一个python版本的rtklib:https://github.com/rtklibexplorer/rtklib-py

感兴趣的同学可以从github上进行源码的下载,然后开始这段学习之旅。

Rtklib安装调试

本章节会简单介绍如何基于一份Rtklib的源代码建立相应的工程,使其在Visual Studio IDE上运行起来。

首先打开Visual Studio,点击创建新项目,然后进入下一步,

然后选择空项目,并进入下一步,

配置项目名称和路径位置,我建立的项目名称为rtklib,配置的路径为D:\project\C\rtklib,之后点击创建。

这样我们就完成了一个空项目的创建,现在要做的是将源代码导入并进行编译。

  • 复制源文件:首先准备一份下载好并解压的源代码,我这里使用的是rtklib2.4.3的b34版本。将bin目录复制到上述工程目录下:

另外将rnx2rtkp文件夹下的rnx2rtkp.c文件一并拷贝到src目录下。

  • 添加源文件进项目:在项目右键点击添加-现有项,选择src中的所有文件,将所有源文件添加进去。源文件包含rcv文件夹下的所有源代码文件和src目录下的其他源代码文件,我添加的方式是先添加所有rcv目录下的文件,在项目中新建rcv文件夹将该部分文件全部导入到该文件夹下,再将其他文件全部导入。

  • 配置路径:配置路径的目的是配置的搜索源代码中所引用的包含文件的目录。 对应于 INCLUDE 环境变量。

  • 宏配置:宏配置。宏配置的目的是为了解决一些编译问题,我用的是win64的平台,其中WIN32,_CRT_SECURE_NO_WARNINGS,_WINSOCK_DEPRECATED_NO_WARNINGS,ENAGLO是必配置的,否则会产生编译问题,后续三个宏是打开GAL、QZSS、BDS系统的功能开关,建议开启。WIN_DLL宏是windows下的控制宏,会触发部分windows下特有的系统函数使用,尤其是在windows平台下需要打包dll库的时候必须配置,建议开启。

在使用WIN_DLL宏后,会触发extern关键字和EXPORT关键字在不同地方的重定义问题,我的解决方案是注释掉原有定义,增加WIN_DLL的宏选择配置如下。

  • sbs未初始化问题,修正方案为将对应内容增加初始化为NULL。

  • 附加依赖项添加,在属性-链接器-附加依赖项中增加winnmm.lib和ws2_32.lib库

  • rtklib原生代码会触发C4244报错: 一元负运算符应用于无符号类型,结果仍为无符号类型,在不改变源代码功能的情况下,修正方案为将SDL检查关闭。

  • 修复showmsg、settspan、settime在rnx2rtkp中的重定义问题。同样由于WIN_DLL宏的配置,该情况下三个函数的定义在不同地方存在不一致的问题,由于该函数已经在其他地方进行了定义,此处注释即可。

现在编译即可通过,如下所示。

Ref

  1. https://www.jianshu.com/p/469510e640f1?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

  1. https://wap.sciencenet.cn/blog-3386358-1138020.html?mobile=1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/159331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JMeter - 下载安装教程

目录1. JMeter介绍2. JMeter下载3. JMeter目录解析4. Windows和macOS下安装启动5. JMeter切换语言为中文6. Linux下安装启动1. JMeter介绍 JMeter是目前行业内用的比较多的一个开源性能测试工具,由Java语言编写,要依赖Java环境来运行(需要提…

vtk.js中引入.module.css文件

我们知道css modules指的是所有的类名和动画名称默认都有各自作用域的CSS文件,是在构建步骤中对CSS类名和选择器限定作用域的一种方式(类似于命名空间)。通过CSS Modules可以保证单个组件的所有样式集中在同一个地方、只应用于该组件。它可以…

React记录

UI组件库:https://mobile.ant.design/zh/ 1、‘idname’ is not defined no-undef 情景:给属性绑定属性值时,明明设置了变量,使用语法也没有错误,但是提示却说是该变量未定义。 原因:变量的值不是字符串类…

SpringCloud学习笔记 - 服务熔断降级 - Sentinel

1. sentinel简介 sentinel官方文档:https://sentinelguard.io/zh-cn/docs/introduction.html 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点&…

【Redis】缓存击穿问题及其解决方案

【Redis】缓存击穿问题及其解决方案 文章目录【Redis】缓存击穿问题及其解决方案1. 缓存击穿概念2. 解决方案2.1 互斥锁2.1.1 互斥锁的优缺点2.1.2 互斥锁的代码实现2.2 逻辑过期2.2.1 逻辑过期的优缺点2.2.2 逻辑过期的代码实现1. 缓存击穿概念 缓存击穿:缓存击穿…

13个有趣的Python高级脚本,建议收藏

上一篇文章:整理了上千个 Python 工具库,涵盖24个大方向 没想到火了,喜欢除了收藏外,记得点赞。 每天我们都会面临许多需要高级编码的编程挑战。你不能用简单的 Python 基本语法来解决这些问题。 在本文中,我将分享…

Python针对列表进行去重、排序、大小写转换

首先我们要进行的就是列表去重 Python针对列表进行去重、排序、大小写转换1. 针对列表进行去重第一种方法是用for循环第二种方法就是列式推导法第三种方法就是set第四种方法就是用字典去重2.进行大小写转换大写转小写使用lower进行小写转换列式推导法swapcase()将字符串内的大写…

【windows环境使用gcc完美编译C/C++】

windows环境使用gcc完美编译C/C前言安装最新版的msys2安装mingw版的gcc前言 在windows使用gcc编译c,很多文章会使用Cygwin或者msys来安装gcc,并编译本地c,但编译好的.exe执行文件在其他电脑上会报找不到cygwin1.dll或找不到msys-2.0.dll的错误…

基于JavaSpringboot+vue国风汉服文化交流宣传系统

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末底部获取联系🍅 精彩专栏推荐订阅收藏👇…

ArcgisPro3.0及3.0.1及3.0.2安装教程

一、获取: https://www.xsoftnet.com/share/a0XohtwU8Zz.html二、产品介绍:ArcgisPro3.0-3.0.1中文安装包下载及安装教程 ArcGisPro3.x安装教程 一、安装包结构介绍:可能你下载的安装包目录结构有所不同但是核心文件是一样的。 安装顺序&…

【SpringCloud07】SpringCloud 整合Zookeeper注册中心

1.Zookeeper注册中心 zookeeper是一个分布式协调工具&#xff0c;可以实现注册中心功能关闭Linux服务器防火墙启动zookeeper服务器zookeeper服务器取代Eureka服务器&#xff0c;zookeeper作为服务注册中心 2.服务提供者 1.新建cloud-provider-payment8004 2.POM <?xm…

(小甲鱼python)函数笔记合集二 函数(II)总结 函数的几种参数 位置参数、关键字参数、默认参数 .join()函数的用法等

一、基础复习 函数的基本用法 创建和调用函数 函数的形参与实参等等 二、函数的几种参数 1.位置参数 一般情况下实参是按照形参定义的顺序进行传递的&#xff0c;而Python中位置固定的参数我们称为位置参数。 >>> def myfunc(s,vt,o):return "".join((o…

低成本MEMS INS系统 + GNSS组合导航MATLAB仿真

感谢西工大严老师的无私奉献&#xff01;&#xff01; 低成本MEMS INS系统 GNSS组合导航MATLAB仿真感谢西工大严老师的无私奉献&#xff01;&#xff01;一、kalman参数初始化——kfinit()二、imu添加误差——imusdderr()三、imu位姿更新——insupdate()四、kalman误差方程——…

【1】K8s的组件及概念

目录 1、K8s的组件 2、组件概念 1、K8s的组件 一个kubernetes集群主要是由控制节点(master)、工作节点(node)构成&#xff0c;每个节点上都会安装不同的组件。 master: 集群的控制平面&#xff0c;负责集群的决策 ApiServer:资源操作的唯一入口&#xff0c;接收用户输入的命令…

ArcGIS基础实验操作100例--实验92以图形与表格构建趋势面

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 空间分析篇--实验92 以图形与表格构建趋势面 目录 一、实验背景 二、实验数据 三、实验步骤 &#xf…

ts实现简易观察者模式

什么是观察者模式 观察者模式能让你时刻知悉对象状态的变化的一种设计模式,是一种一对多依赖的关系,比如报纸的订阅 生活中随处可见的观察者模式(猎头与求职者): headfirst设计模式气象站案例 通知更新的方式有两种: 主题推给观察者和观察者自己去主题拉取两种方式,大部分实现…

年中盘点 | 2022年,PaaS 再升级

过去十五年&#xff0c;是云计算从无到有突飞猛进的十五年。PaaS 作为云计算的重要组成部分&#xff0c;在伴随着云计算高速发展的同时&#xff0c;在云计算产业链中的关键性作用日渐凸显。关于 PaaS&#xff0c;很多人都认同一个观点&#xff0c;在公有云上&#xff0c;除了 I…

【寒假每日一题】AcWing 4699. 如此编码

目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 一、题目 1、原题链接 4699. 如此编码 - AcWing题库 2、题目描述 某次测验后&#xff0c;顿顿老师在黑板上留下了一串数字 23333便飘然而去。 凝望着这个神秘数字&#xff…

雄关漫道真如铁,而今迈步从头越 | 挥别2022,再战2023!

挥别2022年 这一年&#xff0c;虽面临诸多挑战&#xff0c;但我们充满干劲儿 向下扎根&#xff0c;向上生长 这一年&#xff0c;我们风云十载&#xff0c;厚积薄发 站在2023年的开端 让我们一起回顾博云2022年的这些成绩 No.1 专精特新&#xff0c;示范引领 2022年8月&am…

【鸟哥杂谈】Linux环境搭建Redis

忘记过去&#xff0c;超越自己 ❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-01-12 ❤️❤️ 本篇更新记录 2023-01-12 ❤️&#x1f389; 欢迎关注 &#x1f50e;点赞 &#x1f44d;收藏 ⭐️留言&#x1f4dd;&#x1f64…