rtklib的manual解读_rtklib中文说明书-程序员宅基地

技术标签: RTKLIB  manual  rtlib  

转自:RTKLib的Manual解读-耀礼士多德

Key-word:

integer ambiguity resolution :整周模糊度解算  navigation:导航  Kinematic:动态,RTK的K  rover:漫游  validation:验证  antena:天线  phase:相位  Augmentation:曾广  carrier-base:基于载波  code-based:基于测距码(伪距)  raw binary:原始二进制  receiver:接收者(接收机)   ephemeris:星历  Post‐processing positioning:后处理定位  ionosphere:电离层  troposphere:对流层  atmosphere:大气层  sphere:球体,范围   calibration:校准   velocity :速度   acceleration :加速度  standard deviation:标准差   threshold:阈值  epoch:历元  bias:偏向,偏置  delta position:增量位置  algorithm:算法

command‐line user interface(CUI):命令行用户接口

ambiguity resolution(AR):模糊度解算

antenna reference point(ARP):天线参考点

Double difference(DD):双差。一种对计算模型的转换办法,消除部分系统误差。

linear combination(LC):线性组合

dilution of precision(DOP):精度因子

geometric DOP(GDOP):几何精度因子

 

Global Navigation Satellite System (GNSS):全球卫星导航定位系统。其实是对卫星数据处理,并且通过网络发送数据的系统。是一个统称,例如:GPS系统,北斗卫星导航系统、GLONASS系统(俄罗斯)、Galileo卫星导航系统(欧盟)。

International GNSS service(IGS):国际全球卫星导航定位系统服务,可以看成比单一个GNSS用的卫星系统更广泛的GNSS系统。为PPP定位提供高精度的卫星坐标和卫星钟差。

continuous operating reference stations(CORS):连续运行基准站。CORS可以通过GNSS系统,发布数据。

Cycle‐Slip:周跳

Geometry-free:无几何。(GPS 双频资料所接收到的原始零次差分 (Zero-difference)观测量作适当的线性组合成为无几何(Geometry-free)观测量,即 将L 1 观测量减去L 2 观测量即可获得无几何观测量)

Quasi-Zenith Satellite System(QZSS) :准天顶卫星系统,日本的

LEX:是QZSS调制在L6载波上的信号

precise point positioning(PPP):精密单点定位技术(GPS测量与数据处理P190)

sigle point positioning(SPP):标准单点定位。也就是伪距单点定位。在PPP中作为定位的初始解(GPS测量与数据处理P186)

earth centered eath fixed(ECEF):该坐标系以地球质心为原点,Z轴向北沿地球自转轴方向,X轴指向经纬度的(0,0)位置,右手系Y轴指向90度经线。该系与地球一同转动。 

earth centered inertial(ECI):   坐标原点取在地心,X轴指向春分点,Z轴指向北极,Y轴与前者构成右手系。该系不与地球一同转动,因此可以应用牛顿定律。 

Greenwich mean sidereal time(GMST):格林尼治平均行星时

Galileo System Time(GST ):伽利略系统时间

Time Of Week(TOW):GPS中,在某个周中的时间(秒)

on-the-fly(OTF):即使生成/高速运行(计算机术语)

phase center variation(PCV):相位中心变化  

antenna phase center(APC): 天线相位中心

zenith total delay (ZTD):天顶总延迟

satellite center of mass(COM):卫星质心

inter‐frequency bias(IFB ): 频率间偏置(频漂?不同接收机,对同一卫星,同一卫星产生的?)

state space representation(SSR):状态空间表示

pseudo random noise(PRN):伪随机噪声  *还记得pseudo inverse吗

signal to noise ratio(SNR):信噪比(信号是波,噪声也是波,应该怎么比呢)

slant total electron content(STEC):斜电子含量

total electron content(TEC):总电子含量

ocean tide loading(OTL):潮汐负荷

extended Kalman filter (EKF):扩展卡尔曼滤波

fractional cycle bias(FCB):周期分数偏置

IONosphere map EXchange format(IONEX):一种用来转换,比较,或者生成TEC分布图的通用格式

Satellite-Based Augmentation System(SBAS):广域差分增强系统(星基增强系统,'基站增强')

Differential GPS(DGPS):SBAS的一种。基站计算出伪距修正值,并传递给流动站,达到对流动站中影响较大的大气误差的影响进行削弱的效果,提升了定位精度,这种方式基于基站和流动站误差的距离相关性,随着基线的变长,相关性降低,定位效果变差。

DGNSS:SBAS的一种。由GNSS系统提供差分数据。常将DGPS/DGNSS放到一起。

