轨道传播器块的任务分析
这个例子展示了如何计算和可视化卫星和地面站之间的视距访问间隔。它使用:
航空航天Blockset
轨道传播算子
块航空航天工具箱
satelliteScenario
对象映射的工具箱
worldmap
而且geoshow
功能
航空航天工具箱satelliteScenario
对象允许用户以两种方式向场景添加卫星和星座。首先,可以从两个线元文件(.tle)或开普勒轨道元素中定义卫星初始条件,然后使用开普勒问题、简化的一般摄动算法SGP-4或简化的深空摄动算法SDP-4对卫星进行传播。此外,以前生成的带有时间戳的蜉蝣数据可以从时间序列或时间表对象添加到场景中。数据被插入到场景对象中,以与场景时间步骤保持一致。第二种方法可用于将Simulink模型中生成的数据合并到新的或现有的卫星场景中。这个例子展示了如何使用Aerospace Blockset的数值积分来传播卫星轨迹轨道传播算子
块,并将记录的蜉蝣数据加载到satelliteScenario
对象,用于访问分析。
定义任务参数和卫星初始条件
指定任务的开始日期和持续时间。本例使用MATLAB结构组织任务数据。这些结构使后面示例中的数据访问更加直观。它们还帮助整理全局基工作区。
的使命。StartDate = datetime(2019, 1,4,12, 0,0);的使命。时间=小时(6);
指定卫星的开普勒轨道元素的使命。StartDate可以
.
mission.Satellite.SemiMajorAxis = 6786233.13;%米mission.Satellite.Eccentricity = 0.0010537;mission.Satellite.Inclination = 51.7519;%度mission.Satellite.RAAN = 95.2562;%度mission.Satellite.ArgOfPeriapsis = 93.4872;%度mission.Satellite.TrueAnomaly = 202.9234;%度
指定在下面的访问分析中使用的地面站的纬度和经度。
mission.GroundStation.Latitude =42;%度mission.GroundStation.Longitude =-71年;%度
打开并配置轨道传播模型
打开包含的Simulink模型。此模型包含轨道传播算子
连接到输出端口的块。的轨道传播算子
块支持向量化。的初始条件数组,从而允许您在单个块中建模多个卫星块的参数
窗口或使用set_param
.该模型还包括“任务分析和可视化”部分,其中包含一个仪表板回调按钮
.控件中定义的卫星或星座时,此按钮将运行模型,在全局基本工作区中创建一个新的satellite escenario对象轨道传播算子
块,并为新场景打开卫星场景查看器窗口。要查看此操作的源代码,请双击回调按钮。“任务分析和可视化”部分是创建一个新的satellite escenario对象的独立工作流,不作为本示例的一部分使用。
的使命。mdl =“OrbitPropagatorBlockExampleModel”;open_system (mission.mdl);snapshotModel (mission.mdl);
定义的路径轨道传播算子
块。
mission.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。
set_param (mission.Satellite.blk...“centralBody”,“地球”,...“outportFrame”,“固定框架”);
配置宣传者。本例使用数值传播器以获得更高的位置精度。利用数值传播器利用万有引力方程(“Pt-mass”
),二阶纬向谐波模型(“扁椭球(J2)”
),或球面调和模型(“球函数”
).球面谐波是最精确的,但用精度换速度。为了提高精确度,还可以指定在惯性(ICRF)和固定(ITRF)坐标系之间的内部转换中是否使用地球方向参数(EOP)。
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”,“数据集”);
运行模型并收集卫星星历表
模拟模型。在本例中,轨道传播算子
块设置为在ECEF (ITRF)坐标帧中输出位置和速度状态。
的使命。SimOutput = sim (mission.mdl);
从模型输出数据结构中提取位置和速度数据。
mission.Satellite.TimeseriesPosECEF = mission.SimOutput.yout {1} . values;mission.Satellite.TimeseriesVelECEF = mission.SimOutput.yout {2} . values;
在时间序列对象中从任务设置开始数据。
mission.Satellite.TimeseriesPosECEF.TimeInfo.StartDate = mission.StartDate;mission.Satellite.TimeseriesVelECEF.TimeInfo.StartDate = mission.StartDate;
加载卫星蜉蝣到satelliteScenario
对象
创建一个附属场景对象,以便在本示例的分析部分使用。
场景= satelliteScenario;
将卫星添加到卫星场景中,作为ECEF位置和速度时间序列卫星
方法。
sat =卫星(场景,任务。TimeseriesPosECEF mission.Satellite.TimeseriesVelECEF,...“CoordinateFrame”,“ecef”)
名称:卫星ID: 1 ConicalSensors: [1x0 matlabshare . satitescenario .][1x0 matlabshare .satellite escenario.]万向节]发射机:[1x0 satcom.satellite escenario.]发射机]接收器:[1x0卫星。接收端]访问:[1x0 matlabshare .satellite escenario.]访问]GroundTrack: [1x1 matlabshare .satellite escenario.]轨道:[1x1 matlabshare .satellite escenario.]Orbit] orbitpropator: ephemeris MarkerColor: [0.059 1] markkersize: 6 ShowLabel: true LabelFontColor: [1,1 1] LabelFontSize: 15
disp(场景)
StartTime: 04- january -2019 12:00:00 StopTime: 04- january -2019 18:00:00 SampleTime: 60 AutoSimulate: 1 satellite: [1×1 matlabshare . satitescenario .]卫星]地面站:[1×0 matlabshared. Satellite escenario.]观众:[0×0 matlabshare .satellite itescenario.]查看器]汽车展:1
预览每个卫星的纬度(deg),经度(deg)和高度(m)。使用州
方法查询每个场景时间步上的卫星状态。
为idx =元素个数(坐):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的时间表时间Lat_deg Lon_deg Alt_m ____________________ ______________ __________ 04-一月-2019 12:00:00 -44.804 120.35 4.2526e+05 04-一月-2019 12:02:00 -40.626 124.73 4.2229e+05 04-一月-2019 12:03:00 -38.322 132.53 4.2005e+05 04-一月-2019 12:04:00 -35.848 136.07 4.2004e+05 04-一月-2019 12:05:00 -33.289 139.35 4.203e+05 04-一月-2019 12:06:00 -30.655 142.41 4.187e+05 04-一月-2019 12:07:00 -27.884 145.34 4.1982e+05 04-一月-2019 12:08:00 -25.069 148.09 4.1831e+0504- 1 -2019 12:09:00 -22.234 150.68 4.1404e+05 04- 1 -2019 12:11:00 -19.297 153.19 4.1829e+05 04- 1 -2019 12:12:00 -13.388 157.89 4.1713e+05 04- 1 -2019 12:13:00 -10.354 160.15 4.104e+05 04- 1 -2019 12:14:00 -7.3077 162.37 4.1291e+05 04- 1 -2019 12:15:00 -4.2622 164.55 4.0487e+05
清晰的llaDatallaTimeStamps;
在3D地球仪上显示卫星轨迹
要显示卫星在地球(WGS84椭球体)上的轨迹,使用助手函数plot3DTrajectory
.
的使命。ColorMap =线(256);为卫星轨迹定义颜色图: mission.ColorMap (1:3) = [];plot3DTrajectories(任务。卫星的使命。ColorMap);
显示全球和区域2D地面痕迹
使用助手函数将全局地面轨迹作为2D投影查看plot2DTrajectories
:
plot2DTrajectories(任务。卫星的使命。GroundStation mission.ColorMap);
查看区域地面轨迹。从下拉菜单中选择感兴趣的区域:
plot2DTrajectories(任务。卫星的使命。GroundStation,使命。ColorMap,“美国”);
计算卫星到地面站访问(视距能见度)
方法将地面站添加到卫星场景对象中groundStation
方法。
gs =地面站(场景,任务。mission.GroundStation.Longitude纬度,...“MinElevationAngle”10“名称”,“地面站”)
名称:地面站ID: 2纬度:42度经度:-71度海拔:0米MinElevationAngle: 10度ConicalSensors: [1x0 matlab共享. satitescenario . gs =属性:[1x0 matlabshare .satellite escenario.]万向节]发射机:[1x0 satcom.satellite escenario.]发射机]接收器:[1x0卫星。接收端]访问:[1x0 matlabshare .satellite escenario.]Access] MarkerColor: [1 0.4118 0.1608] MarkerSize: 6 ShowLabel: true LabelFontColor: [1 11] LabelFontSize: 15
附加所有个别卫星与地面站之间的视距访问分析访问
方法。
Ac = access(sat, gs);ac.LineColor =“绿色”;
显示访问时间间隔
将每个卫星的访问间隔显示为时间表
.使用accessStatus
而且accessIntervals
与访问分析结果交互的卫星方法。
为idx = numel(ac):-1:1任务.卫星。AccessStatus {idx} = AccessStatus (ac (idx));mission.Satellite。AccessTable {idx} = accessIntervals (ac (idx));使用本地函数addllato时间表添加地理位置和%接近访问间隔时间表的最接近范围mission.Satellite。AccessTable {idx} = addLLAToTimetable (...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))
名称:'Satellite Scenario Viewer'位置:[560 300 800 600]Basemap: 'Satellite ' PlaybackSpeedMultiplier: 50 CameraReferenceFrame: 'ECEF' CurrentTime: 04-01-2019 12:00:32 ShowDetails: 1 Dimension: '3D'
在查看器中显示卫星地面轨迹。
groundTrack(坐);
参考文献
[1]维尔兹,詹姆斯R,大卫F.埃弗雷特,杰弗瑞J.普切尔。太空任务工程:新的Smad.加州霍桑:微观世界出版社,2011年。打印。