为了贴合这个系列的标题“从入门到放弃”,在入门之后现在就要放弃此方向了。虽然感觉遗憾,暂时也没有办法。在此附上此系列最后一篇,希望能给大家一些帮助。
此文中一些函数解析参考了 https://www.cnblogs.com/taqikema/p/8819798.html,在此表示感谢!
void *rtksvrthread(void *arg)
int rtkpos(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav)
函数参数,4个:
rtk_t *rtk IO rtk控制结构体
obsd_t *obs I 观测数据
int n I 观测数据的数量
nav_t *nav I 导航数据
返回类型:
int O (0:no solution,1:valid solution)
int pntpos (const obsd_t *obs, int n, const nav_t *nav, const prcopt_t *opt,
sol_t *sol, double *azel, ssat_t *ssat, char *msg)
函数参数,8个:
obsd_t *obs I 观测数据
int n I 观测数据的数量
nav_t *nav I 导航数据
prcopt_t *opt I 处理过程选项
sol_t *sol IO solution
double *azel IO 方位角和俯仰角 (rad) (NULL: no output)
ssat_t *ssat IO 卫星状态 (NULL: no output)
char *msg O 错误消息
返回类型:
int O (1:ok,0:error)
void satposs(gtime_t teph, const obsd_t *obs, int n, const nav_t *nav,
int ephopt, double *rs, double *dts, double *var, int *svh)
函数参数,9个:
gtime_t teph I time to select ephemeris (gpst)
obsd_t *obs I 观测量数据
int n I 观测量数据的数量
nav_t *nav I 导航数据
int ephopt I 星历选项 (EPHOPT_???)
double *rs O 卫星位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
double *dts O 卫星钟差,长度为2*n, {bias,drift} (s|s/s)
double *var O 卫星位置和钟差的协方差 (m^2)
int *svh O 卫星健康标志 (-1:correction not available)
返回类型: 无
int ephclk(gtime_t time, gtime_t teph, int sat, const nav_t *nav, double *dts)
函数参数,5个:
gtime_t time I 信号发射时刻
gtime_t teph I 用于选择星历的时刻 (gpst)
int sat I 卫星号 (1-MAXSAT)
nav_t *nav I 导航数据
double *dts O 卫星钟差,长度为2*n, {bias,drift} (s|s/s)
返回类型:
int O (1:ok,0:error)
int eph2clk (gtime_t time, const eph_t *eph)
函数参数,2个
gtime_t time I time by satellite clock (gpst)
eph_t *eph I broadcast ephemeris
返回类型:
double satellite clock bias (s) without relativeity correction
int satpos(gtime_t time, gtime_t teph, int sat, int ephopt, const nav_t *nav,
double *rs, double *dts, double *var, int *svh)
函数参数,9个:
gtime_t time I time (gpst)
gtime_t teph I 用于选择星历的时刻 (gpst)
int sat I 卫星号
nav_t *nav I 导航数据
int ephopt I 星历选项 (EPHOPT_???)
double *rs O 卫星位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
double *dts O 卫星钟差,长度为2*n, {bias,drift} (s|s/s)
double *var O 卫星位置和钟差的协方差 (m^2)
int *svh O 卫星健康标志 (-1:correction not available)
返回类型:
int O (1:ok,0:error)
int ephpos(gtime_t time, gtime_t teph, int sat, const nav_t *nav,
int iode, double *rs, double *dts, double *var, int *svh)
函数参数,9个:
gtime_t time I transmission time by satellite clock
gtime_t teph I time to select ephemeris (gpst)
int sat I 卫星号 (1-MAXSAT)
nav_t *nav I 导航数据
int iode I 星历数据期号
double *rs O 卫星位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
double *dts O 卫星钟差,长度为2*n, {bias,drift} (s|s/s)
double *var O 卫星位置和钟差的协方差 (m^2)
int *svh O 卫星健康标志 (-1:correction not available)
返回类型:
int O (1:ok,0:error)
void eph2pos(gtime_t time, const eph_t *eph, double *rs, double *dts, double *var)
函数参数,5个
gtime_t time I transmission time by satellite clock
eph_t *eph I 广播星历
double *rs O 卫星位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
double *dts O 卫星钟差,长度为2*n, {bias,drift} (s|s/s)
double *var O 卫星位置和钟差的协方差 (m^2)
返回类型:无
int estpos(const obsd_t *obs, int n, const double *rs, const double *dts,
const double *vare, const int *svh, const nav_t *nav,
const prcopt_t *opt, sol_t *sol, double *azel, int *vsat,
double *resp, char *msg)
函数参数,13个:
obsd_t *obs I 观测量数据
int n I 观测量数据的数量
double *rs I 卫星位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
double *dts I 卫星钟差,长度为2*n, {bias,drift} (s|s/s)
double *vare I 卫星位置和钟差的协方差 (m^2)
int *svh I 卫星健康标志 (-1:correction not available)
nav_t *nav I 导航数据
prcopt_t *opt I 处理过程选项
sol_t *sol IO solution
double *azel IO 方位角和俯仰角 (rad)
int *vsat IO 卫星在定位时是否有效
double *resp IO 定位后伪距残差 (P-(r+c*dtr-c*dts+I+T))
char *msg O 错误消息
返回类型:
int O 1表示成功,0表示出错
int rescode(int iter, const obsd_t *obs, int n, const double *rs,
const double *dts, const double *vare, const int *svh,
const nav_t *nav, const double *x, const prcopt_t *opt,
double *v, double *H, double *var, double *azel, int *vsat,
double *resp, int *ns)
函数参数,17个
int iter I 迭代次数
obsd_t *obs I 观测量数据
int n I 观测量数据的数量
double *rs I 卫星位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
double *dts I 卫星钟差,长度为2*n, {bias,drift} (s|s/s)
double *vare I 卫星位置和钟差的协方差 (m^2)
int *svh I 卫星健康标志 (-1:correction not available)
nav_t *nav I 导航数据
double *x I 本次迭代开始之前的定位值
prcopt_t *opt I 处理过程选项
double *v O 定位方程的右端部分,伪距残差
double *H O 定位方程中的几何矩阵
double *var O 参与定位的伪距残差的方差
double *azel O 对于当前定位值,所有观测卫星的 {方位角、高度角} (2*n)
int *vsat O 所有观测卫星在当前定位时是否有效 (1*n)
double *resp O 所有观测卫星的伪距残差,(P-(r+c*dtr-c*dts+I+T)) (1*n)
int *ns O 参与定位的卫星的个数
返回类型:
int O 定位方程组的方程个数
int raim_fde(const obsd_t *obs, int n, const double *rs,
const double *dts, const double *vare, const int *svh,
const nav_t *nav, const prcopt_t *opt, sol_t *sol,
double *azel, int *vsat, double *resp, char *msg)
函数参数,13个:
obsd_t *obs I 观测数据
int n I 观测数据的数量
double *rs I 卫星位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
double *dts I 卫星钟差,长度为2*n, {bias,drift} (s|s/s)
double *vare I 卫星位置和钟差的协方差 (m^2)
int *svh I 卫星健康标志 (-1:correction not available)
nav_t *nav I 导航数据
prcopt_t *opt I 处理过程选项
sol_t *sol IO solution
double *azel IO 方位角和俯仰角 (rad)
int *vsat IO 卫星在定位时是否有效
double *resp IO 定位后伪距残差 (P-(r+c*dtr-c*dts+I+T))
char *msg O 错误消息
返回类型:
int O (1:ok,0:error)
void estvel(const obsd_t *obs, int n, const double *rs, const double *dts,
const nav_t *nav, const prcopt_t *opt, sol_t *sol,
const double *azel, const int *vsat)
函数参数,9个:
obsd_t *obs I 观测数据
int n I 观测数据的数量
double *rs I 卫星位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
double *dts I 卫星钟差,长度为2*n, {bias,drift} (s|s/s)
nav_t *nav I 导航数据
prcopt_t *opt I 处理过程选项
sol_t *sol IO solution
double *azel IO 方位角和俯仰角 (rad)
int *vsat IO 卫星在定位时是否有效
返回类型:
int O (1:ok,0:error)
int resdop(const obsd_t *obs, int n, const double *rs, const double *dts,
const nav_t *nav, const double *rr, const double *x,
const double *azel, const int *vsat, double *v, double *H)
函数参数,11个:
obsd_t *obs I 观测数据
int n I 观测数据的数量
double *rs I 卫星位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
double *dts I 卫星钟差,长度为2*n, {bias,drift} (s|s/s)
nav_t *nav I 导航数据
double *rr I 接收机位置和速度,长度为6,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
double *x I 本次迭代开始之前的定速值,长度为4,{vx,vy,vz,drift}
double *azel IO 方位角和俯仰角 (rad)
int *vsat I 卫星在定速时是否有效
double *v O 定速方程的右端部分,速度残差
double *H O 定速方程中的几何矩阵
返回类型:
int O 定速时所使用的卫星数目
r s = ( v s − v ) ⋅ e s + ω e c ( v s , y x r + y s v x − v s , x y r − x s v y ) r_{s} = (\boldsymbol{v_s}-\boldsymbol{v})\cdot\boldsymbol{e_s} + \frac{\omega_e}{c}(v_{s,y}x_r+y_sv_x-v_{s,x}y_r-x_sv_y) rs=(vs−v)⋅es+cωe(vs,yxr+ysvx−vs,xyr−xsvy)
y = − λ f d = h ( x ) = r s + c ⋅ δ t ˙ − c ⋅ δ ˙ t , s y = -\lambda f_d = h(x) = r_{s} + c\cdot\dot{\delta_t} - c\cdot\dot{\delta}_{t,s} y=−λfd=h(x)=rs+c⋅δt˙−c⋅δ˙t,s
G = ∂ h ∂ x = [ − e 1 , k 1 − e 2 , k 1 − e 3 , k 1 − e 4 , k 1 ] \boldsymbol{G} = \frac{\partial h}{\partial x} = \left[ \begin{array}{cc} -\boldsymbol{e}_{1,k} & 1\\ -\boldsymbol{e}_{2,k} & 1\\ -\boldsymbol{e}_{3,k} & 1\\ -\boldsymbol{e}_{4,k} & 1 \end{array} \right] G=∂x∂h=⎣⎢⎢⎡−e1,k−e2,k−e3,k−e4,k1111⎦⎥⎥⎤
b = y − h ( x ) = − λ f d − ( r s + c ⋅ δ t ˙ − c ⋅ δ ˙ t , s ) b = y-h(x) = -\lambda f_d - (r_{s} + c\cdot\dot{\delta_t} - c\cdot\dot{\delta}_{t,s}) b=y−h(x)=−λfd−(rs+c⋅δt˙−c⋅δ˙t,s)
void pppos(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav)
函数参数,4个:
rtk_t *rtk IO rtk控制结构体
obsd_t *obs I 观测数据
int n I 观测数据的数量
nav_t *nav I 导航数据
返回类型: 无
void udstate_ppp(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav)
函数参数,4个:
rtk_t *rtk IO rtk控制结构体
obsd_t *obs I 观测数据
int n I 观测数据的数量
nav_t *nav I 导航数据
返回类型: 无
void udbias_ppp(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav)
函数参数,4个:
rtk_t *rtk IO rtk控制结构体
obsd_t *obs I 观测数据
int n I 观测数据的数量
nav_t *nav I 导航数据
返回类型: 无
int res_ppp(int iter, const obsd_t *obs, int n, const double *rs,
const double *dts, const double *vare, const int *svh,
const nav_t *nav, const double *x, rtk_t *rtk, double *v,
double *H, double *R, double *azel)
函数参数:14个
int iter I 迭代次数(该函数中没有用到)
obsd_t *obs I 观测数据
int n I 观测数据的数量
double *rs I 卫星位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
double *dts I 卫星钟差,长度为2*n, {bias,drift} (s|s/s)
double *vare I 卫星位置和钟差的协方差 (m^2)
int *svh I 卫星健康标志 (-1:correction not available)
nav_t *nav I 导航数据
double *x I 状态变量
rtk_t *rtk IO rtk控制结构体
double *v O 实际观测量与预测观测量的残差 (2n个,因每个观测数据有phase和code两个观测值)
double *H O 观测矩阵
double *R O 测量误差的协方差
double *azel O 方位角和俯仰角 (rad)
返回类型:
int O 残差个数,<=0表示失败
void satantpcv(const double *rs, const double *rr, const pcv_t *pcv,
double *dant)
函数参数:4个
double *rs I 卫星位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
double *rr I 接收机位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
pcv_t *pcv I 天线相位中心参数结构体
double *dant O 卫星天线校正值
返回类型:无
void antmodel(const pcv_t *pcv, const double *del, const double *azel,
int opt, double *dant)
函数参数:5个
pcv_t *pcv I 天线相位中心参数结构体
double *del I 相对天线参考点偏移值
double *azel I 方位角和俯仰角
int opt I 选项(非0则需要考虑pcv)
double *dant O 接收机天线校正值
返回类型:无
void windupcorr(gtime_t time, const double *rs, const double *rr,
double *phw)
函数参数:4个
gtime_t time I time (GPST)
double *rs I 卫星位置 (ecef) {x,y,z} (m)
double *rr I 接收机位置 (ecef) {x,y,z} (m)
double *phw IO 相位缠绕校正值 (cycle)
返回类型:无
int corrmeas(const obsd_t *obs, const nav_t *nav, const double *pos,
const double *azel, const prcopt_t *opt,
const double *dantr, const double *dants, double phw,
double *meas, double *var, int *brk)
函数参数:11个
obsd_t *obs I 观测数据
nav_t *nav I 导航数据
double *pos I 接收机位置 (lat,lon,h)(rad,m)
double *azel I 方位角和俯仰角 (rad)
prcopt_t *opt I 处理过程选项
double *dantr I 接收机天线校正值
double *dants I 卫星天线校正值
double phw I 相位缠绕校正值
double *meas O 校正后的测量值
double *var O 校正后的测量值的误差协方差
int *brk O 用与判断是否有周跳
返回类型:
int O (>0:ok,0:sth wrong)
int ifmeas(const obsd_t *obs, const nav_t *nav, const double *azel,
const prcopt_t *opt, const double *dantr, const double *dants,
double phw, double *meas, double *var)
函数参数:9个
obsd_t *obs I 观测数据
nav_t *nav I 导航数据
double *azel I 方位角和俯仰角 (rad)
prcopt_t *opt I 处理过程选项
double *dantr I 接收机天线校正值
double *dants I 卫星天线校正值
double phw I 相位缠绕校正值
double *meas O 校正后的测量值
double *var O 校正后的测量值的误差协方差
返回类型:
int O (>0:ok,0:sth wrong)
int filter(double *x, double *P, const double *H, const double *v,
const double *R, int n, int m)
函数参数,7个:
double *x IO 状态变量 (n x 1)
double *P IO 状态变量的误差协方差阵 (n x n)
double *H I 观测矩阵的转置 (n x m)
double *v I 实际观测量与预测观测量的残差 (measurement - model) (m x 1)
double *R I 测量误差的协方差 (m x m)
int n I 状态变量个数
int m I 观测值个数
返回类型:
int O (0:ok,<0:error)
int filter_(const double *x, const double *P, const double *H,
const double *v, const double *R, int n, int m,
double *xp, double *Pp)
函数参数,9个:
double *x I 状态变量 (n x 1)
double *P I 状态变量的误差协方差阵 (n x n)
double *H I 观测矩阵的转置 (n x m)
double *v I 实际观测量与预测观测量的残差 (measurement - model) (m x 1)
double *R I 测量误差的协方差 (m x m)
int n I 状态变量个数
int m I 观测值个数
double *xp O 更新后的状态变量 (n x 1)
double *Pp O 更新后的状态变量的误差协方差阵 (n x n)
返回类型:
int O (0:ok,<0:error)
int relpos(rtk_t *rtk, const obsd_t *obs, int nu, int nr, const nav_t *nav)
函数参数,5个:
rtk_t *rtk IO rtk控制结构体
obsd_t *obs I 观测数据
int nu I 接收机观测数据的数量
int nr I 基站观测数据的数量
nav_t *nav I 导航数据
返回类型:
int O (1:ok,0:error)
int zdres(int base, const obsd_t *obs, int n, const double *rs,
const double *dts, const int *svh, const nav_t *nav,
const double *rr, const prcopt_t *opt, int index, double *y,
double *e, double *azel)
函数参数,13个:
int base I 0表示接收机,1表示基站
obsd_t *obs I 观测数据
int n I 观测数据的数量
double *rs I 卫星位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
double *dts I 卫星钟差,长度为2*n, {bias,drift} (s|s/s)
int *svh I 卫星健康标志 (-1:correction not available)
nav_t *nav I 导航数据
double *rr I 接收机/基站的位置和速度,长度为6*n,{x,y,z,vx,vy,vz}(ecef)(m,m/s)
prcopt_t *opt I 处理过程选项
int index I 0表示接收机,1表示基站,与参数 base 重复了
double *y O 相位/码残差
double *e O 观测矢量 (ecef)
double *azel O 方位角和俯仰角 (rad)
返回类型:
int O (1:ok,0:error)
void zdres_sat(int base, double r, const obsd_t *obs, const nav_t *nav,
const double *azel, const double *dant,
const prcopt_t *opt, double *y)
函数参数,13个:
int base I 0表示接收机,1表示基站
double r I 经过钟差和对流层校正后的几何距离。
obsd_t *obs I 观测数据
nav_t *nav I 导航数据
double *azel I 方位角和俯仰角 (rad)
double *dant I 接收机天线校正值
prcopt_t *opt I 处理过程选项
double *y O 相位/码残差
返回类型: 无
void tidedisp(gtime_t tutc, const double *rr, int opt, const erp_t *erp,
const double *odisp, double *dr)
函数参数,6个:
gtime_t tutc I time in utc
double *rr I 站点位置 (ecef) (m)
int opt I 选项(指定包含哪些潮的影响)
1: solid earth tide
2: ocean tide loading
4: pole tide
8: elimate permanent deformation
double *erp I 地球自转参数
double *odisp I 海潮负荷参数
odisp[0+i*6]: consituent i amplitude radial(m)
odisp[1+i*6]: consituent i amplitude west (m)
odisp[2+i*6]: consituent i amplitude south (m)
odisp[3+i*6]: consituent i phase radial (deg)
odisp[4+i*6]: consituent i phase west (deg)
odisp[5+i*6]: consituent i phase south (deg)
(i=0:M2,1:S2,2:N2,3:K2,4:K1,5:O1,6:P1,7:Q1,8:Mf,9:Mm,10:Ssa)
double *dr O 因地球潮汐而引起的站点位移校正值 (ecef) (m)
返回类型: 无
int geterp(const erp_t *erp, gtime_t time, double *erpv)
函数参数,3个:
erp_t *erp I earth rotation parameters
gtime_t time I time (gpst)
double *erpv O erp values {xp,yp,ut1_utc,lod} (rad,rad,s,s/d)
返回类型:
int O (1:ok,0:error)
void udstate(rtk_t *rtk, const obsd_t *obs, const int *sat,
const int *iu, const int *ir, int ns, const nav_t *nav)
函数参数,7个:
rtk_t *rtk IO rtk控制结构体
obsd_t *obs I 观测数据
int sat I 接收机和基站共同观测的卫星号列表
int *iu I 接收机和基站共同观测的卫星在接收机观测值中的index值列表
int *ir I 接收机和基站共同观测的卫星在基站观测值中的index值列表
int ns I 接收机和基站共同观测的卫星个数
nav_t *nav I 导航数据
返回类型: 无
void udpos(rtk_t *rtk, double tt)
函数参数,2个:
rtk_t *rtk IO rtk控制结构体
double tt I 本次更新与上次更新的时间差
返回类型: 无
void udbias(rtk_t *rtk, double tt, const obsd_t *obs, const int *sat,
const int *iu, const int *ir, int ns, const nav_t *nav)
函数参数,8个:
rtk_t *rtk IO rtk控制结构体
double tt I 本次更新与上次更新的时间差
obsd_t *obs I 观测数据
int sat I 接收机和基站共同观测的卫星号列表
int *iu I 接收机和基站共同观测的卫星在接收机观测值中的index值列表
int *ir I 接收机和基站共同观测的卫星在基站观测值中的index值列表
int ns I 接收机和基站共同观测的卫星个数
nav_t *nav I 导航数据
返回类型: 无
int ddres(rtk_t *rtk, const nav_t *nav, double dt, const double *x,
const double *P, const int *sat, double *y, double *e,
double *azel, const int *iu, const int *ir, int ns, double *v,
double *H, double *R, int *vflg)
函数参数,16个:
rtk_t *rtk IO rtk控制结构体
nav_t *nav I 导航数据
double dt I 接收机和基站的时间差
double *x IO 状态变量
double *P IO 状态变量的误差协方差阵
int sat I 接收机和基站共同观测的卫星号列表
double *y IO 相位/码残差
double *e IO 观测矢量 (ecef)
double *azel O 方位角和俯仰角 (rad)
int *iu I 接收机和基站共同观测的卫星在接收机观测值中的index值列表
int *ir I 接收机和基站共同观测的卫星在基站观测值中的index值列表
int ns I 接收机和基站共同观测的卫星个数
double *v O 实际观测量与预测观测量的残差
double *H O 观测矩阵
double *R O 测量误差的协方差
int *vflg O 数据有效标志
返回类型:
int O (>0:ok,0:error)