PPP精密单点定位 GAMP(三)——提高北斗系统定位精度

GAMP是我精密单点定位学习之旅上最好的老师

这篇博客将介绍我在GAMP上学到的知识和踩过的坑。

1、数据下载

GAMP对于文件的命名格式是有要求的,我们常用的文件下载方式主要是GAMPII和FAST

1、对于我个人来说更喜欢用FAST的下载观测文件o、导航文件n/p、北斗的DCB文件,下载的混合nav文件,要把brdc改为brdm才可以用,不然有时会显示没有nav文件。

2、其余的文件我一般用GAMPII进行下载,省去了文件命名的问题。

2、提高GAMP北斗系统精度

GAMP程序在2018年发布,所以使用最近的北斗的文件会出现很多问题,no valid obs /  定位结果较差/无法收敛。下图就是用gamp程序测试北斗动态PPP与我最近修改后的结果。

 (这个图RMS值是错的)

 3、如何提高GAMP北斗精度

1、将北斗二系统与北斗三系统分开

2、北斗二系统与北斗三系统间实现ISB(目前我还未实现)

3、增加多频点,至少满足用B1 B3频点进行定位,增加B2a B2b

4、增加频点与信道的选择,rtklib在2020之后的版本加入了sat2freq方便选择频点与频率的优先级

4、程序简单修改

1、MAXPRNCMP 调整为61

 2、Obsscan_PPP

 因为北斗B1 B3 是存到obs[i].L[0]、 obs[i].L[2]

3、修改readantex

 4、频率修改(这个根据个人选择)

以下这几个位置需要改正

 

 因为GAMP有些程序是定死的,常用 lam[0] lam[1],我们需要根据自己简单修改一下。

 非差非组合选频

 gfmeas

 udiono_ppp

 ppp_res

 

 

 5、更改下gamp pos的输出格式

double pos[3], dms1[3], dms2[3], P[9], Q[9], dxyz[3], denu[3];
	const char* sep = opt2sep(opt);
	char* p = (char*)buff, c;
	int i;

	for (i = 0; i < 3; i++)
		dxyz[i] = denu[i] = 0.0;

	ecef2pos(sol->rr, pos);
	soltocov(sol, P);
	covenu(pos, P, Q);
	//if (opt->height == 1) { /* geodetic height */
	//	pos[2] -= geoidh(pos);
	}
	if (opt->degf) {
		deg2dms(pos[0] * R2D, dms1, 5);
		deg2dms(pos[1] * R2D, dms2, 5);
		p += sprintf(p, "%s%s%4.0f%s%02.0f%s%08.5f%s%4.0f%s%02.0f%s%08.5f", s, sep,
			dms1[0], sep, dms1[1], sep, dms1[2], sep, dms2[0], sep, dms2[1], sep,
			dms2[2]);
	}
	else
		p += sprintf(p, "%s%s%14.9f%s%14.9f", s, sep, pos[0] * R2D, sep, pos[1] * R2D);

	p += sprintf(p, "%s%11.4f%s%14.4f%s%14.4f%s%14.4f", sep, pos[2], sep, sol->rr[0], sep, sol->rr[1], sep, sol->rr[2]);

	p += sprintf(p, "%s%20.12e%s%20.12e", sep, sol->dtr[0], sep, sol->dtr[1]);

	//
	if (0.0 == PPP_Glo.crdTrue[0])
		ecef2pos(sol->rr, pos);
	else
		ecef2pos(PPP_Glo.crdTrue, pos);

	for (i = 0; i < 3; i++)
		denu[i] = sol->rr[i + 3];
	ecef2enu(pos, sol->rr + 3, denu);

	p += sprintf(p, "%s%10.4f%s%10.4f%s%10.4f", sep, denu[0], sep, denu[1], sep, denu[2]);
	p += sprintf(p, "%s%2d%s%2d%s%2d%s%2d", sep, sol->ns[0], sep, sol->ns[1], sep, sol->ns[2], sep, sol->ns[3]);


	if (0.0 == PPP_Glo.crdTrue[0])
		denu[0] = denu[1] = denu[2] = 0.0;
	else {
		ecef2pos(PPP_Glo.crdTrue, pos);
		for (i = 0; i < 3; i++)
			denu[i] = dxyz[i] = sol->rr[i] - PPP_Glo.crdTrue[i];

		ecef2enu(pos, dxyz, denu);
	}

	p += sprintf(p, "%s%8.4f%s%8.4f%s%8.4f%s%8.4f", sep, denu[0], sep, denu[1], sep, denu[2], sep, norm(denu, 3));

	p += sprintf(p, "\n");
	return p - (char*)buff;

今天就先介绍这,后面将继续介绍如何修改clk与isb

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值