GNSS经典数据处理软件 - RTKLIB - 在VS2022下完成调试、跑通程序

目录

调试详细步骤(总结了多个教程的步骤)

常见的问题

1.C4146:一元负运算符应用于无符号类型,结果仍为无符号类型

2.C1083:无法打开包括文件:"sys/time.h”: No such file or directory

测试数据实例


主要参考博客:

VS2012编译RTKLIB——GNSS定位开源库-CSDN博客

rtklib学习笔记1:在Visual Studio 2019中调试rtklib 2.4.3程序_rtklib安装教程-CSDN博客

RTKLIB 2.4.3 b34 配置教程与调试实例_rtklib b34-CSDN博客

科学网—基于Visual Studio 2013调试RTKlib 2.4.3源码 - 李鹏杰的博文

本科生如何入门GNSS算法 (一)- 在Visual Studio 2017中跑通RTKLIB开源代码_rtklib在vs中-CSDN博客

调试详细步骤(总结了多个教程的步骤)

1.复制原文件(RTKLIB_2.4.3_b34)中的“src”文件夹到新建的项目中去,把“src”名称改为“rtklib_src”(可以不改,但要保证与后续内容一致)

2.把rtklib的主函数复制到rtklib_src文件夹中,主函数的位置在RTKLIB-rtklib_2.4.3\app\consapp\rnx2rtkp,主函数的名字为“rnx2rtkp.c”。复制过去之后很多教程将该文件改为“main.c”,这里我也改了,方便找到主函数

3.首先在源文件中添加名为“src”的筛选器,再在src筛选器下面添加名为“rcv”的筛选器

接下来分三步导入rtklib_src文件夹中的所有文件:

  • 导入rtklib_src文件夹中所有.c文件至src筛选器中,包括rnx2rtkp.c,注意不包含头文件rtklib.h文件;
  • 导入rtklib_src\rcv中的所有文件至src\rcv筛选器中;
  • 导入rtklib_src文件夹中的rtklib.h文件至头文件中,注意不是源文件

导入完成后的结果如下:

GNSS经典数据处理软件 - RTKLIB - 在VS2022下完成调试、跑通程序_第1张图片

4.将主函数rnx2rtkp.c中的#include "rtklib.h"修改为#include "./rtklib.h",此处可进行全局替换。其中,在src/rcv/下的所有*.c文件中的#include "rtklib.h"修改为#include "../rtklib.h"。(这一步很多教程中都没提到,但后续会出错误)

5.打开项目属性,在链接器下的输入中的附加依赖项中添加依赖库 winmm.lib 和 ws2_32.lib

GNSS经典数据处理软件 - RTKLIB - 在VS2022下完成调试、跑通程序_第2张图片

6. 将常规中的目标文件名改为main(好像可以不用改这里)

下图中使用的是rnx2rtkp,因为他没有将rnx2rtkp.c改成main.c,而我改了,所以我把这里改成了main

GNSS经典数据处理软件 - RTKLIB - 在VS2022下完成调试、跑通程序_第3张图片

7.设置高级中的字符集为使用多字节字符集。

GNSS经典数据处理软件 - RTKLIB - 在VS2022下完成调试、跑通程序_第4张图片

8.将C/C++中的 SDL检查设置为否,附加包含目录添加.\src

GNSS经典数据处理软件 - RTKLIB - 在VS2022下完成调试、跑通程序_第5张图片

9.C/C++中的预编译头设置为不使用预编译头

GNSS经典数据处理软件 - RTKLIB - 在VS2022下完成调试、跑通程序_第6张图片​10. 在C/C++中的预处理器中添加如下内容

_LIB
_CRT_SECURE_NO_WARNINGS
_WINSOCK_DEPRECATED_NO_WARNINGS             
ENAGLO
DLL

GNSS经典数据处理软件 - RTKLIB - 在VS2022下完成调试、跑通程序_第7张图片​11.修改指针变量未初始化的错误

完成以上步骤之后,会报“使用了可能未初始化的本地指针变量“sbs”的错误,解决方式是对指针变量进行初始化,将ephemeris.c文件中的第579行改为“const sbssatp_t *sbs=NULL;”

GNSS经典数据处理软件 - RTKLIB - 在VS2022下完成调试、跑通程序_第8张图片

常见的问题

1.C4146:一元负运算符应用于无符号类型,结果仍为无符号类型

错误代码1:

int number = -2147483648; //error
  • C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型;

错误代码2:

if ( num >= -2147483648 && num<= 2147483647  );//error 
  • C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型;

  虽然我们都知道int的最小值是-2147483648,但在编译器中使用,依然会报错。 原理是:当VS2013在碰见int number = -2147483648;时候,首先判断得到2147483648>int的最大值。就会使用 unsigned int,在根据前面有负号,会将值取对反。

解决方法:

进行宏定义

