zoukankan      html  css  js  c++  java
  • 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 " ")。默认“”

  • 相关阅读:
    关于钩子函数的详细解答:
    Vue实现回到顶部
    Vue实现Rate组件(星星评分)
    Vue-router 路由模式
    javascript中实现跨域的方式
    Promise
    webpack使用
    小程序登录
    api工厂的sdk的使用
    面试题划“重点”
  • 原文地址:https://www.cnblogs.com/pylblog/p/10065037.html
Copyright © 2011-2022 走看看