轨道传播单元的任务分析
这个例子展示了如何计算和可视化卫星和地面站之间的视距访问间隔。它使用:
航空航天Blockset
轨道传播算子
块航空航天工具箱
satelliteScenario
对象映射的工具箱
worldmap
而且geoshow
功能
航天工具箱satelliteScenario
Object允许用户以两种方式将卫星和星座添加到场景中。首先,卫星初始条件可以从双线元文件(.tle)或开普勒轨道元中定义,然后可以使用开普勒问题、简化一般摄动算法SGP-4或简化深空摄动算法SDP-4传播卫星。此外,以前生成的带时间戳的蜉蝣数据可以从时间序列或时间表对象添加到场景中。在场景对象中插入数据以与场景时间步骤保持一致。第二种方法可用于将Simulink模型中生成的数据合并到新的或现有的卫星场景中。这个例子展示了如何使用数值积分与航天块集传播卫星轨迹轨道传播算子
块,并将记录的星历表数据加载到satelliteScenario
对象进行访问分析。
定义任务参数和卫星初始条件
指定任务的开始日期和持续时间。本例使用MATLAB结构来组织任务数据。这些结构使得稍后在示例中访问数据更加直观。它们还帮助整理全局基本工作区。
的使命。StartDate = datetime(2019, 1,4,12,0,0);的使命。持续时间=小时(6);
指定卫星的开普勒轨道元素的使命。StartDate可以
.
mission. satellite . semmajoraxis = 6786233.13;%米mission. satellite .偏心= 0.0010537;任务. satellite .倾角= 51.7519;%度mission.Satellite.RAAN = 95.2562;%度mission.Satellite.ArgOfPeriapsis = 93.4872;%度task . satellite . trueanomaly = 202.9234;%度
指定要在下面的访问分析中使用的地面站的纬度和经度。
mission.GroundStation.Latitude =42;%度mission.GroundStation.Longitude =-71年;%度
打开并配置轨道传播模型
打开包含的Simulink模型。此模型包含一个轨道传播算子
连接到输出端口的块。的轨道传播算子
Block支持向量化。方法中指定初始条件数组,从而允许您在单个块中建模多个卫星块的参数
窗口或使用set_param
.该模型还包括“任务分析和可视化”部分,其中包含一个仪表板回调按钮
.类中定义的卫星或星座的全局基本工作空间中创建一个新的卫星场景对象轨道传播算子
块,并为新场景打开一个卫星场景查看器窗口。若要查看此操作的源代码,请双击回调按钮。“任务分析和可视化”部分是一个独立的工作流,用于创建一个新的satellite escenario对象,不用作本示例的一部分。
的使命。mdl =“OrbitPropagatorBlockExampleModel”;open_system (mission.mdl);snapshotModel (mission.mdl);
属性的路径轨道传播算子
块在模型中。
task . satellite .blk =任务。mdl +“/轨道传播算子”;
设置卫星初始条件。要指定前一节中定义的开普勒轨道元素集,请使用set_param
.
set_param (mission.Satellite.blk...“startDate可以”num2str (juliandate (mission.StartDate)),...“stateFormatNum”,“轨道要素”,...“orbitType”,“开普勒”,...“semiMajorAxis”,“mission.Satellite.SemiMajorAxis”,...“偏心”,“mission.Satellite.Eccentricity”,...“倾向”,“mission.Satellite.Inclination”,...“raan”,“mission.Satellite.RAAN”,...“argPeriapsis”,“mission.Satellite.ArgOfPeriapsis”,...“trueAnomaly”,“mission.Satellite.TrueAnomaly”);
设置块的位置和速度输出端口,使用地心固定坐标系,即国际地面参考系ITRF (International Terrestrial Reference frame)。
set_param (mission.Satellite.blk...“centralBody”,“地球”,...“outportFrame”,“固定框架”);
配置传播程序。本例使用数值传播器以获得更高的位置精度。使用数值传播器来模拟地球引力势,使用万有引力方程(“Pt-mass”
)、二阶纬向谐波模型(扁椭球体(J2)
),或球面谐波模型(“球函数”
).球面谐波是最精确的,但要用精度来换取速度。为了提高精度,您还可以指定是否在惯性(ICRF)和固定(ITRF)坐标系之间的内部转换中使用地球方向参数(EOP’s)。
set_param (mission.Satellite.blk...“传播算子”,“数值(高精度)”,...“gravityModel”,“球函数”,...“earthSH”,“EGM2008”,...地球球谐势模型“shDegree”,“120”,...球谐模型的阶和度“useEOPs”,“上”,...在ECI到ECEF转换中使用EOP“eopFile”,“aeroiersdata.mat”);% EOP数据文件
应用模型级求解器设置使用set_param
.在使用数值传播器时,为了获得最佳性能和精度,请使用变步长求解器。
set_param (mission.mdl...“SolverType”,“变步”,...“SolverName”,“VariableStepAuto”,...“RelTol”,“1 e-6”,...“AbsTol”,“1 e -”,...“StopTime”字符串(秒(mission.Duration)));
将模型输出端口数据保存为时间序列对象数据集。
set_param (mission.mdl...“SaveOutput”,“上”,...“OutputSaveName”,“你”,...“SaveFormat”,“数据集”);
运行模型并收集卫星星历表
模拟模型。在本例中,轨道传播算子
block被设置为输出ECEF (ITRF)坐标系中的位置和速度状态。
的使命。SimOutput = sim(task .mdl);
从模型输出数据结构中提取位置和速度数据。
task . satellite . timeseriesposecef = task . simoutput .yout{1}.Values;task . satellite . timeseriesvelecef = task . simoutput .yout{2}.Values;
在时间序列对象中设置任务的开始数据。
task . satellite . timeseriesposecef . timeinfo . startdate = task . startdate;task . satellite . timeseriesvelecef . timeinfo . startdate = task . startdate;
加载卫星星历表到satelliteScenario
对象
创建一个在本例的分析部分使用的附属场景对象。
scenario = satellite;
方法将卫星作为ECEF位置和速度时间序列添加到卫星场景中卫星
方法。
卫星(场景,任务,卫星。TimeseriesPosECEF mission.Satellite.TimeseriesVelECEF,...“CoordinateFrame”,“ecef”)
sat =卫星属性:名称:卫星ID: 1 ConicalSensors: [1x0 matlabshared. Satellite esitario . properties]ConicalSensor] Gimbals: [1x0 matlabshared.satellitescenario.]发射机:[1x0 satcom.satellitescenario.]发射器]接收器:[1x0 satcom.satellitescenario.]接收端:[1x0 matlabshared.satellitescenario.]访问]GroundTrack: [1x1 matlabshared.satellitescenario.]轨道:[1x1 matlabshared.satellite场景。Orbit] OrbitPropagator: ephemeris MarkerColor: [0.059 1 1] MarkerSize: 6 ShowLabel: true LabelFontColor: [1 1 1 1] LabelFontSize: 15
disp(场景)
带属性的卫星场景:StartTime: 04- january -2019 12:00:00 StopTime: 04- january -2019 18:00:00 SampleTime: 60自动模拟:1卫星:[1×1 matlabshared.satellite场景。卫星]地面站:[1×0 matlabshared.satellitescenario.]地面站]观众:[0×0 matlabshared.satellite escenario。自动显示:1
预览每个卫星的纬度(度),经度(度)和高度(米)。使用州
方法在每个场景时间步骤中查询卫星状态。
为Idx = number (sat):-1:1检索地理坐标中的状态[llaData, ~, llaTimeStamps] = states(sat(idx),“CoordinateFrame”,“地理”);在单独的时间表中组织每个卫星的状态数据mission.Satellite.LLATable {idx}= timetable(llaTimeStamps', llaData(1,:)', llaData(2,:)', llaData(3,:)',...“VariableNames”,{“Lat_deg”,“Lon_deg”,“Alt_m”});mission.Satellite.LLATable {idx}结束
ans =361×3的时间表Time Lat_deg Lon_deg Alt_m ____________________ ______________ __________ 04- 01 -2019 12:00:00 -44.804 120.35 4.2526e+05 04- 01 -2019 12:02:00 - 40.697 124.73 4.2229e+05 04- 01 -2019 12:03:00 -35.848 136.07 4.2005e+05 04- 01 -2019 12:05:00 -35.848 136.07 4.2004e+05 04- 01 -2019 12:05:00 -30.655 149.35 4.203e+05 04- 01 -2019 12:07:00 -27.884 145.34 4.1982e+05 04- 01 -2019 12:07:00 -27.884 145.34 4.1982e+05 04- 01 -2019 12:08:00 -25.069 148.09 4.1831e+0504- 01 -2019 12:09:00 -22.234 150.68 4.1404e+05 04- 01 -2019 12:11:00 -16.343 155.58 4.1713e+05 04- 01 -2019 12:12:00 -13.388 157.89 4.07e+05 04- 01 -2019 12:13:00 -10.354 160.15 4.104e+05 04- 01 -2019 12:14:00 -7.3077 162.37 4.1291e+05 04- 01 -2019 12:15:00 -4.2622 164.55 4.0487e+05“。
清晰的llaDatallaTimeStamps;
在3D地球仪上显示卫星轨迹
要显示卫星在地球上的轨迹(WGS84椭球),使用辅助函数plot3DTrajectory
.
的使命。ColorMap = lines(256);为卫星轨迹定义颜色图task . colormap (1:3,:) = [];plot3DTrajectories(任务。卫星的使命。ColorMap);
显示全球和区域2D地面痕迹
使用辅助函数将全局地面轨迹作为2D投影查看plot2DTrajectories
:
plot2DTrajectories(任务。卫星的使命。GroundStation mission.ColorMap);
查看区域地面轨迹。从下拉菜单中选择感兴趣的区域:
plot2DTrajectories(任务。卫星的使命。GroundStation,使命。ColorMap,“美国”);
计算卫星到地面站接入(视距能见度)
属性将地面站添加到卫星场景对象groundStation
方法。
gs =地面站(场景,任务。地面站。mission.GroundStation.Longitude纬度,...“MinElevationAngle”10“名称”,“地面站”)
gs =地面站,具有属性:名称:地面站ID: 2纬度:42度经度:-71度海拔高度:0米矿井仰角:10度圆锥传感器:[1x0 matlab共享.satellite场景。ConicalSensor] Gimbals: [1x0 matlabshared.satellitescenario.]发射机:[1x0 satcom.satellitescenario.]发射器]接收器:[1x0 satcom.satellitescenario.]接收端:[1x0 matlabshared.satellitescenario.]Access] MarkerColor: [1 0.4118 0.1608] MarkerSize: 6 ShowLabel: true LabelFontColor: [1 11 1] LabelFontSize: 15
在所有单独的卫星和地面站之间附加视距访问分析访问
方法。
Ac = access(sat, gs);ac.LineColor =“绿色”;
显示访问间隔
显示每个卫星的访问间隔为时间表
.使用accessStatus
而且accessIntervals
卫星方法与访问分析结果相互作用。
为idx =数字(ac):-1:1任务。卫星。AccessStatus{idx} = AccessStatus (ac(idx));mission.Satellite。AccessTable{idx} = accessinterval (ac(idx));使用本地函数addllatotimeline添加地理位置和%最接近访问间隔时间表的接近范围mission.Satellite。AccessTable{idx} = addllatotimestamp (...mission.Satellite。mission.Satellite AccessTable {idx}。LLATable {idx}, mission.GroundStation);结束清晰的idx;
使用辅助功能显示覆盖卫星轨迹的2D地面轨迹的访问间隔plotAccessIntervals
.
plotAccessIntervals(任务。卫星的使命。GroundStation mission.ColorMap);
mission.Satellite.AccessTable {:}
ans =2×8表源目标IntervalNumber开始时间EndTime LLA持续时间(度,度,m) ClosestApproach (m ) ___________ ________________ ______________ ____________________ ____________________ ________ _________________ ___________________ " "卫星地面站“1 04 - 1月- 2019年12:44:00 04 - 360年1月- 2019年12:50:00{6×3双}5.0087 e + 05”卫星地面站”2 04 - 1月- 2019年14:21:00 04 - 240年1月- 2019年14:25:00{4×3双}1.102 e + 06
进一步分析
玩satelliteScenario
对象中打开场景并使其动画化satelliteScenarioViewer
窗口。
玩(场景);disp (scenario.Viewers (1))
带有属性的查看器:名称:“卫星场景查看器”位置:[560 300 800 600]基准地图:“卫星”播放速度倍增器:50 CameraReferenceFrame:“ECEF”CurrentTime: 04- 01 -2019 12:00:32 ShowDetails: 1维度:“3D”
在查看器中显示卫星地面轨道。
groundTrack(坐);
参考文献
[1]韦茨、詹姆斯·R、大卫·f·埃弗雷特和杰弗里·j·普切尔。太空任务工程:新Smad.加州霍桑:微观世界出版社,2011年。打印。