Radio Technical Commission for Maritime services(RTCM):国际海运事业无线电技术委员会 ,也代表一种GNSS差分信号格式标准(也就是说这是GNSS系统发布差分数据的格式标准)。可用于差分改正。

National Marine Electronics Association (NMEA):美国国家海洋电子协会,也代表GPS导航设备统一的RTCM标准协议。可用于网络RTK。

*RTK是动态相对定位,而差分是靠基站的改正数据,改正定位,两者数学模型不一样。但都是实时定位。

GPGGA:是NMEA协议中的一种语句格式,描述了接收机的位置信息。类似的,有GPRMC

GPGSV:是NMEA协议中的一种语句格式,可见卫星信息。

Networked Transport of RTCM via Internet Protocol(NTRIP):基于互联网转发RTCM

Receiver Independent Exchange Format(RINEX):接收机独立交换格式。是各种数据聚合的格式,常用于后处理定位。RTCM数据,也可以转换为RINEX格式

 

RTKLib的库简介:

1. 处理矩阵和向量函数

2. 处理时间和字符串函数

3. 处理坐标转换和水准面函数

4. 导航函数

5. 提供定位模型(电离层,对流层,天线PCV)

6. 使用DGPS或DGNSS两个广域差分增强系统进行改正

7. 单点定位

8. 基于载波或基准于测距码的相对定位

9. OTF整周模糊度解算

10. 接收机原始二进制数据输入

11. 定位解算以NMEA格式输入输出

12. RINEX观测数据、导航信息输入输出

13. 精确星历输入

14. 数据流通讯库(猜测是TCPC/TCPS/FILE等流)

15 基于互联网转发RTCM库

16. RTK(实时动态)的GPS、GNSS定位服务器

17. RTCM 2.3/3.0/3.1/3.2格式处理

18. downloader functions

 

Windows + Visual studio下编译:https://www.cnblogs.com/DKSoft/p/4677381.html

*使用前当然要#include "rtklib.h"了

一些基本概念:

1.  定位分为后处理定位(Post‐processing positioning)和实时定位(real‐time positioning)。

2.  RTKLIB中,用G01-G32表示GPS卫星号,用B01-B24表示北斗,C01-C15表示伽利略

3.  通常来说,PPP定位,需要由IGS提供高精度的卫星坐标和卫星钟差。

4. GNSS系统可以提供卫星坐标、卫星钟差、CORS差分数据(RTCM)等。

5. RTKLIB内部中,运算使用的是GPST。(输入数据会转成GPST,输出的时候,又可以转回需要的时间系统)。

6. RTKLIB内部中,运算使用的是ECEF坐标系统。

7. RTKLIB只能解单基线,而且输出的基线向量,是  流动站坐标 - 基准站坐标


 

 

 

 函数介绍:

rtkcmn.c

卫星和卫星系统部分:

satno():将卫星系统和伪随机噪声编号,转为卫星编号

satsys():卫星编号转卫星系统

satid2no() :卫星ID转卫星编号 对应 satno2id():卫星编号转卫星ID

obs2code() :观测类型(字符串)转观测类型(数字值) 对应 code2obs():观测类型(数字值)转观测类型(字符串)

satexclude():(返回0或1)测试排除卫星(猜测是在开始处理数据的时候用的)

testsnr() :(返回1:masked,0:unmasked)测试信噪比,猜测应该是信号是否能覆盖噪音(换句话说噪声的振幅很少,或者频域很窄?)

setcodepri() :设置代码优先级(这是针对多个卫星系统的)

getcodepri() :获取代码优先级

*有sat开头都和卫星有关的

矩阵和向量部分:

mat():创建一个矩阵(allocate memory of matrix)。返回的是double*,使用堆空间(要自己释放)。由此可见,rtklib是用double来存储矩阵,不是用类/结构体,所以行列数要时刻传入传出。

imat():创建int型矩阵

zeros() :创建0矩阵,返回的是double*(用这个代替mat(),起码会将元素初始化为0)

eye():创建单位矩阵

dot():向量点乘(点积),向量也是double*型。a.b,几何意义是,b在a方向上的长度,乘以a的长度。

norm():欧几里得范数,说白了,就是同一个向量点乘后开方,求向量长度

cross3() :三维向量外积(叉积)(x1,y1,z1)×(x2,y2,z2)=(y1z2-y2z1,z1x2-z2x1,x1y2-x2y1);新向量长度|z|=|x||y|*sin<x,y>,几何意义就是求垂直于xy方向上的向

(看《线性代数的几何意义》)

normv3() :三维向量归一化;就是将一个向量,变成长度为1,方向不变的向量。

matcpy():将B矩阵的值,复制到A中,所以传入两个矩阵

matmul() :矩阵相乘

