メインコンテンツ

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

宇宙でのランデブーとドッキング

この例では、軌道上の宇宙機が別の宇宙機とランデブーしてドッキングできるようにするための操作を計画するために必要なワークフローを示します。ランデブー操作は、2 機の宇宙機が同じ軌道に到着し、互いに非常に近い距離から接近する一連の軌道操作で構成されます。ターゲット宇宙機は受動的です。チェイサー宇宙機はターゲットとランデブーするための操作を実行します。ドッキング操作は、追跡機がターゲットにさらに近づいてドッキングする操作で構成されます。この例では、Optimization Toolbox ™ を使用してランデブー操作が計画されます。ドッキング操作は、チェイサーの各ボディ軸に沿って並進反応スラスターによって提供される必要がある力を制御する閉ループ コントローラーによって実行されます。ミッションはSimulink® ソフトウェアでシミュレートされ、衛星シナリオで視覚化されます。この例では、次を使用します。

  • Aerospace Blockset ™ Spacecraft Dynamics ブロック

  • Aerospace Blockset Attitude Profile ブロック

  • Aerospace Toolbox ™ satelliteScenario オブジェクト

  • Optimization Toolbox ™ fsolve 関数

  • Optimization Toolbox ™ fmincon 関数

  • Stateflow ™ Chart ブロック

ミッション概要

このミッションは、ランデブーとドッキングの 2 つのフェーズで構成されます。

ランデブーフェーズ

ランデブー段階は、追跡者がターゲットに非常に近い距離まで近づくことを可能にする一連の操作で構成されます。ランデブーを開始する前に、追跡機とターゲットの初期軌道が同じ平面上にある必要があります。この調整は通常、チェイサーが正しい軌道面に挿入されるようにチェイサーの打ち上げのタイミングを計ることによって行われます。それ以外の場合は、追跡機と目標軌道面の交差点で平面変更操作を実行する必要があり、通常、かなりのデルタ v コストが発生します。軌道面が揃っていると仮定すると、追跡機を位相軌道に配置することでランデブーを実行できます。位相軌道は目標軌道に近づき(数キロメートル程度)、軌道周期がわずかに異なります。軌道周期の違いにより、追跡機とターゲットは各軌道の後に互いに近づきます。位相軌道への投入のタイミングが正確であれば、数回の軌道を回った後、追跡機とターゲットの両方がそれぞれの軌道の最も近い地点に同時に到着します。この時点で、待ち合わせは完了です。

このアニメーションはランデブーシーケンスを示しています。

rendezvousIllus.gif

  • 追跡機は当初、ターゲットに比べて低い軌道上にあります。

  • 最初の操作により、追跡機は位相軌道に配置されます。数回の周回後、追跡機とターゲットは互いに接近します。

  • 追跡者とターゲットが最も接近すると、追跡者は相対速度を打ち消すために 2 回目の操作を実行します。

ランデブー条件では、追跡機をターゲットの半径位置ベクトル r に沿ってターゲットの 1 km 下に配置する必要があります。さらに、2 つの宇宙機間の相対速度は 0 m/s でなければなりません。ここからドッキング作業が始まります。図では、v はターゲットの ICRF 速度です。ランデブーが達成された瞬間、追跡機の速度も v に等しくなければなりません。

rendezvous.png

ドッキングフェーズ

ランデブーが完了すると、ドッキング操作が 3 つのフェーズで開始されます。

  • 初期アプローチ:初期アプローチまたは R バー アプローチでは、追跡機は、約 0.3 m/s の並進スラスタを使用して、ターゲットの半径位置ベクトル (r) に沿ってターゲットに向かって移動する必要があります。このフェーズでは、相対距離は 100 m に短縮されます。R バー アプローチでは、r に垂直なターゲットに対するチェイサーの相対速度成分を 0 に維持する必要があります。追跡機が下からターゲットに近づくと、軌道角速度が低下します。チェイサーは、r に垂直な並進スラスタを発射することでこれを補正します。スラスタが故障すると、追跡機はターゲットより遅れ始めます。この遅れは、チェイサースラスタが故障した場合にターゲットとの衝突の可能性を排除するため、R バーアプローチの固有の安全機能です。

