メインコンテンツ

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

衛星接近ファインダー

この例では、2 つの衛星の近接または合の潜在的なイベントを見つける方法を示します。

今後の潜在的な合を見つけるために、この例では、CelesTrak™ Web サイトから入手できる SOCRATES ツールを使用します。SOCRATES は、テキスト ファイルに保存されている 2 行要素 (TLE) を使用して今後の合のリストを生成し、衛星シナリオ オブジェクトに簡単にロードできるようにします。SOCRATES によって生成された接続詞リストは、CelesTrak の許可を得て使用されています。

一般的なワークフローとしては、

  1. この例では、2 つの衛星が 200 km などの指定された制御距離内を通過するウィンドウを見つけるために、satelliteScenario オブジェクト内のシミュレーション機能を使用します。この検索には、軌道に沿って約 20 秒のサンプル時間が必要です。

  2. fzero を勾配関数とともに使用して、各ウィンドウの最接近時刻を見つけます。

  3. 出力を視覚化し、SOCRATES と同じ結合が配置されていることを確認します。

免責事項 - 運用上の接続評価予測には、公開されている TLE を使用しないでください。この例は情報提供のみを目的として提供されています。衛星運用者は、運用中の衛星をサポートするためのデータと分析については第 18 宇宙防衛飛行隊に問い合わせる必要があります。

接続シナリオを選択する

SOCRATES のメイン ページには、最大確率または最大範囲による上位 10 個の接続の 2 つの接続リストが用意されています。リストをクリックすると、衛星名、最接近日時 (TCA)、最大衝突確率、相対速度が記載された合の表が表示されます。テーブル内の各エントリには、TLE を別のウィンドウに表示するためのボタンがあります。これらの TLE をテキスト ファイルにコピーできます。コピーされた接続詞の例を次に示します。

type Conjunction_Starlink1079_CZ2DDeb.txt
STARLINK-1079
1 44937U 20001Z   22272.52136386 -.00000745  00000+0 -31120-4 0  9997
2 44937  53.0548 210.2777 0001443  83.0631 277.0522 15.06393387150649
CZ-2D DEB
1 43406U 12073D   22272.74034628  .00008296  00000+0  83006-3 0  9993
2 43406  97.9471 196.5364 0090895 225.9886 133.3815 14.88613293478469

SOCRATES からの接続データ:

  • 44937 STARLINK-1079 [+], Days since epoch: 3.817

  • 43406 CZ-2D DEB [-], Days since Epoch: 3.598

  • Max Probability 1.363E-02

  • Dilution Threshold (km) 0.004

  • Min Range (km) 0.017

  • Relative Velocity (km/sec) 5.861

  • Start (UTC) 2022 Oct 03 08:06:48.977

  • TCA (UTC) 2022 Oct 03 08:06:49.830

  • Stop (UTC) 2022 Oct 03 08:06:50.683

接続詞リストのパラメータは次のとおりです。

  • 2022年9月30日 08:05 UTC時点のデータ

  • 計算間隔:開始 = 2022 年 9 月 30 日 00:00:00.000、終了 = 2022 年 10 月 7 日 00:00:00.000

  • 計算しきい値:5.0キロ

  • 考慮する点:9,400 プライマリ、23,748 セカンダリ (115,200 接続詞)

この例では、satelliteScenario を使用して、SOCRATES によって報告された最接近の時間と距離を検証します。この特定の合の例では、衛星が 7 日間で 2 回接近することに注意してください。

この例では、SOCRATES から取得した 2 つの StarLink 衛星 TLE テキスト ファイルと 1 つの ORSTED 衛星および Iridrium33 衛星 TLE テキスト ファイルを提供します。2 つの StarLink 衛星 TLE テキスト ファイルは、衛星が半軌道ごとに互いに接近して通過するため、200 を超える粗い結合ウィンドウを生成します。この分析は実行に時間がかかり、最接近距離は 10 m であることが検出されます。ORSTED および Iridium 33 TLE テキスト ファイルは、最短距離が 26 m の粗いウィンドウを約 20 個生成します。

リストから、実行する TLE テキスト ファイルを選択します。

tleFile = "Conjunction_Starlink1079_CZ2DDeb.txt"
tleFile = 
"Conjunction_Starlink1079_CZ2DDeb.txt"

衛星要素をシナリオオブジェクトにロードする

