在进行MATLAB与STK联合仿真的过程中,经常会涉及到坐标系之间的转换,特别是空间目标在ECI坐标系以及天基传感器局部LVLH坐标的转换。获取实时的纬度幅角,能够得到天基传感器局部LVLH坐标系的建立位置,从而得到空间目标在ECI坐标系的坐标到天基传感器局部LVLH坐标系下的量测信息。下面主要讲《STK获取空间目标的实时纬度幅角方法》。
1. STK Report可以直接输出纬度幅角。
2. Report输出经典轨道根数,然后用近地点幅角+真近点角。
方法一:
一、在Report属性设置,找到Classical Elements——J2000——Arg of Latitude。
二、然后生成报告就有了。
注:参数设置时,轨道坐标则选你的参数对应的坐标系。
方法二:
一、在报告中直接找Classical Orbit Elements
二、得到报告
另外,本文附上坐标系转换的部分代码,能够实现多部天基传感器的量测匹配。实验结果如下:
转换函数定义代码如下:
如有代码问题,请加V(UltraNextYJ)交流。
%% 函数定义
function [Xk_rV] = fun_Coordinate_ECI2Measurement(Xk, Inf_orbit, Nk) % 根据轨道信息进行坐标的转换
transform_model = 1;
% transform_model = 1; ECI转LVLH转VVLH(STK的观测数据是定义在VVLH坐标系下)
% transform_model = 2; ECI转LVLH转目标坐标系转雷达阵面坐标系再转测量坐标系
%% 通过轨道信息,计算传感器在ECI坐标系下的实时位置
% 传感器在参考轨道坐标系中的实时位置
orbit_a = Inf_orbit.orbit_a;
orbit_omega = Inf_orbit.orbit_omega;
orbit_i = Inf_orbit.orbit_i;
orbit_v = Inf_orbit.orbit_v; % 纬度幅角是实时角度
% 计算纬度幅角的变化,用于得到时变的LVLH坐标系
% 定义地球质量和引力常数
M_earth = 5.972e24; % 地球质量,单位:千克
Gravitation = 6.674e-11; % 引力常数,单位:米^3/(千克·秒^2)
T_sate = 2*pi*sqrt(orbit_a^3/Gravitation/M_earth);
delta_orbit_v = Nk / T_sate * 360; % 卫星转一圈对应360度
disp(['传感器的运行阶段对应的纬度幅角变化值为:', num2str(delta_orbit_v), '度']);
X = [orbit_a, 0, 0]'; % 传感器在轨道参考坐标系的坐标
% 传感器在ECI坐标系的坐标(第三轨道坐标系(平移LVLH坐标系)逆变换到ECI)
X_ECI = DCM_Z(-orbit_omega) * DCM_X(-orbit_i) * DCM_Z(-(orbit_v+delta_orbit_v)) * X;
% X_ECI = 1e3 * [6612.091990,595.932077,-722.923417]'; % STK中的实时报告
%% 进行坐标转换
X_Target_ECI = Xk;
% 将ECI坐标转换到 ————> LVLH坐标
% 第一步:地心惯性ECI坐标系经过平移得到星基惯性坐标系
Xk_LVLH_temp = X_Target_ECI - X_ECI;
% 第二步:星基惯性坐标系三次旋转得到星基LVLH坐标系
Xk_LVLH = DCM_Z(orbit_v+delta_orbit_v) * DCM_X(orbit_i) * DCM_Z(orbit_omega) *Xk_LVLH_temp;
% 将LVLH坐标转换到 ————> 卫星本体坐标系oXbYbZb(和VVLH重合)
b_Z = 90; % LVLH坐标转换到卫星本体坐标系oXbYbZb的第一步:绕Z轴逆时针旋转
b_X = -90; % LVLH坐标转换到卫星本体坐标系oXbYbZb的第二步:绕X轴顺时针旋转
Xk_oXbYbZb = DCM_X(b_X) * DCM_Z(b_Z) * Xk_LVLH;
% 将卫星本体坐标系oXbYbZb转换到 ————> 量测坐标系oXaYaZa
a_X = 180; % 转换过程绕X轴旋转180度即可
Xk_oXaYaZa = DCM_X(a_X) * Xk_oXbYbZb;
if transform_model == 1
Xk_temp = Xk_oXbYbZb; % oXbYbZb与VVLH重合
elseif transform_model == 2
Xk_temp = Xk_oXaYaZa;
end
% 得到方位角
theta_SBR = atan2(Xk_temp(2),Xk_temp(1))/pi*180;
if theta_SBR < 0 % 将方位角控制在[0,360]度
theta_SBR = theta_SBR + 360;
end
% 得到俯仰角
if transform_model == 1
phi_SBR = -atan2(Xk_temp(3),sqrt(Xk_temp(1)^2 + Xk_temp(2)^2))/pi*180;
elseif transform_model == 2
phi_SBR = atan2(Xk_temp(3),sqrt(Xk_temp(1)^2 + Xk_temp(2)^2))/pi*180;
end
Xk_rV = [theta_SBR, phi_SBR]';
end