initialApproach.png

  • 転置:追跡機はドッキング姿勢に方向転換し、ターゲットの周りを移動して、ターゲットのドッキング ポートの約 20 メートル前方に位置します。ターゲットの姿勢が、転置フェーズ中に初期位置と最終位置の間の直接経路で衝突を引き起こすような場合、追跡機はターゲットの周りを移動します。この操作は、ターゲットが追跡機の本体 z 軸に沿って 20 m オフセットされるように実行されます。チェイサーの本体 y 軸の周りのオフセットは常に 0 m になるように指示されます。その結果、ドッキング姿勢にあるチェイサーのボディ座標系の x-z 平面上で転置操作が行われます。

transposition.png

  • 最終アプローチ:追跡機は0.3m/sの速度でターゲットに接近します。ターゲットまでの距離が 10 m に達すると、追跡装置はそれぞれのドッキング ポートが互いに接触するまで接近速度を 0.03 m/s に減速します。

finalApproach.png

ミッション設定

ミッションは2022年8月8日午前12時(UTC)に開始されます。

epochYear = 2022;
epochMonth = 8;
epochDay = 6;
epochHour = 0;
epochMinute = 0;
epochSecond = 0;
epoch = datetime(epochYear,epochMonth,epochDay, ...
    epochHour,epochMinute,epochSecond);

チェイサーの初期軌道要素は次のとおりです。

  • 長半径 (a1) = 7,500 km

  • 偏心度 = 0.001

  • 傾斜 = 30.1度

  • 昇交点の赤経 = 60.1 度

  • 近点引数 = 120 度

  • 真の異常度 = 30度

initialChaserSemimajorAxis = 7500000;              % m
initialChaserEccentricity = 0.001;
initialChaserInclination = 30.1;                   % deg
initialChaserRightAscensionofAscendingNode = 60.1; % deg
initialChaserArgumentOfPeriapsis = 120;            % deg
initialChaserTrueAnomaly = 30;                     % deg
initialChaserOscullatingElements = [initialChaserSemimajorAxis, ...
    initialChaserEccentricity, ...
    initialChaserInclination, ...
    initialChaserRightAscensionofAscendingNode, ...
    initialChaserArgumentOfPeriapsis, ...
    initialChaserTrueAnomaly];

ターゲットの初期軌道要素は次のとおりです。

  • 長半径 (a1) = 8,000 km

  • 偏心率 = 0.0005

  • 傾斜 = 30度

  • 昇交点の赤経 = 60 度

  • 近点引数 = 120 度

  • 真の異常度 = 310度

initialTargetSemimajorAxis = 8000000;            % m
initialTargetEccentricity = 0.0005;
initialTargetInclination = 30;                   % deg
initialTargetRightAscensionofAscendingNode = 60; % deg
initialTargetArgumentOfPeriapsis = 120;          % deg
initialTargetTrueAnomaly = 310;                  % deg
initialTargetOscullatingElements = [initialTargetSemimajorAxis, ...
    initialTargetEccentricity, ...
    initialTargetInclination, ...
    initialTargetRightAscensionofAscendingNode, ...
    initialTargetArgumentOfPeriapsis, ...
    initialTargetTrueAnomaly];

どちらの宇宙機も、主要な制約ベクトルである指令された方向に x 軸を合わせることで姿勢を制御します。したがって、各宇宙機の x 軸が主要な位置合わせベクトルを構成します。

primaryAlignmentVector = [1;0;0];

宇宙機はまた、二次制約ベクトルである二次方向への z 軸の配置を最小限に抑えようとします。したがって、各宇宙機の z 軸は二次アライメント ベクトルを構成します。

secondaryAlignmentVector = [0;0;1];

ミッション全体を通じて、ターゲット宇宙機の本体軸は国際天体基準フレーム (ICRF) と一致し続けます。したがって、ターゲット宇宙機の一次制約ベクトルと二次制約ベクトルは、それぞれ ICRF の x- 軸と z- 軸になります。

primaryConstraintVectorTarget = [1;0;0];
secondaryConstraintVectorTarget= [0;0;1];

したがって、SpaceRendezvousAndDockingExampleCalculateAttitude ヘルパー関数を使用して、ターゲット宇宙機のスカラー第 1 四元数を計算します。

targetAttitude = SpaceRendezvousAndDockingExampleCalculateAttitude( ...
    primaryAlignmentVector, ...
    primaryConstraintVectorTarget, ...
    secondaryAlignmentVector, ...
    secondaryConstraintVectorTarget);