matinv():矩阵求逆。这个方法中,调用的dgetrf_没有找到实现,而是一个extern的函数声明,而且会被预编译宏替换为dgetrf。根据预编译指令,可知dgetrf的定义是在Math Kernel Library(MKL)库中****

solve():解Ax=b,求解也用到dgetrf_,同上了;

lsq():用最小二乘法,解Ax=b

filter():卡尔曼滤波状态更新

smoother() :卡尔曼平滑 

matprint():打印矩阵

matfprint():打印矩阵到文件

字符串和时间数据处理部分:

*时间的类型,统一为gtime_t

str2num() :字符串转数字

str2time():字符串转时间,参数“yyyy mm dd hh mm ss”形式

time2str():时间转yyyy/MM/dd HH:mm:ss的形式

epoch2time() :获取时间。 输入double *,要先初始化,设置其元素为:{year,month,day,hour,min,sec}

time2epoch() :获取 {year,month,day,hour,min,sec}。传入double*要先初始化,并且长度为6

gpst2time() :将GPS周,以及在这周中的时间(秒)作为参数,获取时间值

time2gpst() :时间转GPS周

*gst2time():伽利略时间(GST),转时间。输入的是卫星周,以及此周中的时间(秒)

*time2gst():时间转GST周

*time2gst() :北斗时间(BDT),转时间

*time2bdt() :时间转BDT周

time_str() :time2str()差不多,只是返回的是静态内存的首地址,所以不要乱释放或者使用

timeadd() :给一个时间添加秒数

timediff() :两个时间相减,返回相差秒数

*gpst2utc():GPS时转UTC时,传入和返回的都是统一为gtime_t

*utc2gpst():UTC时转GPS时

*gpst2bdt():GPS时转北斗时(BDT)

*bdt2gpst():北斗时(BDT)转GPS时

timeget() :当前时间转UTC时

time2doy() :获取时间中的日数部分

utc2gmst() :UTC转格林尼治平均行星时(GMST), 不知为什么会返回弧度

adjgpsweek():调整GPS周。使用系统时间来调整GPS周数。

tickget() :获取当前时间的毫秒位

sleepms() :线程挂起若干毫秒

reppath():将指定文件中的,指定移动站,测站的某些属性值,替换为另一格式,并输出到指定的文件

reppaths() :是上一个方法的,批量处理

//

坐标处理部分

ecef2pos() :地心空间直角坐标(x,y,z)转大地坐标(lon,lat,h)

pos2ecef() :大地坐标(lon,lat,h)转地心空间直角坐标(x,y,z)

ecef2enu():ECEF坐标(x,y,z)转地方坐标(N,E,U)。*参数中要输入(X,Y,Z)以及其大地坐标(lon,lat)。 地方坐标(N,E,U)也就地方正切坐标。

enu2ecef() :地方坐标(N,E,U)转ECEF坐标(x,y,z)。*参数中要输入(N,E,U)以及其大地坐标(lon,lat)。

covenu():将ECEF坐标的协方差阵,转换为地方坐标(N,E,U)的协方差阵。*参数要输入大地坐标(lon,lat)。

covecef():将地方坐标(N,E,U)的协方差阵,转换为ECEF的协方差阵。*参数要输入大地坐标(lon,lat)。

xyz2enu():求ECEF坐标(x,y,z)转地方坐标(N,E,U)的转换矩阵,ecef2enu()中也用到。

eci2ecef():求ECI坐标(x,y,z)转ECEF坐标(x,y,z)的转换矩阵。

deg2dms():将度数,转为整度,整分,整秒。 参数是double 和double*。

dms2deg() :将整度,整分,整秒,转为度。参数是double*。

//

输入输出功能

readpos() :从测站位置文件件中,读取指定测站位置

sortobs() :对观测数据,进去整理,排序,去重。传入的是obs_t*

uniqnav():删除导航数据中的重复星历。出入的是nav_t*。

screent() :通过时间,和时间间隔,筛选数据。传入的都是时间的参数gtime_t,猜测是找到数据文件的时间,和输入的时间等参数做对比,看看数据是否可用。

readnav():从文件中读取导航数据。参数是初始化了的const char *, nav_t *

savenav():将导航数据写到文件中

freeobs() :释放观测数据。参数是obs_t*

freenav() :释放导航数据。参数是nav_t *。

 

rinex.c 

RINEX文件简介:RINEX文件有几种,分为观测值文件、导航电文文件、气象数据文件、钟文件。各个文件中,又分为“文件头”和“数据体”。

观测值文件:存放每一观测历元所观测到的卫星及载波相位、伪距和多普勒等观测值数据。其文件头,有测站名,天线信息,测站近似坐标、观测值数量及类型、历元间隔。

