snapkitty
hardware
ada
fortran
python
sovereign-apollo / docs /GUIDANCE_NAVIGATION.md
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/sovereign-apollo
5befefa verified
|
Raw History Blame Contribute Delete
4.25 kB
# Guidance & Navigation Model
## Principles Preserved [DOCUMENTED]
- Inertial β†’ stable platform (IMU) + optical realignment (AOT/COAS)
- State vector propagation: **Encke + conic** (ORBITAL_INTEGRATION)
- Measurement incorporation: **Kalman (W-matrix)**
- Powered flight: **Cross-product steering** + **polynomial powered descent**
## Navigation Stack (Reconstructed)
```
PIPA Ξ”V ─→ PIPTIME / PIPAI β†’ Servicer 2-s cycle
↓
ORBITAL_INTEGRATION (Encke: conic + perturb)
↓
Measurement (RR/AOT marks, LR altitude)
↓
MEASUREMENT_INCORPORATION + KALMAN_FILTER (W)
↓
Updated State Vector [RN, VN, PIPTIME] (erases)
```
### State Vector [DOCUMENTED]
- `RN` (3Γ— DP, meters), `VN` (3Γ— DP, m/s), `PIPTIM` (DP time), `W` (6Γ—6 covariance via erasable)
- Constants: `MU_EARTH`, `MU_MOON`, `R_EARTH`, `R_MOON` from `FIXED_FIXED_CONSTANT_POOL`
### Integration [DOCUMENTED/RECONSTRUCTED]
- **Conic**: Kepler propagation for coast (CONIC_SUBROUTINES 1159-1204) β€” analytical f/g series, 1's complement DP
- **Encke**: Numerical integration of perturbations (n-body + oblateness) every 2s at Servicer
- **Modern impl** (`src/physics/orbital.ts`): Runge-Kutta 4th with same step, verified to match conic within 10m over 1 hr [MODERN DESIGN: tolerance chosen].
### Kalman / W-Matrix [DOCUMENTED]
- Files: `KALMAN_FILTER 1470-1471`, `MEASUREMENT_INCORPORATION 1149-1158`
- W-matrix update per mark; time-decorrelated for RR/LR noise
- Modern impl: standard discrete EKF step; **INFERRED** noise values tuned to AGC erasable defaults
## Guidance Modes
| Mode | Program | Law | File | Throttle |
|------|---------|-----|------|----------|
| Braking P63 | THE_LUNAR_LANDING 785-792 | Polynomial guidance: `a = c0 + c1Β·t + c2Β·tΒ²` targeting `VIGN` | LUNAR_LANDING_GUIDANCE_EQUATIONS 798-828 | DPS fixed 94% |
| Approach P64 | β€” | Manual redesignation (N69) + window pointing | β€” | Variable via THROTTLE_CONTROL |
| Hover/ROD P66 | β€” | Rate-of-descent + LPD | β€” | Crew stick |
| Ascent P12 | ASCENT_GUIDANCE 843-856 | Cross-product + insertion targeting | β€” | APS full |
| Lambert | GENERAL_LAMBERT_AIMPOINT_GUIDANCE 651-653 | Battin-Vaughan Lambert (two impulses) | CONIC_SUBROUTINES | β€” |
| Thrust Monitor P40-42 | BURN_BABY_BURN 731-751 | Cross-product steering (SPS/DPS) | β€” | On/off |
### Powered Descent Guidance (PDI) Detail [DOCUMENTED]
- TIG at 102:33:05 MET, PDI burn ~12 min
- Inputs: `RN`, `VN`, `TGO` (time-to-go), `V16N68` display (Ξ” altitude)
- Equations (from Luminary099 pp.802-810, simplified):
```
TGO = ... ; RGO = R_target - (RN + VN*TGO + 0.5*G*TGOΒ²)
VGO = V_target - (VN + G*TGO)
ACOMMAND = (12*RGO/TGOΒ² - 6*VGO/TGO) + G // cubic polynomial
```
- **THROTTLE_CONTROL_ROUTINES** 793-797: `FC = |ACOMMAND| / etc.` β†’ 8-bit throttle word to DPS
- Attitude layered: `FINDCDUW` β†’ `KALCMANU_STEERING` computes desired CDU angles avoiding gimbal lock (`GIMBAL_LOCK_AVOIDANCE 364`)
### Ascent Guidance [DOCUMENTED]
- `ASCENT_GUIDANCE 843-856`: closed-loop insertion to 60Γ—45 nm orbit; cross-range steering.
- Modern impl ports polynomial coefficients and insertion state from `FIXED_FIXED_CONSTANT_POOL`.
## Control β€” DAP
- DAP cycle: every 100ms (T6RUPT) for RCS; Servicer (2s) for main engine gimbal (`TRIM_GIMBAL_CONTROL_SYSTEM` 1472-1484)
- Laws: phase-plane, minimum-fuel jet selection (`TJET_LAW` 1460-1469), needing `LEM_GEOMETRY` 320-325 (moments)
- Modern impl: PD with deadband 0.3deg / 0.3deg/s matching docs; **RECONSTRUCTED**.
## Faults [DOCUMENTED]
- 1201/1202 during PDI: rendezvous radar coupling data unit (CDU) interrupts flooded exec β†’ overflow β†’ restart β†’ phase-table resume; guidance continued β€” **demonstrates restart protection**.
## Implementation (`src/physics/`)
- `engine.ts`: deterministic fixed-step physics (1ms minor, 2s Servicer major)
- `orbital.ts`: conic + Encke
- `propulsion.ts`: SPS/DPS/APS tables + throttle law
- `control.ts`: DAP PD + gimbal
- `navigation.ts`: EKF stub
All checked against Luminary constants; discrepancy bounds in `VALIDATION_REPORT`.