チェイサーのプライマリ制約ベクトルとセカンダリ制約ベクトルは、ミッションフェーズに依存します。

ランデブー条件では、追跡機はターゲットの半径位置ベクトルに沿ってターゲット宇宙機の 1 km 下に位置する必要があります。両者の相対速度は 0 でなければなりません。

finalRelativeRadialDiscance = -1000; % m
finalRelativeVelocityICRF = [0;0;0]; % m/s

追跡者は 2 つの操作を使用してランデブー条件を達成する必要があります。2 つの操縦の間、追跡者は惰力段階にあります。2 回目の操作が完了したら、ランデブー条件を満たす必要があります。沿岸段階中、追跡機の近点は 6578.137 km 以下に下がってはなりません。これは高度に換算するとおよそ 200 km に相当します。

minimumChaserPeriapsisBetweenBurns = 6578137; % m

操作は次の条件を満たす必要があります。

• 各操縦において、デルタ v 成分は 300 m/s を超えてはなりません。

• 最初の操作は、追跡機の姿勢が最初の操作で安定するように、ミッション開始時刻の 200 秒後以降に実行する必要があります。

• 最初の操作は、ミッション開始時刻から 1 日以内に実行する必要があります。

• 2 回目の操作は、最初の操作の 1 日以内に実行する必要があります。

lowerBoundForFirstBurnTime = 200;                    % s
lowerBoundForDeltaV = [-300;-300;-300];              % m/s
lowerBoundForSecondBurnTimeAfterFirstBurn = 0;       % s
upperBoundForFirstBurnTime = 24*3600;                % s
upperBoundForDeltaV = [300;300;300];                 % m/s
upperBoundForSecondBurnTimeAfterFirstBurn = 24*3600; % s

ランデブー条件が満たされると、チェイサーはドッキング段階に入ります。初期接近時の接近速度は 0.3 m/s です。

initialApproachClosingRate = 0.3; % m/s

転置中、チェイサーの初期位置と最終位置の間の直接経路が衝突の危険をもたらす場合、チェイサーはターゲットの周りを移動し、ターゲットがチェイサーの本体の z軸に沿って 20 m オフセットされるようにします。転置後、追跡者はターゲットの 20 m 前方に位置する必要があります。

collisionAvoidanceZOffset = 20;        % m
transpositionFinalPosition = [20;0;0]; % m

最終進入中、目標までの距離が 10 m を超える場合、接近速度は 0.3 m/s となり、それ以外の場合は 0.03 m/s となります。

finalApproachClosingRate1 = 0.3;  % m/s
finalApproachClosingRate2 = 0.03; % m/s

操縦の最適化

ランデブーを容易にするために必要な操作は、Optimization Toolbox を使用して計算できます。ランデブー操作には主推進システムの点火が含まれ、衝動操作として近似されます。ランデブー問題は、非線形制約最適化問題として定式化できます。この問題の目的は、次の制約を満たしながら、衝撃的な操作によって生じるデルタ v の大きさを最小限に抑えることです。

最適化問題の設計変数は、次で構成される操作パラメータです。

  • 最初の燃焼時間

  • ICRF x軸に沿った最初の燃焼のデルタv

  • ICRF y軸に沿った最初の燃焼のデルタv

  • ICRF z軸に沿った最初の燃焼のデルタv

  • 最初の燃焼時間から数えた2回目の燃焼時間

  • ICRF x軸に沿った2回目の燃焼のデルタv

  • ICRF y軸に沿った2回目の燃焼のデルタv

  • ICRF z軸に沿った2回目の燃焼のデルタv

解の収束を助けるために、位置、速度、および時間は、それらの大きさがほぼ同じ順序になるようにスケーリングされます。

scaleTime = 50000;  % s
scalePos = 6378137; % m
scaleVel = 8000;    % m/s

操作パラメータのスケールされた下限と上限を定義します。

maneuverParameterLowerBound = ...
    [lowerBoundForFirstBurnTime/scaleTime; ...
    lowerBoundForDeltaV/scaleVel; ...
    lowerBoundForSecondBurnTimeAfterFirstBurn/scaleTime; ...
    lowerBoundForDeltaV/scaleVel];