导航电文文件:卫星钟差改正模型的参数,及卫星的轨道数据。其文件头,包含电离层模型参数,以及说明GPS时与UTC间关系的参数和跳秒。

气象数据文件:存放观测过程,每隔一段时间在测站天线附近所测定的干湿、相对湿度和气压等数据。

ssssdddf.yyt,ssss代表测站号,ddd代表一年内的第几日,f代表观测时段号,yy代表年份。t : t为O时代表观测值文件,N代表导航电文,M代表气象数据,C代表钟 ,G代表GLONASS导航电文

 RTCM或BINEX格式的数据,经过一定的手段(使用RTKCONV.exe)可以转换为RINEX格式的观测文件(OBS)或导航电文(NAV)

.SP3是精确星历文件,.eph也是星历文件

 

readrnx() :从RINEX文件中,读取观测数据和导航电文。参数有obs_t*nav_t *初始化为NULL,函数中会申请内存和赋值。

readrnxt() :从RINEX文件中,读取指定时间段的观测数据和导航电文。

readrnxc() : 从RINEX文件中,读取时钟。参数是nav_t *初始化为NULL。

outrnxobsh() :输出从RINEX中,读取的导航电文的‘文件头’ 到指定文件中。参数有已经初始化好的nav_t *。RINEX文件格式,是有分‘文件头’的。

outrnxobsb() :输出从RINEX中,获得的‘观测数据体’到指定文件中。参数有已初始化的obsd_t*。RINEX文件格式,是有分‘数据体’的。obsd_tobs_t的字段成员

outrnxnavh():输出从RINEX中,获得的‘导航电文’文件头到指定文件中。参数有nav_t*

outrnxnavb() :输出从RINEX中,获得的‘导航电文’数据体到指定文件中。参数有eph_t *,是星历数据。是nav_t中的成员

*uncompress() :文件解压。应该是解压zip。参数是两个路径。

init_rnxctr() :初始化一个rnxctr_t,主要是申请空间rnxctr_t内部的成员有obs_t,nav_t,sta_t等重要的数据成员

free_rnxctr() :释放rnxctr_t的空间,包含期子成员指针所指向的内存块。

open_rnxctr() :从RINEX文件中,读取文件信息,设置到rnxctr_t中的属性。主要是读文件版本,类型(是观测值文件、还是导航电文),卫星系统(是GPS,还是北斗),时间系统(是UTC还是别的)

input_rnxctr():从RINEX文件中,读取文件信息,设置其obs_t、nav_t信息。主要是读取“观测值文件”和“导航电文”这两类RINEX文件。

options.c 

searchopt():

getsysopts():

loadopts():

 

pntpos.c  最佳解读:https://www.cnblogs.com/taqikema/p/8819798.html

 pntpos() :标准单点定位

postpos.c

postpos() :后处理定位。是所有的定位的入口,通过参数来调节用什么方式定位;通过输入/输出文件的方式,完成对观测数据、星历的输入,成果的输出;

主要参数:

gtime_t ts:处理从什么时间开始接收的数据。在观测数据文件或导航电文文件,是一个时段的观测数据。这个参数是要取时段中的一个时间,作为起始时间,起始时间前面的数据忽略。ts.time=0表示不限制。

gtime_t te:观测时段中,作为结束时间,结束时间后的数据忽略。ts.time=0,表示不限制。

double ti:在开始时间和结束时间之间,每隔一段时间(单位:秒),取一次观测数据,不刚好命中时间间隔点的数据,就忽略。*这个有很多选择,要根据接收频率来定,如果等于0,表示处理所有数据。

double tu:在限定开始时间和结束时间的情况下,取一段时间(单位:秒)作为观测单元。(好像用处不大)


 

以上参数不是非常重要,以下参数比较重要,关乎一些概念:

const prcopt_t *popt:

在rtkcmn.c中,有const prcopt_t prcopt_default,可作为默认的传入去。

*prcopt_t 是一个结构体,因为postpos()整个函数适用于所有的定位,所以这个是更细致的设置,成员:

*int mode:设置定位模式(Positioning Mode)。 一下是mode的可选项,参照(《manual 》P34)

  #define PMODE_SINGLE 0 /* positioning mode: single */ 单点定位,也就是SPP,  prcopt_default 默认的
  #define PMODE_DGPS 1 /* positioning mode: DGPS/DGNSS */ 基于测距码GPS差分定位(《GPS测量与数据处理》P208)
  #define PMODE_KINEMA 2 /* positioning mode: kinematic */  基于载波的动态相对定位。(因为在RTKPOST.exe,仅仅放一个接收机的数据文件不能解算,提示要基准站数据)
  #define PMODE_STATIC 3 /* positioning mode: static */  基于载波的静态相对定位。
  #define PMODE_MOVEB 4 /* positioning mode: moving-base */移动基线定位??
  #define PMODE_FIXED 5 /* positioning mode: fixed */  移动站的位置是固定的相对定位*(用于残差分析)
  #define PMODE_PPP_KINEMA 6 /* positioning mode: PPP-kinemaric */ 移动PPP
  #define PMODE_PPP_STATIC 7 /* positioning mode: PPP-static */ 静态PPP
  #define PMODE_PPP_FIXED 8 /* positioning mode: PPP-fixed */ 固定PPP(用于残差分析)

