Skip to content

NEI usage

Introduction

This tutorial shows how to:

  1. Prepare a NEI capture request.
  2. Validate the NEI capture feasibility.
  3. Verify the capture window availability.
  4. Place the NEI task order.

Important:

  • NEI assumes that the user has already done the conjunction analysis between one of our satellites and the object to be captured.
  • Two modes of capture are supported for NEI. In spotlight mode our satellite will point the center of the FOV to a constant point in space during the entire imaging collection. In evo_stripe mode our satellite will follow a trajectory that we call EVO path, which is a constant-altitude constant-geocentric trajectory. The recommended mode is evo_stripe because following a trajectory during the collection enables to track the object's movement as much as possible, and hence increase chances that the collected frames have the object within the FOV. So this tutorial will only focus on an evo stripe example.
  • The NEI capture has a default duration of 6 seconds, and during this period of time our satellite will collect frames while following the specified collection path.

Prepare a NEI capture request

Lets assume that we need the satellite newsat40 to image an object in space from time 2024-11-25T10:00:00.000Z to 2024-11-25T10:00:06.000Z (6 seconds of capture), and that we have an estimation of the position of such object over time.

Then, we will need to prepare the following parameters before assembling the order request:

  • satellite: Name of a satellite from our fleet that matches your conjunction conditions (relative distance, velocity, lighting conditions, etc). In the example this is newsat40.
  • first_point_time: Date and time at the center of the collection interval, in ISO format. In the example this is 2024-11-25T10:00:03.000Z.
  • first_point: Position of the object in space at time first_point_time, in ECEF LLA (longitude, latitude, altitude_meters). For example (162.79601871362405, -49.534438255541346, 600000).
  • second_point: Position of the object in space at time first_point_time + 0.1 s, in ECEF LLA (longitude, latitude, altitude_meters). For example (162.79367072584023, -49.52818678115404, 600000).

Note: Currently, the maximum supported altitude for first_point and second_point is 800000 m (800 km) above the WGS84 ellipsoid.

The rest of the parameters (product id, task name, etc) are also shown in the Python example below.

from datetime import datetime
import requests, time

first_point_time = datetime.datetime(2024,11,25,10,00,3,000)
first_point_lon_lat_alt = (162.79601871362405, -49.534438255541346, 600000)
second_point_lon_lat_alt = (162.79367072584023, -49.52818678115404, 600000)

payload = {
    'product': 186, # This tells the API that you are tasking NEI
    'project_name': "Object ABC123",
    "task_name": "ObjectABC123 - Attempt 1",
    'satellite': 'newsat40',
    'maneuver_type': 'evo_stripe',
    'absolute_exposure': 410,
    'evo_maneuver_reference_points': {
      'first_point': {
          'type': 'Point',
          'coordinates': [first_point_lon_lat_alt[0], first_point_lon_lat_alt[1], first_point_lon_lat_alt[2]]
      },
      'second_point': {
          'type': 'Point',
          'coordinates': [second_point_lon_lat_alt[0], second_point_lon_lat_alt[1], second_point_lon_lat_alt[2]]
      },
      'first_point_time': first_point_time.isoformat(),
    }    
}

Validate the NEI capture feasibility

The feasibility validation checks that our satellite will be able to perform the requested maneuver, by checking that:

  • The angular velocity of our satellite is less than 3dps when maneuvering prior to the collection interval and less than 1dps during collection interval: w_sat <= 3dps and w_sat <= 1dps respectively.
  • The angular acceleration of the satellite is less than 0.15dps2: w_sat_dot <= 0.15dps2.
  • The angle between the satellite Z+ axis and the sun vector is greater than 21°.

Our Analysis API will tell you whether your capture is feasible or not.

The following explanation assumes you have a valid access_token (please follow the steps in API Authentication and your contract_id (please follow the steps in Contract Selection).

headers = {
  "authorizationToken": f"Bearer {access_token}",
  "X-Satellogic-Contract-Id": contract_id
  }

analysis_url = "https://api.satellogic.com/tasking/analysis/"

# Post an analysis request for our NEI capture to check for geometrical feasibility
response = requests.post(f"{analysis_url}/ois-opportunities/", headers=headers, data=payload)

# The request returns an analysis_id
analysis_id = response.json()

# Use the analysis_id to retrieve the result of your analysis (might take a minute)
response = requests.get(f"{analysis_url}/status/{analysis_id}/", headers = headers)
while response.json()['status'] == 'PENDING':
  response = requests.get(f"{analysis_url}/status/{analysis_id}/", headers = headers)
  time.sleep(5)

# Visualize the result of the geometrical feasibility
print(response.json())

Verify the capture window availability

This can-add-order analysis evaluates whether the satellite will be available to take the request, considering actual demand an competition of placed orders.

# You can now check whether the satellite will be available to support your request
response = requests.post(f"{analysis_url}/ois-can-add-order/", headers=headers, data=payload)

# The request returns an analysis_id
analysis_id = response.json()

# Use the analysis_id to retrieve the result of your analysis (might take a minute)
response = requests.get(f"{analysis_url}/status/{analysis_id}/", headers = headers)
while response.json()['status'] == 'PENDING':
  response = requests.get(f"{analysis_url}/status/{analysis_id}/", headers = headers)
  time.sleep(5)

# Visualize the result of the satellite availability
print(response.json())

Place the NEI task order

tasking_url = "https://api.satellogic.com/tasking/"

# Place your NEI order
response = requests.post(f"{tasking_url}/ois/", headers=headers, data=payload)

# Confirm that we have received your order
print(response.json())

Last update: 2025-02-07