Skip to main content

Lightweight Python Star Tracker With Rust Backend

Project description

Lightweight Python Star Tracker With Rust Backend

Based on the methodology used in https://github.com/nasa/COTS-Star-Tracker, with following improvements:

  • Reduced dependencies to opencv and numpy for lightweight usage in a Raspberry Pi.
  • Reimplemented computationally expensive parts in rust. This includes most parts that are not image processing related.
  • Added quadratic inter star angle index look up polynomial for faster triangle search.
  • Added spatial index to look up neighboring stars.

Features:

  • Attitude estimation from image and camera calibration parameters.
  • Attitude estimation from list of star observation coordinates.
  • Star catalog creation with temporal corrections.

Example

Rust

See examples/basic.rs

// Get catalog positions
let catalog: StarCatalog = StarCatalog::from_gaia(max_magnitude: ...).unwrap();
let stars_xyz: Vec<[f32; 3]> = catalog.normalized_positions(epoch: ..., observer_position: ...);
let stars_mag: Vec<f32> = catalog.magnitudes();

// Create StarTracker instance (reuse this)
let star_matcher = StarMatcher::new(
    stars_xyz,
    stars_mag,
    max_lookup_magnitude: ...
    max_inter_star_angle: ...,
    inter_star_angle_tolerance: ...,
    min_matches: ...,
    timeout: ...
);

// Normalized observation in the camera frame
let obs_xyz_camera: Vec<[f32; 3]> = ...

let result = star_matcher.find(&obs_xyz_camera);
println!("Result: {:?}", result);

Python

import ruststartracker

# Get catalog positions
catalog = ruststartracker.StarCatalog(max_magnitude=...)
star_catalog_vecs = catalog.normalized_positions(epoch=...)

# Define opencv camera parameters, see https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html
camera_params = ruststartracker.CameraParameters(
    camera_matrix=...,
    cam_resolution=...,
    dist_coefs=...,
)

# Create StarTracker instance (reuse this)
st = ruststartracker.StarTracker(
    star_catalog_vecs,
    camera_params,
    max_inter_star_angle=...,
    inter_star_angle_tolerance=...,
    n_minimum_matches=...,
    timeout_secs=...,
)

# Obtain numpy array image
img = ...

# Find attitude from given image
result = st.process_image(img)

print(result)
# StarTrackerResult(quat=[-0.43977802991867065, -0.439766526222229, -0.4398997128009796, 0.6478340029716492], match_ids=[1435, 1272, 1140, 2035, 1070, 1438, 1338, 903, 260, 2141, 1771, 1727, 385, 1717, 2204, 2062, 1989, 1634, 708, 1357], n_matches=20, duration_s=0.0003700880042742938)

Installation

  • Install with pip install ruststartracker (Currently only ARM/x86 Linux wheels available).

Attributions

Gaia Data

This project includes data from the European Space Agency (ESA) mission Gaia, processed by the Gaia Data Processing and Analysis Consortium (DPAC). Funding for the DPAC has been provided by national institutions, in particular the institutions participating in the Gaia Multilateral Agreement.

Gaia DR3 data is © European Space Agency and is released under the Creative Commons Attribution 4.0 International License (CC BY 4.0).

Gaia Collaboration, Vallenari et al. (2022), A&A 674, A1. DOI: 10.1051/0004-6361/202243940

Hipparcos and Tycho Data

This project includes data from the European Space Agency (ESA) mission Hipparcos.

The Hipparcos and Tycho Catalogues were processed by the Hipparcos and Tycho Data Analysis Consortium.

The Hipparcos and Tycho Catalogues are © European Space Agency and are released under the Creative Commons Attribution 3.0 IGO (CC BY 3.0 IGO) license.

