方位高度エフェメリスデータを提供する - AWS Ground Station

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

方位高度エフェメリスデータを提供する

重要

方位高度エフェメリス機能は、現在プレビュー状態であり、明示的なオンボーディングが必要です。

方位標高エフェメリス機能は、事前に決定された特殊なユースケースの数に限り、厳格なアクセスコントロール下にあります。アクセスは、お客様が用意した標準のエフェメリス機能よりも大幅に制限されます。承認されたユースケースとアクセスリクエストプロセスの詳細については、 にお問い合わせください。

概要:

方位高度エフェメリスは、衛星軌道情報を提供せずにアンテナの方向を直接指定する方法を提供します。衛星の軌道を記述するエフェメリスデータをアップロードする代わりに、コンタクト全体でどこを指すかをアンテナに正確に指示する、時間タグ付けされた方位角と標高角度を提供します。

AWS Ground Station はエフェメリスを個別の使用状況データとして扱います。このオプション機能を使用する場合、AWS はエフェメリスデータを使用してトラブルシューティングサポートを提供します。

このアプローチは、以下のシナリオで特に役立ちます。

  • 早期オペレーションのサポート: 正確な軌道データが利用できない場合、または軌道パラメータが急速に変化している場合の起動フェーズと早期軌道フェーズ (LEOP) 中。

  • カスタムポイントパターン: アンテナテストまたは非標準オペレーションに特定のポイントシーケンスを実装します。

注記

方位高度エフェメリスを使用する場合、衛星 ARN は問い合わせ予約リクエストから省略できます。衛星 ARN を省略しない場合でも、コンタクトデータの一部として含まれますが、方位高度エフェメリスは、エフェメリスの優先度解決を実行するのではなく、アンテナポイントに使用されます。方位高度エフェメリスは、特定の地上局に関連付けられ、その場所のアンテナ指向方向を定義します。

方位高度エフェメリスデータ形式

方位高度エフェメリスデータは、時間タグ付けされた方位値と、セグメントに整理された高度値で構成されます。各セグメントには、特定の時間範囲をカバーする一連の方位角と角度が含まれます。

方位高度エフェメリスデータの主なコンポーネントは次のとおりです。

  • Ground Station: この方位高度エフェメリスを使用する特定の地上局。

  • Angle Unit: 角度の測定単位 (DEGREE_ANGLE または RADIAN)。

  • セグメント: 方位角と標高角度の 1 つ以上の時間制限付きコレクション。

  • タイムタグ付き角度: 関連するタイムスタンプを持つ個々の方位値と標高値。

各セグメントには以下が必要です。

  • リファレンスエポック (セグメントの基本時間)

  • 有効な時間範囲 (セグメントの開始時刻と終了時刻)

  • 少なくとも 5 つの時間タグ付けされた方位/高さのペア

方位標高の制約:

  • 方位度: -180°~360°

  • ラジアンでの方位数: -π~2π

  • 度数での高さ: -90°~90°

  • ラジアンでの上昇: -π/2 から π/2

  • 時間値は各セグメント内で昇順である必要があります

  • セグメントは時間的に重複してはいけません

詳細については、CreateEphemeris API ドキュメントと TimeAzEl データ型を参照してください。

方位高度エフェメリスの作成

方位高度エフェメリスは、同じ CreateEphemeris API アクションを使用して作成されますが、azElエフェメリスタイプを使用します。TLE と OEM エフェメリスの主な違いは次のとおりです。

  • groundStation パラメータを指定する必要があります

  • satelliteId パラメータはリクエストから省略する必要があります

  • 優先度設定は適用されません (各方位高度エフェメリスは地上局に固有です)

  • 4 次 Lagrange 補間をサポートするには、各セグメントに少なくとも 5 つの方位/上昇ポイントが含まれている必要があります

  • 追加の制限と要件の詳細については、CreateEphemeris API ドキュメントを参照してください。