maneuverParameterUpperBound = ...
    [upperBoundForFirstBurnTime/scaleTime; ...
    upperBoundForDeltaV/scaleVel; ...
    upperBoundForSecondBurnTimeAfterFirstBurn/scaleTime; ...
    upperBoundForDeltaV/scaleVel];

各デルタ v のノルム二乗の合計が目的関数を構成し、ファイル SpaceRendezvousAndDockingExampleObjectiveFcn.m で定義されます。ランデブー条件によって定義される非線形等式制約と、ランデブー操作間のチェイサーの近点によって定義される非線形不等式制約は、ファイル SpaceRendezvousAndDockingExampleConstraintFcn.m で定義されます。

この例では、線形等式制約と不等式制約を定義する必要がある fmincon 関数を使用して最適化を実行します。上記で定義した最適化問題にはこのような線形制約が含まれていないため、これらに空の値を割り当てます。

linearInequalityConstraintA = [];
linearInequalityConstraintb = [];
linearEqualityConstraintA = [];
linearEqualityConstraintb = [];

fmincon に最適な操作パラメータの推測値を提供する必要があります。この初期推定が任意の場合、fmincon は解に収束しない可能性があります。この結果を軽減するには、fsolve 関数を使用して初期推定値を生成します。この関数では、最適化は実行されず、操作パラメータの不等式制約と境界は無視されます。ファイル SpaceRendezvousAndDockingExampleConstraintFcn.m 内の等式制約を満たすように最適化問題を再定式化することができます。これにより、最適化の問題がルート解決の問題に簡略化されます。fsolve では初期推定も必要になることに注意してください。ただし、根を解く問題には不等式の制約や操作パラメータに対する境界がないため、任意の初期推定値を使用しても、fsolve を使用して比較的簡単に解くことができます。根を解く問題の解は、すでに軌道力学に従っており、等式制約を満たしているため、通常は元の最適化問題に対する適切な初期推測となります。

fsolve の任意の初期推定値を定義します。

firstBurnTime = 200;                  % s
firstDeltaV = [100;100;100];          % m/s
secondBurnTimeAfterFirstBurn = 80000; % s
secondDeltaV = [100;100;100];         % m/s
initialGuess = [firstBurnTime/scaleTime; ...
    firstDeltaV/scaleVel; ...
    secondBurnTimeAfterFirstBurn/scaleTime; ...
    secondDeltaV/scaleVel];

optimoptions を使用して fsolve 構成を定義します。

options = optimoptions( ...
    'fsolve', ...
    MaxFunctionEvaluations = 1000000, ...
    MaxIterations = 10000, ...
    Algorithm = 'levenberg-marquardt', ...
    FunctionTolerance = 1e-6, ...
    StepTolerance = 1e-10);

fsolve を使用して操作パラメータを計算します。根本解決問題には複数の解が存在することがよくあります。fsolve が収束する実際の解は、初期推定値によって異なります。

needToReturnInequalityConstraint = false;
maneuver = fsolve( ...
    @SpaceRendezvousAndDockingExampleConstraintFcn, ...
    initialGuess, ...
    options, ...
    epoch, ...
    initialChaserOscullatingElements, ...
    initialTargetOscullatingElements, ...
    finalRelativeRadialDiscance, ...
    finalRelativeVelocityICRF, ...
    minimumChaserPeriapsisBetweenBurns, ...
    needToReturnInequalityConstraint, ...
    scalePos, ...
    scaleVel, ...
    scaleTime);
Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.

<stopping criteria details>

fmincon の初期推定値は fsolve の解です。

initialGuess = maneuver;

optmimoptions を使用して fmincon 構成パラメータを定義します。

options = optimoptions( ...
    'fmincon', ...
    Algorithm = 'sqp',...
    MaxFunctionEvaluations = 1000000, ...
    MaxIterations = 10000, ...
    StepTolerance = eps, ...
    OptimalityTolerance = 1e-2);

fmincon を使用して最適な操作パラメータを計算します。最適化問題には複数の局所的最小値が含まれます。fmincon は、fsolve によって提供される初期推定値に応じてこれらの最小値の 1 つに収束します。また、fsolve は、fsolve に提供される任意の初期推定値に依存します。

