View a markdown version of this page

提供 TLE 星历数据 - AWS Ground Station

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

提供 TLE 星历数据

重要

星历 API 当前处于预览状态

星历 API 的访问权限仅在需要时提供。如果您需要能够上传自定义星历数据,请通过以下方式开 AWS 支持 票。AWS Support Center Console我们的团队将与您合作,为您的特定要求启用此功能。

概述

Two-line 元素 (TLE) 集是描述卫星轨道的标准格式。星历表API允许将TLE星历上传到以用于卫星。 AWS Ground Station 这些星历表会覆盖来自(参见:)的默认星历。 Space-Track 默认星历数据

AWS Ground Station 将星历视为个性化使用数据。如果您使用此可选功能,AWS 将使用您的星历数据来提供故障排除支持。

上传自定义 TLE 星历表可以提高跟踪质量,处理没有星历Space-Track表可用的早期行动,并 AWS Ground Station记录演习。但是,TLE 精度受到传播模型的限制,并且会随着时间的推移而降低。要在更长的时间跨度内获得更高保真度的星历数据,请考虑使用 OEM 格式(参见)。提供 OEM 星历数据

注意

在为卫星分配卫星目录号之前提供自定义星历表时,您可以使用TLE 00000 的卫星目录号字段以及 000 TLE国际标志字段的发射号部分(例如 24000A 2024年发射的运载工具)。

有关 TLE 格式的更多信息,请参阅Two-line 元素集

Alpha-5 TLE 中的卫星目录号

Two-Line 元素集 (TLE) 使用固定宽度的格式,其中卫星目录号字段(第 1 行和第 2 行的第 3—7 列)限制为 5 位数,支持的最大值为 99,999。为了表示超出此限制的卫星目录号,美国太空部队开发了Alpha-5编码方案。 Alpha-5 用字母字符(A—Z,不包括 I 和 O,以避免与数字 1 和 0 混淆)替换卫星目录编号字段的第一位数字。这使现有固定宽度的TLE格式中可表示的卫星目录号的范围从100,000扩大到339,999。

Alpha-5 纯粹是 TLE 文本格式的显示编码。基础数字卫星目录号不变。 AWS Ground Station API 中的noradSatelliteID字段仍然是整数——诸如ListSatellites和之类的 API 响应GetSatellite继续返回数字卫星目录号,而不是 Alpha-5 编码形式。 Alpha-5 编码仅与 TLE 文本行本身相关。

AWS Ground Station 支持包含 Alpha-5 编码卫星编号的 TLE 星历。当您通过CreateEphemeris操作上传 TLE 时,请 AWS Ground Station 正确解析 Alpha-5 编码的卫星编号并在内部将其解析为相应的整数卫星目录号。完全支持卫星目录号在(100,000—339,999) Alpha-5 范围内的卫星。

以下是卫星目录编号为 100,000 的卫星的 TLE 设置示例。 Alpha-5 编码表示为A0000每行 TLE 的第 3—7 列:

[ { "tleLine1": "1 A0000U 26001A 26120.50000000 .00000072 00000-0 24500-4 0 9991", "tleLine2": "2 A0000 97.4500 85.2300 0012345 45.6789 314.5678 15.20000000 10013", "validTimeRange": { "startTime": 1777680000, "endTime": 1778284800 } } ]

有关 Alpha-5 编码方案的更多信息,请参阅Space-Track Alpha-5文档

创建 TLE 星历表

可以使用 API 中的CreateEphemeris操作创建 TLE 星历。 AWS Ground Station 此操作将使用请求正文或指定 S3 存储桶中的数据上传星历。

请务必注意,上传星历会将星历设置为 VALIDATING 并启动异步工作流程,该工作流程将验证您的星历并生成可能联络。只有当星历通过此工作流程并成为 ENABLED 后,才会将其用于联络。您应该轮DescribeEphemeris询星历状态或使用 CloudWatch 事件来跟踪星历表的状态变化。