エフェメリスがアップロードされると、エフェメリスが VALIDATING に設定されて非同期ワークフローが開始されることに注意してください。このワークフローでは、エフェメリスを検証し、そのエフェメリスを基に潜在的なコンタクトを生成します。エフェメリスは、このワークフローに合格し、そのステータスが になった後の問い合わせにのみ使用されますENABLEDDescribeEphemeris をポーリングしてエフェメリスステータスを確認するか、CloudWatch イベントを使用してエフェメリスのステータスの変化を追跡する必要があります。

無効なエフェメリスのトラブルシューティングについては、以下を参照してください。 無効なエフェメリスのトラブルシューティング

例: API を使用して方位高度エフェメリスを作成する

次の例は、 AWS SDK for Python (Boto3) を使用して方位高度エフェメリスを作成する方法を示しています。

import boto3 # Create AWS Ground Station client ground_station_client = boto3.client("groundstation") # Create azimuth elevation ephemeris azimuth_elevation_ephemeris = ground_station_client.create_ephemeris( name="Azimuth Elevation for Ohio Ground Station", ephemeris={ "azEl": { "groundStation": "Ohio 1", "data": { "azElData": { "angleUnit": "DEGREE_ANGLE", "azElSegmentList": [ { "referenceEpoch": "2024-03-15T10:00:00Z", "validTimeRange": { "startTime": "2024-03-15T10:00:00Z", "endTime": "2024-03-15T10:15:00Z", }, "azElList": [ {"dt": 0.0, "az": 45.0, "el": 10.0}, {"dt": 180.0, "az": 50.0, "el": 15.0}, {"dt": 360.0, "az": 55.0, "el": 20.0}, {"dt": 540.0, "az": 60.0, "el": 25.0}, {"dt": 720.0, "az": 65.0, "el": 30.0}, {"dt": 900.0, "az": 70.0, "el": 35.0}, ], } ], } }, } }, ) print(f"Created ephemeris with ID: {azimuth_elevation_ephemeris['ephemerisId']}")

この例では、以下のようになっています:

  • 方位高度データは「オハイオ 1」地上局に関連付けられています

  • 角度は度数で指定します

  • セグメントは 15 分間を対象とします。

  • dt 値は参照エポックからのアトミック秒オフセットです

  • 6 つの方位/標高ペアが用意されています (最小は 5)

例: S3 から方位標高データをアップロードする

大規模なデータセットの場合、S3 バケットから方位標高データをアップロードできます。

import boto3 import json # Create AWS clients s3_client = boto3.client("s3") ground_station_client = boto3.client("groundstation") # Define S3 bucket and key bucket_name = "azimuth-elevation-bucket" object_key = "singapore-azimuth-elevation.json" # Create sample azimuth elevation data azimuth_elevation_data = { "angleUnit": "DEGREE_ANGLE", "azElSegmentList": [ { "referenceEpoch": "2024-03-15T10:00:00Z", "validTimeRange": { "startTime": "2024-03-15T10:00:00Z", "endTime": "2024-03-15T10:15:00Z", }, "azElList": [ {"dt": 0.0, "az": 45.0, "el": 10.0}, {"dt": 180.0, "az": 50.0, "el": 15.0}, {"dt": 360.0, "az": 55.0, "el": 20.0}, {"dt": 540.0, "az": 60.0, "el": 25.0}, {"dt": 720.0, "az": 65.0, "el": 30.0}, {"dt": 900.0, "az": 70.0, "el": 35.0}, ], }, { "referenceEpoch": "2024-03-15T10:15:00Z", "validTimeRange": { "startTime": "2024-03-15T10:15:00Z", "endTime": "2024-03-15T10:30:00Z", }, "azElList": [ {"dt": 0.0, "az": 70.0, "el": 35.0}, {"dt": 180.0, "az": 75.0, "el": 40.0}, {"dt": 360.0, "az": 80.0, "el": 45.0}, {"dt": 540.0, "az": 85.0, "el": 50.0}, {"dt": 720.0, "az": 90.0, "el": 55.0}, {"dt": 900.0, "az": 95.0, "el": 50.0}, ], }, ], } # Upload sample data to S3 print(f"Uploading azimuth elevation data to s3://{bucket_name}/{object_key}") s3_client.put_object( Bucket=bucket_name, Key=object_key, Body=json.dumps(azimuth_elevation_data, indent=2), ContentType="application/json", ) print("Sample data uploaded successfully to S3") # Create azimuth elevation ephemeris from S3 print("Creating azimuth elevation ephemeris from S3...") s3_azimuth_elevation_ephemeris = ground_station_client.create_ephemeris( name="Large Azimuth Elevation Dataset", ephemeris={ "azEl": { "groundStation": "Singapore 1", "data": {"s3Object": {"bucket": bucket_name, "key": object_key}}, } }, ) print(f"Created ephemeris with ID: {s3_azimuth_elevation_ephemeris['ephemerisId']}")