#define int_num (-2147483647-1)  //定义

改正代码1:int number = int_num;

改正代码2:if ( num >= int_num && num <= 2147483647 );

2.C1083:无法打开包括文件:"sys/time.h”: No such file or directory

GNSS经典数据处理软件 - RTKLIB - 在VS2022下完成调试、跑通程序_第9张图片

解决方法:

开头添加宏定义:#define WIN32

GNSS经典数据处理软件 - RTKLIB - 在VS2022下完成调试、跑通程序_第10张图片

测试数据实例

将需解算的数据文件与配置文件(.conf)放入同一文件夹下,点击项目>>配置属性>>调试,点击工作目录,选择该文件夹,点击命令参数,输入所需的命令行配置。

GNSS经典数据处理软件 - RTKLIB - 在VS2022下完成调试、跑通程序_第11张图片

1、不同解算模式的配置示例:

spp:

-k spp.conf hkws0010.21o brdm0010.21p -o hkws0010_spp.pos

-k 配置文件 观测文件 导航文件 -o输出结果

rtk:

-k rtk.conf hkws0010.21o hksl0010.21o brdm0010.21p -o hkws0010_rtk.pos


-k 配置文件 流动站观测文件 基准站观测文件 导航文件 -o输出结果

pppk:

-k pppk.conf hkws0010.21o brdm0010.21p wum21385.sp3 wum21385.clk -o hkws0010_pppk.pos

-k 配置文件 观测文件 导航文件 精密轨道文件 精密钟差文件 -o输出结果

附:打开trace输出文件方法:在预处理器中添加TRACE,命令参数末尾添加 -x 加数字(即输出等级)GNSS经典数据处理软件 - RTKLIB - 在VS2022下完成调试、跑通程序_第12张图片

例如:

-k spp.conf hkws0010.21o brdm0010.21p -o hkws0010_spp.pos -x 3

2、命令行程序rnx2rtkp的输入参数详解(主函数的help打印信息):

-?              print help   打印帮助列表
-k file         input options from configuration file [off]   从配置文件导入配置
-o file         set output file [stdout]  设置输出文件
-ts ds ts       start day/time (ds=y/m/d ts=h:m:s) [obs start time]   观测文件开始时间 年月日+时分秒
-te de te       end day/time   (de=y/m/d te=h:m:s) [obs end time]   观测文件结束时间 年月日+时分秒
-ti tint        time interval (sec) [all]   观测文件历元间隔
-p mode         mode (0:single, 1:dgps, 2:kinematic, 3:static, 4:moving-base, 5:fixed, 6:ppp-kinematic, 7:ppp-static) [2]  定位模式(0:单点定位,1:伪距差分定位,2:动态差分,3:静态差分,4:动基线,5:固定解,6:动态ppp,7:静态ppp)
-m mask         elevation mask angle (deg) [15]  卫星截止高度角
-sys s[,s...]   nav system(s) (s=G:GPS,R:GLO,E:GAL,J:QZS,C:BDS,I:IRN) [G|R]  导航卫星系统
-f freq         number of frequencies for relative mode (1:L1,2:L1+L2,3:L1+L2+L5) [2]  选用的观测值频点
-v              thres validation threshold for integer ambiguity (0.0:no AR) [3.0]  模糊度固定阈值检测值设置
-b              backward solutions [off]  后向滤波
-c              forward/backward combined solutions [off]  前后向组合滤波
-i              instantaneous integer ambiguity resolution [off]  持续模糊度固定解算
-h              fix and hold for integer ambiguity resolution [off]  模糊度固定后保持
-e              output x/y/z-ecef position [latitude/longitude/height]  输出XYZ坐标解
-a              output e/n/u-baseline [latitude/longitude/height]  输出ENU坐标解
-n              output NMEA-0183 GGA sentence [off]  输出GGA解
-g              output latitude/longitude in the form of ddd mm ss.ss' [ddd.ddd]  输出经纬度坐标解
-t              output time in the form of yyyy/mm/dd hh:mm:ss.ss [sssss.ss]  输出时间设置为年月日+时分秒
-u              output time in utc [gpst]  输出时间设置为utc
-d col          number of decimals in time [3]  秒位时间小数位数设置
-s sep          field separator [' ']   分隔符
-r x y z        reference (base) receiver ecef pos (m) [average of single pos]", rover receiver ecef pos (m) for fixed or ppp-fixed mode  基准站XYZ坐标输入
-l lat lon hgt  reference (base) receiver latitude/longitude/height (deg/m)", rover latitude/longitude/height for fixed or ppp-fixed mode  基准站经纬度坐标输入
-y level        output soltion status (0:off,1:states,2:residuals) [0]  输出解状态
-x level        debug trace level (0:off) [0]  调试输出等级设置

你可能感兴趣的:(visual,studio,ide,学习,笔记,算法,其他,开源软件)