提供方位提升暫時性資料 - AWS Ground Station

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

提供方位提升暫時性資料

重要

方位提升暫時性特徵目前處於預覽狀態,需要明確加入。

對於有限數量的預先確定、專門的使用案例,方位提升暫時性功能受到嚴格存取控制。存取比標準客戶提供的暫時性功能更嚴格。如需已核准使用案例和存取請求程序的詳細資訊,請聯絡

概觀

方位浮水印提供直接指定天線指向方向的方法,而無需提供衛星軌道資訊。您不用上傳描述衛星軌道的暫時性資料,而是提供標記時間的方位角和高度角度,告訴天線在整個聯絡中的確切位置。

AWS Ground Station 將 ephemerides 視為個人化用量資料。如果您使用此選用功能,AWS 將使用 ephemeris 資料來提供故障診斷支援。

此方法在下列案例中特別有用:

  • 早期操作支援:在啟動和早期軌道階段 (LEOP) 期間,如果沒有精確的軌道資料,或軌道參數正在快速變更。

  • 自訂指標模式:實作特定指標序列進行天線測試或非標準操作。

注意

使用方位提升暫時性時,可能會從聯絡人保留請求中省略衛星 ARN。如果未省略衛星 ARN,它仍會包含在聯絡資料中,但方位角抬高暫時符號將用於天線指向,而不是執行暫時優先順序解析。方位角海拔高度與特定地面站相關聯,並定義該位置的天線指向方向。

方位海拔暫時性資料格式

方位海拔暫時性資料由時間標記方位和海拔值組成,組織成區段。每個區段都包含涵蓋特定時間範圍的一系列方位角和高度角。

方位海拔暫時性資料的關鍵元件如下:

  • Ground Station:將使用此方位方位海拔ephemeris的特定地面工作站。

  • 角度單位:角度的測量單位 (DEGREE_ANGLERADIAN)。

  • 區段:一個或多個時間限制的方位角和高度角度集合。

  • 時間標記角度:具有相關聯時間戳記的個別方位和高度值。

每個區段都需要:

  • 參考 epoch (區段的基本時間)

  • 有效的時間範圍 (區段的開始和結束時間)

  • 至少 5 個時間標記方位/上升對

方位提升限制條件:

  • 方位度:-180° 到 360°

  • 弧度的方位:-π 到 2π

  • 上升度數:-90° 到 90°

  • 弧度的上升:-π/2 到 π/2

  • 時間值必須在每個區段內以遞增順序排列

  • 區段不得在時間上重疊

如需詳細資訊,請參閱 CreateEphemeris API 文件和 TimeAzEl 資料類型。

建立方位提升暫時性

方位浮水印是使用相同的 CreateEphemeris API 動作建立,但使用 ephemeris azEl 類型。與 TLE 和 OEM 暫時性差異的主要差異為:

  • 您必須指定groundStation參數

  • 必須從請求中省略 satelliteId 參數

  • 優先順序設定不適用 (每個方位方位海拔暫時性都專屬於地面站)

  • 每個區段必須至少包含 5 個方位/上升點,以支援第 4 個順序的延遲插補

  • CreateEphemeris API 文件中詳細說明了其他限制和要求

請務必注意,上傳 ephemeris 會將 ephemeris 設定為 ,VALIDATING並啟動非同步工作流程,以驗證和產生來自 ephemeris 的潛在聯絡人。只有在聯絡人通過此工作流程且其狀態變為 後,才會使用暫時性聯絡人ENABLED。您應該輪詢 DescribeEphemeris 以取得暫時性狀態,或使用 CloudWatch 事件來追蹤暫時性狀態變更。

若要對無效的暫時性事件進行故障診斷,請參閱: 故障診斷無效的短暫性事件

範例:透過 API 建立方位提升暫時性

下列範例示範如何使用適用於 Python 的 AWS SDK (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值是與參考 epoch 的原子秒位移

  • 提供六個方位/上升對 (最小值為 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 ephemeris 不同:

  1. 使用 CreateEphemeris 建立方位角海拔面積

  2. 等待 ephemeris 達到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 參數

  • 您必須提供具有方位角海拔 ephemeris ID 的 ephemeris 參數,以指定要使用的 ephemeris

  • 可用的聯絡時段會顯示提供的方位角和高度角度何時高於所請求地面站的站點遮罩

  • 您仍然必須提供 groundStationmissionProfileArn

建立方位角升高暫時性並列出可用聯絡人的範例:

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包含 ,它將與聯絡人資料相關聯,但方位角高度暫時性符號將用於天線指向,而不是執行暫時性優先順序解析。