Main Content

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

Orbit Propagator ブロックによるミッション分析

この例では、衛星と地上局間の見通しアクセス間隔を計算して視覚化する方法を示します。それは使用しています:

  • Aerospace Blockset ™ Orbit Propagator ブロック

  • Aerospace Toolbox satelliteScenario オブジェクト

  • Mapping Toolbox ™ worldmap および geoshow 関数

Aerospace Toolbox satelliteScenario オブジェクトを使用すると、ユーザーは 2 つの方法でシナリオに衛星とコンスタレーションを追加できます。まず、衛星の初期条件は、2 行要素ファイル (.tle) またはケプラーの軌道要素から定義でき、その後、ケプラーの問題、簡略化された一般摂動アルゴリズム SGP-4、または簡略化された深宇宙摂動アルゴリズム SDP-4 を使用して衛星を伝播できます。さらに、以前に生成されたタイムスタンプ付きのエフェメリス データを、時系列または時刻表オブジェクトからシナリオに追加できます。データはシナリオ オブジェクト内で補間され、シナリオの時間ステップに合わせて調整されます。この 2 番目のオプションは、Simulink ® モデルで生成されたデータを新しい衛星シナリオまたは既存の衛星シナリオに組み込むために使用できます。この例では、Aerospace Blockset Orbit Propagator ブロックを使用した数値積分を使用して衛星の軌道を伝播し、そのログに記録されたエフェメリス データをアクセス分析のために satelliteScenario オブジェクトにロードする方法を示します。

ミッションパラメータと衛星の初期条件を定義する

ミッションの開始日と期間を指定します。この例では、MATLAB ® 構造を使用してミッション データを整理します。これらの構造により、例の後半でのデータへのアクセスがより直感的になります。また、グローバル ベース ワークスペースの整理にも役立ちます。

mission.StartDate = datetime(2019, 1, 4, 12, 0, 0);
mission.Duration  = hours(6);

mission.StartDate の衛星のケプラー軌道要素を指定します。

mission.Satellite.SemiMajorAxis  = 6786233.13; % meters
mission.Satellite.Eccentricity   = 0.0010537;
mission.Satellite.Inclination    = 51.7519;    % deg
mission.Satellite.RAAN           = 95.2562;    % deg
mission.Satellite.ArgOfPeriapsis = 93.4872;    % deg
mission.Satellite.TrueAnomaly    = 202.9234;   % deg

以下にアクセス解析で使用する地上局の緯度と経度を指定します。

mission.GroundStation.Latitude  =42;  % deg
mission.GroundStation.Longitude =-71; % deg

軌道伝播モデルを開いて設定する

付属のSimulinkモデルを開きます。このモデルには、出力ポートに接続された Orbit Propagator ブロックが含まれています。Orbit Propagator ブロックはベクトル化をサポートします。これにより、Block Parameters ウィンドウで初期条件の配列を指定するか、set_param を使用することで、1 つのブロックで複数の衛星をモデル化できます。モデルには、ダッシュボード Callback button を含む「ミッション分析と視覚化」セクションも含まれています。このボタンをクリックすると、モデルが実行され、Orbit Propagator ブロックで定義された衛星またはコンスタレーションを含む新しい satelliteScenario オブジェクトがグローバル ベース ワークスペースに作成され、新しいシナリオの Satellite Scenario Viewer ウィンドウが開きます。このアクションのソース コードを表示するには、コールバック ボタンをダブルクリックします。「ミッション分析と視覚化」セクションは、新しい satelliteScenario オブジェクトを作成するためのスタンドアロン ワークフローであり、この例では使用されません。

mission.mdl = "OrbitPropagatorBlockExampleModel";
open_system(mission.mdl);
snapshotModel(mission.mdl);

Figure contains an axes object. The axes object contains an object of type image.

モデル内の Orbit Propagator ブロックへのパスを定義します。

mission.Satellite.blk = mission.mdl + "/Orbit Propagator";

衛星の初期条件を設定します。前のセクションで定義したケプラーの軌道要素セットを割り当てるには、set_param を使用します。

