View a markdown version of this page

提供 TLE 星历数据 - AWS Ground Station

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

提供 TLE 星历数据

重要

星历 API 当前处于预览状态

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

概述

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

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

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

注意

在为卫星分配卫星目录编号之前提供自定义星历时,您可以使用 00000 TLE的卫星目录编号字段,以及 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字段仍为整数 — API 响应如ListSatellitesGetSatellite继续返回数字卫星目录号,而不是 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) 集星历表

S AWS DK 和 CLI 可用于通过调用上传双行元素 (TLE) 集星历表。AWS Ground StationCreateEphemeris该星历将用于代替卫星的默认星历数据(参见)。默认星历数据此示例展示了如何使用适用于 Python 的AWS SDK (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,将来可用于引用星历表。例如,我们可以使用上面调用中提供的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 存储桶和对象密钥直接从 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']}")