要对无效的星历表进行故障排除,请参阅:对无效的星历进行故障排除

示例:通过 API 创建两行元素 (TLE) 集星历

AWS 软件开发工具包和 CLI 可用于通过调用上传两行元素 (TLE) 设置的星历表。 AWS Ground Station CreateEphemeris 该星历表将用于代替卫星的默认星历数据(参见)。默认星历数据此示例说明如何使用AWS 适用于 Python 的软件开发工具包 (Boto3) 执行此操作。

TLE 集是 JSON 格式的对象,可将一个或多个 TLE 串在一起以构造连续轨迹。TLE 集中的 TLE 必须形成一个连续集,我们可以用它来构造轨迹(即 TLE 集中的 TLE 之间没有时间间隔)。下面显示了一个 TLE 集示例:

[ { "tleLine1": "1 25994U 99068A 20318.54719794 .00000075 00000-0 26688-4 0 9997", "tleLine2": "2 25994 98.2007 30.6589 0001234 89.2782 18.9934 14.57114995111906", "validTimeRange": { "startTime": 12345, "endTime": 12346 } }, { "tleLine1": "1 25994U 99068A 20318.54719794 .00000075 00000-0 26688-4 0 9997", "tleLine2": "2 25994 98.2007 30.6589 0001234 89.2782 18.9934 14.57114995111906", "validTimeRange": { "startTime": 12346, "endTime": 12347 } } ]
注意

TLE 集中 TLE 的时间范围必须完全匹配才能成为有效的连续轨迹。

TLE 集可以通过 bot AWS Ground Station o3 客户端上传,如下所示:

import boto3 from datetime import datetime, timedelta, timezone # Create AWS Ground Station client ground_station_client = boto3.client("groundstation") # Create TLE ephemeris tle_ephemeris = ground_station_client.create_ephemeris( name="Example Ephemeris", satelliteId="2e925701-9485-4644-b031-EXAMPLE01", enabled=True, expirationTime=datetime.now(timezone.utc) + timedelta(days=3), priority=2, ephemeris={ "tle": { "tleData": [ { "tleLine1": "1 25994U 99068A 20318.54719794 .00000075 00000-0 26688-4 0 9997", "tleLine2": "2 25994 98.2007 30.6589 0001234 89.2782 18.9934 14.57114995111906", "validTimeRange": { "startTime": datetime.now(timezone.utc), "endTime": datetime.now(timezone.utc) + timedelta(days=7), }, } ] } }, ) print(f"Created TLE ephemeris with ID: {tle_ephemeris['ephemerisId']}")

此调用将返回一个星历,该星历可以在将来用于引用星历。例如,我们可以使用上面电话中提供的 ephemeriSID 来轮询星历表的状态:

import boto3 from datetime import datetime, timedelta, timezone import time # Create AWS Ground Station client ground_station_client = boto3.client("groundstation") # First, create a TLE ephemeris print("Creating TLE ephemeris...") tle_ephemeris = ground_station_client.create_ephemeris( name="Example TLE Ephemeris for Description", satelliteId="2e925701-9485-4644-b031-EXAMPLE01", enabled=True, expirationTime=datetime.now(timezone.utc) + timedelta(days=3), priority=2, ephemeris={ "tle": { "tleData": [ { "tleLine1": "1 25994U 99068A 20318.54719794 .00000075 00000-0 26688-4 0 9997", "tleLine2": "2 25994 98.2007 30.6589 0001234 89.2782 18.9934 14.57114995111906", "validTimeRange": { "startTime": datetime.now(timezone.utc), "endTime": datetime.now(timezone.utc) + timedelta(days=7), }, } ] } }, ) ephemeris_id = tle_ephemeris["ephemerisId"] print(f"Created TLE ephemeris with ID: {ephemeris_id}") # Describe the ephemeris immediately to check initial status print("Describing ephemeris...") response = ground_station_client.describe_ephemeris(ephemerisId=ephemeris_id) print(f"Ephemeris ID: {response['ephemerisId']}") print(f"Name: {response['name']}") print(f"Status: {response['status']}")