set_param(mission.Satellite.blk, ...
    "startDate",      num2str(juliandate(mission.StartDate)), ...
    "stateFormatNum", "Orbital elements", ...
    "orbitType",      "Keplerian", ...
    "semiMajorAxis",  "mission.Satellite.SemiMajorAxis", ...
    "eccentricity",   "mission.Satellite.Eccentricity", ...
    "inclination",    "mission.Satellite.Inclination", ...
    "raan",           "mission.Satellite.RAAN", ...
    "argPeriapsis",   "mission.Satellite.ArgOfPeriapsis", ...
    "trueAnomaly",    "mission.Satellite.TrueAnomaly");

ブロックの位置と速度の出力ポートを、国際地球基準フレーム (ITRF) である地球中心の地球固定フレームを使用するように設定します。

set_param(mission.Satellite.blk, ...
    "centralBody",  "Earth", ...
    "outportFrame", "Fixed-frame");

プロパゲーターを構成します。この例では、より高い位置精度を得るために数値プロパゲーターを使用します。数値プロパゲーターを使用して、万有引力の方程式 ("Pt-mass")、2 次ゾーン調和モデル ("Oblate Ellipsoid (J2)")、または球面調和モデル ("Spherical Harmonics") に基づいて地球の重力ポテンシャルをモデル化します。球面調和関数は最も正確ですが、速度と引き換えに正確さを犠牲にしています。精度を高めるために、慣性 (ICRF) 座標系と固定 (ITRF) 座標系間の内部変換で地球方向パラメータ (EOP) を使用するかどうかも指定できます。

set_param(mission.Satellite.blk, ...
    "propagator",   "Numerical (high precision)", ...
    "gravityModel", "Spherical Harmonics", ...
    "earthSH",      "EGM2008", ... % Earth spherical harmonic potential model
    "shDegree",     "120", ... % Spherical harmonic model degree and order
    "useEOPs",      "on", ... % Use EOP's in ECI to ECEF transformations
    "eopFile",      "aeroiersdata.mat"); % EOP data file

set_param を使用してモデルレベルのソルバー設定を適用します。数値プロパゲーターを使用する場合、最高のパフォーマンスと精度を得るには、可変ステップ ソルバーを使用します。

set_param(mission.mdl, ...
    "SolverType", "Variable-step", ...
    "SolverName", "VariableStepAuto", ...
    "RelTol",     "1e-6", ...
    "AbsTol",     "1e-7", ...
    "StopTime",   string(seconds(mission.Duration)));

モデル出力ポート データを時系列オブジェクトのデータセットとして保存します。

set_param(mission.mdl, ...
    "SaveOutput", "on", ...
    "OutputSaveName", "yout", ...
    "SaveFormat", "Dataset");

モデルを実行して衛星暦を収集する

モデルをシミュレートします。この例では、Orbit Propagator ブロックは、ECEF (ITRF) 座標フレームで位置と速度の状態を出力するように設定されています。

mission.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オブジェクトにロードする

この例の分析部分で使用する衛星シナリオ オブジェクトを作成します。

scenario = satelliteScenario;

satellite メソッドを使用して、衛星を ECEF 位置と速度の時系列として衛星シナリオに追加します。

sat = satellite(scenario, mission.Satellite.TimeseriesPosECEF, mission.Satellite.TimeseriesVelECEF, ...
    "CoordinateFrame", "ecef")
sat = 
  Satellite with properties:

                  Name:  Satellite
                    ID:  1
        ConicalSensors:  [1x0 matlabshared.satellitescenario.ConicalSensor]
               Gimbals:  [1x0 matlabshared.satellitescenario.Gimbal]
          Transmitters:  [1x0 satcom.satellitescenario.Transmitter]
             Receivers:  [1x0 satcom.satellitescenario.Receiver]
              Accesses:  [1x0 matlabshared.satellitescenario.Access]
               Eclipse:  [1x0 Aero.satellitescenario.Eclipse]
           GroundTrack:  [1x1 matlabshared.satellitescenario.GroundTrack]
                 Orbit:  [1x1 matlabshared.satellitescenario.Orbit]
        CoordinateAxes:  [1x1 matlabshared.satellitescenario.CoordinateAxes]
       OrbitPropagator:  ephemeris
           MarkerColor:  [0.059 1 1]
            MarkerSize:  6
             ShowLabel:  true
        LabelFontColor:  [1 1 1]
         LabelFontSize:  15
         Visual3DModel:  
    Visual3DModelScale:  1