needToReturnInequalityConstraint = true;
optimizedManeuver = fmincon( ...
    @SpaceRendezvousAndDockingExampleObjectiveFcn, ...
    initialGuess, ...
    linearInequalityConstraintA, ...
    linearInequalityConstraintb, ...
    linearEqualityConstraintA, ...
    linearEqualityConstraintb, ...
    maneuverParameterLowerBound, ...
    maneuverParameterUpperBound, ...
    @SpaceRendezvousAndDockingExampleConstraintFcn, ...
    options, ...
    epoch, ...
    initialChaserOscullatingElements, ...
    initialTargetOscullatingElements, ...
    finalRelativeRadialDiscance, ...
    finalRelativeVelocityICRF, ...
    minimumChaserPeriapsisBetweenBurns, ...
    needToReturnInequalityConstraint, ...
    scalePos, ...
    scaleVel, ...
    scaleTime);
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.

<stopping criteria details>

ランデブー操作パラメータ抽出

ランデブー操作パラメータを抽出して、各操作の燃焼方向と継続時間を計算します。

各ランデブー操作の操作時間を抽出します。これらの時間は、各操作のそれぞれの燃焼開始時間を構成します。

burnTime1 = optimizedManeuver(1)*scaleTime;
burnTime2 = (optimizedManeuver(1) + optimizedManeuver(5))*scaleTime;

各操作のデルタ v ベクトルを抽出します。

deltaV1Vector = optimizedManeuver(2:4)*scaleVel;
deltaV2Vector = optimizedManeuver(6:8)*scaleVel;

各操作のデルタ v の大きさを計算します。

deltaV1 = norm(deltaV1Vector);
deltaV2 = norm(deltaV2Vector);

各ランデブー操作に対して ICRF で燃焼方向を計算します。これらの方向は、単に各デルタ v ベクトルに沿った単位ベクトルです。

burnDirection1 = deltaV1Vector/norm(deltaV1Vector);
burnDirection2 = deltaV2Vector/norm(deltaV2Vector);

fmincon によって計算されるランデブー操作は、デルタ v が瞬時に達成される衝動操作を想定しています。Simulink モデルで衝撃的な操作を近似するには、主推進システムの推進剤の質量流量が大きいと仮定します。

mDot = 7500; % kg/s

主推進システムの初期チェイサー質量と比推力を定義します。これらの値は、各ランデブー操作の燃焼期間を計算するために必要です。

m0 = 1000; % kg
Isp = 400; % s

主推進システムの排気速度を計算します。この速度は、各ランデブー操作の燃焼後のチェイサーの質量を計算するために使用されます。

ve = 9.81*Isp; % m/s

最初の操縦バーン後のチェイサー質量を計算します。

m1 = m0/exp(deltaV1/ve);

2 回目の操縦バーン後のチェイサー質量を計算します。

m2 = m1/exp(deltaV2/ve);

各燃焼後の質量の変化と質量流量を使用して、各操作の燃焼時間を計算します。

burnDuration1 = (m0-m1)/mDot;
burnDuration2 = (m1-m2)/mDot;

ミッションシミュレーション

シミュレーション モデルを開きます。

model = 'SpaceRendezvousAndDockingExample.slx';
open_system(model);

最上位モデルは、Target spacecraftChaser spacecraft、および Simulation termination criterion サブシステムで構成されます。Chaser spacecraft および Target spacecraft サブシステムは、宇宙機のダイナミクスとそれぞれの誘導および制御システムを実装します。Simulation termination criterion サブシステムは、追跡者とターゲット間の距離が 1 m になるとシミュレーションを終了します。

topLevel.png

Chaser spacecraft サブシステムと Target spacecraft サブシステムは両方とも、Guidance and control サブシステムと Spacecraft サブシステムで構成されています。チェイサーの Guidance and control サブシステムは以下を提供します。

• ランデブー段階における主推進システムの燃焼コマンド

• 反応制御スラスタがランデブーフェーズ中に提供する物体力コマンド

• 反応制御スラスターが追跡機の方向を決めるために提供するボディモーメントコマンド

ターゲットの Guidance and control サブシステムは、以下に示すように、Spacecraft サブシステムにボディ モーメント コマンドのみを提供します。これは、ターゲットがいかなる操作も実行せず、ICRF に対して一定の姿勢を維持するだけだからです。