int soltype:设置滤波类型(Filter Type),有(0:forward,1:backward,2:combined)。《manual 》中说,此参数对SPP无效。猜测:是设置求整周模糊度的卡尔曼滤波算法的参数,因为RTKPOST.exe中,放在设置项Frequencies旁边。

int nf:设置频率(Frequencies)。 决定是使用单频L1,双频L1+L2,还是三频L1+L2+L3。《manual 》中说,此参数对PPP和SPP无效。

int navsys:设置导航系统(navigation system)。类似mode那种由宏定义的设置方法。

double elmin:设置截止高度角(elevation mask)限制,单位:rad。默认15。 猜测:因为接收机对卫星的仰角是有要求的,一般低于15就不跟踪或不使用其数据。

snrmask_t snrmask:设置信噪比(SNR)限制(SNR MASK)。

  typedef struct {  
    int ena[2]; /* enable flag {rover,base} */  这个应该是开启/关闭 接收机/基准站的限制。prcopt_default是以 {0,0}对其初始化,表示不限制了。
    double mask[NFREQ][9]; /* mask (dBHz) at 5,10,...85 deg */ 这个应该是,对不同的频率,有不同(SNR)限制,单位:dbms。因为NFREQ是指载波频率数目。
  } snrmask_t;

int sateph:设置卫星星历类(satellite ephemeris/clock)的类型。

  #define EPHOPT_BRDC 0 /* ephemeris option: broadcast ephemeris */ 使用广播星历(默认)
  #define EPHOPT_PREC 1 /* ephemeris option: precise ephemeris */ 使用精确星历
  #define EPHOPT_SBAS 2 /* ephemeris option: broadcast + SBAS */使用SBAS广播星历
  #define EPHOPT_SSRAPC 3 /* ephemeris option: broadcast + SSR_APC */由RTCM提供的,含有APC改正数的广播星历
  #define EPHOPT_SSRCOM 4 /* ephemeris option: broadcast + SSR_COM */由RTCM提供的,含有COM改正数的广播星历
  #define EPHOPT_LEX 5/* ephemeris option: QZSS LEX ephemeris */由QZSS提供的星历

int modear:设置GPS整周模糊度解算(integer ambiguity resolution)策略。不适用于SPP。《manual P38》

  #define ARMODE_OFF 0 /* AR mode: off */ 不解算模糊度
  #define ARMODE_CONT 1 /* AR mode: continuous */ 连续静态整数模糊度估计和解算(默认)(仅仅适用于kinematic ,static ,moving-base,fixed)

  #define ARMODE_INST 2 /* AR mode: instantaneous */ 通过历元和历元之间,瞬时解算(仅仅适用于kinematic ,static ,moving-base,fixed)

  #define ARMODE_FIXHOLD 3 /* AR mode: fix and hold */ 连续静态整数模糊度估计和解算。如果符合度好,对解有较强约束。(仅仅适用于kinematic ,static ,moving-base,fixed)

  #define ARMODE_PPPAR 4 /* AR mode: PPP-AR */ (仅用于PPP模式,但是这是试验时用的,所以一般不用)

  以下几个说明书没有

  #define ARMODE_PPPAR_ILS 5 /* AR mode: PPP-AR ILS */
  #define ARMODE_WLNL 6 /* AR mode: wide lane/narrow lane */
  #define ARMODE_TCAR 7 /* AR mode: triple carrier ar */

int glomodear:设置GLONASS卫星系统的整周模糊度解算策略(Inter Ambiguity Res GLO)。0:不固定整周模糊度;1:固定整周模糊度(默认);2:自动校准。IFB被作为待估参数,代入到线性方程 ;同样不适用于SPP。

  一般来说,只有移动站和基站接收机类型一致,才能通过双差观测模型来消除 IFB(频率间偏置)。

int bdsmodear:设置北斗卫星系统的整周模糊度解算策略(Inter Ambiguity Res BDS)。同上。

int maxout: 设置数据中断计算阈值(Outage to Reset Amb)。默认5。 如果数据中断次数大于此值,那么模糊度估计值,会被重置为初始值。

