从零开始Rtklib解读篇-简单的编程理论和算法及结构分析(一)(转载)

Rtklib一直开源,资源比较容易找到,功能也非常强大。因为专业有点相关,但是之前不用这个平台,一直未能好好沉下心来学习,然而学到用时方恨少。这个系列也算是自己的一个小小的总结吧,因为我对VS、对Rtklib、对算法的理解也比较浅,很多内容未必正确,写的时候也不一定非常有条理,不当之处,还请指出并海涵。

本系列采用的Rtklib版本是2.3.4,采用的编程平台是VS2010. 书籍参考李征航、黄劲松老师的《GPS测量与数据处理》,面向的是完全的从零开始初学者。

本文从安装开始。

VS的安装就不多说了,请百度。

Rtklib的安装网上也有教程,我是从同门那里考过来的,不一定和网上的版本完全一致,在此仅简述一下几个基本问题。

1、解压。将src文件夹下除了“streamsvr.c”、“stream.c”、“rtksvr.c”、“rtkra

w.h”、“ convrnx.c”这5个文件之外的所有文件添加到工程。

2、打开rinex.c中的outrnxobsh()函数,将“prn[MAXPRNGLO]”声明改为:

“int*prn=(int*)malloc(sizeof(int)*MAXPRNGLO)”

3、打开rtkcmn.c,在“#include ”rtklib.h“”后添加:“#pragma comment(lib,"winmm.lib")”

4、打开rtkcmn.c,按如下注释即可:

//#ifdef DLL

extern intshowmsg(char *format,...) {return 0;}

extern void settspan(gtime_t ts,gtime_t te) {}

extern void settime(gtime_t time) {}

//#endif

5、按理到此即可直接编译。

PS1:遇到warning C4133问题,从char[1024]到‘LPCWSTR’的类型不兼容问题,从项目-属性-配置-常规找到字符集,把Unicode字符集改成未设置。

PS2:我这里并没有pthread问题,不过网上http://blog.sciencenet.cn/home.php?mod=space&uid=858128&do=blog&id=990823给出了一些解决方案。

PS3:Rtklib有自带的工程,可以直接进入配置。

下个部分简单介绍一下Rtklib的目录构成

app里面有各个项目,bin里面给出了大部分功能的exe文件,可以直接使用,主入口为rtklaunch.exe,doc里面给出了官方文档,可以参考看看。src是源文件。lib给出了链接库。除了从工程进入,通常也可以用exe文件直接处理数据。

如果是SPP,请准备对应的O文件,P文件(n文件,g文件),根据电离层模型和观测数据选择是否准备对应的电离层文件,PPP相关的DCB,clk,sp3文件等。还有天线改正文件。

这里简述一下各类误差的改正手段:

伪距包含了多种误差,最终通过最小二乘给出最终定位结果,因此,误差的改正效果对最终的定位结果影响较大。

根据定位方式的不同,可以分为SPP,DGPS,RTK,PPP。SPP通常只改较为简单的误差,采用实时的广播星历,在PPP中作为定位的初始解。DGPS用基站计算出伪距修正值,并传递给流动站,达到对流动站中影响较大的大气误差的影响进行削弱的效果,提升了定位精度,这种方式基于基站和流动站误差的距离相关性,随着基线的变长,相关性降低,定位效果变差。RTK采用站星双差,消去了站间共有误差(卫星钟差,bias等)和星间共有误差(接收机钟差,bias等),根据基线距离的长短,中短基线下大气误差也得到了有效的抑制,再利用载波相位的模糊度的整周特性,再利用无电离层组合消去电离层影响,通过模糊度搜索和固定,可以获得厘米级的定位精度。PPP通过对可模型化误差进行模型化改正(对流层ZTD,相对论,海潮,卫星多路径等),多频组合消去电离层影响,对难以模型化的误差作为参数进行估计(模糊度,对流层WTD,DCB等),最后通过模糊度固定之后,能够给出高精度的定位结果。

当然我说的很浅薄也很片面,因为有些方向专业无关,未必准确,欢迎大家指正并补充。

精度排行通常情况下是PPP>RTK>DGPS>SPP.

简要提一下参数估计问题,通常的参数估计手法有两种,一种是根据参数的特性,建立模型,模型化改正;另外一种是作为未知参数放入总的方程中,进行平差给出解。参数的估计方法也包括最小二乘平差和kalman滤波。最小二乘平差只是一种多约束条件下的最小方差解法,在很多领域都是共用的,详情可以参考《平差》和吴恩达的机器学习课程。GPS领域中的最小二乘平差,是通过高斯-牛顿迭代的方法给出的,吴恩达的课程中也有一课专门讲了这个部分,简要来说就是使用泰勒级数展开式去近似地代替非线性回归模型,然后通过多次迭代通过不断修正系数,收敛到一定的结果后跳出,高斯-牛顿算法是一种二阶修正算法,通常来说效率更高。

其余的定位方式还有TDOA,FDOA,AOA等方式,精度相对较低,适用环境不同,不做赘述。

增强系统也包括WAAS、LAAS等。从星基和地基的角度也被称为SBAS和GBAS等,在此也不做赘述。
————————————————
版权声明:本文为CSDN博主「sylvia0726」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sylvia0726/article/details/79601323

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PLC(可编程逻辑控制器)编程是一种应用于工业自动化领域的编程技术。它使用基于图形化界面的编程软件,通过编写逻辑程序来控制各种自动化设备。PLC编程理论指的是PLC编程的基本概念、原理和方法,主要包括PLC的输入输出模块、逻辑门、计时器、计数器等基本元素的使用,以及PLC编程语言(通常是梯形图、功能块图、指令表等)的使用方法。 PLC编程算法则是指在PLC编程过程中,为了实现特定的控制功能所采用的逻辑处理方法。这些算法可以包括临时变量的定义和使用、条件判断的使用、计算公式的编写等。良好的算法设计可以提高PLC编程的可读性、可维护性和可扩展性。 PLC编程技巧是指在PLC编程中,为了提高程序的性能和可靠性所采用的一些经验和技巧。这些技巧可以包括减少I/O点的使用,合理利用计时器和计数器,有效地使用复位指令,避免使用不必要的跳转语句等。此外,在编程过程中,也需要注意代码的结构化和模块化,以方便程序的维护和修改。 对于PLC编程理论算法和技巧的学习和研究,可以通过互联网进行下载。有很多网站和文档提供相关的学习资料和实例代码,包括PLC编程的基本原则、常用算法和常见问题的解决方案等。此外,还可以参考一些专业的PLC编程书籍和培训课程,以深入理解和应用PLC编程技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值