Perryman, M. A. C., et al. (1997), Astronomy & Astrophysics 323, L49-L52. 1997A&A...323L..49P

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ruststartracker-0.2.10.tar.gz (16.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ruststartracker-0.2.10-cp312-cp312-manylinux_2_35_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

ruststartracker-0.2.10-cp312-cp312-manylinux_2_35_aarch64.whl (4.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

ruststartracker-0.2.10-cp311-cp311-manylinux_2_35_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ x86-64

ruststartracker-0.2.10-cp311-cp311-manylinux_2_35_aarch64.whl (4.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

ruststartracker-0.2.10-cp310-cp310-manylinux_2_35_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ x86-64

ruststartracker-0.2.10-cp310-cp310-manylinux_2_35_aarch64.whl (4.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

File details

Details for the file ruststartracker-0.2.10.tar.gz.

File metadata

  • Download URL: ruststartracker-0.2.10.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ruststartracker-0.2.10.tar.gz
Algorithm Hash digest
SHA256 44fe876f88c4882ab6368fd3a8232f8e00c1fb692e355594647f026e12cacee7
MD5 6383f1356f4dcdcc02a31021cd5692fa
BLAKE2b-256 43e8cd7925390c4ccf8f197915b703958574416b0beae0c5a406b054c06c5d9a

See more details on using hashes here.

File details

Details for the file ruststartracker-0.2.10-cp312-cp312-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for ruststartracker-0.2.10-cp312-cp312-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 1351596aa8a5092462f72aa6ea234434c095944d4acd191eb46463afa02aa46e
MD5 e600df7dc1e5795279261f541d93a6c4
BLAKE2b-256 d9978e6f7bce560b0a418a128ac83747ea18671cc36086378742c2af6aa4960d

See more details on using hashes here.

File details

Details for the file ruststartracker-0.2.10-cp312-cp312-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for ruststartracker-0.2.10-cp312-cp312-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 967df65d6a1504620c2e6913db50ce96211e74d153b73ffac3368adfb1945afe
MD5 f993202e69d359a16a742f538a226724
BLAKE2b-256 5883388a900cbc0a0d09cd1a061b0adfd984abe5bf43189372bf7d5f4559b5a6

See more details on using hashes here.

File details

Details for the file ruststartracker-0.2.10-cp311-cp311-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for ruststartracker-0.2.10-cp311-cp311-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 f917f9b322d1b3847c1c74551dacd35392ec03fd292220eb8e367b5626a02f61
MD5 dc7d97e7bce96b21a550036d516c1b1c
BLAKE2b-256 226676c80af8cbe744496ad90874c80d197f5201ee7202708b1fd176116aea23

See more details on using hashes here.

File details

Details for the file ruststartracker-0.2.10-cp311-cp311-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for ruststartracker-0.2.10-cp311-cp311-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 898c70a17e51ab21c2c3233c451f0c8b10c9153a174a315691ebcd981ac6c2f9
MD5 a2eae8a61910ae06736fbd16931bfddb
BLAKE2b-256 6b37475c1f38461a4671241639ae4b5f4eb9e1c7b29bcb9af2350c64f6a6c94a

See more details on using hashes here.

File details

Details for the file ruststartracker-0.2.10-cp310-cp310-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for ruststartracker-0.2.10-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 ae8f5b599746943bf9052e677e01371d10e9d4b23deaf9c4c0f2f4bae18c4a6f
MD5 83329cafc71dec190a104dc229227c86
BLAKE2b-256 efaef4755d495a491b82a156e3396372a03a149355ba695cdaf0eb084b9f13ca

See more details on using hashes here.

File details

Details for the file ruststartracker-0.2.10-cp310-cp310-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for ruststartracker-0.2.10-cp310-cp310-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 aaab748c71047fd9f9113cb507dbe0f9eea305fb0402d823090828924b06cbc5
MD5 ff8d677f702f4b6b115e8458eb9bdb1f
BLAKE2b-256 b871c0dcf8259b87f8662d884fc1d34e1e561e80a63326c938b0bc7ddfc8deae

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page