기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
방위각 고도 에페메리스 데이터 제공
중요
방위각 고도 에페메리스 기능은 현재 미리 보기 상태이며 명시적 온보딩이 필요합니다.
방위각 고도 에페메리스 기능은 제한된 수의 사전 결정되고 특수한 사용 사례에 대해 엄격한 액세스 제어 하에 있습니다. 액세스는 고객이 제공하는 표준 에페메리스 기능보다 훨씬 더 제한적입니다. 승인된 사용 사례 및 액세스 요청 프로세스에 대한 자세한 내용은 <aws-groundstation@amazon.com>에 문의하십시오.
개요
방위각 고도 에페메리스는 위성 궤도 정보를 제공하지 않고 안테나 방향 지정을 직접 지정하는 방법을 제공합니다. 위성의 궤도를 설명하는 에페메리스 데이터를 업로드하는 대신 시간 태그가 지정된 방위각과 고도 각도를 제공하여 안테나에 접촉 전체에서 정확히 어디를 가리킬지 알려줍니다.
AWS Ground Station 는 에페메리스를 개별화된 사용 데이터
이 접근 방식은 다음 시나리오에 특히 유용합니다.
-
초기 작업 지원: 정확한 궤도 데이터를 사용할 수 없거나 궤도 파라미터가 빠르게 변화하는 시작 및 초기 궤도 단계(LEOP) 중.
-
사용자 지정 포인팅 패턴: 안테나 테스트 또는 비표준 작업을 위한 특정 포인팅 시퀀스 구현.
참고
방위각 고도 에페메리스를 사용하는 경우 연락처 예약 요청에서 위성 ARN을 생략할 수 있습니다. 위성 ARN이 생략되지 않은 경우에도 접촉 데이터의 일부로 포함되지만 방위각 고도 에페메리스는 에페메리스 우선 순위 확인을 수행하는 대신 안테나를 가리키는 데 사용됩니다. 방위각 고도 에페메리스는 특정 지상국과 연결되어 있으며 해당 위치에 대한 안테나 방향 지정을 정의합니다.
방위각 고도 에페메리스 데이터 형식
방위각 고도 에페메리스 데이터는 세그먼트로 구성된 시간 태그 방위각 및 고도 값으로 구성됩니다. 각 세그먼트에는 특정 시간 범위를 포함하는 일련의 방위각과 고도 각도가 포함되어 있습니다.
방위각 고도 에페메리스 데이터의 주요 구성 요소는 다음과 같습니다.
-
Ground Station:이 방위 고도 에페메리스가 사용될 특정 지상국입니다.
-
각도 단위: 각도( 또는 )의 측정 단위입니다
DEGREE_ANGLERADIAN. -
세그먼트: 방위각 및 고도 각도로 구성된 하나 이상의 시간 경계 모음입니다.
-
시간 태그가 지정된 각도: 연결된 타임스탬프가 있는 개별 방위각 및 고도 값입니다.
각 세그먼트에는 다음이 필요합니다.
-
참조 에포크(세그먼트의 기본 시간)
-
유효한 시간 범위(세그먼트의 시작 및 종료 시간)
-
시간 태그가 지정된 방위각/상승 페어 5개 이상
방위각 고도 제약 조건:
-
각도: -180°~360°의 방위각
-
라디안 단위의 방위각: -π ~ 2π
-
각도 상승: -90°~90°
-
라디안 단위의 상승: -π/2에서 π/2로
-
시간 값은 각 세그먼트 내에서 오름차순이어야 합니다.
-
세그먼트는 시간이 겹치지 않아야 합니다.
자세한 내용은 CreateEphemeris API 설명서 및 TimeAzEl 데이터 형식을 참조하세요.
방위각 고도 에페메리스 생성
방위각 고도 에페메리스는 동일한 CreateEphemeris API 작업을 사용하지만 azEl 에페메리스 유형을 사용하여 생성됩니다. TLE와 OEM 에페메리스의 주요 차이점은 다음과 같습니다.
-
groundStation파라미터를 지정해야 합니다. -
요청에서
satelliteId파라미터를 생략해야 합니다. -
우선 순위 설정은 적용되지 않습니다(각 방위각 고도 에페메리스는 지상국에만 해당됨).
-
4차 Lagrange 보간을 지원하려면 각 세그먼트에 방위각/상승 지점이 5개 이상 포함되어야 합니다.
-
추가 제한 및 요구 사항은 CreateEphemeris API 설명서에 자세히 설명되어 있습니다.
한 가지 주의할 점은 에피메리스를 업로드하면 에피메리스가 VALIDATING로 설정되고 비동기 워크플로가 시작되어 에피메리스를 검증하고 이로부터 잠재적 접촉을 생성하는 비동기 워크플로가 시작된다는 점입니다. 에페메리스는이 워크플로를 통과하고 상태가가 된 후에만 연락처에 사용됩니다ENABLED. DescribeEphemeris에서 에페메리스 상태를 폴링하거나 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']}")
이 예시는 다음과 같이 설정되어 있습니다.
-
방위각 고도 데이터는 "Ohio 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 에페메리스와 다릅니다.
-
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 파라미터를 생략할 수 있습니다. 안테나는 접촉 중에 지정된 방위각 및 고도 각도를 따릅니다.
사용 가능한 연락처 나열
방위각 고도 에페메리스를 사용하는 경우 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가 포함된 경우 고객 응대 데이터와 연결되지만 방위각 고도 에페메리스는 에페메리스 우선 순위 확인을 수행하는 대신 안테나를 가리키는 데 사용됩니다.