プレーン テキスト ファイルを使用して、TLE を satelliteScenario に直接ロードします。TLE は、SGP4 または SDP4 プロパゲーターで使用される衛星軌道要素のテキスト表現です。

sc  = satelliteScenario;
satellites = satellite(sc,tleFile);
v = satelliteScenarioViewer(sc);
v.PlaybackSpeedMultiplier = 150;

以下は最初の例のビューアのスクリーンショットです。コントロールは左下にあります。軌道が同様の高度で交差していることがわかります。

2023-01-13_08-50-40.jpg

衛星が指定距離内を通過するときにウィンドウを見つける

NASAハンドブック[1]によれば、合の有無を確認するための標準的な期間である7日間で、すべての窓を見つけるのにかかる時間を測定します。LEO 衛星の場合、20 秒のサンプル時間で十分です。

startTime_init = sc.StartTime;
sc.StopTime  = startTime_init + days(7);
sc.SampleTime = 20;

aer 関数を使用して、衛星の位置データと関連する時間を取得します。Satellite クラスのこのメソッドは、衛星と他のオブジェクトの方位角、仰角、および範囲を計算します。この場合、他のオブジェクトは他の衛星です。

[~,~,range,tOut] = aer(satellites(1),satellites(2));

次に、範囲と tOut をプロットします。

% Create plot of tOut and range
h2 = plot(tOut,range,"DisplayName","range");

% Add xlabel, ylabel, title, and legend
xlabel("tOut")
ylabel("range")
title("tOut vs. range")
legend

Figure contains an axes object. The axes object with title tOut vs. range, xlabel tOut, ylabel range contains an object of type line. This object represents range.

2 つの衛星位置間の距離を計算します。衛星が目標の 200 km より近い場合の範囲のインデックスを決定します。次に、for ループを使用して、この相対距離が目標の 200 km 未満になる時間を検索します。diff 関数は、見つかったポイント間のギャップを検出します。値が 1 の場合、ポイントはウィンドウに隣接しており、停止時間を延長できます。時間ウィンドウを作成するには、見つかったポイントの前後にエフェメリック ポイントを追加します。

dMinTarget = 200e3;           
kCloseIdx  = find(range<dMinTarget);
dW         = [0 diff(kCloseIdx)];
kWindow    = zeros(2,length(kCloseIdx));
j          = 1;
for m = 1:length(dW)
  if dW(m)~=1
    % single point window
    kWindow(1,j) = max(1,kCloseIdx(m)-1);
    kWindow(2,j) = kCloseIdx(m)+1;
    j = j+1;
  elseif j>1
    % update window end as long as diff==1
    kWindow(2,j-1) = kCloseIdx(m)+1;
  end
end

見つかった複数ポイントのウィンドウによってウィンドウの数が近いポイントの数を下回るため、出力は見つかったウィンドウに制限されます。見つかったウィンドウの数の結果がコマンド ラインに出力されます。

kWindow = kWindow(:,1:j-1);
fprintf("%d windows found for dMin = %g km\n",size(kWindow,2),dMinTarget*1e-3);
2 windows found for dMin = 200 km

出力時間配列からウィンドウの日時を取得するには、ウィンドウ インデックスを使用します。結果を確認するためのウィンドウを表示します。ウィンドウの長さは約 1 分です。