チェイサーとターゲットの Spacecraft サブシステムは、ボディ モーメント入力を受け入れる Spacecraft Dynamics ブロックを使用して宇宙機のダイナミクスを実装します。チェイサーの Spacecraft サブシステムは、画像に示すように、物体力、質量流量、排気速度の入力も受け入れます。

質量流量と排気速度の入力は、エンジンの燃焼時に質量が変化する主な推進システムを表します。物体力とモーメントの入力は、反応制御スラスタが生成しなければならない正味の推力とモーメントを表します。ソフトウェアはスラスタの発射によって生じる質量の変化を無視します。

追跡機とターゲットの Guidance and control サブシステムは、誘導および制御ロジックを実装します。ターゲットはいかなる操作も実行せず、ICRF に対して一定の姿勢を維持するため、その Guidance and control サブシステムは回転誘導および制御システムのみを実装します。チェイサーの Guidance and control サブシステムは、並進および回転の両方の誘導および制御ロジックを実装し、画像に示すように、メイン推進システムの燃焼コマンドを発行します。

Guidance サブシステムは、ランデブー フェーズ中にバーン コマンドを発行し、ドッキング フェーズ中にトランスレーション ガイダンス コマンドを発行します。このサブシステムは、ミッション全体を通じて回転ガイダンスも提供します。並進誘導は、追跡機のボディ座標系における追跡機に対するターゲットの指令された相対速度で構成されます。回転ガイダンスは、コマンドされたプライマリ制約ベクトルとセカンダリ制約ベクトルで構成されます。Guidance サブシステムは、Maneuver selector と呼ばれる Stateflow チャートを使用して、どのランデブー操作を実行する必要があるか、およびドッキング フェーズをいつアクティブにするかを決定するロジックを実装します (図を参照)。

Maneuver サブシステムは、それぞれ Rendezvous サブシステムと Docking サブシステムを使用して、ランデブー フェーズとドッキング フェーズ中の誘導ロジックを実装します。画像に示すように、Docking サブシステムは Docking phase selector サブシステムと Docking phase guidance サブシステムで構成されています。

Docking phase guidanc e サブシステムは、さまざまなドッキング フェーズのガイダンス ロジックを実装します。Docking phase selector サブシステムは、画像に示すように、Docking phase selector と呼ばれる Stateflow チャートを使用して、適切なドッキング フェーズを選択するロジックを実装します。

stateflow2.png

誘導コマンドは制御システムに送られます。ターゲット宇宙機には、Rotational controller サブシステムによって実装される回転コントローラが含まれています。チェイサー宇宙機は、画像に示すように、Control サブシステムによって実装される並進コントローラと回転コントローラで構成されています。

Translational controller サブシステムはドッキング フェーズ中にのみアクティブになります。並進誘導コマンドを受け入れ、比例コントローラを使用して反応制御システムが生成しなければならない物体力を計算します。Rotational controller サブシステムは、回転誘導コマンドを受け入れ、反応制御システムが提供しなければならないボディモーメントを計算します。チェイサーとターゲットの Rotational controller アーキテクチャは同じであり、画像に示すように PD コントローラーを表します。

controllerArchitecture.png

チェイサーの Rotational controller サブシステムはこのアーキテクチャを実装します。

Attitude Profile ブロックは、宇宙機の現在の姿勢と、回転誘導コマンドから推測された目的の姿勢に基づいて誤差四元数を計算します。回転誘導コマンドは、一次制約ベクトルと二次制約ベクトルで構成されます。

シミュレーションのデフォルトの終了時刻を指定します。シミュレーション前の停止時間は不明であるため、2 回目の燃焼時間後の 100,000 秒に任意に設定されます。100,000 秒あればドッキングフェーズを完了するのに十分な時間があると想定されます。停止基準が早く満たされた場合、実際のシミュレーション終了時間はこの値よりも短くなります。

endTime = burnTime2 + 100000;

モデルをシミュレートします。このモデルは、パフォーマンスを向上させるためにラピッド アクセラレータ モードで実行するように構成されています。

simOut = sim('SpaceRendezvousAndDockingExample.slx');
Build Summary

0 of 1 models built (1 models already up to date)
Build duration: 0h 0m 7.1315s

衛星シナリオビューアでミッションを視覚化する

