目录
前言计算卫星运动的平均角速度n与平近点角M计算卫星运动的偏近点角E计算卫星运动的真近点角f与升角角距计算卫星初始升交角距、矢径、轨道倾角对卫星初始升交角距、矢径、轨道倾角进行摄动改正计算卫星在轨道坐标系中的位置计算观测瞬间升交点在协议地球坐标系中的赤经计算卫星在协议地球坐标系中的位置计算观测时刻的卫星钟差初值计算观测时刻相对论效应改正后的卫星钟差计算由于位置和钟不准对定位产生的方差大小加入时间的微小改变量,再次计算卫星的位置、钟差计算卫星的速度、钟漂参考
前言
rtklib–伪距单点定位(single-point positioning)学习(1)Satposs这篇文章中介绍了satposs整体的流程,但是当时因为篇幅限制原因,没有对如何利用广播星历中的轨道参数对卫星进行定轨进行介绍,只说了大致的流程,也就是eph2pos这个函数没有展开介绍。很多同学应该会遇到给卫星定轨的编程问题,所以这里详细介绍一下,之后会介绍利用精密星历进行卫星定轨的编程实现。
/* broadcast ephemeris to satellite position and clock bias --------------------
* compute satellite position and clock bias with broadcast ephemeris (gps,
* galileo, qzss)
* args : gtime_t time I time (gpst)
* eph_t *eph I broadcast ephemeris
* double *rs O satellite position (ecef) {x,y,z} (m)
* double *dts O satellite clock bias (s)
* double *var O satellite position and clock variance (m^2)
* return : none
* notes : see ref [1],[7],[8]
* satellite clock includes relativity correction without code bias
* (tgd or bgd)
*-----------------------------------------------------------------------------*/
extern void eph2pos(gtime_t time, const eph_t *eph, double *rs, double *dts,
double *var)
{
double tk,M,E,Ek,sinE,cosE,u,r,i,O,sin2u,cos2u,x,y,sinO,cosO,cosi,mu,omge;
double xg,yg,zg,sino,coso;
int n,sys,prn;
trace(4,"eph2pos : time=%s sat=%2d\n",time_str(time,3),eph->sat);
if (eph->A
case SYS_GAL: mu=MU_GAL; omge=OMGE_GAL; break;
case SYS_CMP: mu=MU_CMP; omge=OMGE_CMP; break;
default: mu=MU_GPS; omge=OMGE; break;
}
M=eph->M0+(sqrt(mu/(eph->A*eph->A*eph->A))+eph->deln)*tk;
调用satsys函数返回卫星的种类与prn号,如果是GPS卫星那么引力常数mu=GM=3.9860050E14,地球自转角速度omge=7.2921151467E-5 rad/s,sqrt(mu/(eph->Aeph->Aeph->A))计算出卫星的平均角速度,加上eph->deln摄动参数得出计算时刻的平均角速度。然后乘以tk得到观测时刻与参考时刻的平近点角的变化值,加上参考时刻toe的平近点角得到观测时刻的平近点角。
计算卫星运动的偏近点角E
for (n=0,E=M,Ek=0.0;fabs(E-Ek)>RTOL_KEPLER&&n
const double ura_value[]={
2.4,3.4,4.85,6.85,9.65,13.65,24.0,48.0,96.0,192.0,384.0,768.0,1536.0,
3072.0,6144.0
};
return ura |