int minlock:设置固定整周模糊度的最少锁定计数(Min Lock count),少于这个数就不计算其整周模糊度,默认是0。猜测是,后续历元的整周期计数。(《GPS测量与数据处理》P145)

int minfix:设置最少的固定计数(Min Fix count),仅当mode设置了ARMODE_FIXHOLD有效 。默认是10。

int ionoopt:设置电离层改正参数(Ionosphere Correction)。(在导航电文RINEX文件中)。(《GPS测量与数据处理》P104)

  #define IONOOPT_OFF 0 /* ionosphere option: correction off */ 不使用电离层改正。prcopt_default默认的是这个。
  #define IONOOPT_BRDC 1 /* ionosphere option: broadcast model */广播模型(默认)。PTKPOS.exe默认的是这个。
  #define IONOOPT_SBAS 2 /* ionosphere option: SBAS model */ SBAS提供的模型
  #define IONOOPT_IFLC 3 /* ionosphere option: L1/L2 or L1/L5 iono-free LC */电离层与双频的线性组合(L1-L2用于GPS/GLONASS/QZSS或L1-L5用于伽利略)电离层校正。
  #define IONOOPT_EST 4 /* ionosphere option: estimation */ 估算斜电子含量 。不适用于SPP和PPP。
  #define IONOOPT_TEC 5 /* ionosphere option: IONEX TEC model */ 使用IONEX格式获得的TEC网格数据
  #define IONOOPT_QZS 6 /* ionosphere option: QZSS broadcast model */使用QZSS卫星系统的广播电离层模型
  #define IONOOPT_LEX 7 /* ionosphere option: QZSS LEX ionospehre */ QZSS提供的LEX信号上的电离层模型
  #define IONOOPT_STEC 8 /* ionosphere option: SLANT TEC model */

int tropopt:对流层改正(Troposphere Correction)。(《GPS测量与数据处理》P116)

  #define TROPOPT_OFF 0 /* troposphere option: correction off */ 不使用对流层改正。prcopt_default默认的是这个。
  #define TROPOPT_SAAS 1 /* troposphere option: Saastamoinen model */使用萨斯踏莫宁(Saastamoinen)模型。PTKPOS.exe默认的是这个。
  #define TROPOPT_SBAS 2 /* troposphere option: SBAS model */使用SBAS提供的模型,这个模型通常又叫MOPS。
  #define TROPOPT_EST 3 /* troposphere option: ZTD estimation */通过扩展卡尔曼滤波的方法,估计天顶总延迟。
  #define TROPOPT_ESTG 4 /* troposphere option: ZTD+grad estimation */通过扩展卡尔曼滤波的方法,估计天顶总延迟
  #define TROPOPT_COR 5 /* troposphere option: ZTD correction */
  #define TROPOPT_CORG 6 /* troposphere option: ZTD+grad correction */通过扩展卡尔曼滤波的方法,估计天顶总延迟和水平梯度参数。

int dynamics:设置接收机的动态模型,用于估计接收机的位置(Rec Dynamics)。0:不设置(默认);1:根据速度估计;2:根据加速度估计。仅仅适用于DGPS/DGNSS或Kinematic(动态RTK)模式。

int tidecorr:设置地球潮汐改正(earth tides correction)。不适于SSP。0:不设置(默认);1:使用固体潮汐校正;2. 使用固体潮汐改正和极潮改正。

int niter:设置用于测量更新的估计滤波器的迭代次数(number of filter iteration)。默认1。根据基线的长度设置。

int codesmooth:code smoothing window size 。默认:0

int intpref: interpolate reference obs (for post mission) 。默认:0

int sbascorr:SBAS correction options。默认:0

int sbassatse:   SBAS satellite selection 。默认0:all

int rovpos:设置Fix模式定位下的流动站的位置。值应该同下面一样。

int refpos:设置相对定位下的初始(base)位置。0:默认;1:使用SPP均值;2:从文件读取; 3:RINEX文件头读取; 4:由RTCM提供的

double eratio[NFREQ]:设定L1和L2/L5/L6的伪距误差与载波相位误差的标准差比(Code/Carrier-Phase Error Ratio L1/L2)。默认{100.0,100.0}。NFREQ是频率总数。对每个频率可以分别设置。

double err[5]:测量误差因子。(对应RTKPOST.exe的Option-Stats-Measurement Errors)

  [0]:Reserved,默认100.0;

  [1]:设置载波相位误差标准差的基准项(Carrier-Phase Error a/sinEI(m)),默认0.003;

  [2]:设置载波相位误差标准差的仰角相关项(Carrier-Phase Error b/sinEI(m)),默认0.003;

  [3]:设置载波相位误差标准差的基线长度相关项(Carrier-Phase Error/Baseline(m/10 km)),默认0;

  [4]:设置多普勒误差的标准差(Doppler Frequency(Hz)),默认1.0(《manual》和代码是默认1.0,RTKPOS.exe是10);

