【GNSS】坐标系统

坐标系统

坐标系统,是描述物质存在的空间位置(坐标)的参照系,通过定义特定基准及其参数形式来实现。坐标是描述位置的一组数值,按坐标的维度一般分为一维坐标(公路里程碑)和二维坐标(笛卡尔平面直角坐标、高斯平面直角坐标)、三维坐标(大地坐标、空间直角坐标)。为了描述或确定位置,必须建立坐标系统,坐标只有存在于某个坐标系统才有实际的意义与具体的位置。

1、协议惯性坐标系(CIS)

绝对意义的惯性坐标系是无法得到的,因此通常使用的惯性系为协议惯性坐标系(CIS),通过国际协议天球参考框架(ICRF)实现。

CIS 的定义为:原点为地球质心,参考平面为 J2000.0 历元(即 2000 年 1 月 1 日 12 h,对应的儒略日为 2451545.0)平赤道面, X轴指向 J2000.0 历元平春分点,Z 轴为 J2000.0 历元平天极,Y轴完成右手系。研究卫星 运动时在该坐标系中表示。

2、协议地固坐标系(CTS)

CTS 也称地心地固坐标系,主要是描述与地球固连的位置信息,如地面测站坐标。

具体定义为:原点是地球质心,参考平面为平地球赤道面,X轴位于平赤道面内,指向起始 子午线,Z 轴指向平北极,Y 轴完成右手系。CTS 由全球参考站建立与维持,当前地固系 的参考框架 GPS、BDS、GLONASS 和 Galileo 均有相应的坐标系,此外由 IERS 实现的国 际大地参考框架(ITRF)也是一种地固系,其基于GNSS、SLR、VLBI 等多种观测技术和 全球地面测站而建立与维持。ITRF 是地球参考系定义的坐标原点、尺度和定向参数由一系 列参考点的具体实现。目前最新的版本为ITRF2014,于 2017年1月份开始IGS由ITRF2008 切换至 ITRF2014 参考框架下。不同的 CTS 根据定义的参数进行转换。

3、站心坐标系

也叫测站东北天(ENU)坐标系,描述固连到地球两点的位置关系,典型的应用如接收机的天线相位中心偏差改正。

具体定义为:原点为测站参考点,U轴垂直于过原点的参 考椭球面,指向天顶;N与U轴相互垂直,N轴指向为参考椭球短半轴;E 轴完成左手系。

4、卫星星固坐标系( SBF)

卫星星固坐标系( Spacecraft Body Fixed System, SBF)用于描述卫星有效载荷在惯性空间的姿态,比如在姿态建模、卫星天 线相位中心改正需要使用,并建立与惯性系的关联。

具体定义为:原点为卫星质心,Z 轴 指向地球质心(信号发射天线),Y轴与太阳能帆板平行,与太阳、地球和卫星构成的平面 垂直,X轴完成右手系,为太阳入射方向(动态偏航模式下)。

卫星固定坐标系的主要作用是用于定义卫星在惯性空间中的姿态,同时建立各相关传感器坐标系与惯性系的关系。如星载加速度计是固联在卫星质心处,其轴系相应地平行于卫星固联坐标系,在转换加速度计观测量到CIS或CTS时都需要使用SBF 作为中间过渡坐标系统。

5、卫星轨道坐标系(ACR或者RTN)

也称为RTN坐标系,用于描述卫星在某一时刻的轨道位置、经验力模型补偿等。

具体定义为:原点为卫星质心,R(Radial)轴由地球质心指向卫星质心,为径向,T(Tangential/Along-track)轴在轨道平面内指向卫星运行方向,与 R 轴垂直,称为沿迹方向,N(Normal/Cross-track)轴完成右手系,为轨道面正法向。

6、仪器固定坐标系( IFX)

卫星上搭载的一些关键传感器,如星载加速度计在实施观测时,其观测量是基于该传感器的仪器固定坐标系( Instrument Fixed System, IFX)。

星载加速度仪观测量是基于 IFX 系统来量测作用于卫星本体的非保守力加 速度,经由卫星的设计参数可以转换为 SBF 系统下各方向的加速度分量,再联 合恒星敏感器的姿态测量数据可以化算到 CIS 系统下各方向的加速度分量, 进而分解为 RTN 系统下之数据,得到 RTN 各方向的非保守力加速度分量。这样就可以方便地分析轨道径向误差或各非保守扰动力对卫星的影响, 从而得到比较直接的分析结果。

坐标转换部分简单实现

声明

/*---------------------------------坐标系统转换部分;----------------------*/

/*空间直角坐标系坐标;*/
struct XYZ
{
	double X;
	double Y;
	double Z;
	XYZ()
	{
		X = 0;
		Y = 0;
		Z = 0;
	}
};

/*大地坐标系坐标;*/
struct BLH
{
	double B;
	double L;
	double H;
	BLH()
	{
		B = 0;
		L = 0;
		H = 0;
	}
};

/*站心坐标系;*/
struct ENU
{
	double E;
	double N;
	double U;
	ENU()
	{
		E = 0;
		N = 0;
		U = 0;
	}
};

/*站心极坐标系;*/
struct EAR
{
	double E;//高度角;
	double A;//方位角;
	double R;//两点间距离;
};


