本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
提供方位角高程星历数据
重要
方位角高程星历表功能目前处于预览状态,需要明确入门。
对于有限数量的预先确定的专业用例,Azimuth 高程星历表功能受到严格的访问控制。与客户提供的标准星历功能相比,访问权限的限制要严格得多。有关已批准的用例和访问请求流程的更多信息,请联系 <aws-groundstation@amazon.com>。
概述
方位角高程星历提供了一种无需提供卫星轨道信息即可直接指定天线指向方向的方法。与其上传描述卫星轨道的星历数据,不如提供带时间标签的方位角和仰角,让天线在整个接触过程中准确指向何处。
AWS Ground Station 将星历视为个性化
这种方法对以下场景特别有用:
-
早期操作支持:在发射和早期轨道阶段 (LEOP) 期间,无法获得精确的轨道数据,或者轨道参数正在迅速变化。
-
自定义指向模式:为天线测试或非标准操作实现特定的指向序列。
注意
使用方位角高程星历表时,联系人预订请求中可以省略卫星 ARN。如果不省略卫星 ARN,它仍将作为联系人数据的一部分,但方位角高程星历将用于天线指向,而不是执行星历优先分辨率。方位角仰角星历表与特定的地面站相关联,并定义了该位置的天线指向方向。
方位角高程星历数据格式
方位角高程星历表数据由带时间标签的方位角和高程值组成,这些值按分段组织。每个分段都包含一系列覆盖特定时间范围的方位角和仰角。
方位角高程星历数据的关键组成部分是:
-
G@@ round Station:将使用此方位角高程星历表的特定地面站。
-
角度单位:角度的计量单位(
DEGREE_ANGLE或RADIAN)。 -
分段:一个或多个有时间限制的方位角和仰角集合。
-
带时间标签的角度:带有相关时间戳的单个方位角和仰角值。
每个分段都需要:
-
参考时期(分段的基准时间)
-
有效的时间范围(分段的开始和结束时间)
-
至少 5 对带时间标签 azimuth/elevation 的对
方位角高程限制:
-
以度为单位的方位角:-180° 到 360°
-
以弧度为单位的方位角:-π 到 2π
-
以度为单位的高度:-90° 到 90°
-
以弧度为单位的高度:-π/2 到 π/2
-
每个分段内的时间值必须按升序排列
-
分段不得在时间上重叠
有关更多信息,请参阅 CreateEphemerisAPI 文档和TimeAzEl数据类型。
创建方位角高程星历
方位角高程星历使用相同的 CreateEphemerisAPI 操作创建,但使用星历类型。azEl与 TLE 和 OEM 星历表的主要区别在于:
-
你必须指定一个
groundStation参数 -
请求中必须省略该
satelliteId参数 -
优先级设置不适用(每个方位角高程星历表都特定于地面站)
-
每个分段必须包含至少 5 个 azimuth/elevation 点才能支持 4 阶拉格朗日插值
-
CreateEphemerisAPI 文档中详细介绍了其他限制和要求
请务必注意,上传星历会将星历设置为 VALIDATING 并启动异步工作流程,该工作流程将验证您的星历并生成可能联络。只有在联系人通过此工作流程且其状态变为之后,星历才会用于联系人。ENABLED您应该轮DescribeEphemeris询星历状态或使用 CloudWatch 事件来跟踪星历的状态变化。
要对无效的星历进行故障排除,请参阅:对无效的星历进行故障排除
示例:通过 API 创建方位角高程星历
以下示例说明如何使用适用于 Python 的 SDK ( AWS 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']}")
在本示例中:
-
方位角高程数据与 “俄亥俄一号” 地面站相关联
-
角度以度为单位指定
-
该片段为时15分钟
-
这些
dt值是与参考时代相比的原子秒偏移量 -
提供六 azimuth/elevation 双(最少为 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 星历表不同:
-
使用创建方位角高程星历 CreateEphemeris
-
等待星历达到状态
ENABLED -
使用追踪覆盖功能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参数。在接触过程中,天线将遵循指定的方位角和仰角。
列出可用的联系人
使用方位角高程星历表时,API 需要特定的参数:ListContacts
-
可以从请求中省略该
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如果包含,它将与接触数据相关联,但是方位角仰角星历将用于天线指向,而不是执行星历优先分辨率。