下面提供了 DescribeEphemeris 操作的响应示例

{ "creationTime": 1620254718.765, "enabled": true, "name": "Example Ephemeris", "ephemerisId": "fde41049-14f7-413e-bd7b-EXAMPLE01", "priority": 2, "status": "VALIDATING", "suppliedData": { "tle": { "ephemerisData": "[{\"tleLine1\": \"1 25994U 99068A 20318.54719794 .00000075 00000-0 26688-4 0 9997\",\"tleLine2\": \"2 25994 98.2007 30.6589 0001234 89.2782 18.9934 14.57114995111906\",\"validTimeRange\": {\"startTime\": 1620254712000,\"endTime\": 1620859512000}}]" } } }

建议轮询DescribeEphemeris路径或使用 CloudWatch 事件来跟踪上传的星历表的状态,因为该星历必须经过异步验证工作流程,然后才能将其设置为可用于安排ENABLED和执行联系人。

请注意,在上面的示例中,TLE 集合中所有 TLE 25994 中的 NORAD ID 必须与您的卫星在数据库中分配的 NORAD ID 相匹配。 Space-Track

示例:从 S3 存储桶上传 TLE 星历数据

也可以通过指向存储桶和对象密钥直接从 S3 存储桶上传 TLE 星历文件。 AWS Ground Station 将代表你检索对象。有关静态数据加密的信息详 AWS Ground Station 见:静态数据加密 AWS Ground Station

以下是从 S3 存储桶上传 TLE 星历文件的示例

import boto3 from datetime import datetime, timedelta, timezone import json # Create AWS clients s3_client = boto3.client("s3") ground_station_client = boto3.client("groundstation") # Define S3 bucket and key bucket_name = "ephemeris-bucket" object_key = "test_data.tle" # Create sample TLE set data # Note: For actual satellites, use real TLE data from sources like Space-Track tle_set_data = [ { "tleLine1": "1 25994U 99068A 20318.54719794 .00000075 00000-0 26688-4 0 9997", "tleLine2": "2 25994 98.2007 30.6589 0001234 89.2782 18.9934 14.57114995111906", "validTimeRange": { "startTime": datetime.now(timezone.utc), "endTime": datetime.now(timezone.utc) + timedelta(days=3), }, }, { "tleLine1": "1 25994U 99068A 20321.54719794 .00000075 00000-0 26688-4 0 9998", "tleLine2": "2 25994 98.2007 33.6589 0001234 89.2782 18.9934 14.57114995112342", "validTimeRange": { "startTime": datetime.now(timezone.utc) + timedelta(days=3), "endTime": datetime.now(timezone.utc) + timedelta(days=7), }, }, ] # Convert to JSON string for upload tle_json = json.dumps(tle_set_data, indent=2) # Upload sample TLE data to S3 print(f"Uploading TLE set data to s3://{bucket_name}/{object_key}") s3_client.put_object( Bucket=bucket_name, Key=object_key, Body=tle_json, ContentType="application/json" ) print("TLE set data uploaded successfully to S3") print(f"Uploaded {len(tle_set_data)} TLE entries covering 7 days") # Create TLE ephemeris from S3 print("Creating TLE ephemeris from S3...") s3_tle_ephemeris = ground_station_client.create_ephemeris( name="2022-11-05 S3 TLE Upload", satelliteId="fde41049-14f7-413e-bd7b-EXAMPLE01", enabled=True, expirationTime=datetime.now(timezone.utc) + timedelta(days=5), priority=2, ephemeris={"tle": {"s3Object": {"bucket": bucket_name, "key": object_key}}}, ) print(f"Created TLE ephemeris with ID: {s3_tle_ephemeris['ephemerisId']}")