disp(scenario)
  satelliteScenario with properties:

         StartTime: 04-Jan-2019 12:00:00
          StopTime: 04-Jan-2019 18:00:00
        SampleTime: 60
      AutoSimulate: 1
        Satellites: [1×1 matlabshared.satellitescenario.Satellite]
    GroundStations: [1×0 matlabshared.satellitescenario.GroundStation]
         Platforms: [1×0 matlabshared.satellitescenario.Platform]
           Viewers: [0×0 matlabshared.satellitescenario.Viewer]
          AutoShow: 1

各衛星の緯度 (度)、経度 (度)、高度 (m) をプレビューします。states メソッドを使用して、各シナリオのタイム ステップで衛星の状態を照会します。

for idx = numel(sat):-1:1
    % Retrieve states in geographic coordinates
    [llaData, ~, llaTimeStamps] = states(sat(idx), "CoordinateFrame","geographic");
    % Organize state data for each satellite in a separate timetable
    mission.Satellite.LLATable{idx} = timetable(llaTimeStamps', llaData(1,:)', llaData(2,:)', llaData(3,:)',...
        'VariableNames', {'Lat_deg','Lon_deg', 'Alt_m'});
    mission.Satellite.LLATable{idx}
end
ans=361×3 timetable
            Time            Lat_deg    Lon_deg      Alt_m   
    ____________________    _______    _______    __________

    04-Jan-2019 12:00:00    -44.804    120.35     4.2526e+05
    04-Jan-2019 12:01:00    -42.809     124.7     4.2232e+05
    04-Jan-2019 12:02:00    -40.638    128.75     4.2393e+05
    04-Jan-2019 12:03:00    -38.337     132.5     4.2008e+05
    04-Jan-2019 12:04:00    -35.867    136.05     4.2003e+05
    04-Jan-2019 12:05:00    -33.311    139.33     4.2031e+05
    04-Jan-2019 12:06:00    -30.682    142.38     4.1871e+05
    04-Jan-2019 12:07:00    -27.917    145.31     4.1982e+05
    04-Jan-2019 12:08:00    -25.104    148.06     4.1836e+05
    04-Jan-2019 12:09:00    -22.267    150.65     4.1404e+05
    04-Jan-2019 12:10:00    -19.321    153.17     4.1823e+05
    04-Jan-2019 12:11:00    -16.358    155.57     4.1717e+05
    04-Jan-2019 12:12:00    -13.397    157.88       4.07e+05
    04-Jan-2019 12:13:00     -10.36    160.15     4.1036e+05
    04-Jan-2019 12:14:00    -7.3121    162.37     4.1291e+05
    04-Jan-2019 12:15:00    -4.2727    164.54     4.0493e+05
      ⋮

clear llaData llaTimeStamps;

3D地球儀上に衛星の軌道を表示

地球(WGS84 楕円体)上の衛星軌道を表示するには、ヘルパー関数 plot3DTrajectory を使用します。

mission.ColorMap = lines(256); % Define colormap for satellite trajectories 
mission.ColorMap(1:3,:) = [];
plot3DTrajectories(mission.Satellite, mission.ColorMap);

地球全体および地域の2D地上トレースを表示

ヘルパー関数 plot2DTrajectories を使用して、地球全体の地上トレースを 2D 投影として表示します。

plot2DTrajectories(mission.Satellite, mission.GroundStation, mission.ColorMap);

地域の地上トレースを表示します。ドロップダウン メニューから関心領域を選択します。

plot2DTrajectories(mission.Satellite, mission.GroundStation, mission.ColorMap, "usa");

