99 lines
3.9 KiB
Markdown
99 lines
3.9 KiB
Markdown
# Star Chart Calculation and Rendering Implementation
|
|
|
|
## Overview
|
|
|
|
This document explains the implementation of a real-time star chart calculation and rendering feature for the meteor detection system. The feature uses astrometry.net's `solve-field` tool to solve for celestial coordinates in camera frames, then renders an overlay of stars and constellations.
|
|
|
|
## Components
|
|
|
|
### 1. StarChartOptions (Configuration)
|
|
|
|
The configuration is stored in the `config-example-updated.toml` file under the `[star_chart]` section:
|
|
|
|
```toml
|
|
[star_chart]
|
|
# Whether the star chart overlay is enabled
|
|
enabled = true
|
|
# Path to the astrometry.net solve-field binary
|
|
solve_field_path = "/usr/local/bin/solve-field"
|
|
# Path to the astrometry.net index files
|
|
index_path = "/usr/local/share/astrometry"
|
|
# Update frequency in seconds
|
|
update_frequency = 30.0
|
|
# Star marker color (B, G, R, A)
|
|
star_color = [0, 255, 0, 255] # Green
|
|
# Constellation line color (B, G, R, A)
|
|
constellation_color = [0, 180, 0, 180] # Semi-transparent green
|
|
# Star marker size
|
|
star_size = 3
|
|
# Constellation line thickness
|
|
line_thickness = 1
|
|
# Working directory for temporary files
|
|
working_dir = "/tmp/astrometry"
|
|
# Whether to show star names
|
|
show_star_names = true
|
|
# Size of index files to use (in arcminutes)
|
|
index_scale_range = [10.0, 60.0]
|
|
# Maximum time to wait for solve-field (seconds)
|
|
max_solve_time = 60
|
|
```
|
|
|
|
### 2. StarChart Module
|
|
|
|
Created a new module in `src/overlay/star_chart.rs` with the following components:
|
|
|
|
- `StarChart`: Main class for handling star chart calculation and rendering
|
|
- `SolutionHint`: Stores previous solution data for providing as a hint to future solves
|
|
- `Star` and `ConstellationLine`: Data structures for storing celestial objects
|
|
- Background thread for running astrometry.net calculations asynchronously
|
|
|
|
### 3. Integration with Main Application
|
|
|
|
The star chart component is integrated into the application in `src/app.rs`:
|
|
|
|
1. Added StarChart to the Application struct
|
|
2. Initialized the StarChart in the initialize() method
|
|
3. Registered a frame hook to apply the star chart overlay
|
|
4. Added shutdown handling for the StarChart
|
|
|
|
## Technical Details
|
|
|
|
### Astrometry.net Integration
|
|
|
|
The `solve-field` tool is executed with carefully chosen parameters:
|
|
|
|
- When a previous solution exists, it's used as a hint (ra, dec, radius, scale)
|
|
- Otherwise, GPS position is used as a general hint
|
|
- Scale range is provided to limit the search space
|
|
- A custom configuration file is created for pointing to the index files
|
|
- Timeout handling prevents hanging on difficult images
|
|
|
|
### Optimization Techniques
|
|
|
|
1. **Solution Hinting**: Each solution is saved and used as a hint for subsequent calculations, significantly improving performance.
|
|
|
|
2. **Background Processing**: Star chart calculations run in a separate thread to avoid blocking the main application.
|
|
|
|
3. **Frequency Control**: Calculations are performed at controlled intervals (configurable via `update_frequency`), not on every frame.
|
|
|
|
4. **Timeout Control**: Maximum solve time is configurable, preventing hang-ups on difficult frames.
|
|
|
|
## Usage
|
|
|
|
1. Ensure astrometry.net is installed with appropriate index files
|
|
2. Configure the `[star_chart]` section in the config file
|
|
3. The star overlay will be rendered on frames when solutions are available
|
|
4. Adjustments can be made to visualization parameters without restarting
|
|
|
|
## Future Enhancements
|
|
|
|
1. **Star Catalog Integration**: Currently uses a simplified method for rendering stars. Could be enhanced to use a proper star catalog.
|
|
|
|
2. **Advanced Celestial Rendering**: Add more detailed rendering of celestial objects beyond simple stars and constellations.
|
|
|
|
3. **WCS Library Integration**: Replace the simple WCS parsing with a proper WCS library for more accurate coordinate transformations.
|
|
|
|
4. **Parallel Solving**: Allow multiple solves to run in parallel for different regions of the sky.
|
|
|
|
5. **Sub-Frame Solving**: Process smaller sections of the image to improve solve speed.
|