/*-------------------------坐标系统转换;---------------------------*/
/*求多重幂运算;*/
double POW(const double input, const int n);

/*大地坐标系与空间坐标系相互转换;*/
bool XYZ2BLH(const XYZ point, BLH *output);
bool BLH2XYZ(const BLH point, XYZ *output);

/*空间坐标到站心坐标;*/
bool XYZ2ENU(const XYZ pointA, const XYZ pointB, ENU *output);

/*站心空间坐标到站心极轴坐标;*/
bool ENU2EAR(const ENU point, EAR *output);
bool XYZ2EAR(const XYZ pointA, const XYZ pointB, EAR *output);

实现

/*---------------------坐标转换模块;------------------------*/
//模块功能:包括求多重幂函数 double POW;
//			大地坐标与空间直角坐标相互转换;bool XYZ2BLH,boolBLH2XYZ;
//			输出坐标:bool PrintfXYZ;bool PrintfBLH;
/*------------------------------------------------------------*/

/*-------求多重幂;-----------*/
//多重幂运算,因为c语言自带的pow()函数误差很大,为精确计算而自己编写;
//输出变量:底数input,幂数 n;
//输出变量:运算结果;
//函数限制:幂数必须是大于0的整数,否则无法计算正确;
/*----------------------------*/
double POW(const double input, const int n)
{
	double result=1;
	int i = 1;
	for (i = 1; i <= n;i++)
	{
		result = input*result;
	}
	return result;
}

/*--------------大地坐标与空间直角坐标的相互转换;--------------*/
//公式:可参考电子地图课件(云盘可以搜索);
//输入变量:point 变换前的坐标,*output变换后的坐标结构体地址,GeoParameter 地理参数,随不同的参考系而改变;
//输出变量:判断;
//函数限制:无法判断是否符合现实情况;
/*-----------------------------------------------------------------*/
bool XYZ2BLH(const XYZ point, BLH *output)
{
	int i;
	double DeltaZ, N;
	DeltaZ = WGS84_e1_2 *point.Z;
	for (i = 1; i <= 20; i++)
	{
		output->B = asin((point.Z + DeltaZ) / sqrt(pow(point.X, 2) + pow(point.Y, 2)
			+ pow(point.Z + DeltaZ, 2)));
		N = WGS84_a / sqrt(1 - WGS84_e1_2*sin(output->B)*sin(output->B));
		DeltaZ = N * sin(output->B) * WGS84_e1_2;
	}
	output->B = atan2((point.Z + DeltaZ), sqrt(pow(point.X, 2) + pow(point.Y, 2)));
	output->L = atan2(point.Y, point.X);

	output->H = sqrt(point.X * point.X + point.Y * point.Y + (point.Z + DeltaZ)*(point.Z + DeltaZ)) - N;
	return true;
}

bool BLH2XYZ(const BLH point, XYZ *output)
{
	double N;
	N = WGS84_a / sqrt(1 - WGS84_e1_2*(sin(point.B)*sin(point.B)));
	output->X = (N + point.H)*cos(point.B)*cos(point.L);
	output->Y = (N + point.H)*cos(point.B)*sin(point.L);
	output->Z = (N*(1 - WGS84_e1_2) + point.H)*sin(point.B);
	return true;
}

/*-------------------------空间直角坐标系到站心直角坐标系;-------------------------*/
//以A为原点的B的站心坐标
//公式来源:导航电子地图课程常用算法总结文件中;
/*--------------------------------------------------------------------------------*/
bool XYZ2ENU(const XYZ pointA, const XYZ pointB, ENU*output)
{
	double delta_xAB, delta_yAB, delta_zAB = 0;
	BLH BLHPointA;
	XYZ2BLH(pointA, &BLHPointA);
	delta_xAB = pointB.X - pointA.X;
	delta_yAB = pointB.Y - pointA.Y;
	delta_zAB = pointB.Z - pointA.Z;
	output->N = -sin(BLHPointA.B)*cos(BLHPointA.L)*delta_xAB - sin(BLHPointA.B)*sin(BLHPointA.L)*delta_yAB + cos(BLHPointA.B)*delta_zAB;
	output->E = -sin(BLHPointA.L)*delta_xAB + cos(BLHPointA.L)*delta_yAB;
	output->U = cos(BLHPointA.B)*cos(BLHPointA.L)*delta_xAB + cos(BLHPointA.B)*sin(BLHPointA.L)*delta_yAB + sin(BLHPointA.B)*delta_zAB;
	return true;
}

/*-------------------------空间直角坐标系到站心极轴坐标系;-------------------------*/
//以A为原点的B的站心极轴坐标
//公式来源:导航电子地图课程常用算法总结文件中;
/*--------------------------------------------------------------------------------*/
bool ENU2EAR(const ENU point, EAR *output)
{
	output->R = sqrt(point.N*point.N + point.E*point.E + point.U*point.U);
	output->A = atan2(point.E, point.N);
	output->E = asin(point.U / output->R);
	return true;
}

bool XYZ2EAR(const XYZ pointA, const XYZ pointB, EAR *output)
{
	ENU ENUPos;
	XYZ2ENU(pointA, pointB, &ENUPos);
	ENU2EAR(ENUPos, output);
	return true;
}
  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值