S3 オブジェクトには、直接アップロードの例に示すのと同じ形式の方位標高データを含む JSON 構造が含まれている必要があります。

方位高度エフェメリスを使用したコンタクトの予約

方位高度エフェメリスを使用してコンタクトを予約する場合、プロセスは TLE および OEM エフェメリスとは異なります。

  1. CreateEphemeris を使用して方位高度エフェメリスを作成する

  2. エフェメリスが ENABLED ステータスになるまで待ちます。

  3. ReserveContact と追跡オーバーライドを使用して問い合わせを予約する

方位高度エフェメリスとのコンタクトを予約する例:

import boto3 from datetime import datetime import time # Create AWS Ground Station client ground_station_client = boto3.client("groundstation") # First, create an azimuth elevation ephemeris print("Creating azimuth elevation ephemeris...") create_ephemeris_response = ground_station_client.create_ephemeris( name="Azimuth Elevation for Contact Reservation", ephemeris={ "azEl": { "groundStation": "Ohio 1", "data": { "azElData": { "angleUnit": "DEGREE_ANGLE", "azElSegmentList": [ { "referenceEpoch": "2024-03-15T10:00:00Z", "validTimeRange": { "startTime": "2024-03-15T10:00:00Z", "endTime": "2024-03-15T10:15:00Z", }, "azElList": [ {"dt": 0.0, "az": 45.0, "el": 10.0}, {"dt": 180.0, "az": 50.0, "el": 15.0}, {"dt": 360.0, "az": 55.0, "el": 20.0}, {"dt": 540.0, "az": 60.0, "el": 25.0}, {"dt": 720.0, "az": 65.0, "el": 30.0}, {"dt": 900.0, "az": 70.0, "el": 35.0}, ], } ], } }, } }, ) ephemeris_id = create_ephemeris_response["ephemerisId"] print(f"Created ephemeris with ID: {ephemeris_id}") # Wait for ephemeris to become ENABLED print("Waiting for ephemeris to become ENABLED...") while True: status = ground_station_client.describe_ephemeris(ephemerisId=ephemeris_id)[ "status" ] if status == "ENABLED": print("Ephemeris is ENABLED") break elif status in ["INVALID", "ERROR"]: raise RuntimeError(f"Ephemeris failed: {status}") time.sleep(5) # Reserve contact with azimuth elevation ephemeris print("Reserving contact...") contact = ground_station_client.reserve_contact( # Note: satelliteArn is omitted when using azimuth elevation ephemeris missionProfileArn="arn:aws:groundstation:us-east-2:111122223333:mission-profile/example-mission-profile", groundStation="Ohio 1", startTime=datetime(2024, 3, 15, 10, 0, 0), endTime=datetime(2024, 3, 15, 10, 15, 0), trackingOverrides={"programTrackSettings": {"azEl": {"ephemerisId": ephemeris_id}}}, ) print(f"Reserved contact with ID: {contact['contactId']}")
注記

方位高度エフェメリスとのコンタクトを予約するときは、 satelliteArnパラメータを省略できます。アンテナは、接触中に指定された方位角と標高角度に従います。

利用可能な連絡先の一覧表示

