このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
衛星シナリオによる宇宙機姿勢プロファイルの分析
この例では、Simulink ® で衛星の軌道と姿勢の状態を伝播し、計算された軌道と姿勢プロファイルを衛星シナリオで視覚化する方法を示します。それは使用しています:
Aerospace Blockset ™ Spacecraft Dynamics ブロック
Aerospace Blockset 態度プロファイル ブロック
Aerospace Toolbox
satelliteScenario
オブジェクト
Spacecraft Dynamics ブロックは、数値積分を使用して宇宙機の並進および回転ダイナミクスをモデル化します。時間の経過に伴う 1 つまたは複数の宇宙機の位置、速度、姿勢、角速度を計算します。最も正確な結果を得るには、許容誤差設定が低い (1e-8 未満) 可変ステップ ソルバーを使用します。ミッションの要件に応じて、より大きな許容値を使用して速度を上げることができます。そうすると、ソリューションの精度に影響する可能性があります。
姿勢プロファイル ブロックは、衛星の指定された位置合わせ軸を指定されたターゲットに合わせる最短の四元数回転を返します。この例では、衛星はミッションの開始時に天底を向いており、次にターゲット 1 に合わせるように旋回し、再び天底を向いてからターゲット 2 に向きを変えます。両方のターゲットは地理的な場所として提供されます。
Aerospace Toolbox satelliteScenario
オブジェクトを使用すると、以前に生成され、タイムスタンプが付けられたエフェメリスと姿勢データを、時系列または時刻表オブジェクトとしてシナリオに読み込むことができます。データはシナリオ オブジェクト内で補間され、シナリオの時間ステップに合わせて調整されるため、Simulink モデルで生成されたデータを新しい satelliteScenario
オブジェクトまたは既存の satelliteScenario
オブジェクトに組み込むことができます。この例では、衛星の軌道と姿勢の状態が Spacecraft Dynamics ブロックで計算され、このデータを使用してアクセス分析のために新しい satelliteScenario
オブジェクトに衛星が追加されます。
モデル例を開く
サンプル モデルは、衛星がアマゾン熱帯雨林の地域を上空から飛行し、その地域の画像をキャプチャして森林破壊の傾向を追跡する地球観測ミッションを実行するように構成されています。衛星は、アクティブに画像を撮影していないときや、ノルウェーのスヴァールバル諸島の地上局にダウンリンクしていないときは、天底を向いています。
mission.mdl = "SpacecraftDynamicsCustomAttitudeExampleModel";
open_system(mission.mdl);
ミッションパラメータと衛星の初期条件を定義する
ミッションの開始日と期間を指定します。この例では、MATLAB ® 構造を使用してミッション データを整理します。これらの構造により、例の後半でのデータへのアクセスがより直感的になります。また、グローバル ベース ワークスペースの整理にも役立ちます。
mission.StartDate = datetime(2021,1,1,12,0,0); mission.Duration = hours(1.5);
Spacecraft Dynamics ブロックの衛星プロパティを設定する
衛星の初期軌道要素を指定します。
mission.Satellite.blk = mission.mdl + "/Spacecraft Dynamics"; mission.Satellite.SemiMajorAxis = 7.2e6; % meters mission.Satellite.Eccentricity = .05; mission.Satellite.Inclination = 70; % deg mission.Satellite.ArgOfPeriapsis = 0; % deg mission.Satellite.RAAN = 215; % deg mission.Satellite.TrueAnomaly = 200; % deg
衛星の初期姿勢状態を指定します。
mission.Satellite.q0 = [0.1509 0.4868 0.3031 -0.8052];
mission.Satellite.pqr = [0, 0, 0]; % deg/s
提供された初期条件と必要な伝播設定を使用して Spacecraft Dynamics ブロックを構成します。これらの値は、Simulink のプロパティ インスペクターから設定することもできます。
set_param(mission.Satellite.blk, ... "startDate", string(juliandate(mission.StartDate)), ... "stateFormatNum", "Orbital elements", ... "orbitType", "Keplerian", ... "semiMajorAxis", string(mission.Satellite.SemiMajorAxis), ... "eccentricity", string(mission.Satellite.Eccentricity), ... "inclination", string(mission.Satellite.Inclination), ... "raan", string(mission.Satellite.RAAN), ... "argPeriapsis", string(mission.Satellite.ArgOfPeriapsis), ... "trueAnomaly", string(mission.Satellite.TrueAnomaly)); set_param(mission.Satellite.blk, ... "attitudeFormat", "Quaternion", ... "attitudeFrame", "ICRF", ... "attitude", mat2str(mission.Satellite.q0), ... "attitudeRate", mat2str(mission.Satellite.pqr));
軌道伝播には EGM2008 球面調和重力モデルを使用します。
set_param(mission.Satellite.blk, ... "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(mission.Satellite.blk, "useGravGrad", "on");
ターゲットポインティング用にAttitude Profileブロックを構成する
Attitude Profile ブロックは 2 つの地上地点をターゲットにしており、1 つ目はブラジルのアマゾン熱帯雨林で森林破壊を観測する場所、2 つ目はノルウェーのスヴァールバル諸島の地上局に画像データをダウンリンクする場所です。ブロックは、以下に示すようにモデル内で事前構成されています。
ポインティング モード パラメータに「LatLonAlt でポイント」オプションが選択されています。z 軸は衛星の主な位置合わせベクトルとして使用されます。これは、衛星本体の z 軸が、シミュレーション全体を通じてブロックに渡される地理座標を指していることを意味します。LVLH フレームの y 軸は、移動方向の軌道に沿って指し示し、二次制約ベクトルとして定義されます。衛星本体の x 軸が二次位置合わせベクトルとして指定されます。これにより、主要な位置合わせを乱すことなく、ミッション全体を通じて衛星を可能な限り前方に向けることができます。
望ましい出力を生成するために Simulink モデルを設定する
set_param
を使用してモデルレベルのソルバー設定を適用します。最高のパフォーマンスと精度を得るには、可変ステップ ソルバーを使用します。最大ステップ サイズを、大きな時間ギャップのない出力データが得られる値に設定します。
set_param(mission.mdl, ... "SolverType", "Variable-step", ... "SolverName", "VariableStepAuto", ... "RelTol", "0.5e-5", ... "AbsTol", "1e-5", ... "MaxStep", "5", ... "MinStep", "auto", ... "StopTime", string(seconds(mission.Duration)));
モデル出力ポート データを timetable
オブジェクトの dataset
として保存します。
set_param(mission.mdl, ... "SaveOutput", "on", ... "OutputSaveName", "yout", ... "SaveFormat", "Dataset", ... "DatasetSignalFormat", "timetable");
モデルを実行して衛星エフェメリスと姿勢プロファイルを収集する
モデルをシミュレートします。この例では、Spacecraft Dynamics ブロックは、慣性 (ICRF/GCRF) 座標フレームで位置と速度の状態を出力します。
mission.SimOutput = sim(mission.mdl);
衛星シナリオの作成と視覚化
分析のために、衛星シナリオ オブジェクトを作成します。1 分のタイムステップを指定します。
scenario = satelliteScenario(mission.StartDate, ...
mission.StartDate + mission.Duration, 60);
ブラジルとスヴァールバル諸島の地上局として 2 つのターゲットを追加します。
gsNO = groundStation(scenario, 78, 21, Name="Svalbard, NO")
gsNO = GroundStation with properties: Name: Svalbard, NO ID: 1 Latitude: 78 degrees Longitude: 21 degrees Altitude: 0 meters MinElevationAngle: 0 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] CoordinateAxes: [1x1 matlabshared.satellitescenario.CoordinateAxes] MarkerColor: [1 0.4118 0.1608] MarkerSize: 6 ShowLabel: true LabelFontColor: [1 1 1] LabelFontSize: 15
gsAmazon = groundStation(scenario, -4.9, -66, Name="Amazon Rainforest")
gsAmazon = GroundStation with properties: Name: Amazon Rainforest ID: 2 Latitude: -4.9 degrees Longitude: -66 degrees Altitude: 0 meters MinElevationAngle: 0 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] CoordinateAxes: [1x1 matlabshared.satellitescenario.CoordinateAxes] MarkerColor: [1 0.4118 0.1608] MarkerSize: 6 ShowLabel: true LabelFontColor: [1 1 1] LabelFontSize: 15
観測衛星をシナリオに追加します。SimOutput
オブジェクト内の位置 timetable
データを更新して、余分なデータ ポイントを削除します。
mission.Satellite.Ephemeris = retime(mission.SimOutput.yout{1}.Values, ... seconds(uniquetol(mission.SimOutput.tout, .0001))); sat = satellite(scenario, mission.Satellite.Ephemeris, ... "CoordinateFrame", "inertial", "Name", "ObservationSat");
衛星に、搭載カメラを表す 35 度の半角を持つ円錐形センサーを追加します。シナリオ ビューアーで視野の視覚化を有効にします。視覚化を支援するために、センサーは衛星から 10 m 離れた +z 方向に取り付けられています。
snsr = conicalSensor(sat, MaxViewAngle=70, MountingLocation=[0 0 10]); fieldOfView(snsr);
円錐形センサーと 2 つの地上ステーション間のアクセスを追加します。
acNO = access(snsr, gsNO)
acNO = Access with properties: Sequence: [4 1] LineWidth: 3 LineColor: [0.3922 0.8314 0.0745]
acAmazon = access(snsr, gsAmazon)
acAmazon = Access with properties: Sequence: [4 2] LineWidth: 3 LineColor: [0.3922 0.8314 0.0745]
pointAt
メソッドを使用して、記録された姿勢 timetable
を衛星に関連付けます。パラメータ ExtrapolationMethod
は、timetable
範囲外でのポインティング動作を制御します。
mission.Satellite.AttitudeProfile = retime(mission.SimOutput.yout{3}.Values, ... seconds(uniquetol(mission.SimOutput.tout, .0001))); pointAt(sat, mission.Satellite.AttitudeProfile, ... "CoordinateFrame", "inertial", "Format", "quaternion", "ExtrapolationMethod", "nadir");
シナリオを表示して操作するには、Satellite Scenario Viewer を開きます。
viewer1 = satelliteScenarioViewer(scenario);
シナリオを開始するには、衛星を天底に向けます。アマゾンの熱帯雨林のターゲット 1 に近づくと、このターゲットを指向して追跡するために旋回します。
撮影セグメントが完了すると、衛星は再び天底を向きます。
衛星が北極の地上局の範囲内に入ると、この目標に向けるように旋回します。
カスタムジンバルステアリング
この例では、搭載カメラが衛星本体に固定されている MATLAB および Simulink の単純な地球観測衛星ミッションのカスタム姿勢データをインポートする方法を示します。もう 1 つの一般的なアプローチは、センサーをジンバルに固定し、宇宙機本体ではなくジンバルを操作してセンサーの方向を調整することです。上記のシナリオを変更して、センサーをジンバルに取り付け、ジンバルを操作して衛星の真下の領域を均一にスキャンします。
衛星を常に天底を指すようにリセットし、以前に提供されたカスタム姿勢プロファイルを上書きします。
delete(viewer1);
pointAt(sat, "nadir");
既存のセンサー オブジェクトを削除して衛星から削除し、同じプロパティを持つ新しいセンサーをジンバルに取り付けます。
delete(snsr); gim = gimbal(sat); snsr = conicalSensor(gim, MaxViewAngle=70, MountingLocation=[0 0 10]); fieldOfView(snsr);
ジンバル ステアリングの方位角と仰角を定義して、衛星の下の時間経過に伴うスイープ パターンをモデル化します。
gimbalSweep.Time = seconds(1:50:5000)'; gimbalSweep.Az = [... 45*ones(1,7),... 45:-5:-45,... -45*ones(1,13),... -45:5:45,... 45*ones(1,13),... 45:-5:-45,... -45*ones(1,13)]; gimbalSweep.Az(end-2:end) = []; gimbalSweep.Az = gimbalSweep.Az + 90; gimbalSweep.El = [... 0:-5:-30,... -30*ones(1,19),... -30:5:30,... 30*ones(1,19),... 30:-5:-30,... -30*ones(1,19),... -30:5:30]; gimbalSweep.El(end-2:end) = [];
コマンドされた方位角と仰角の値を時間の経過に沿ってプロットします。
figure(1) hold on; plot(gimbalSweep.Time', gimbalSweep.Az); plot(gimbalSweep.Time', gimbalSweep.El); hold off; legend(["Az (deg)", "El (deg)"]);
方位角と仰角を timetable
に保存します。
gimbalSweep.TT = timetable(gimbalSweep.Time, [gimbalSweep.Az', gimbalSweep.El']);
timetable
を使用してジンバルを操縦します。提供されたデータの範囲外のタイムステップでは、ジンバルはデフォルトの方向に戻ります。
pointAt(gim, gimbalSweep.TT);
更新されたシナリオを Satellite Scenario Viewer で表示します。
viewer2 = satelliteScenarioViewer(scenario);