Forneça dados de efemérides de elevação de azimute - AWS Ground Station

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Forneça dados de efemérides de elevação de azimute

Importante

O recurso de efemérides de elevação de azimute está atualmente em um estado de visualização e requer integração explícita.

A funcionalidade de efemérides de elevação de azimute está sob estrito controle de acesso para um número limitado de casos de uso especializados e predeterminados. O acesso é significativamente mais restritivo do que os recursos de efemérides padrão fornecidos pelo cliente. Para obter mais informações sobre casos de uso aprovados e o processo de solicitação de acesso, entre em contato com .

Visão geral do

As efemérides de elevação de azimute fornecem uma maneira de especificar diretamente as direções de apontamento da antena sem fornecer informações orbitais do satélite. Em vez de enviar dados de efemérides que descrevem a órbita de um satélite, você fornece azimute e ângulos de elevação marcados com o tempo que informam à antena exatamente para onde apontar durante um contato.

AWS Ground Station trata as efemérides como dados de uso individualizados. Se você usar esse recurso opcional, a AWS usará seus dados de efemérides para fornecer suporte à solução de problemas.

Essa abordagem é particularmente útil para os seguintes cenários:

  • Suporte às operações iniciais: durante a fase de lançamento e órbita inicial (LEOP), quando dados orbitais precisos não estão disponíveis ou os parâmetros orbitais estão mudando rapidamente.

  • Padrões de apontamento personalizados: implementação de sequências de apontamento específicas para testes de antenas ou operações não padrão.

nota

Ao usar efemérides de elevação de azimute, o ARN do satélite pode ser omitido da solicitação de reserva de contato. Se o ARN do satélite não for omitido, ele ainda será incluído como parte dos dados de contato, mas as efemérides de elevação de azimute serão usadas para apontar a antena em vez de realizar a resolução prioritária das efemérides. A efeméride de elevação do azimute está associada a uma estação terrestre específica e define as direções de apontamento da antena para esse local.

Formato de dados de efemérides de elevação de azimute

Os dados de efemérides de elevação de azimute consistem em valores de azimute e elevação com marcação temporal organizados em segmentos. Cada segmento contém uma série de ângulos de azimute e elevação que abrangem um intervalo de tempo específico.

Os principais componentes dos dados de efemérides de elevação de azimute são:

  • Ground Station: A estação terrestre específica onde essa efeméride de elevação de azimute será usada.

  • Unidade de ângulo: A unidade de medida para ângulos (DEGREE_ANGLEouRADIAN).

  • Segmentos: uma ou mais coleções limitadas no tempo de azimute e ângulos de elevação.

  • Ângulos marcados com data e hora: valores individuais de azimute e elevação com registros de data e hora associados.

Cada segmento exige:

  • Uma época de referência (a hora base para o segmento)

  • Um intervalo de tempo válido (horários de início e término do segmento)

  • Pelo menos 5 pares marcados com data e hora azimuth/elevation

Restrições de elevação de azimute:

  • Azimute em graus: -180° a 360°

  • Azimute em radianos: -π a 2π

  • Elevação em graus: -90° a 90°

  • Elevação em radianos: -π/2 a π/2

  • Os valores de tempo devem estar em ordem crescente dentro de cada segmento

  • Os segmentos não devem se sobrepor no tempo

Para obter mais informações, consulte a documentação CreateEphemerisda API e o tipo de TimeAzEldados.

Criando efemérides de elevação de azimute

As efemérides de elevação de azimute são criadas usando a mesma ação de CreateEphemerisAPI, mas com o tipo de efemérides. azEl As principais diferenças das efemérides de TLE e OEM são:

  • Você deve especificar um groundStation parâmetro

  • O satelliteId parâmetro deve ser omitido da solicitação

  • As configurações de prioridade não se aplicam (cada efeméride de elevação de azimute é específica para uma estação terrestre)

  • Cada segmento deve conter pelo menos 5 azimuth/elevation pontos para suportar a interpolação de Lagrange de 4ª ordem

  • Limites e requisitos adicionais estão detalhados na documentação CreateEphemerisda API

É importante observar que o upload de uma efeméride define as efemérides como VALIDATING e inicia um fluxo de trabalho assíncrono que validará e gerará contatos potenciais a partir de suas efemérides. Uma efeméride só será usada para contatos depois de passar por esse fluxo de trabalho e seu status se tornar. ENABLED Você deve pesquisar o status das efemérides ou usar CloudWatch eventos DescribeEphemerispara rastrear as mudanças de status das efemérides.

Para solucionar uma efeméride inválida, consulte: Solucionar problemas de efemérides inválidas

Exemplo: criar efemérides de elevação de azimute por meio da API

O exemplo a seguir mostra como criar uma efeméride de elevação de azimute usando o 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']}")

Neste exemplo:

  • Os dados de elevação do azimute estão associados à estação terrestre “Ohio 1"

  • Os ângulos são especificados em graus

  • O segmento abrange um período de 15 minutos

  • Os dt valores são segundos atômicos deslocados da época de referência

  • Seis azimuth/elevation pares são fornecidos (o mínimo é 5)

Exemplo: carregar dados de elevação de azimute do S3

Para conjuntos de dados maiores, você pode carregar dados de elevação de azimute de um bucket do 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']}")

O objeto S3 deve conter uma estrutura JSON com os dados de elevação de azimute no mesmo formato mostrado no exemplo de upload direto.

Reservando contatos com efemérides de elevação de azimute

Ao usar uma efeméride de elevação de azimute para reservar um contato, o processo difere das efemérides TLE e OEM:

  1. Crie as efemérides de elevação do azimute usando CreateEphemeris

  2. Aguarde até que as efemérides atinjam o status ENABLED

  3. Reserve o contato usando ReserveContactsubstituições de rastreamento

Exemplo de reserva de contato com efemérides de elevação de azimute:

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']}")
nota

O satelliteArn parâmetro pode ser omitido ao reservar um contato com efemérides de elevação de azimute. A antena seguirá os ângulos de azimute e elevação especificados durante o contato.

Listando os contatos disponíveis

Ao usar efemérides de elevação de azimute, a API exige parâmetros específicos: ListContacts

  • O satelliteArn parâmetro pode ser omitido da solicitação

  • Você deve fornecer um ephemeris parâmetro com o ID de efemérides de elevação de azimute para especificar quais efemérides usar.

  • As janelas de contato disponíveis mostram quando o azimute e os ângulos de elevação fornecidos estão acima da máscara do local da estação terrestre solicitada

  • Você ainda deve fornecer groundStation e missionProfileArn

Exemplo de criar uma efeméride de elevação de azimute e listar os contatos disponíveis com ela:

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")
nota

O ephemeris parâmetro com o ID de elevação de azimute deve ser fornecido ao listar contatos para especificar quais efemérides de elevação de azimute devem ser usadas para determinar as janelas de contato. Se satelliteArn for incluído, ele será associado aos dados de contato, mas as efemérides de elevação do azimute serão usadas para apontar a antena, em vez de realizar a resolução prioritária das efemérides.