kshana 0.15.1 → 0.17.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 +48 -15
- package/kshana_bg.wasm +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
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
15
|
<a href="https://github.com/ashfordeOU/kshana/actions/workflows/ci.yml"><img src="https://img.shields.io/badge/coverage-~97%25%20line-3fb950" alt="~97% 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
|
-
<a href="https://github.com/ashfordeOU/kshana/releases"><img src="https://img.shields.io/badge/release-v0.
|
|
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>
|
|
19
19
|
<a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-blue.svg" alt="License: Apache-2.0"></a>
|
|
20
20
|
<a href="Cargo.toml"><img src="https://img.shields.io/badge/rust-1.75%2B-orange.svg" alt="Rust 1.75+"></a>
|
|
@@ -44,16 +44,26 @@ citable table in [`docs/PROVENANCE.md`](docs/PROVENANCE.md).
|
|
|
44
44
|
*Free and open source under Apache-2.0, professionally developed and maintained by
|
|
45
45
|
Ashforde OÜ — commercial support, integration, and proprietary extensions available.*
|
|
46
46
|
|
|
47
|
-
> **Status: v0.
|
|
47
|
+
> **Status: v0.17.0 · a simulation substrate, not yet a product.** A validated,
|
|
48
48
|
> fully reproducible engine spanning the PNT stack — orbit geometry and constellation
|
|
49
49
|
> design, a numerical (Cowell) propagator with a six-perturbation force model, maneuver
|
|
50
50
|
> and trajectory design, time systems, inertial navigation (incl. map-aided and
|
|
51
51
|
> gravity-map-matching alt-PNT), GNSS/INS fusion (loose, tight, UKF, coupled
|
|
52
52
|
> clock+position, 17-state), orbit determination, ARAIM integrity, clocks, advanced
|
|
53
|
-
> time-and-frequency transfer, the GNSS measurement domain,
|
|
54
|
-
> multi-layer spoofing)
|
|
53
|
+
> time-and-frequency transfer, the GNSS measurement domain, resilience (jamming +
|
|
54
|
+
> multi-layer spoofing), and an open **deep-space / Mars radiometric navigation**
|
|
55
|
+
> engine (light-time + Shapiro, CCSDS-TDM, reduced-dynamic SRIF, one-/two-way fusion).
|
|
55
56
|
> Honest by design: every figure of merit is labelled *validated* or *not-modeled*, and
|
|
56
57
|
> optical-clock figures are space goals on ground hardware (no strontium optical clock has flown).
|
|
58
|
+
>
|
|
59
|
+
> **Validation ladder** (maturity is *not* uniform across domains — and saying so is the point):
|
|
60
|
+
> | Domain | Tier |
|
|
61
|
+
> |---|---|
|
|
62
|
+
> | Earth PNT (orbit, frames, time, clocks, IMU, integrity) | **Real-data validated** — ESA SP3 (Galileo 0.13 m, Swarm-A 0.10 m), NIST SP1065, SOFA/ERFA, heritage vectors |
|
|
63
|
+
> | Deep-space / Mars navigation | **Simulation-validated** — synthetic closed-loop OD + analytic self-consistency; Sun-central dynamics cross-checked vs JPL **DE440** (137 m @ 1-day arc) |
|
|
64
|
+
> | Real-mission deep-space OD | **Roadmap** — pending real DSN/ESTRACK tracking-data validation |
|
|
65
|
+
>
|
|
66
|
+
> Deep-space figures (Mars-LMO OD ≈ 0.2 m; relay-PNT orbiter 0.4 m / rover 5.1 m) are **simulation / covariance figures of merit**, not real-mission results.
|
|
57
67
|
> See **[Capabilities](#capabilities)** for what it does, **[What it is / is not](#what-it-is--is-not)**
|
|
58
68
|
> for scope, and [`docs/CAPABILITY.md`](docs/CAPABILITY.md) / [`docs/VALIDATION.md`](docs/VALIDATION.md)
|
|
59
69
|
> for per-capability maturity. The overclaim closure ledger
|
|
@@ -142,7 +152,7 @@ the P2 roadmap and [get in touch](#support--professional-services) to collaborat
|
|
|
142
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. |
|
|
143
153
|
| **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). |
|
|
144
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. |
|
|
145
|
-
| **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); 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). |
|
|
155
|
+
| **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). |
|
|
146
156
|
|
|
147
157
|
Each capability is reachable as a Rust API, a runnable scenario `kind`, or both.
|
|
148
158
|
Maturity per capability — *validated*, *runnable*, or *library* — is tracked in
|
|
@@ -348,10 +358,11 @@ plugin from the JetBrains Marketplace (or *Settings → Plugins → Marketplace
|
|
|
348
358
|
|
|
349
359
|
## Scenario format
|
|
350
360
|
|
|
351
|
-
Scenarios are declarative TOML. A top-level `kind` selects the pack — **
|
|
361
|
+
Scenarios are declarative TOML. A top-level `kind` selects the pack — **twenty** in
|
|
352
362
|
all (`clock` is the default if omitted): `inertial`, `timetransfer`, `hybrid`, `fusion`,
|
|
353
|
-
`gnss-ins`, `orbit`, `gnss-sim`, `integrity`, `lunar-integrity`, `spoof`,
|
|
354
|
-
`sweep`, `sweep-nd`, `gravity-map`, `terrain-nav`,
|
|
363
|
+
`gnss-ins`, `orbit`, `ephemeris`, `gnss-sim`, `integrity`, `lunar-integrity`, `spoof`,
|
|
364
|
+
`spoof-detect`, `jamming`, `sweep`, `sweep-nd`, `gravity-map`, `terrain-nav`,
|
|
365
|
+
`combined-altpnt`, and `pvt`.
|
|
355
366
|
Common fields: `seed`, a `[time]` grid, a `[gnss]` availability timeline (the outage
|
|
356
367
|
driver), and per-sensor blocks with `provenance` strings citing the source of every
|
|
357
368
|
figure. Example (clock):
|
|
@@ -582,7 +593,7 @@ flowchart LR
|
|
|
582
593
|
|
|
583
594
|
```mermaid
|
|
584
595
|
flowchart TD
|
|
585
|
-
cli["CLI · Python · WebAssembly · MCP server · JetBrains plugin"] --> api["api — run_toml: typed dispatch over
|
|
596
|
+
cli["CLI · Python · WebAssembly · MCP server · JetBrains plugin"] --> api["api — run_toml: typed dispatch over 20 kinds"]
|
|
586
597
|
subgraph shared["Shared core"]
|
|
587
598
|
types["types · scenario · GNSS timeline"]
|
|
588
599
|
allan["allan — ADEV/MDEV/TDEV/HDEV"]
|
|
@@ -674,7 +685,7 @@ flowchart LR
|
|
|
674
685
|
```
|
|
675
686
|
kshana/
|
|
676
687
|
├── src/ # the kshana core crate (library + CLI)
|
|
677
|
-
│ ├── api.rs · main.rs · lib.rs # typed dispatch (
|
|
688
|
+
│ ├── api.rs · main.rs · lib.rs # typed dispatch (20 kinds) + CLI + crate root
|
|
678
689
|
│ ├── python.rs · wasm.rs # optional PyO3 / wasm-bindgen bindings
|
|
679
690
|
│ ├── types.rs · scenario.rs · allan.rs # shared core (time grid, GNSS timeline, Allan)
|
|
680
691
|
│ │
|
|
@@ -728,6 +739,7 @@ kshana/
|
|
|
728
739
|
| [Provenance](docs/PROVENANCE.md) | reviewers / citers | every sensor parameter, model, and dataset traced to its published source, in one citable table |
|
|
729
740
|
| [Reproducibility & provenance](docs/REPRODUCIBILITY.md) | reviewers / packagers | determinism guarantees, golden-pinning, SBOM, build provenance |
|
|
730
741
|
| [Positioning](docs/POSITIONING.md) | evaluators | where Kshana sits vs RTKLIB/gLAB (complementary), and the zero-install browser tier |
|
|
742
|
+
| [Technical report](paper/kshana-technical-report.md) · [JOSS paper](paper/paper.md) | reviewers / citers / evaluators | the full extended research paper — architecture, per-domain models, validation, case studies, and limitations — plus the concise JOSS submission |
|
|
731
743
|
| [SGP4 validation](docs/SGP4-VALIDATION.md) | reviewers / citers | agreement with the AIAA 2006-6753 reference (666 states, ~4 mm) **and** a head-to-head against the independent `sgp4` crate (agree to sub-micron / 4.12 mm) |
|
|
732
744
|
| [Integrity FoM](docs/INTEGRITY.md) | evaluators | what the `integrity` / `security` figures mean — and what they are **not** vs aviation HPL/VPL |
|
|
733
745
|
| [Quantum models](docs/QUANTUM.md) · [details](docs/QUANTUM-MODELS.md) | reviewers | the cold-atom-interferometer physics layer, and where coefficients are still looked up |
|
|
@@ -772,6 +784,10 @@ artifact (generated by `cargo run --bin validation_report`, SLSA-attested).
|
|
|
772
784
|
| Numerical (Cowell) propagator, unperturbed | **sub-metre over 24 h**; energy/momentum conserve ~1e-9 | exact universal-variable Kepler |
|
|
773
785
|
| Lambert · Tsiolkovsky · porkchop | round-trip to two-body truth; ΔV **< 0.01 %** | Izzo 2015 · rocket equation · analytic Hohmann floor |
|
|
774
786
|
| Orbit determination (Gauss–Newton batch) | sub-m / mm·s⁻¹ noiseless; ~2 m at a 5 m noise floor | two-body + J2 over an RK4 arc |
|
|
787
|
+
| 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
|
+
| 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
|
+
| 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` |
|
|
790
|
+
| 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`) |
|
|
775
791
|
| 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 |
|
|
776
792
|
| GPS-denied gravity-map navigation | ~70 km INS drift → **~145 m** recovered | ESA NAVISP *Quantum Wayfarer* target |
|
|
777
793
|
| Terrain-referenced navigation (TERCOM/SITAN) | 70 km drift → **< 500 m** (grid-resolution floor ~140 m) | SRTM `.hgt` DEM; hand-injected drift (non-circular check) |
|
|
@@ -872,7 +888,7 @@ entry for every user-visible change. Participation is governed by our
|
|
|
872
888
|
|
|
873
889
|
If you use Kshana in academic or technical work, please cite it. Machine-readable
|
|
874
890
|
metadata is in [`CITATION.cff`](CITATION.cff) (GitHub renders a "Cite this repository"
|
|
875
|
-
button from it); cite the version you used (e.g. `v0.
|
|
891
|
+
button from it); cite the version you used (e.g. `v0.17.0`) together with the
|
|
876
892
|
scenario and seed for full reproducibility. Every release is archived on Zenodo with
|
|
877
893
|
a citable DOI — the concept DOI [10.5281/zenodo.20528627](https://doi.org/10.5281/zenodo.20528627)
|
|
878
894
|
always resolves to the latest version.
|
|
@@ -890,7 +906,7 @@ the [`CHANGELOG.md`](CHANGELOG.md). Every result is reproducible from
|
|
|
890
906
|
|
|
891
907
|
| Channel | Install / get | Contents |
|
|
892
908
|
|---------|---------------|----------|
|
|
893
|
-
| [crates.io](https://crates.io/crates/kshana) | `cargo install kshana` · `kshana = "0.
|
|
909
|
+
| [crates.io](https://crates.io/crates/kshana) | `cargo install kshana` · `kshana = "0.16"` | Rust library + CLI |
|
|
894
910
|
| [crates.io](https://crates.io/crates/kshana-mcp) | `cargo install kshana-mcp` | the MCP server |
|
|
895
911
|
| [PyPI](https://pypi.org/project/kshana/) | `pip install kshana` | abi3 wheels (Linux/macOS/Windows) + sdist |
|
|
896
912
|
| [npm](https://www.npmjs.com/package/kshana) | `npm install kshana` | WebAssembly module + JS wrapper |
|
|
@@ -934,10 +950,27 @@ Contact **contact@ashforde.org**.
|
|
|
934
950
|
|
|
935
951
|
## Key references
|
|
936
952
|
|
|
937
|
-
|
|
953
|
+
**Validation oracles & standards** — the external authorities Kshana's checks are anchored to:
|
|
954
|
+
|
|
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.
|
|
956
|
+
- 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
|
+
- 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://tf.nist.gov/general/pdf/2220.pdf) (Allan-deviation relations and the NBS14 reference series).
|
|
959
|
+
- Montenbruck & Gill — *Satellite Orbits: Models, Methods and Applications* (Springer): the force models behind the force-model fit to agency precise ephemerides.
|
|
960
|
+
|
|
961
|
+
**Device & method physics** — the cited sources behind the sensor models:
|
|
962
|
+
|
|
938
963
|
- Origlia, Schiller, Bongs et al. — [arXiv:1503.08457](https://arxiv.org/abs/1503.08457) (strontium optical lattice clock, space-oriented goal).
|
|
939
964
|
- Oelker et al., *Nature Photonics* (2019) — [JILA PDF](https://jila-pfc.colorado.edu/sites/default/files/2019-09/Oelker-Sr%20record%20stability_2019-Nature_Photonics.pdf) (laboratory Sr clock, 4.8×10⁻¹⁷).
|
|
940
965
|
- Templier et al., *Science Advances* (2022) — [arXiv:2209.13209](https://arxiv.org/abs/2209.13209) (hybrid quantum accelerometer triad).
|
|
941
966
|
- 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).
|
|
942
|
-
- 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).
|
|
943
|
-
|
|
967
|
+
- 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).
|
|
968
|
+
|
|
969
|
+
**Comparison & open prior art** — the tools and surveys Kshana is positioned against:
|
|
970
|
+
|
|
971
|
+
- Humphreys et al. — *TEXBAT* (ION GNSS 2012): the spoofing test-battery parameters the multi-layer detector is characterised against.
|
|
972
|
+
- 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.
|
|
974
|
+
- 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
|
+
- 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. — *Advances in Space Research* (2021): GRAIL reduced-dynamic OD, the empirical-acceleration floor the LRO fit reproduces.
|
package/kshana_bg.wasm
CHANGED
|
Binary file
|
package/package.json
CHANGED