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
// 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44fe876f88c4882ab6368fd3a8232f8e00c1fb692e355594647f026e12cacee7
|
|
| MD5 |
6383f1356f4dcdcc02a31021cd5692fa
|
|
| BLAKE2b-256 |
43e8cd7925390c4ccf8f197915b703958574416b0beae0c5a406b054c06c5d9a
|
File details
Details for the file ruststartracker-0.2.10-cp312-cp312-manylinux_2_35_x86_64.whl.
File metadata
- Download URL: ruststartracker-0.2.10-cp312-cp312-manylinux_2_35_x86_64.whl
- Upload date:
- Size: 4.5 MB
- Tags: CPython 3.12, manylinux: glibc 2.35+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1351596aa8a5092462f72aa6ea234434c095944d4acd191eb46463afa02aa46e
|
|
| MD5 |
e600df7dc1e5795279261f541d93a6c4
|
|
| BLAKE2b-256 |
d9978e6f7bce560b0a418a128ac83747ea18671cc36086378742c2af6aa4960d
|
File details
Details for the file ruststartracker-0.2.10-cp312-cp312-manylinux_2_35_aarch64.whl.
File metadata
- Download URL: ruststartracker-0.2.10-cp312-cp312-manylinux_2_35_aarch64.whl
- Upload date:
- Size: 4.1 MB
- Tags: CPython 3.12, manylinux: glibc 2.35+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
967df65d6a1504620c2e6913db50ce96211e74d153b73ffac3368adfb1945afe
|
|
| MD5 |
f993202e69d359a16a742f538a226724
|
|
| BLAKE2b-256 |
5883388a900cbc0a0d09cd1a061b0adfd984abe5bf43189372bf7d5f4559b5a6
|
File details
Details for the file ruststartracker-0.2.10-cp311-cp311-manylinux_2_35_x86_64.whl.
File metadata
- Download URL: ruststartracker-0.2.10-cp311-cp311-manylinux_2_35_x86_64.whl
- Upload date:
- Size: 4.5 MB
- Tags: CPython 3.11, manylinux: glibc 2.35+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f917f9b322d1b3847c1c74551dacd35392ec03fd292220eb8e367b5626a02f61
|
|
| MD5 |
dc7d97e7bce96b21a550036d516c1b1c
|
|
| BLAKE2b-256 |
226676c80af8cbe744496ad90874c80d197f5201ee7202708b1fd176116aea23
|
File details
Details for the file ruststartracker-0.2.10-cp311-cp311-manylinux_2_35_aarch64.whl.
File metadata
- Download URL: ruststartracker-0.2.10-cp311-cp311-manylinux_2_35_aarch64.whl
- Upload date:
- Size: 4.1 MB
- Tags: CPython 3.11, manylinux: glibc 2.35+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
898c70a17e51ab21c2c3233c451f0c8b10c9153a174a315691ebcd981ac6c2f9
|
|
| MD5 |
a2eae8a61910ae06736fbd16931bfddb
|
|
| BLAKE2b-256 |
6b37475c1f38461a4671241639ae4b5f4eb9e1c7b29bcb9af2350c64f6a6c94a
|
File details
Details for the file ruststartracker-0.2.10-cp310-cp310-manylinux_2_35_x86_64.whl.
File metadata
- Download URL: ruststartracker-0.2.10-cp310-cp310-manylinux_2_35_x86_64.whl
- Upload date:
- Size: 4.5 MB
- Tags: CPython 3.10, manylinux: glibc 2.35+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae8f5b599746943bf9052e677e01371d10e9d4b23deaf9c4c0f2f4bae18c4a6f
|
|
| MD5 |
83329cafc71dec190a104dc229227c86
|
|
| BLAKE2b-256 |
efaef4755d495a491b82a156e3396372a03a149355ba695cdaf0eb084b9f13ca
|
File details
Details for the file ruststartracker-0.2.10-cp310-cp310-manylinux_2_35_aarch64.whl.
File metadata
- Download URL: ruststartracker-0.2.10-cp310-cp310-manylinux_2_35_aarch64.whl
- Upload date:
- Size: 4.1 MB
- Tags: CPython 3.10, manylinux: glibc 2.35+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aaab748c71047fd9f9113cb507dbe0f9eea305fb0402d823090828924b06cbc5
|
|
| MD5 |
ff8d677f702f4b6b115e8458eb9bdb1f
|
|
| BLAKE2b-256 |
b871c0dcf8259b87f8662d884fc1d34e1e561e80a63326c938b0bc7ddfc8deae
|