Constraints¶
Constraints define the criteria that must be satisfied for satellite access to ground locations. Brahe provides a comprehensive constraint system with built-in geometric constraints, logical composition operators, and support for custom user-defined constraints.
A constraint evaluates to true when access conditions are met and false otherwise. During access computation, the algorithm searches for continuous time periods where constraints remain true, identifying these as access windows.
Built-in Constraints¶
Elevation Constraint¶
The most common constraint - requires satellites to be above a minimum elevation angle. This accounts for terrain obstructions, atmospheric effects, and antenna pointing limits.
Basic elevation constraint:
With maximum elevation:
Elevation Mask Constraint¶
Models azimuth-dependent elevation masks for terrain profiles, mountains, or buildings blocking low-elevation views in specific directions.
Off-Nadir Constraint¶
Limits the off-nadir viewing angle for imaging satellites. Off-nadir angle is measured from the satellite's nadir (straight down) to the target location.
Imaging payload:
Side-looking radar:
Local Time Constraint¶
Filters access windows by local solar time at the ground location. Useful for daylight-only imaging or night-time astronomy observations.
Single time window:
Multiple time windows:
Using decimal hours:
Local Solar Time
Local solar time is based on the Sun's position relative to the location, not clock time zones. Noon (1200) is when the Sun is highest in the sky.
Look Direction Constraint¶
Requires the satellite to look in a specific direction relative to its velocity vector - left, right, or either side.
Left-looking:
Ascending-Descending Constraint¶
Filters passes by whether the satellite is ascending (moving south-to-north) or descending (north-to-south) over the location.
Ascending passes:
Constraint Composition¶
Combine constraints using Boolean logic to express complex requirements.
ConstraintAll (AND Logic)¶
All child constraints must be satisfied simultaneously:
ConstraintAny (OR Logic)¶
At least one child constraint must be satisfied:
ConstraintNot (Negation)¶
Inverts a constraint - access occurs when the child constraint is NOT satisfied:
Complex Composition¶
Build complex logic by combining multiple constraints:
Custom Constraints (Python)¶
Python users can create fully custom constraints by implementing the AccessConstraintComputer interface:
Custom Constraints in Rust
Rust users implement the AccessConstraint trait directly. This provides maximum performance but requires recompiling the library.
See Also¶
- Locations - Ground location types
- Computation - How constraints are evaluated during access search
- API Reference: Constraints
- Example: Predicting Ground Contacts
- Example: Computing Imaging Opportunities