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.7.tar.gz (15.7 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.7-cp312-cp312-manylinux_2_35_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

ruststartracker-0.2.7-cp312-cp312-manylinux_2_35_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

ruststartracker-0.2.7-cp311-cp311-manylinux_2_35_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ x86-64

ruststartracker-0.2.7-cp311-cp311-manylinux_2_35_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

ruststartracker-0.2.7-cp310-cp310-manylinux_2_35_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ x86-64

ruststartracker-0.2.7-cp310-cp310-manylinux_2_35_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

File details

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

File metadata

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

File hashes

Hashes for ruststartracker-0.2.7.tar.gz
Algorithm Hash digest
SHA256 a8cbc7b98c2f85dc57faf0b92f537f0360e39f32e0a04a59bde32c29a590c99a
MD5 7d53c0a870db1edc478caacbcb3bea75
BLAKE2b-256 d329d15b5671ca144feeb0da77a77239d2c0a7920d7b05293fbeb3094ac76ed4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.7-cp312-cp312-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 8b4ecd8446836b6445f1cd09bd6e1e36cb9a3b69e6c3982755c927330fe17cac
MD5 34898a33c850a7fa154191dfba4ec80a
BLAKE2b-256 8c09ed07d156c9a891c22f14c6d332cd0f1f2fa20af1aab26a009af11d6008e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.7-cp312-cp312-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 95055f72c71678c2e0897a1ef5b9e1f82b907cbbe2bf7fd7ff353eb6319478ab
MD5 0f182a4dc42da65882a22e5b52eac645
BLAKE2b-256 1753dc2867177b51bb2b4020dbd60c144fddc89592b33633dc1ce672922dba2e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.7-cp311-cp311-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 a767ee9c7c15cb34709dfb850c85f8c3f1e65c80d3e2329492d4ec4bc734717e
MD5 cb299a5903422337b9058f30ef602bc8
BLAKE2b-256 4dfa2dc15b1bba6c042490851ecce226af23b04febf25cf57720e9f97973528b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.7-cp311-cp311-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 92c8b1b345fe29503a3c4cade9dbc54dd93992c76fc363203c02b2a4efd5c573
MD5 d5297a927868ad34702cb5e77627d60b
BLAKE2b-256 02723886890a224ecf5f38924e26216bf544cb5fb06c202d8275e507a77a533f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.7-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 ddfc7bb8aaff01e27ce9dba40f5354182a752e70680c840b01d0ae08572e58e2
MD5 2e528dbf1b052c27ca722202a330e157
BLAKE2b-256 7861d88cd7cc2c87be2f1e1bc5631539e45e5e0689b1daf1cb10ec3efeec9896

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.7-cp310-cp310-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 b03764dda4ef27a5b573353d82b4d474a92569aaab1f0230ce3146faf391c9c6
MD5 b5da4ea48645cc99e7340d850329b2dd
BLAKE2b-256 9c00dfa4eb7b3f195702419f574fbb3042b16cb07716f3ff057c5d045214f51c

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