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

智能推荐

class和struct的区别-程序员宅基地

文章浏览阅读101次。4.class可以有⽆参的构造函数,struct不可以,必须是有参的构造函数,⽽且在有参的构造函数必须初始。2.Struct适⽤于作为经常使⽤的⼀些数据组合成的新类型,表示诸如点、矩形等主要⽤来存储数据的轻量。1.Class⽐较适合⼤的和复杂的数据,表现抽象和多级别的对象层次时。2.class允许继承、被继承,struct不允许,只能继承接⼝。3.Struct有性能优势,Class有⾯向对象的扩展优势。3.class可以初始化变量,struct不可以。1.class是引⽤类型,struct是值类型。

android使用json后闪退,应用闪退问题:从json信息的解析开始就会闪退-程序员宅基地

文章浏览阅读586次。想实现的功能是点击顶部按钮之后按关键字进行搜索,已经可以从服务器收到反馈的json信息,但从json信息的解析开始就会闪退,加载listview也不知道行不行public abstract class loadlistview{public ListView plv;public String js;public int listlength;public int listvisit;public..._rton转json为什么会闪退

如何使用wordnet词典,得到英文句子的同义句_get_synonyms wordnet-程序员宅基地

文章浏览阅读219次。如何使用wordnet词典,得到英文句子的同义句_get_synonyms wordnet

系统项目报表导出功能开发_积木报表 多线程-程序员宅基地

文章浏览阅读521次。系统项目报表导出 导出任务队列表 + 定时扫描 + 多线程_积木报表 多线程

ajax 如何从服务器上获取数据?_ajax 获取http数据-程序员宅基地

文章浏览阅读1.1k次,点赞9次,收藏9次。使用AJAX技术的好处之一是它能够提供更好的用户体验,因为它允许在不重新加载整个页面的情况下更新网页的某一部分。另外,AJAX还使得开发人员能够创建更复杂、更动态的Web应用程序,因为它们可以在后台与服务器进行通信,而不需要打断用户的浏览体验。在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种常用的技术,用于在不重新加载整个页面的情况下,从服务器获取数据并更新网页的某一部分。使用AJAX,你可以创建异步请求,从而提供更快的响应和更好的用户体验。_ajax 获取http数据

Linux图形终端与字符终端-程序员宅基地

文章浏览阅读2.8k次。登录退出、修改密码、关机重启_字符终端

随便推点

Python与Arduino绘制超声波雷达扫描_超声波扫描建模 python库-程序员宅基地

文章浏览阅读3.8k次,点赞3次,收藏51次。前段时间看到一位发烧友制作的超声波雷达扫描神器,用到了Arduino和Processing,可惜啊,我不会Processing更看不懂人家的程序,咋办呢?嘿嘿,所以我就换了个思路解决,因为我会一点Python啊,那就动手吧!在做这个案例之前先要搞明白一个问题:怎么将Arduino通过超声波检测到的距离反馈到Python端?这个嘛,我首先想到了串行通信接口。没错!就是串口。只要Arduino将数据发送给COM口,然后Python能从COM口读取到这个数据就可以啦!我先写了一个测试程序试了一下,OK!搞定_超声波扫描建模 python库

凯撒加密方法介绍及实例说明-程序员宅基地

文章浏览阅读4.2k次。端—端加密指信息由发送端自动加密,并且由TCP/IP进行数据包封装,然后作为不可阅读和不可识别的数据穿过互联网,当这些信息到达目的地,将被自动重组、解密,而成为可读的数据。不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。2.使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。_凯撒加密

工控协议--cip--协议解析基本记录_cip协议embedded_service_error-程序员宅基地

文章浏览阅读5.7k次。CIP报文解析常用到的几个字段:普通类型服务类型:[0x00], CIP对象:[0x02 Message Router], ioi segments:[XX]PCCC(带cmd和func)服务类型:[0x00], CIP对象:[0x02 Message Router], cmd:[0x101], fnc:[0x101]..._cip协议embedded_service_error

如何在vs2019及以后版本(如vs2022)上添加 添加ActiveX控件中的MFC类_vs添加mfc库-程序员宅基地

文章浏览阅读2.4k次,点赞9次,收藏13次。有时候我们在MFC项目开发过程中,需要用到一些微软已经提供的功能,如VC++使用EXCEL功能,这时候我们就能直接通过VS2019到如EXCEL.EXE方式,生成对应的OLE头文件,然后直接使用功能,那么,我们上篇文章中介绍了vs2017及以前的版本如何来添加。但由于微软某些方面考虑,这种方式已被放弃。从上图中可以看出,这一功能,在从vs2017版本15.9开始,后续版本已经删除了此功能。那么我们如果仍需要此功能,我们如何在新版本中添加呢。_vs添加mfc库

frame_size (1536) was not respected for a non-last frame_frame_size (1024) was not respected for a non-last-程序员宅基地

文章浏览阅读785次。用ac3编码,执行编码函数时报错入如下:[ac3 @ 0x7fed7800f200] frame_size (1536) was not respected for anon-last frame (avcodec_encode_audio2)用ac3编码时每次送入编码器的音频采样数应该是1536个采样,不然就会报上述错误。这个数字并非刻意固定,而是跟ac3内部的编码算法原理相关。全网找不到,国内音视频之路还有很长的路,音视频人一起加油吧~......_frame_size (1024) was not respected for a non-last frame

Android移动应用开发入门_在安卓移动应用开发中要在活动类文件中声迷你一个复选框变量-程序员宅基地

文章浏览阅读230次,点赞2次,收藏2次。创建Android应用程序一个项目里面可以有很多模块,而每一个模块就对应了一个应用程序。项目结构介绍_在安卓移动应用开发中要在活动类文件中声迷你一个复选框变量

推荐文章

热门文章

相关标签