double std[3]:设置初始状态。

  [0]:设置载波相位偏差的过程噪声的标准差,默认30.0

  [1]:设置每10km基线的垂直电离层延迟的过程噪声标准差,默认0.03

  [2]:设置天顶对流层延迟的过程噪声标准差,默认0.3

double prn[5]:设置过程噪声( 对应RTKPOST.exe的Option-Stats-Process Noises)

  [0]:设置载波相位偏差的过程噪声的标准差(Carrier -Phase Bias(cycle))。默认1E-4

  [1]:设置每10km基线的垂直电离层延迟的过程噪声标准差(Vertical Ionospheric Dely(m/10km))。默认1E-3

  [2]:设置天顶对流层延迟的过程噪声标准差 (Zenith Tropospheric Delay(m))。 默认1E-4

  [3]:设置接收机加速度的过程噪声标准差为水平分量(Receiver Accel Horiz(m/s^2))。默认1(《manual》和RTKPOST.exe),prcopt_default默认1E-1。

  [4]:设置接收机加速度的过程噪声标准差为垂直分量(Receiver Accel Vertical(m/s^2))。默认0.1(《manual》和RTKPOST.exe),prcopt_default默认1E-2。

double sclkstab:设置卫星时钟稳定性(s/s)。该值用于基站观测数据的插值(Satelite Clock Stability(s/s))。默认5.00E-12。

double thresar[4]:设置模糊度解算验证阈值。

  [0]:为ʺ比率测试ʺ设置整数模糊度验证阈值,它使用最佳整数向量的平方残差与第二最佳向量的比率(Min Ratio to Fix Ambiguity)。默认:3(《GPS测量与数据处理》P171 解的确认)(回忆,各个整周模糊度有很多整数组合,哪个组合才是最佳?)

  [1]:设定最小置信度以固定ppp-AR模式中的模糊度(Min Confidence to fix Amb(Ambiguity ))。默认0.9999(《GPS测量与数据处理》P172 ,应该是最佳和次最佳模糊度组合的解的单位权中误差,显著差异的置信度。)

  [2]:设置最大 分数周期偏差(fcb)以解决ppp-AR模式下的模糊问题(Max FCB to fix Amb(Ambiguity ))。prcopt_default默认0.2,RTKPOST.exe默认0.25。

double elmaskar: /* elevation mask of AR for rising satellite (deg) */ 默认0。
double elmaskhold:设置保持(Hold,是不是指持续跟踪的意思)模糊度的最小俯仰角(Min Elevation(°) to Hold Amb) ,仅当mode设置了ARMODE_FIXHOLD有效 。默认0。
double thresslip;  设置 历元间无几何(geometry‐free)线性组合载波相位差 的周跳阈值(Slip Thres(m))。默认0.05
double maxtdiff:设置基准站和流动站之间,最大的观测时间(age)差(Max Age of Diff(s))。默认30.0
double maxinno:设置innovation的拒绝阈值(Reject Threshold of Innov(innovation)(m))。默认30.0。如果超过阈值,那么观测值在估计过程中,作为异常值被排除。
double maxgdop: 设置几何精度因子的拒绝阈值(Reject Threshold of GDOP(m))。默认30.0。如果超过阈值,那么观测值在估计过程中,作为异常值被排除。

double baseline[2]:设置限制的长度和标准偏差(Baseline Length Constraint(m))。仅仅对 如果移动-基准(moving-base)定位模式有效。

  [0]:长度约束

  [1]:标准差约束

double ru[3]; /* rover position for fixed mode {x,y,z} (ecef) (m) */ 。使用ECEF坐标系坐标,设置流动站天线坐标。仅在FIX定位模式下有用,天线的位置要固定。
double rb[3]; /* base position for relative mode {x,y,z} (ecef) (m) */ 使用ECEF坐标系坐标,设置基准站天线坐标。仅在非SPP,PPP,Moving-Base模式下有用。

char anttype[2][MAXANT]:设置天线类型。(Antenna Type)MAXANT是最大移动站/基准站的type的字符串长度。默认{"",""}。

  [0][MAXANT]:设置多个移动站的天线类型。

  [1][MAXANT]:设置多个基准站的天线类型。

double antdel[2][3]:设置天线偏置(Antenna Delta)。不适用于SPP。设置测站天线的位置增量(delta position) 为(ENU)值,通过参考测站标记,来抵消天线参考点的位置。

  /* antenna delta { {rov_e,rov_n,rov_u},{ref_e,ref_n,ref_u}} */

  [0][]:流动站的ENU

  [1][]:参考ENU????

