💡 Inspiration The aerospace industry is fundamentally fractured. When designing a Mars rover entry sequence or coordinating a stratospheric balloon, engineers often stitch together disjointed toolchains—UAV heuristics for flight and heavyweight satellite software for orbit.

But both domains share identical mathematical DNA. We built AeroCore to prove that one unified optimization kernel, rooted in Hybrid Optimal Control, can rule both the atmosphere and the orbit. We aimed for absolute engineering discipline: strict feasibility margins, deterministic execution, and automated certification.

🚀 What it does AeroCore is a domain-agnostic mission planning framework that optimizes multi-objective trajectories for both:

🛩️ Atmospheric Aircraft: Geofence-aware routes under non-linear wind and drag physics. 🛰️ LEO Spacecraft: 7-day science scheduling with true $J_2$ orbital propagation and dynamic eclipse-aware charging. 🛠️ How we built it We aggressively separated the physics from the solver logic using a Three-Layer Hybrid Architecture:

Unified State Graph: Every mission is modeled as a sequence of states $s \in \mathbb{R}^n$ and transitions. The transition from $s_i$ to $s_{i+1}$ is governed by: $$s_{i+1} = f(s_i, \mathbf{u}_i, \Delta t)$$ where $\mathbf{u}_i$ represents continuous control parameters (e.g., bank angle or slew rate).

Constraint Certification API: We implemented a rigorous evaluation layer for hard constraints $g(s, \mathbf{u}) \le 0$. Instead of binary pass/fail, our engine calculates Constraint Slack: $$\text{Slack} = \max(0, -g(s, \mathbf{u}))$$ allowing us to identify exactly how close the mission is to the edge of the envelope.

Hybrid OCP Engine: We combined Discrete Search (Beam/Greedy) with Continuous Refinement. A candidate sequence is optimized using a weighted objective $J$: $$J = \sum_{k} w_k \cdot \Phi_k(s, \mathbf{u})$$ where $\Phi_k$ represents science utility, energy economy, or time-to-target.

⚔️ Challenges we ran into The "Target Farming" Exploit: Our early spacecraft scheduler found a loophole: staring at the highest-value target indefinitely. We solved this by implementing a Decaying Science Return function that simulates operational exhaustion. Dynamic Eclipse Modelling: Hardcoding sun vectors failed for long missions. We integrated real celestial mechanics to propagate the Sun's position relative to the Julian epoch, ensuring power models reflect true orbital eclipses. 🏆 Accomplishments we're proud of 100% Monte Carlo Robustness: Achieved a 1.0 success rate across stress tests with randomized wind and battery perturbations. Zero Constraint Violations: 100% hard constraint feasibility across all default runs. Industry-Standard Outputs: We emit KMLs for Google Earth, CSVs for analysis, and a structured judging_scorecard.json. 🛠 Built With Python (Core Logic) NumPy / SciPy (Optimization & Numerical Integration) Shapely (Computational Geometry & Geofencing) CasADi (Optional: Algorithmic Differentiation) Plotly / Matplotlib (Trajectory Visualization) PyYAML (Configuration Management) GitHub Actions (Preflight CI/CD)

Built With

Share this project:

Updates