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.9.tar.gz (16.0 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.9-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.9-cp312-cp312-manylinux_2_35_aarch64.whl (4.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

ruststartracker-0.2.9-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.9-cp311-cp311-manylinux_2_35_aarch64.whl (4.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

ruststartracker-0.2.9-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.9-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.9.tar.gz.

File metadata

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

File hashes

Hashes for ruststartracker-0.2.9.tar.gz
Algorithm Hash digest
SHA256 db922aa0d7bd80b7943d65c5440e2678c45e8fdb61aeb067d6fa319db926804c
MD5 102d52671215336a167afe5cef0ad559
BLAKE2b-256 3509b8a42b76bebf1340f357e3a52e2a18ac354a41d9d06e5c8ae5dcbd964165

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.9-cp312-cp312-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 620e503fa1ac9e434eaa62877d5c8e40481af152293bea7981ff6a767dea10af
MD5 63b8d5f2f90315ea76000d23bc8cc56c
BLAKE2b-256 3a2f4bd6fb3d7c88e5e119a22a6435692805fbf7176923d4aab35c1c798c411c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.9-cp312-cp312-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 9d50cd3e79d5b869c7b1be01be3239ce172e5a875f5d5b489d7506a6abc4ad80
MD5 5598abb8ba3a1146ca21bae956a085ad
BLAKE2b-256 1590e82b0c5349a3c637ee83b05cc961568eeb3ea37c0a3935c7c317b60a7a43

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.9-cp311-cp311-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 cbcaa661aee6e3633b791388a7e23ce5aabdf7f2e363c16aeac13ad369959376
MD5 5e0b6328d6036bece4f516ee59974b23
BLAKE2b-256 47347b87eaa4fa9b8e69e740b604cce84ed65909f86be5541a238507f7bb104b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.9-cp311-cp311-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 6cf43fb0bf0ee965c5e24157707a3f67efc0a867bcb1c2846d04d7acfaf87f56
MD5 23fc82560c04dd6bc53d799446be5788
BLAKE2b-256 a7cee02394baab3e95ff3aa05928110b574d545be435c9acb4ee396bf0c69568

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.9-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 3645a816c9d906456a90f7ad337f0f133e92590486b223b0dc2663c139da3747
MD5 cf227b4d19f38e3b48977b73cd4e65bc
BLAKE2b-256 73c8d34faa0088296b58c50370ffd11ef2fab9661f409c8807b56dad0a8e8447

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruststartracker-0.2.9-cp310-cp310-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 48b0cf2ae5ab26bebe6b75fb224a191f021d3713c325366635c36154059fddcd
MD5 44003e0e8f63616484e66edce0547589
BLAKE2b-256 254062805a77c4d8ece3c5ad1e6034bb33b3d05b89146f85a29e7f3737b7309c

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