GNSS相对定位中的天线位置概念及设置(Marker, ARP, Phase center)
文章目录
- 基本概念(Marker, ARP, Phase center)
- 天线位置修正
- RTKLIB中天线位置修正
基本概念(Marker, ARP, Phase center)
首先先来区分几个概念:
- Marker: 大地测量参考标尺,上面用三脚架或者直接固定天线
- ARP(antenna reference point):天线上定义良好的点,一般选取接收机天线底部与天线中轴的交点作为参考点
- Antenna Phase center(天线相位中心):即天线接收信号的电气中心,其空间位置在出厂时往往不在天线的几何中心上。天线所辐射出的电磁波在离开天线一定的距离后,其等相位面会近似为一个球面,该球面的球心即为该天线的等效相位中心,即天线相位中心(Antenna Phase Center )
这三个不同位置在天线中的偏差表示如下图:

天线位置修正
参考RINEX3.04定义,如下图,关于天线位置的两项必有的参数为:
- marker近似位置
- ARP相对marker的H/E/N偏差,即上图中的“Offset between ARP and marker”

对于相位中心与ARP之间的偏差,可以根据不同类型天线的天线模型参数获得,例如ngs14.atx文件中提供不同天线的PCO以及PCV参数。
由于GNSS原始数据测量的是卫星到相位中心的距离,因此在进行相位定位时,如果基站提供的位置是marker的位置(例如RINEX头中marker近似位置),我们需要将“Offset between ARP and marker”、“phase center offset”修掉。
RTKLIB中天线位置修正
从postpos.c文件中的antpos函数可知,如下图,如果基站的位置是RINEX头中的位置,会利用ARP和marker之间的偏差,计算得到ARP的位置。
在之后相位定位计算中,也会将对天线PCO和PCV进行修正,具体参见上一篇博客RTKLIB中的卫星天线与接收机天线修正。
对于移动站而言:
- 在没有Rover天线相关参数设置的情况下(没有勾选并设置antenna Type),计算出来的实际上是相位中心的位置
- 如果rovre atenna type是*auto,那么从RINEX头里面识别到的天线类型、以及DELTA H/E/N会起作用。如果有该天线参数,且RINEX头中的DELTA H/E/N都为0,那么计算出来的是ARP位置;如果DELTA H/E/N不为0,计算出来的是marker位置
- 如果rover antenna type不是*auto,而是自己配置的天线类型,那么该天线类型,以及配置的DELTA -E/N/U会起作用。如果有该天线参数,DELTA -E/N/U都为0,那么计算出来的是ARP位置;如果DELTA -E/N/U不为0,则计算出来的是marker位置。

/* antenna phase center position ---------------------------------------------*/
static int antpos(prcopt_t *opt, int rcvno, const obs_t *obs, const nav_t *nav,const sta_t *sta, const char *posfile)
{double *rr=rcvno==1?opt->ru:opt->rb,del[3],pos[3],dr[3]={0};int i,postype=rcvno==1?opt->rovpos:opt->refpos;char *name;trace(3,"antpos : rcvno=%d\n",rcvno);if (postype==POSOPT_SINGLE) { /* average of single position */if (!avepos(rr,rcvno,obs,nav,opt)) {showmsg("error : station pos computation");return 0;}}else if (postype==POSOPT_FILE) { /* read from position file */name=stas[rcvno==1?0:1].name;if (!getstapos(posfile,name,rr)) {showmsg("error : no position of %s in %s",name,posfile);return 0;}}else if (postype==POSOPT_RINEX) { /* get from rinex header */if (norm(stas[rcvno==1?0:1].pos,3)<=0.0) {showmsg("error : no position in rinex header");trace(1,"no position in rinex header\n");return 0;}/* antenna delta */if (stas[rcvno==1?0:1].deltype==0) { /* enu */for (i=0;i<3;i++) del[i]=stas[rcvno==1?0:1].del[i];del[2]+=stas[rcvno==1?0:1].hgt;ecef2pos(stas[rcvno==1?0:1].pos,pos);enu2ecef(pos,del,dr);}else { /* xyz */for (i=0;i<3;i++) dr[i]=stas[rcvno==1?0:1].del[i];}for (i=0;i<3;i++) rr[i]=stas[rcvno==1?0:1].pos[i]+dr[i];}return 1;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