最上位の Simulink モデルは、追跡機とターゲットの ICRF 位置と姿勢を timeseries 形式でワークスペースに送信します。このデータを使用して衛星シナリオを設定し、ミッションを視覚化します。衛星シナリオ オブジェクトを作成します。ミッションの開始時間と終了時間を設定します。シナリオに 33,301 個の時間サンプルが含まれるようにサンプル時間を設定します。これは、シナリオのサンプル時間がおよそ 2.5 秒になることを意味します。

startTime = epoch;
stopTime = startTime + seconds(simOut.tout(end));
sampleTime = seconds(stopTime - startTime)/33300;
sc = satelliteScenario(startTime,stopTime,sampleTime)
sc = 
  satelliteScenario with properties:

         StartTime: 06-Aug-2022
          StopTime: 06-Aug-2022 23:07:26
        SampleTime: 2.4999
      AutoSimulate: 1
        Satellites: [1×0 matlabshared.satellitescenario.Satellite]
    GroundStations: [1×0 matlabshared.satellitescenario.GroundStation]
           Viewers: [0×0 matlabshared.satellitescenario.Viewer]
          AutoShow: 1

追跡機とターゲットの ICRF 位置と姿勢履歴を抽出します。

chaserPos = simOut.yout{1}.Values;
chaserAtt = simOut.yout{2}.Values;
targetPos = simOut.yout{3}.Values;
targetAtt = simOut.yout{4}.Values;

追跡宇宙機を追加し、その姿勢プロファイルを定義します。チェイサーのドッキング ポートを模倣するために、チェイサーの 0.5 m 前に円錐形のセンサーを追加します。

chaser = satellite(sc,chaserPos,Name='Chaser');
pointAt(chaser,chaserAtt);
chaserDockingPort = conicalSensor(chaser,MountingLocation=[0.5;0;0]);

ターゲット宇宙機を追加し、その姿勢プロファイルを定義します。ターゲットのドッキング ポートを模倣するために、ターゲットの 0.5 m 前に円錐形のセンサーを追加します。

target = satellite(sc,targetPos,Name='Target');
pointAt(target,targetAtt);
targetDockingPort = conicalSensor(target,MountingLocation=[0.5;0;0]);

衛星シナリオビューアを起動し、カメラ参照フレームを 'Inertial' に設定します。追跡者とターゲットの座標軸を視覚化します。追跡者とターゲットの軌道を非表示にします。

v = satelliteScenarioViewer(sc,CameraReferenceFrame='Inertial');
coordinateAxes([chaser target]);
hide(chaser.Orbit);
hide(target.Orbit);

sc3.png

シナリオをプレイします。カメラのターゲットを chaser に設定します。追跡機は、2022 年 8 月 6 日午前 12 時 24 分 16 秒頃 (UTC) に実行される最初のランデブー操作に向けて直ちに方向転換します。

play(sc);
camtarget(v,chaser);

sc5.png

最初の操作が完了した後、追跡機は 2022 年 8 月 6 日午後 10 時 0 分 49 秒頃 (UTC) に実行される 2 回目のランデブー操作に向けて方向転換します。

sc6.png

2 回目のランデブー操作の後、追跡機はターゲットの約 1 km 下にあり、ターゲットの半径位置ベクトルからのオフセットは小さく、相対速度は 0 m/s に近くなります。位置と速度の誤差は、2 回のランデブー操作における衝撃デルタ v の近似の結果です。

sc7.png

ランデブーが完了すると、追跡機はドッキング段階に入ります。初期進入姿勢に再方向付けします。並進反応制御スラスタにより、ターゲットの半径位置ベクトルからの横方向のオフセットが排除され、0.3 m/s でターゲットに接近し始めます。

sc8.png

追跡者とターゲット間の距離が 100 m に短縮されると、追跡者は転置フェーズに入ります。最終的なドッキング姿勢に方向転換し、ターゲットの周りを移動してターゲットの 20 メートル前方に位置します。

sc9.png

転置が完了すると、追跡機は最終接近段階に入り、0.3 m/s の速度でターゲットに接近し始めます。

sc10.png

目標までの距離が 10 m に減少すると、追跡者は接近速度を 0.03 m/s に減速します。

sc11.png

ターゲットまでの距離がさらに 1 m まで縮まるとドッキングが完了します。

sc12.png