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.4.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.4-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.4-cp312-cp312-manylinux_2_35_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

ruststartracker-0.2.4-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.4-cp311-cp311-manylinux_2_35_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

ruststartracker-0.2.4-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.4-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.4.tar.gz.

File metadata

  • Download URL: ruststartracker-0.2.4.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.4.tar.gz
Algorithm Hash digest
SHA256 79b8d292d9cba3ecd5a59853f20f23979ab266494c04c4497989a8ff6b7973a4
MD5 8ab7070b13b21c675e5066ddb8544128
BLAKE2b-256 cae9040baf7a8d130f73a57d1582dd03774a6225c8f2c2d43d1f66b579ad5e12

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.4-cp312-cp312-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 fea233b5a3e24b141f1f00704966bed7e304a2aaa3f3575acc64dd0bbf6dac2e
MD5 cb8c802a612cb046ae261f4309cff4cb
BLAKE2b-256 565f80b7cefe8573f98e88bc25291de8f293965f6006f5578112e6987425d745

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.4-cp312-cp312-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 c3a2673730baf14c9b6334db4ed6b22cfb304947ede10fd957a3f6d33eeadc9c
MD5 46b775af718877bd72d04a1ac049e17e
BLAKE2b-256 b554a2f8de088105f890f7956499ab80cabe406039856e362bb24f15e246bd7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.4-cp311-cp311-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 729d80a87a38a13a015b00638b5be699ae8cdd32d0eb9dec0bbc0f75a503d46f
MD5 d3682f682795ecc0be92af9984870491
BLAKE2b-256 47fa58a92d36d967ed9950f45f04918e5935fbeba54e8fad86b77cbd54ba3f64

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.4-cp311-cp311-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 558e7094ade49033c50ea2e703b073cb933b9696b71ab97321681fa2caf5c114
MD5 9fe377d19b51ed3d10f17663d172f926
BLAKE2b-256 06896b8282c95595ef451c2f4aacca7e416ae3e889401fc2251df404c769eb06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.4-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 a3f3852ab15df64f530c68d8a799d119022f16ecf9b7d57f1a337f7ddcc7f869
MD5 afd4b754555996cd4295d63b81748258
BLAKE2b-256 b713ea36b20b21ab78a721cdd14efc475b05052e63f7a72f401c8cd19102a617

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.4-cp310-cp310-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 9230c331f0d746d11c5bbd2735edb1c1153b04e830c668419825931d6b3cc38e
MD5 ea006eb36782c7bfcb19253d2ee1ffc5
BLAKE2b-256 65f3adb338ac872d2d6e7d3f1ba1c068d7e3c8b21a1e4a353e1ddde598f1e341

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