衛星から地上局へのアクセスを計算する(見通し線可視性)

groundStation メソッドを使用して、地上局を satelliteScenario オブジェクトに追加します。

gs = groundStation(scenario, mission.GroundStation.Latitude, mission.GroundStation.Longitude, ...
    "MinElevationAngle", 10, "Name", "Ground Station")
gs = 
  GroundStation with properties:

                 Name:  Ground Station
                   ID:  2
             Latitude:  42 degrees
            Longitude:  -71 degrees
             Altitude:  0 meters
    MinElevationAngle:  10 degrees
       ConicalSensors:  [1x0 matlabshared.satellitescenario.ConicalSensor]
              Gimbals:  [1x0 matlabshared.satellitescenario.Gimbal]
         Transmitters:  [1x0 satcom.satellitescenario.Transmitter]
            Receivers:  [1x0 satcom.satellitescenario.Receiver]
             Accesses:  [1x0 matlabshared.satellitescenario.Access]
              Eclipse:  [1x0 Aero.satellitescenario.Eclipse]
       CoordinateAxes:  [1x1 matlabshared.satellitescenario.CoordinateAxes]
          MarkerColor:  [1 0.4118 0.1608]
           MarkerSize:  6
            ShowLabel:  true
       LabelFontColor:  [1 1 1]
        LabelFontSize:  15

access メソッドを使用して、すべての個々の衛星と地上局間の視線アクセス解析を添付します。

ac = access(sat, gs);
ac.LineColor = "green";

アクセス間隔の表示

各衛星のアクセス間隔を timetable として表示します。アクセス分析の結果を操作するために、accessStatus および accessIntervals サテライト メソッドを使用します。

for idx = numel(ac):-1:1
    mission.Satellite.AccessStatus{idx} = accessStatus(ac(idx));
    mission.Satellite.AccessTable{idx} = accessIntervals(ac(idx));
    % Use local function addLLAToTimetable to add geographic positions and
    % closest approach range to the Access Intervals timetable
    mission.Satellite.AccessTable{idx} = addLLAToTimetable(...
        mission.Satellite.AccessTable{idx}, mission.Satellite.LLATable{idx}, mission.GroundStation);
end
clear idx;

ヘルパー関数 plotAccessIntervals を使用して、衛星軌道の 2D 地上トレースに重ねてアクセス間隔を表示します。

plotAccessIntervals(mission.Satellite, mission.GroundStation, mission.ColorMap);

mission.Satellite.AccessTable{:}
ans=2×8 table
      Source            Target         IntervalNumber         StartTime                EndTime           Duration    LLA (deg, deg, m)    ClosestApproach (m)
    ___________    ________________    ______________    ____________________    ____________________    ________    _________________    ___________________

    "Satellite"    "Ground Station"          1           04-Jan-2019 12:44:00    04-Jan-2019 12:50:00      360         {6×3 double}           4.9996e+05     
    "Satellite"    "Ground Station"          2           04-Jan-2019 14:21:00    04-Jan-2019 14:25:00      240         {4×3 double}           1.1021e+06     

さらなる分析

satelliteScenario オブジェクトを再生して、satelliteScenarioViewer ウィンドウでシナリオを開いてアニメーション化します。

play(scenario);
disp(scenario.Viewers(1))
  Viewer with properties:

                       Name: 'Satellite Scenario Viewer'
                   Position: [560 240 800 600]
                    Basemap: 'satellite'
    PlaybackSpeedMultiplier: 50
       CameraReferenceFrame: 'ECEF'
                CurrentTime: 04-Jan-2019 12:02:26
                ShowDetails: 1
                  Dimension: '3D'

ビューアーに衛星の地上軌跡を表示します。

groundTrack(sat);

参考文献

[1] ワーツ、ジェームズ・R、デイビッド・F・エヴェレット、ジェフリー・J・プシェル。宇宙ミッションエンジニアリング:新しいSmad 。カリフォルニア州ホーソーン:マイクロコズムプレス、2011年。印刷します。

参考

ブロック

オブジェクト