windows = tOut(kWindow);
if size(windows,2)>=3
  disp(windows(:,1:3)')
else
  disp(windows')
end
   03-Oct-2022 08:06:05   03-Oct-2022 08:07:25
   03-Oct-2022 08:54:25   03-Oct-2022 08:55:05

1つのウィンドウで勾配関数をテストする

最接近地点を見つけるには、窓の上にある変更コストの標識を探します。for ループを使用して、2 秒のタイムステップを使用して、最初のウィンドウ内の時間の配列に対して勾配関数を呼び出します。g radientScenario 関数は別のファイルにあります。各タイムステップで、シナリオ開始時刻からの期間を日数で計算します。衛星間の勾配と距離を保存します。

window = windows(:,1);
tVec   = window(1):seconds(2):window(2);
dRDot  = zeros(size(tVec));
dR     = zeros(size(tVec));
for k = 1:length(tVec)
  delT = days(tVec(k) - sc.StartTime);
  [dRDot(k),dR(k)] = gradientScenario(delT,satellites(1),satellites(2),sc.StartTime);
end

figuresubplot を使用して、最小距離と勾配関数の出力の両方のプロットを作成します。最接近地点での標識の変化を確認します。

figure('name','Gradient Test over One Window')
subplot(211)
plot(tVec,dR)
grid on
ylabel('Distance Between Satellites (m)')
title('Results for the First Window')
subplot(212)
plot(tVec,dRDot)
grid on
ylabel('Gradient of Distance Function')

Figure Gradient Test over One Window contains 2 axes objects. Axes object 1 with title Results for the First Window, ylabel Distance Between Satellites (m) contains an object of type line. Axes object 2 with ylabel Gradient of Distance Function contains an object of type line.

窓から最も近い場所を探す

ウィンドウの開始時間と終了時間を渡して、fzero に範囲を指定します。days 関数は、datetime 配列を double に変換します。匿名関数を使用して、satelliteScenario オブジェクトを勾配関数に渡します。for ループの経過時間を測定するには、tictoc. を使用します。衛星ペアによっては、経過時間が 1 分を超える場合があります。

tMin = zeros(1,size(windows,2));
dRs  = zeros(1,size(windows,2));
h = waitbar(0,'Please wait, iterating over windows...');
tic
for k = 1:size(windows,2)
  tMin(k) = fzero(@(t) gradientScenario(t,satellites(1),satellites(2),sc.StartTime),days(windows(:,k)-sc.StartTime));
  [~,dRs(k)] = gradientScenario(tMin(k),satellites(1),satellites(2),sc.StartTime);
  waitbar(k/size(windows,2),h);
end
close(h)
toc
Elapsed time is 0.567558 seconds.

すべてのウィンドウの最小距離を見つけ、最も接近した時刻を報告します。距離はメートル単位で表示されます。

[rMin,iMin] = min(dRs);
tCA = sc.StartTime + tMin(iMin);
disp(tCA)
   03-Oct-2022 08:06:49
disp(dRs(iMin))
   17.1737

states 関数と最接近時刻を使用して、SOCRATES からの衛星間の相対速度を確認します。速度はm/s単位です。

[~,vel] = states(satellites,tCA); % satellite velocity in m/s
dV = vecnorm(vel(:,:,1) - vel(:,:,2));
disp(dV)
   5.8613e+03

結果として生じる接近通過をプロットするには、stem 関数 . を使用し、最も近い接近を赤でマークします。結果は SOCRATES によって報告されたものと同じであることに注意してください。

figure('name','ConjunctionDetection')
stem(sc.StartTime + tMin,dRs*1e-3)
ylabel('Close Approach Distance (km)')
title(sprintf('Closest Approach: %g m at %g days',rMin,tMin(iMin)))
hold on; grid on;
stem(sc.StartTime + tMin(iMin),rMin*1e-3,'filled','r') % mark the closest approach

Figure ConjunctionDetection contains an axes object. The axes object with title Closest Approach: 17.1737 m at 3.81671 days, ylabel Close Approach Distance (km) contains 2 objects of type stem.

要約すると、7 日間の時間枠内において、ある衛星が別の衛星に最も接近する場所を見つけるのは 2 段階のプロセスです。

  1. 距離メトリックを使用した粗いフィルターを使用して、接近するウィンドウを見つけます。

  2. fzero を使用して、各ウィンドウ内で最も近いパスを見つけます。

この 2 段階の方法により、SOCRATES ウェブサイトで報告されている接続詞を再現できます。

  • 最接近時刻(TCA)

  • 衛星間の距離

  • 相対速度

見つかった接続詞の周りのシナリオを更新する

最接近時間がわかったので、シミュレーションの開始時間と終了時間を数分程度に更新します。play 関数を使用してシミュレーションを実行します。

以下は、最初の例の接続詞のスクリーンショットです。

sc.StartTime = tCA - days(0.004);
sc.StopTime = tCA + days(0.004);
v.PlaybackSpeedMultiplier = 50;
campos(v,-10.5641,-98.9574,9.1906e6);
play(sc);

2023-01-13_11-52-18.png

参考文献

[1] NASA宇宙機の接近評価および衝突回避ベストプラクティスハンドブック、2020年12月、NASA/SP-20205011318、https://nodis3.gsfc.nasa.gov/OCE_docs/OCE_50.pdf