pcv_t pcvr[2]:设置[0]流动站的天线参数,[1]基准站的天线参数。pcv_t是天线参数

  typedef struct {  /* antenna parameter type */
    int sat; /* satellite number (0:receiver) */  设置卫星的号码,0代表接收机。那么可以猜测,卫星和接收机的可以用这个天线参数。
    char type[MAXANT]; /* antenna type */    天线类型
    char code[MAXANT]; /* serial number or satellite code */ 
    gtime_t ts,te; /* valid time start and end */
    double off[NFREQ][ 3]; /* phase center offset e/n/u or x/y/z (m) */ 每个频率的相位中心偏置。NFREQ是载波总数。可以使得每个频率都有特定的天线??
    double var[NFREQ][19]; /* phase center variation (m) */  每个频率的相位中心变化。
              /* el=90,85,...,0 or nadir=0,1,2,3,... (deg) */
  } pcv_t;

unsigned char exsats[MAXSAT] :设置排除的卫星进行定位。填写由空格分隔的卫星的PRN号码。对于GLONASS、伽利略、QZSS、北斗和SBAS,分别使用RNN、ENN、Jnn、CNN和SNN( NN:卫星PRN或插槽号)(Excluded Satelites )


这个是对postpos()方法,要输出的成果格式的控制。相当于RTKPOST.exe中的Output

solopt_t *sopt :

typedef struct 
  int posf:设置解算结果输出的样式(Solution Format)。

    #define SOLF_LLH 0 /* solution format: lat/lon/height */经纬度(默认)
    #define SOLF_XYZ 1 /* solution format: x/y/z-ecef */ ECEF型坐标系下的XYZ
    #define SOLF_ENU 2 /* solution format: e/n/u-baseline */ 基线输出ENU
    #define SOLF_NMEA 3 /* solution format: NMEA-183 */
    #define SOLF_GSIF 4 /* solution format: GSI-F1/2/3 */

  int times:设置时间系统(Time System)

    #define TIMES_GPST 0 /* time system: gps time */(默认)
    #define TIMES_UTC 1 /* time system: utc */
    #define TIMES_JST 2 /* time system: jst */ 一种日本定的时间

  int timef:设置时间样式(Time Format) 。0:sssss.s;1:yyyy/mm/dd hh:mm:ss.s (默认)
  int timeu:设置时间样式的小数点位数(Time Format of Decimals)。默认3
  int degf:设置输出经纬度的样式(Latitude / Longitude Format)。 0:ddd.ddd(默认);1:ddd mm ss。
  int outhead:设置是否输出文件头 (output header)。 0:no;1:yes(默认)
  int outopt:设置是否在结果中输出一些操作参数(Output Processing Options)。主要是 电离层对流层改正的来源,定位模式等。0:no(默认);1:yes
  int datum:设置基准当输出样式为”经纬度”的基准(Datum)。 0:WGS84(默认);1:Tokyo;
  int height:设置高的类型(Height)。0:椭球高,指点离椭球面的高(默认);1: 大地高,值点离大地水准面的高
  int geoid:如果高的类型设置为“大地高”,那么这里设置大地水准面 (Geoid model)。0:EGM96(默认);1:JGD2000;
  int solstatic:设置解的类型(solution for static mode),仅为PPP-Static和Static定位模式有用。 0:输出处理周期的所有解(默认);1:仅输出第一历元的解
  int sstat: 设置定位解算的状态输出(Output solution status) 。输出的文件后缀为.pos.stat。0:不输出(默认);1: 输出估计状态;2:输出残差值
  int trace: 设置定位解算的跟踪日志输出(Ouput solution trace)。输出的文件后缀为.pos.trace。 0:不输出(默认);1-5: 可选1-5等级的追逐信息的输出,可以看到处理过程。
  double nmeaintv[2]:设置差分定位中的NMEA格式数据的输出间隔(NMEA Interval(s))。小于0不输出,等于0输出全部,应该还可以大于0。(仅仅对于导航或实时定位有用)
     nmeaintv[0]:GMGMC,GPGGA语句输出间隔。

     nmeaintv[1]:GPGSV语句输出间隔
  char sep[64]:设置输出的解算结果中的,每个字段间的分隔符,默认“ ”(空格)。
  char prog[64]:设置调用函数的程序名。在output herder中会显示。
} solopt_t;


char **infile :多个数据文件,支持多种格式,可以一次输入观测值RINEX,导航电文RINEX,钟RINEX等等。

int n:数据文件个数。

char *outfile:输出文件。一般为.pos后缀

char *rov: I rover id list (separated by " ") 。默认“”“
char *base :I base station id list (separated by " ")。默认“”

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Pro2015/article/details/89971344

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue