kshana 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -34
- package/kshana_bg.wasm +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<p align="center">
|
|
13
13
|
<a href="https://ashfordeou.github.io/kshana/"><img src="https://img.shields.io/badge/playground-try%20in%20browser-c79e63" alt="Live playground — run in your browser, no install"></a>
|
|
14
14
|
<a href="tests/sgp4_verification.rs"><img src="https://img.shields.io/badge/SGP4-666%2F666%20AIAA%20vectors%20%C2%B7%204.12mm-3fb950" alt="SGP4 validated against all 666 AIAA 2006-6753 vectors, worst 4.12 mm"></a>
|
|
15
|
-
<a href="https://github.com/ashfordeOU/kshana/actions/workflows/ci.yml"><img src="https://img.shields.io/badge/coverage-~
|
|
15
|
+
<a href="https://github.com/ashfordeOU/kshana/actions/workflows/ci.yml"><img src="https://img.shields.io/badge/coverage-~96%25%20line-3fb950" alt="~96% line coverage on src/ (cargo-tarpaulin LLVM engine), gated at 85% in CI"></a>
|
|
16
16
|
<a href="https://github.com/ashfordeOU/kshana/actions/workflows/ci.yml"><img src="https://github.com/ashfordeOU/kshana/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
17
17
|
<a href="https://github.com/ashfordeOU/kshana/releases"><img src="https://img.shields.io/badge/release-v0.17.0-c79e63" alt="Release v0.17.0"></a>
|
|
18
18
|
<a href="https://plugins.jetbrains.com/plugin/32181-kshana--pnt-simulator"><img src="https://img.shields.io/badge/JetBrains-Marketplace-c79e63" alt="Kshana on the JetBrains Marketplace"></a>
|
|
@@ -128,9 +128,11 @@ consume published Allan/noise-budget coefficients; the CAI accelerometer has a
|
|
|
128
128
|
first-principles layer — Mach–Zehnder phase, projection noise, contrast decay, and
|
|
129
129
|
vibration coupling — but Coriolis and light-shift systematics remain a **P2** roadmap
|
|
130
130
|
layer, see [`ROADMAP.md`](ROADMAP.md) and [`docs/QUANTUM-MODELS.md`](docs/QUANTUM-MODELS.md));
|
|
131
|
-
a GNSS receiver
|
|
132
|
-
|
|
133
|
-
|
|
131
|
+
a full GNSS *signal-acquisition* receiver (it now solves a single-point **PVT** position
|
|
132
|
+
fix from real RINEX code observations — validated on real IGS data — but does **not**
|
|
133
|
+
acquire or track raw signal); or a full mission-design suite (it has Lambert / porkchop /
|
|
134
|
+
maneuver / orbit-determination building blocks, but is the performance-simulation layer
|
|
135
|
+
*above* GMAT/Orekit, not a replacement). Owning this scope is deliberate. If you need first-principles cold-atom
|
|
134
136
|
interferometer error budgets (e.g. CARIOQA-PMP-grade or X-37B-style validation), see
|
|
135
137
|
the P2 roadmap and [get in touch](#support--professional-services) to collaborate.
|
|
136
138
|
|
|
@@ -146,17 +148,23 @@ the P2 roadmap and [get in touch](#support--professional-services) to collaborat
|
|
|
146
148
|
| **Alt-PNT (GPS-denied)** | A cold-atom **gravimeter measurement model** whose white-noise floor (`σ = ASD/√τ`) is derived from the CAI accelerometer physics; a low-degree, fully-normalised **spherical-harmonic gravity-anomaly field** (validated against the closed-form Legendre functions and a hand-derived single-term anomaly) plus synthetic mascons; and a **gravity-map-matching particle filter** that recovers a GPS-denied track from the anomaly sequence it flies through. It extends to **terrain-referenced navigation** (TERCOM/SITAN against an SRTM `.hgt` DEM, `src/altpnt/terrain.rs`), an **IGRF-14 geomagnetic main field** to degree/order 13 (`src/igrf.rs`, validated against the tilted-dipole closed form and ∇V finite differences), and a **combined gravity + magnetic + terrain** navigator that fuses all three scalar channels through one particle filter (information is additive — no channel makes the fix worse). A **60-minute GPS-denied benchmark** (a ~700 km / one-hour outage where the inertial solution drifts to ~70 km) is recovered to **~145 m (< 500 m)** by a hierarchical coarse-to-fine matcher — the ESA NAVISP *Quantum Wayfarer* target. |
|
|
147
149
|
| **Fusion** | Loosely-coupled 15-state GNSS/INS error-state EKF with closed-loop feedback (the `gnss-ins` pack); a **tightly-coupled** pseudorange update that keeps correcting with fewer than four satellites; a coupled **clock + position** filter; a general **unscented (sigma-point) Kalman** estimator for strongly nonlinear measurements; a tightly-coupled GNSS/INS **UKF navigator** (pseudorange + Doppler) whose force-model orbital coast is validated to **0.77 m RMS** over a 30-minute curving LEO pass that includes a 120-second GNSS outage; and a full **17-state tightly-coupled GNSS/INS UKF** (position, velocity, attitude error, accelerometer and gyro biases, clock bias and drift) whose **quantum-CAI dead-reckoning** coasts a 120-second outage on the cold-atom accelerometer's derived velocity-random-walk. |
|
|
148
150
|
| **Orbit determination** | Recovery of an orbital state `[r, v]` from ground-station range tracking, composing the two-body + J2 force model and RK4 integrator with a **Gauss–Newton batch** corrector (`determine_orbit_batch`, sub-metre / mm·s⁻¹ from noiseless ranges, ~2 m at a 5 m noise floor) and a **sequential** unscented-filter variant (`determine_orbit_sequential`). |
|
|
149
|
-
| **Lunar & cislunar** | An Earth–Moon **circular restricted three-body (CR3BP)** propagator in the rotating frame — conserved Jacobi constant and all five Lagrange points (`src/cr3bp.rs`) — plus **LunaNet / LNIS** cislunar PNT geometry (MCI↔MCMF reduction, selenographic coordinates) with a **lunar south-pole ARAIM** pass that honestly surfaces the integrity gap: a ~30 m σ_URE drives the protection level well above a 50 m alert limit (`src/lunar.rs`, `scenarios/lunanet-araim.toml`). |
|
|
151
|
+
| **Lunar & cislunar** | An Earth–Moon **circular restricted three-body (CR3BP)** propagator in the rotating frame — conserved Jacobi constant and all five Lagrange points (`src/cr3bp.rs`) — now with a **6×6 state-transition matrix and a single-shooting differential corrector** (`cr3bp_jacobian`, `propagate_state_stm`, `differential_correct_halo`) that produces genuinely periodic **halo / NRHO** orbits: the STM is validated against finite differences, corrected orbits close to machine precision, and seeding the published apolune state reproduces the **L2 southern 9:2 NRHO** (the Gateway orbit) at period ≈ 6.57 d / perilune ≈ 3,250 km, consistent with the published ≈ 6.56 d / ≈ 3,370 km (a CR3BP — circular, Sun-free — solution, **not** validated against a real LANS/Gateway ephemeris; the selenocentric MCI/MCMF transform of the corrected orbit is a follow-on); plus **LunaNet / LNIS** cislunar PNT geometry (MCI↔MCMF reduction, selenographic coordinates) with a **lunar south-pole ARAIM** pass that honestly surfaces the integrity gap: a ~30 m σ_URE drives the protection level well above a 50 m alert limit (`src/lunar.rs`, `scenarios/lunanet-araim.toml`). |
|
|
152
|
+
| **Deep-space & Mars PNT** | An open **radiometric navigation engine**: iterative light-time + **Shapiro** relativistic delay, two-/one-/three-way **Doppler & range** (Moyer two-leg), coherent transponder turnaround ratios, regenerative/PN ranging (CCSDS 414), and **Δ-DOR** plane-of-sky (CCSDS 506), with solar-plasma/tropo/iono media; **CCSDS-TDM (503)** tracking-data-message parse + emit; a **reduced-dynamic Square-Root Information Filter** (RTN empirical accelerations + a 3-state onboard clock + Mars atmospheric drag) that does **Mars-LMO orbit determination to ≈ 0.2 m** in a synthetic closed loop; a joint **one-way + two-way fusion** estimator; a multi-body dynamics core (`Body{μ, re, zonals, gravity, IAU-pole}`, Mars GMM-3 gravity, an IAU body-fixed Mars frame, a pluggable `EphemerisProvider` seam, two-part Julian dates + TT↔TDB); and the **`mars-pnt`** relay-PNT scenario (a MARCONI areostationary relay constellation) with an end-to-end **GSE performance simulator** (geometry → link budget → observables → SRIF → covariance). **Simulation-validated** (covariance / closed-loop figures of merit); the Sun-central Mars dynamics are cross-checked against JPL **DE440** (137 m @ 1-day arc, `xval/anise-mars-od`). Real DSN/ESTRACK tracking-data validation is on the roadmap. |
|
|
150
153
|
| **Integrity** | Snapshot and solution-separation (ARAIM-style) RAIM with horizontal/vertical protection levels (HPL/VPL), fault detection & exclusion, and Stanford integrity diagrams; an explicit integrity-risk-budget (**MHSS**) protection level, including the **dual-/multi-constellation constellation-wide fault mode** (EU ARAIM / DO-316), exercised on a real GPS + Galileo snapshot (`scenarios/araim-gps-galileo.toml`). |
|
|
151
154
|
| **Augmentation (SBAS)** | **SBAS / WAAS protection levels** in the DO-229E weighted-least-squares form (precision-approach and en-route K-factors) and the **L1/L5 dual-frequency ionosphere-free** combination (IS-GPS-705, γ₁₅ ≈ 1.793) that underpins DO-316 — `src/sbas.rs`, with the protection-level geometry cross-checked against a NumPy `inv(GᵀG)` reference. |
|
|
152
|
-
| **Clock & timing** | Two-state Kalman holdover (Joseph-form covariance, NIS/NEES consistency health); Allan-family stability (ADEV / MDEV / TDEV / HDEV) with noise-type-specific confidence intervals and a full **IEEE-1139 five-coefficient power-law fit**; geometric corrections (Sagnac, GNSS common-view); and the operational transfer methods — **TWSTFT** with the BIPM Sagnac closed form, **GNSS common-view**, **PPP** ionosphere-free time transfer, a free-space **optical** link with turbulence scintillation, and an inverse-variance **clock-ensemble (paper) timescale** below the best contributing clock. |
|
|
155
|
+
| **Clock & timing** | Two-state Kalman holdover (Joseph-form covariance, NIS/NEES consistency health); Allan-family stability (ADEV / MDEV / TDEV / HDEV) with noise-type-specific confidence intervals and a full **IEEE-1139 five-coefficient power-law fit**; geometric corrections (Sagnac, GNSS common-view); and the operational transfer methods — **TWSTFT** with the BIPM Sagnac closed form, **GNSS common-view**, **PPP** ionosphere-free time transfer, a free-space **optical** link with turbulence scintillation, and an inverse-variance **clock-ensemble (paper) timescale** below the best contributing clock. A **GNSS-denied clock-holdover calculator** (`src/holdover.rs`) exposes the closed-form van-Loan coast-error growth as a *holdover-to-threshold* inversion — how long a clock free-runs before its timing error exceeds budget — across representative classical and quantum-clock classes; **modelled** (cross-checked against the multi-step `clock_state` covariance recursion), and honest that for a very stable clock the holdover to a tight threshold is set by the *assumed* long-tau noise floor, not the cited ADEV. |
|
|
153
156
|
| **GNSS measurement domain** | Forward pseudorange / Doppler synthesis with **Klobuchar** (broadcast) and **IONEX / TEC-grid** (measured) ionosphere — including an IONEX file parser, time interpolation between maps, and the thin-shell slant-obliquity mapping — **Saastamoinen + Niell** troposphere, and snapshot RAIM (HPL/VPL). |
|
|
154
|
-
| **Resilience** | Link-budget **jamming** (J/S → effective C/N₀ → loss of lock); a stochastic **time-spoof detector** (Neyman–Pearson / χ²₁ energy test with closed-form and Monte-Carlo P_fa/P_md and a Security FoM of 1 − P_md); and a **multi-layer spoof detector** fusing a RAIM-consistency parity test (with the common-mode blind spot modelled honestly), an RF AGC-power monitor, and a signal-quality (SQM early-minus-late) monitor. |
|
|
155
|
-
| **
|
|
157
|
+
| **Resilience** | Link-budget **jamming** (J/S → effective C/N₀ → loss of lock, with the anti-jam spectral-separation factor `Q` now **derived from the actual signal and jammer power spectra** via `src/navsignal.rs` — `Q = 1/(R_c·κ)`, cross-checked in CI against the previous representative constant); a stochastic **time-spoof detector** (Neyman–Pearson / χ²₁ energy test with closed-form and Monte-Carlo P_fa/P_md and a Security FoM of 1 − P_md); and a **multi-layer spoof detector** fusing a RAIM-consistency parity test (with the common-mode blind spot modelled honestly), an RF AGC-power monitor, and a signal-quality (SQM early-minus-late) monitor; and a **quantum-inertial dead-reckoning error budget** (`QuantumNavBudget`, `src/inertial/quantum_imu.rs`) composing the cold-atom-interferometer white-noise velocity-random-walk with residual bias (cross-checked against the independent `AccelModel` integrator) and scale-factor error into a position-drift-over-holdover figure — the inertial twin of the clock holdover. |
|
|
158
|
+
| **Nav-signal & code tracking** | The **signal level** between the link budget and the measurement domain (`src/navsignal.rs`): unit-area **power spectral densities** for **BPSK-R(n)** and **sine-BOC(m,n)**; the **spectral-separation coefficient** κ = ∫ G_s·G_i df, which **derives the anti-jam `Q`** the jamming model uses (`Q = 1/(R_c·κ)`) from the actual signal/jammer spectra instead of a representative constant; the **RMS (Gabor) bandwidth** (BOC > BPSK — the ranging-information / Cramér–Rao measure); the **coherent early–late DLL code-tracking thermal-noise jitter** (Kaplan & Hegarty; ~sub-metre for C/A at 45 dB-Hz); and the **multipath error envelope** (coherent EML — narrow-correlator suppression). Validated against closed-form anchors (BPSK self-SSC = 2/(3·R_c), unit-area PSDs, sub-metre C/A jitter). This is signal-**performance** analysis, **not** antenna / RF-payload hardware design (a payload partner's role). |
|
|
159
|
+
| **Interoperability** | **RINEX-3** multi-GNSS broadcast-ephemeris ingestion (GPS, Galileo, QZSS, BeiDou MEO/IGSO via IS-GPS-200; GLONASS via PZ-90 state-vector RK4) usable as a constellation source (RINEX in, PNT geometry out); a **RINEX-3/4** observation parser (pseudorange, carrier phase, Doppler, signal strength) that now **feeds a single-point-positioning solver** (`pvt`) — real code observations in, a real **receiver position** out, validated on IGS data; an **SP3-c/d** precise-ephemeris reader/writer with 9th-order Lagrange interpolation; and **CCSDS OEM 2.0 + OMM** (mean-elements) export for flight-dynamics tools (GMAT, Orekit, STK); and **CCSDS-TDM (503)** tracking-data-message parse + emit for deep-space radiometric tracking. |
|
|
156
160
|
|
|
157
161
|
Each capability is reachable as a Rust API, a runnable scenario `kind`, or both.
|
|
158
162
|
Maturity per capability — *validated*, *runnable*, or *library* — is tracked in
|
|
159
|
-
[`docs/CAPABILITY.md`](docs/CAPABILITY.md).
|
|
163
|
+
[`docs/CAPABILITY.md`](docs/CAPABILITY.md). A **machine-checked verification matrix**
|
|
164
|
+
(`src/verification.rs`) renders the requirement → module → test → oracle → status
|
|
165
|
+
cross-reference, with unit-tested honesty invariants that permit a *validated* label
|
|
166
|
+
only where an independent **external** oracle backs it — and that record the
|
|
167
|
+
hardware/PA capabilities Kshana deliberately does **not** provide.
|
|
160
168
|
|
|
161
169
|
## Results
|
|
162
170
|
|
|
@@ -252,6 +260,9 @@ cargo run -- scenarios/orbit-sgp4-gps.toml --export-sp3 gps.sp3
|
|
|
252
260
|
# Export the constellation's mean elements to a CCSDS OMM catalogue (one OMM
|
|
253
261
|
# message per TLE-defined satellite, with its real NORAD id / COSPAR designator):
|
|
254
262
|
cargo run -- scenarios/orbit-sgp4-gps.toml --export-omm gps.omm
|
|
263
|
+
|
|
264
|
+
# Export the velocity-carrying state to a CCSDS OEM 2.0 ephemeris (GMAT/Orekit/STK):
|
|
265
|
+
cargo run -- scenarios/orbit-sgp4-gps.toml --export-oem gps.oem
|
|
255
266
|
```
|
|
256
267
|
|
|
257
268
|
**Interoperability role.** Kshana is the *performance-simulation* layer that sits
|
|
@@ -358,11 +369,25 @@ plugin from the JetBrains Marketplace (or *Settings → Plugins → Marketplace
|
|
|
358
369
|
|
|
359
370
|
## Scenario format
|
|
360
371
|
|
|
361
|
-
Scenarios are declarative TOML. A top-level `kind` selects the pack — **
|
|
362
|
-
all (`clock` is the default if omitted): `inertial`, `timetransfer`, `hybrid`, `fusion`,
|
|
372
|
+
Scenarios are declarative TOML. A top-level `kind` selects the pack — **thirty-four** in
|
|
373
|
+
all (`clock` is the default if omitted): `inertial`, `timetransfer`, `hybrid`, `hybrid-ukf`, `fusion`,
|
|
363
374
|
`gnss-ins`, `orbit`, `ephemeris`, `gnss-sim`, `integrity`, `lunar-integrity`, `spoof`,
|
|
364
|
-
`spoof-detect`, `jamming`, `sweep`, `sweep-nd`, `gravity-map`, `terrain-nav`,
|
|
365
|
-
`combined-altpnt`,
|
|
375
|
+
`spoof-detect`, `jamming`, `sweep`, `sweep-nd`, `gravity-map`, `terrain-nav`, `terrain-slam`,
|
|
376
|
+
`combined-altpnt`, `pvt`, `mars-pnt`, `impairment-eval` (AI/ML RF-impairment detection
|
|
377
|
+
evaluation testbed — labelled synthetic corpus + detector-agnostic ROC/AUC harness +
|
|
378
|
+
in/out-of-distribution optimism gap), `quantum-trade` (quantum-vs-classical PNT
|
|
379
|
+
trade with measured-ADEV ingestion + GNSS-denied resilience envelope; MODELLED),
|
|
380
|
+
`space-weather` (solar/geomagnetic indices + Jacchia-71 exospheric temperature +
|
|
381
|
+
activity-driven thermospheric density over the static atmosphere; MODELLED),
|
|
382
|
+
`oem-interop` (CCSDS OEM import/round-trip bridge for GMAT/Orekit/STK ephemerides;
|
|
383
|
+
MODELLED), the mission-analysis trio `launch-window` (two-body launch azimuth /
|
|
384
|
+
plane-change / opportunities), `reentry` (Allen-Eggers ballistic re-entry corridor),
|
|
385
|
+
`eo-coverage` (EO swath / GSD / access / revisit geometry), `space-packet` (CCSDS
|
|
386
|
+
133.0 TM/TC Space Packet framing — exact bit layout, round-trip verified), and
|
|
387
|
+
`attitude-budget` (3-DOF gravity-gradient torque + RSS pointing error budget),
|
|
388
|
+
`passes` (ground-station rise/set pass prediction — AOS/TCA/LOS, max elevation,
|
|
389
|
+
access), and `link-budget` (one-way CCSDS/DSN link equation — FSPL / Eb·N₀ /
|
|
390
|
+
margin / closure) — all MODELLED.
|
|
366
391
|
Common fields: `seed`, a `[time]` grid, a `[gnss]` availability timeline (the outage
|
|
367
392
|
driver), and per-sensor blocks with `provenance` strings citing the source of every
|
|
368
393
|
figure. Example (clock):
|
|
@@ -593,7 +618,7 @@ flowchart LR
|
|
|
593
618
|
|
|
594
619
|
```mermaid
|
|
595
620
|
flowchart TD
|
|
596
|
-
cli["CLI · Python · WebAssembly · MCP server · JetBrains plugin"] --> api["api — run_toml: typed dispatch over
|
|
621
|
+
cli["CLI · Python · WebAssembly · MCP server · JetBrains plugin"] --> api["api — run_toml: typed dispatch over 34 kinds"]
|
|
597
622
|
subgraph shared["Shared core"]
|
|
598
623
|
types["types · scenario · GNSS timeline"]
|
|
599
624
|
allan["allan — ADEV/MDEV/TDEV/HDEV"]
|
|
@@ -617,13 +642,14 @@ flowchart TD
|
|
|
617
642
|
gsh["gravity_sh — EGM2008 d/o 70"]
|
|
618
643
|
integ["integrator — RK4 · DOPRI"]
|
|
619
644
|
man["maneuver · orbit_determination"]
|
|
620
|
-
cr["cr3bp — Earth–Moon CR3BP"]
|
|
645
|
+
cr["cr3bp — Earth–Moon CR3BP + halo/NRHO corrector"]
|
|
621
646
|
end
|
|
622
647
|
subgraph intg["Integrity & GNSS"]
|
|
623
648
|
raim["raim — RAIM/ARAIM · HPL/VPL"]
|
|
624
649
|
sbas["sbas — DO-229E PL · L1/L5"]
|
|
625
650
|
gsim["gnss_sim · ionex — measurement domain"]
|
|
626
651
|
jam["jamming — J/S → C/N₀"]
|
|
652
|
+
nsig["navsignal — PSD · SSC → anti-jam Q · DLL jitter"]
|
|
627
653
|
lun["lunar — cislunar ARAIM"]
|
|
628
654
|
end
|
|
629
655
|
subgraph fnav["Fusion & alt-PNT"]
|
|
@@ -631,13 +657,19 @@ flowchart TD
|
|
|
631
657
|
grav["gravimeter · mapmatch · particle_filter"]
|
|
632
658
|
terr["altpnt/terrain · igrf — terrain + magnetic"]
|
|
633
659
|
end
|
|
660
|
+
subgraph ds["Deep-space & Mars"]
|
|
661
|
+
dsr["radiometric · ccsds_tdm — light-time · Δ-DOR · TDM"]
|
|
662
|
+
dso["deepspace_od — reduced-dynamic SRIF"]
|
|
663
|
+
dsm["mars_pnt · gse_sim — relay-PNT + GSE sim"]
|
|
664
|
+
end
|
|
634
665
|
subgraph io["Interop formats"]
|
|
635
|
-
iofmt["rinex · sp3 · oem · omm · glonass"]
|
|
666
|
+
iofmt["rinex · sp3 · oem · omm · glonass · ccsds_tdm"]
|
|
636
667
|
end
|
|
637
668
|
api --> packs
|
|
638
669
|
api --> astro
|
|
639
670
|
api --> intg
|
|
640
671
|
api --> fnav
|
|
672
|
+
api --> ds
|
|
641
673
|
packs --> shared
|
|
642
674
|
astro --> frames
|
|
643
675
|
orbit --> sgp4
|
|
@@ -645,6 +677,7 @@ flowchart TD
|
|
|
645
677
|
prop --> gsh
|
|
646
678
|
prop --> integ
|
|
647
679
|
cr --> integ
|
|
680
|
+
nsig --> jam
|
|
648
681
|
fus --> p2
|
|
649
682
|
grav --> p2
|
|
650
683
|
terr --> grav
|
|
@@ -666,7 +699,7 @@ flowchart LR
|
|
|
666
699
|
core["kshana core<br/>library + CLI"]
|
|
667
700
|
mcp["mcp/kshana-mcp<br/>MCP server (excluded crate)"]
|
|
668
701
|
ide["ide/jetbrains<br/>Kotlin IDE plugin"]
|
|
669
|
-
xval["xval/anise-frames<br/>SPICE cross-
|
|
702
|
+
xval["xval/anise-{frames,lunar-od,mars-od}<br/>SPICE/DE440 cross-checks (excluded)"]
|
|
670
703
|
end
|
|
671
704
|
core --> crates["crates.io"]
|
|
672
705
|
core --> pypi["PyPI — wheels"]
|
|
@@ -685,7 +718,7 @@ flowchart LR
|
|
|
685
718
|
```
|
|
686
719
|
kshana/
|
|
687
720
|
├── src/ # the kshana core crate (library + CLI)
|
|
688
|
-
│ ├── api.rs · main.rs · lib.rs # typed dispatch (
|
|
721
|
+
│ ├── api.rs · main.rs · lib.rs # typed dispatch (34 kinds) + CLI + crate root
|
|
689
722
|
│ ├── python.rs · wasm.rs # optional PyO3 / wasm-bindgen bindings
|
|
690
723
|
│ ├── types.rs · scenario.rs · allan.rs # shared core (time grid, GNSS timeline, Allan)
|
|
691
724
|
│ │
|
|
@@ -703,18 +736,21 @@ kshana/
|
|
|
703
736
|
│ ├── orbit.rs · sgp4.rs · tle.rs · walker.rs # geometry, SGP4/SDP4, TLE, Walker design
|
|
704
737
|
│ ├── propagator.rs · forces.rs · gravity_sh.rs · integrator.rs # Cowell + perturbations (EGM2008 d/o70, GR) + RK4/DOPRI
|
|
705
738
|
│ ├── maneuver.rs · batch_ls.rs · orbit_determination.rs # burns/Lambert/porkchop, Gauss-Newton, OD
|
|
706
|
-
│ ├── cr3bp.rs · lunar.rs # Earth–Moon CR3BP, cislunar/LunaNet ARAIM
|
|
739
|
+
│ ├── cr3bp.rs · lunar.rs # Earth–Moon CR3BP + halo/NRHO STM corrector, cislunar/LunaNet ARAIM
|
|
740
|
+
│ ├── body.rs · mars_frame.rs · ephem_provider.rs · radiometric.rs · ccsds_tdm.rs # deep-space: multi-body · Mars frame · ephemeris seam · radiometric obs + CCSDS-TDM
|
|
741
|
+
│ ├── deepspace_od.rs · clock_state.rs · mars_atmos.rs · mars_pnt.rs · linkbudget.rs · gse_sim.rs # SRIF OD · onboard clock · Mars drag · relay-PNT · link budget · GSE sim
|
|
707
742
|
│ │
|
|
708
743
|
│ ├── fusion/ # GNSS/INS — EKF · UKF · tightly_coupled(17) · coupled · closed_loop
|
|
709
744
|
│ ├── raim.rs · sbas.rs # RAIM/ARAIM HPL/VPL, SBAS DO-229E PLs + L1/L5 iono-free
|
|
710
|
-
│ ├── gnss_sim.rs · ionex.rs · jamming.rs
|
|
745
|
+
│ ├── gnss_sim.rs · ionex.rs · pvt.rs · jamming.rs # measurement domain · ionosphere maps · single-point positioning · jamming
|
|
746
|
+
│ ├── navsignal.rs # nav-signal PSD (BPSK-R/BOC) · spectral-separation → anti-jam Q · DLL code-tracking jitter · multipath envelope
|
|
711
747
|
│ ├── gravimeter.rs · igrf.rs · mapmatch.rs · particle_filter.rs · altpnt/ # gravity/magnetic/terrain alt-PNT
|
|
712
748
|
│ ├── rinex.rs · rinex_obs.rs · glonass.rs · sp3.rs · oem.rs · omm.rs · permalink.rs # interop formats
|
|
713
749
|
│ └── bin/validation_report.rs # builds the release validation-summary HTML
|
|
714
750
|
│
|
|
715
751
|
├── mcp/kshana-mcp/ # standalone, workspace-EXCLUDED crate — the MCP server (+ Dockerfile, server.json)
|
|
716
752
|
├── ide/jetbrains/ # standalone Kotlin/Gradle IntelliJ-Platform plugin
|
|
717
|
-
├── xval/anise-frames/
|
|
753
|
+
├── xval/anise-{frames,lunar-od,mars-od}/ # standalone, workspace-EXCLUDED ANISE/SPICE cross-checks (frames · lunar DE440 · Mars DE440)
|
|
718
754
|
│
|
|
719
755
|
├── scenarios/ # one cited .toml per kind + geometry-driven + GPS-denied
|
|
720
756
|
├── scripts/ # reproducibility + repo-hygiene + SBOM guards
|
|
@@ -787,14 +823,18 @@ artifact (generated by `cargo run --bin validation_report`, SLSA-attested).
|
|
|
787
823
|
| Force-model fit vs Galileo precise ephemeris (full-arc) | **0.61 m** 3-D RMS, 24 h, d/o-70, force-only | ESA/ESOC `ESA0MGNFIN` final orbit (E11), real `finals2000A` EOP |
|
|
788
824
|
| Force-model fit vs Swarm-A precise ephemeris (reduced-dynamic) | **0.10 m** 3-D RMS (empirical-tier bound, not a measure) | ESA `SW_OPER_SP3ACOM_2_` precise orbit |
|
|
789
825
|
| Force-model fit vs LRO lunar (honest miss) | **6.6 m** reduced-dynamic, *above* the 5 m target | JPL Horizons LRO (NAIF −85) + GRAIL `GRGM660PRIM` |
|
|
826
|
+
| Deep-space Mars OD (reduced-dynamic SRIF) | **≈ 0.2 m** Mars-LMO (simulation FoM, *not* real-mission) | synthetic closed-loop OD — estimator-machinery validation |
|
|
827
|
+
| Sun-central Mars dynamics vs JPL DE440 | **137 m @ 1-day arc** (grows with arc = unmodelled n-body) | JPL DE440 via ANISE (`xval/anise-mars-od`, kernel-gated) |
|
|
790
828
|
| Single-point positioning vs a surveyed IGS coordinate (real observations) | **5.7 m** 3-D RMS / **1.1 m** horizontal, dual-frequency iono-free code SPP | IGS station ABMF survey + GPS broadcast ephemeris, 2018-05-13 (`tests/pvt_abmf.rs`) |
|
|
791
829
|
| Tightly-coupled GNSS/INS UKF | **0.77 m RMS** over a 30-min LEO pass incl. a 120 s outage | force-model coast, hand-derived |
|
|
792
830
|
| GPS-denied gravity-map navigation | ~70 km INS drift → **~145 m** recovered | ESA NAVISP *Quantum Wayfarer* target |
|
|
793
831
|
| Terrain-referenced navigation (TERCOM/SITAN) | 70 km drift → **< 500 m** (grid-resolution floor ~140 m) | SRTM `.hgt` DEM; hand-injected drift (non-circular check) |
|
|
794
832
|
| IGRF-14 main field (degree/order 13) | pole ~80.7°N, dipole ~29.7 µT, physical 22–67 µT band | IAGA `igrf14coeffs.txt` (Schmidt semi-normalised) |
|
|
833
|
+
| Nav-signal modulation & code tracking | BPSK self-SSC = **2/(3·R_c)**; unit-area PSDs; **sub-metre** C/A DLL jitter @ 45 dB-Hz | Closed-form SSC/PSD anchors + Kaplan & Hegarty DLL thermal-noise formula |
|
|
834
|
+
| CR3BP halo/NRHO differential corrector | STM = finite differences; orbit closes to **machine precision**; L2 9:2 NRHO **≈ 6.57 d / perilune ≈ 3,250 km** | finite-difference STM check + published L2 southern 9:2 NRHO (≈ 6.56 d / ≈ 3,370 km) — CR3BP, not a real Gateway ephemeris |
|
|
795
835
|
| ARAIM dual-constellation integrity | constellation-wide fault mode on real GPS + Galileo | EU ARAIM TR / DO-316; Celestrak `gps-ops` 2021-07-28 |
|
|
796
836
|
| Cross-platform reproducibility | bit-identical input + shape goldens on 3 OSes | Linux / macOS / Windows CI matrix, SHA-256 goldens |
|
|
797
|
-
| Test coverage | **~
|
|
837
|
+
| Test coverage | **~96 % line** on `src/`, gated ≥ 85 % | cargo-tarpaulin (LLVM engine) |
|
|
798
838
|
|
|
799
839
|
## FAQ
|
|
800
840
|
|
|
@@ -855,9 +895,9 @@ for released history, and [`docs/CAPABILITY.md`](docs/CAPABILITY.md) for the
|
|
|
855
895
|
per-capability roadmap. The **ITRF-precise frame reduction** is now delivered — the
|
|
856
896
|
full CIO-based IAU 2006/2000A GCRS↔ITRS chain (polar motion + sub-arcsecond nutation),
|
|
857
897
|
validated bit-for-bit against SOFA/ERFA and independently cross-checked against ANISE
|
|
858
|
-
(pure-Rust SPICE) to ≤ 3.6 m at GNSS orbit. Near-term items include
|
|
859
|
-
|
|
860
|
-
|
|
898
|
+
(pure-Rust SPICE) to ≤ 3.6 m at GNSS orbit. Near-term items include tightly-coupled carrier-phase fusion and surfacing the
|
|
899
|
+
loosely-/tightly-coupled GNSS/INS navigator across more packs; the **deep-space / Mars
|
|
900
|
+
radiometric-navigation** engine landed in v0.17.0 (simulation-validated). The
|
|
861
901
|
**quantum physics layer** is a **P2** item: the CAI accelerometer is now simulated from
|
|
862
902
|
first principles (Mach–Zehnder phase, projection noise, contrast decay, vibration
|
|
863
903
|
coupling), while the clock/time-transfer sensors are still driven by published
|
|
@@ -888,7 +928,7 @@ entry for every user-visible change. Participation is governed by our
|
|
|
888
928
|
|
|
889
929
|
If you use Kshana in academic or technical work, please cite it. Machine-readable
|
|
890
930
|
metadata is in [`CITATION.cff`](CITATION.cff) (GitHub renders a "Cite this repository"
|
|
891
|
-
button from it); cite the version you used (e.g. `v0.
|
|
931
|
+
button from it); cite the version you used (e.g. `v0.18.0`) together with the
|
|
892
932
|
scenario and seed for full reproducibility. Every release is archived on Zenodo with
|
|
893
933
|
a citable DOI — the concept DOI [10.5281/zenodo.20528627](https://doi.org/10.5281/zenodo.20528627)
|
|
894
934
|
always resolves to the latest version.
|
|
@@ -906,7 +946,7 @@ the [`CHANGELOG.md`](CHANGELOG.md). Every result is reproducible from
|
|
|
906
946
|
|
|
907
947
|
| Channel | Install / get | Contents |
|
|
908
948
|
|---------|---------------|----------|
|
|
909
|
-
| [crates.io](https://crates.io/crates/kshana) | `cargo install kshana` · `kshana = "0.
|
|
949
|
+
| [crates.io](https://crates.io/crates/kshana) | `cargo install kshana` · `kshana = "0.18"` | Rust library + CLI |
|
|
910
950
|
| [crates.io](https://crates.io/crates/kshana-mcp) | `cargo install kshana-mcp` | the MCP server |
|
|
911
951
|
| [PyPI](https://pypi.org/project/kshana/) | `pip install kshana` | abi3 wheels (Linux/macOS/Windows) + sdist |
|
|
912
952
|
| [npm](https://www.npmjs.com/package/kshana) | `npm install kshana` | WebAssembly module + JS wrapper |
|
|
@@ -952,25 +992,28 @@ Contact **contact@ashforde.org**.
|
|
|
952
992
|
|
|
953
993
|
**Validation oracles & standards** — the external authorities Kshana's checks are anchored to:
|
|
954
994
|
|
|
955
|
-
- Vallado, Crawford, Hujsak & Kelso — *Revisiting Spacetrack Report #3* ([AIAA 2006-6753](https://celestrak.org/publications/AIAA/2006-6753/)): the SGP4/SDP4 verification set Kshana matches to 4.12 mm, and the worked frame examples the TEME→ITRF chain is checked against.
|
|
995
|
+
- Vallado, Crawford, Hujsak & Kelso — *Revisiting Spacetrack Report #3* ([AIAA 2006-6753](https://doi.org/10.2514/6.2006-6753); [test data](https://celestrak.org/publications/AIAA/2006-6753/)): the SGP4/SDP4 verification set Kshana matches to 4.12 mm, and the worked frame examples the TEME→ITRF chain is checked against.
|
|
956
996
|
- IAU [SOFA](https://www.iausofa.org/) / [ERFA](https://github.com/liberfa/erfa) — the reference time and frame routines the IAU 2000A nutation and the CIO GCRS↔ITRS reduction are validated bit-for-bit against.
|
|
957
997
|
- Petit & Luzum (eds.) — *IERS Conventions (2010)*, [IERS TN 36](https://www.iers.org/IERS/EN/Publications/TechnicalNotes/tn36.html) (Earth-orientation, polar motion, and frame standards).
|
|
958
|
-
- Riley — *Handbook of Frequency Stability Analysis*, [NIST SP 1065](https://
|
|
959
|
-
- Montenbruck & Gill — *Satellite Orbits: Models, Methods and Applications* (Springer): the force models behind the force-model fit to agency precise ephemerides.
|
|
998
|
+
- Riley — *Handbook of Frequency Stability Analysis*, [NIST SP 1065](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication1065.pdf) (Allan-deviation relations and the NBS14 reference series).
|
|
999
|
+
- Montenbruck & Gill — *Satellite Orbits: Models, Methods and Applications* ([Springer](https://doi.org/10.1007/978-3-642-58351-3)): the force models behind the force-model fit to agency precise ephemerides.
|
|
1000
|
+
- Howell — *Three-dimensional, periodic, halo orbits*, Celestial Mechanics 32(1) (1984), [doi:10.1007/BF01358403](https://doi.org/10.1007/BF01358403); Zimovan-Spreen, Howell & Davis — *Near rectilinear halo orbits and nearby higher-period dynamical structures*, Astrodynamics 6 (2022), [doi:10.1007/s42064-021-0125-x](https://doi.org/10.1007/s42064-021-0125-x) (the halo/NRHO families the CR3BP differential corrector reproduces).
|
|
960
1001
|
|
|
961
1002
|
**Device & method physics** — the cited sources behind the sensor models:
|
|
962
1003
|
|
|
963
1004
|
- Origlia, Schiller, Bongs et al. — [arXiv:1503.08457](https://arxiv.org/abs/1503.08457) (strontium optical lattice clock, space-oriented goal).
|
|
964
|
-
- Oelker et al., *Nature Photonics* (2019) — [
|
|
1005
|
+
- Oelker et al., *Nature Photonics* (2019) — [doi:10.1038/s41566-019-0493-4](https://doi.org/10.1038/s41566-019-0493-4) (laboratory Sr clock, 4.8×10⁻¹⁷).
|
|
965
1006
|
- Templier et al., *Science Advances* (2022) — [arXiv:2209.13209](https://arxiv.org/abs/2209.13209) (hybrid quantum accelerometer triad).
|
|
966
1007
|
- Groves, *Principles of GNSS, Inertial, and Multisensor Integrated Navigation* — [IEEE AESS tutorial (UCL Discovery)](https://discovery.ucl.ac.uk/id/eprint/1470141/) (dead-reckoning error growth).
|
|
967
1008
|
- Giorgetta et al., *Nature Photonics* 7, 434 (2013) — [arXiv:1211.4902](https://arxiv.org/abs/1211.4902); Deschênes et al., *Phys. Rev. X* 6, 021016 (2016) — [APS](https://journals.aps.org/prx/abstract/10.1103/PhysRevX.6.021016) (optical two-way time-frequency transfer; the optical inter-satellite link models its non-reciprocity budget after these).
|
|
1009
|
+
- Betz — *Binary Offset Carrier Modulations for Radionavigation*, NAVIGATION 48(4) (2001), [doi:10.1002/j.2161-4296.2001.tb00247.x](https://doi.org/10.1002/j.2161-4296.2001.tb00247.x) (the BOC modulation and spectral-separation theory behind `src/navsignal.rs`).
|
|
1010
|
+
- Kaplan & Hegarty (eds.) — *Understanding GPS/GNSS: Principles and Applications* (3rd ed., Artech House, 2017): the anti-jam effective-C/N₀ equation and the early–late DLL code-tracking thermal-noise jitter the nav-signal and jamming models use.
|
|
968
1011
|
|
|
969
1012
|
**Comparison & open prior art** — the tools and surveys Kshana is positioned against:
|
|
970
1013
|
|
|
971
|
-
- Humphreys et al. — *TEXBAT* (ION GNSS 2012): the spoofing test-battery parameters the multi-layer detector is characterised against.
|
|
1014
|
+
- Humphreys et al. — [*TEXBAT*](https://radionavlab.ae.utexas.edu/texbat/) (ION GNSS 2012): the spoofing test-battery parameters the multi-layer detector is characterised against.
|
|
972
1015
|
- González et al. — [NaveGo](https://github.com/rodralez/NaveGo) (2017): the open, validated inertial-navigation error profiles used as the classical baseline.
|
|
973
|
-
- Iiyama, Casadesús Vila & Gao — *LuPNT* (ION GNSS+ 2023, Stanford NavLab): open lunar-PNT simulator.
|
|
1016
|
+
- Iiyama, Casadesús Vila & Gao — [*LuPNT*](https://github.com/Stanford-NavLab/LuPNT) (ION GNSS+ 2023, Stanford NavLab): open lunar-PNT simulator.
|
|
974
1017
|
- Knowles, Kanhere, Neamati & Gao — *gnss\_lib\_py*, SoftwareX 27 (2024), [doi:10.1016/j.softx.2024.101811](https://doi.org/10.1016/j.softx.2024.101811): open GNSS data analysis.
|
|
975
1018
|
- Li, Zaminpardaz, Kealy & Greentree — *Quantum sensors for enhanced positioning and navigation: a comprehensive review*, GPS Solutions 30(1):62 (2026), [doi:10.1007/s10291-026-02030-y](https://doi.org/10.1007/s10291-026-02030-y).
|
|
976
|
-
- Bertone et al. — *
|
|
1019
|
+
- Bertone et al. — *Earth and Space Science* 8(6) (2021), [doi:10.1029/2020EA001454](https://doi.org/10.1029/2020EA001454): GRAIL reduced-dynamic OD, the empirical-acceleration floor the LRO fit reproduces.
|
package/kshana_bg.wasm
CHANGED
|
Binary file
|
package/package.json
CHANGED