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 " ")。默认“”

RTKLib的Manual解读的更多相关文章

  1. pugixml 1.9 manual解读(部分)

    Plain character data nodes (node_pcdata) represent plain text in XML. PCDATA nodes have a value, but ...

  2. dumpsys命令的使用及telephony.registry解读

    adb shell dumpsys,默认打印出当前系统所有的service信息,通常情况下我们并不想看那么多信息,可以在后面加上具体的服务名,比如想获取关于设备电池的信息,就可以使用以下命令: > ...

  3. Explain 结果解读与实践

    Explain 结果解读与实践 基于 MySQL 5.0.67 ,存储引擎 MyISAM . 注:单独一行的"%%"及"`"表示分隔内容,就象分开“第一章”“第 ...

  4. HttpClient 4.3连接池参数配置及源码解读

    目前所在公司使用HttpClient 4.3.3版本发送Rest请求,调用接口.最近出现了调用查询接口服务慢的生产问题,在排查整个调用链可能存在的问题时(从客户端发起Http请求->ESB-&g ...

  5. RTKLIB源码解析(一)——单点定位(pntpos.c)

    RTKLIB源码解析(一)--单点定位(pntpos.c) 标签: GNSS RTKLIB 单点定位 [TOC] pntpos int pntpos (const obsd_t *obs, int n ...

  6. ARM_Instruction_Set_Encoding_hacking(ARM指令集编码格式解读)

    ARM指令集编码格式解读 说明: 1.本文参考的书籍<ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition>中的Cha ...

  7. 解读Linux命令格式(转)

    解读Linux命令格式   环境 Linux HA5-139JK 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x8 ...

  8. (转)Linux 系统性能分析工具图解读(一、二)

    Linux 系统性能分析工具图解读(一.二) 原文:http://oilbeater.com/linux/2014/09/08/linux-performance-tools.html 最近看了 Br ...

  9. MongoDB 走马观花(全面解读篇)(转载)

    MongoDB 走马观花(全面解读篇)(转载)   目录 一.简介 二.基本模型 BSON 数据类型 分布式ID 三.操作语法 四.索引 索引特性 索引分类 索引评估.调优 五.集群 分片机制 副本集 ...

随机推荐

  1. 遇到不支持的 Oracle 数据类型 USERDEFINED

    以前都是sql查询mdb空间数据没有什么问题,今天在用sql方式查询Oracle中的空间数据时候,出现错误.它不支持geometry.空间数据都带有shape属性.只要不查询shape字段就没问题.但 ...

  2. 【Git初探】Git中fatal: Not a git repository (or any of the parent directories): .git错误的解决办法

    今天用git bash更新项目时遇到了无论使用什么命令都会报fatal: Not a git repository (or any of the parent directories): .git的情 ...

  3. 3. Git与TortoiseGit基本操作

    1. GitHub操作 本节先简单介绍 git 的使用与操作, 然后再介绍 TortoiseGit 的使用与操作. 先看看SVN的操作吧, 最常见的是 检出(Check out ...), 更新 (U ...

  4. Scala 数组和List

    Scala 数组和List: import scala.collection.mutable.ArrayBuffer import scala.collection.mutable.Buffer ob ...

  5. 为什么用Markdown,而不用Word?

    写博客.写文章比较多的人都知道 Markdown 是什么. Markdown 是一种轻量级标记语言,创始人为 John Gruber.它允许人们「使用易读易写的纯文本格式编写文档,然后转换成有效的 X ...

  6. TinyXML2的快速实践

    最近遇到个需要在C++中处理XML文件的需求,虽然对此方面并不是很熟,但好在有GitHub上的awesome-cpp项目的帮助,还是收获了足够的相关知识. 类库 常用的或被推荐的XML类库有以下数个选 ...

  7. [go设计模式]简单工厂模式

    优点 工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可 ...

  8. HTML块元素与内联元素嵌套规则

    HTML存在许多种类型的标签,有的标签下面只允许特定的标签存在,这就叫HTML嵌套规则.不按HTML嵌套规则写,浏览器就不会正确解析,会将不符合嵌套规则的节点放到目标节点的下面,或者变成纯文本.关于H ...

  9. Linux上安装jdk1.8和配置环境变量

    前言 Linux 上安装jdk1.8 和配置环境变量,参考相关文档,本人在此总结,操作归纳如下. 第一步:创建jdk安装目录(该/usr/local/src 目录是空的,最好把我们自己下载的放到这,容 ...

  10. UVa12105 越大越好

    题文:https://vjudge.net/problem/12364(或者见紫书) 题解: 因为题目中有两个限制条件,那么我们就顺着题目的意思来dp,设dp[i][j]表示目前还剩下的i个火柴,用这 ...