方位高度エフェメリスを使用する場合、ListContacts API には特定のパラメータが必要です。

  • satelliteArn パラメータはリクエストから省略できます

  • 使用するエフェメリスを指定するには、方位高度エフェメリス ID を持つ ephemerisパラメータを指定する必要があります

  • 使用可能なコンタクトウィンドウは、指定された方位角と標高角度が、リクエストされた地上局のサイトマスクを超えると表示されます。

  • groundStation と を指定する必要があります。 missionProfileArn

方位高度エフェメリスを作成し、それを使用して利用可能な連絡先を一覧表示する例:

import boto3 from datetime import datetime, timezone import time # Create AWS Ground Station client ground_station_client = boto3.client("groundstation") # Step 1: Create azimuth elevation ephemeris print("Creating azimuth elevation ephemeris...") ephemeris_response = ground_station_client.create_ephemeris( name="Stockholm AzEl Ephemeris", ephemeris={ "azEl": { "groundStation": "Stockholm 1", "data": { "azElData": { "angleUnit": "DEGREE_ANGLE", "azElSegmentList": [ { "referenceEpoch": "2024-04-01T12:00:00Z", "validTimeRange": { "startTime": "2024-04-01T12:00:00Z", "endTime": "2024-04-01T12:30:00Z", }, "azElList": [ {"dt": 0.0, "az": 30.0, "el": 15.0}, {"dt": 360.0, "az": 45.0, "el": 30.0}, {"dt": 720.0, "az": 60.0, "el": 45.0}, {"dt": 1080.0, "az": 75.0, "el": 35.0}, {"dt": 1440.0, "az": 90.0, "el": 20.0}, {"dt": 1800.0, "az": 105.0, "el": 10.0}, ], } ], } }, } }, ) ephemeris_id = ephemeris_response["ephemerisId"] print(f"Created ephemeris: {ephemeris_id}") # Step 2: Wait for ephemeris to become ENABLED print("Waiting for ephemeris to become ENABLED...") while True: describe_response = ground_station_client.describe_ephemeris( ephemerisId=ephemeris_id ) status = describe_response["status"] if status == "ENABLED": print("Ephemeris is ENABLED") break elif status in ["INVALID", "ERROR"]: # Check for validation errors if "invalidReason" in describe_response: print(f"Ephemeris validation failed: {describe_response['invalidReason']}") raise RuntimeError(f"Ephemeris failed with status: {status}") print(f"Current status: {status}, waiting...") time.sleep(5) # Step 3: List available contacts using the azimuth elevation ephemeris print("Listing available contacts with azimuth elevation ephemeris...") # Convert epoch timestamps to datetime objects start_time = datetime.fromtimestamp(1760710513, tz=timezone.utc) end_time = datetime.fromtimestamp(1760883313, tz=timezone.utc) contacts_response = ground_station_client.list_contacts( startTime=start_time, endTime=end_time, groundStation="Stockholm 1", statusList=["AVAILABLE"], ephemeris={"azEl": {"id": ephemeris_id}}, # satelliteArn is optional satelliteArn="arn:aws:groundstation::111122223333:satellite/a88611b0-f755-404e-b60d-57d8aEXAMPLE", missionProfileArn="arn:aws:groundstation:eu-north-1:111122223333:mission-profile/966b72f6-6d82-4e7e-b072-f8240EXAMPLE", ) # Process the results if contacts_response["contactList"]: print(f"Found {len(contacts_response['contactList'])} available contacts:") for contact in contacts_response["contactList"]: print(f" - Contact from {contact['startTime']} to {contact['endTime']}") print( f" Max elevation: {contact.get('maximumElevation', {}).get('value', 'N/A')}°" ) else: print("No available contacts found for the specified azimuth elevation ephemeris")
注記

コンタクトを一覧表示するときに、アジマス標高 ID を持つ ephemerisパラメータを指定して、コンタクトウィンドウの決定に使用するアジマス標高エフェメリスを指定する必要があります。satelliteArn が含まれている場合、問い合わせデータに関連付けられますが、方位高度エフェメリスは、エフェメリスの優先度解決を実行するのではなく、アンテナポイントに使用されます。