Masintõlge, mida emakeelne kõneleja pole üle vaadanud. Võrdlusallikaks on ingliskeelne versioon.

API-d ja integratsioonidMuuda GitHubisAllikas: README.npm.md

Kshana: märk, täpset hetke tähistav kompassi-ristik, sõnamärgi kshana kõrvalKshana: märk, täpset hetke tähistav kompassi-ristik, sõnamärgi kshana kõrval

Kshana · क्षण · täpne hetk
Avatud lähtekoodiga simulaator PNT (positsioneerimine, navigatsioon ja aeg) vastupidavuse jaoks.

Väljalase v0.40.0 401 võimekusest 176 valideeritud sõltumatute väliste etalonide (oraaklite) vastu Ligikaudu 95 % reakatvus, pidevas integratsioonis nõutav 85 % Litsents: AGPL-3.0-only või kommertslitsents DOI 10.5281/zenodo.20528627

Harjuta minutit, mil GNSS vaikib: Kshana missioonikonsool, joonistatud mootori tegelikust käitusest, aheldatud segamise, spuufimise, holdover-i ja terviklikkuse kampaania GPS-i, Galileo, BeiDou ja GLONASS-i 102 satelliidi üleHarjuta minutit, mil GNSS vaikib: Kshana missioonikonsool, joonistatud mootori tegelikust käitusest, aheldatud segamise, spuufimise, holdover-i ja terviklikkuse kampaania GPS-i, Galileo, BeiDou ja GLONASS-i 102 satelliidi üle

Harjuta minutit, mil GNSS vaikib#

Kshana taasesitab segamist, spuufimist ja kella holdover-it (aja hoidmine ilma välise etalonita), kui GNSS-i (ülemaailmse satelliitnavigatsioonisüsteemi) signaalid ebaõnnestuvad, ning ütleb, kui kaua süsteem hoiab aega ja asukohta oma eelarve piires ning milline kell või andur toob kõige rohkem varu. See on WebAssembly pakett: kogu mootor JavaScriptis, brauseris või Node.js-is. Iga käitus on stsenaariumist, algväärtusest (seed) ja mootori versioonist lähtudes reprodutseeritav bitthaaval.

Esmalt saab proovida, ilma midagi paigaldamata: Kshana Studio käitab kogu mootorit brauseris, WebAssemblyks kompileeritult, ja ei lae midagi üles.

Tõendid#

401 võimekusest 176 on valideeritud sõltumatute väliste etalonide (oraaklite) vastu; 221 on ausalt märgistatud modelleeritud, 4 on partneri omad. Iga võimekus kannab masinkontrollitud registris (ledger) ühte silti: VALIDATED (sõltumatu väline etalon nõustub: tegelikud andmed, sõltumatu teostus või avaldatud etalonvektorid), MODELLED (sisemiselt kooskõlas ja see on öeldud välja) või PARTNER (selle eest vastutab riistvarapartner). Kontrollide hulgas: kõik 666 SGP4 (Simplified General Perturbations 4) vektorit AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 täpsusega 4,12 mm ja Cowelli jõumudel täpsusega 0,08 m Orekit 12,2 suhtes.

Kuidas võimekus oma sildi teenib: võimekus, etalon (oraakel), test, registri (ledger) silt. Kontrollistaatus kõigi 401 võimekuse lõikes: 176 valideeritud, 221 modelleeritud, 4 partneri omadKuidas võimekus oma sildi teenib: võimekus, etalon (oraakel), test, registri (ledger) silt. Kontrollistaatus kõigi 401 võimekuse lõikes: 176 valideeritud, 221 modelleeritud, 4 partneri omad

Paigaldamine#

npm install kshana

Kasutus#

Pakett on ES (ECMAScript, standardne JavaScript) moodul WebAssembly kasulikule koormusele, ehitatud brauseri jaoks. Lähtesta see üks kord, seejärel kutsu mootorit sünkroonselt. Ainus erinevus brauseri ja Node.js-i vahel on see, kuidas WebAssembly binaarfail laaditakse.

Brauseris (komplekteerija kaudu või lehel, mis serveerib node_modules/kshana/) toob init() faili kshana_bg.wasm mooduli kõrvalt:

import init, { run, summary, chart_svg, version } from "kshana";

await init();                                   // fetch and compile the WebAssembly binary

Node.js-is ebaõnnestub init() veaga TypeError: fetch failed (Node'i fetch ei suuda lugeda kohalikku faili), seega loe binaarfail kettalt ja anna see üle funktsioonile initSync:

import { readFileSync } from "node:fs";
import { createRequire } from "node:module";
import { initSync, run, summary, chart_svg, version } from "kshana";

const wasmPath = createRequire(import.meta.url).resolve("kshana/kshana_bg.wasm");
initSync({ module: readFileSync(wasmPath) });      // compile the WebAssembly binary

Salvesta Node.js-i versioon .mjs failina (või sea "type": "module" oma package.json failis), et import töötaks. Sealt edasi on mõlemad samasugused:

// A complete scenario, not a sketch: scenarios/clock-holdover.toml without its comment
// lines. It runs 2 h, 10 min of GNSS then about 1.8 h with GNSS denied, and asks how long
// a strontium optical clock and a chip-scale atomic clock (CSAC) each hold time to within
// 20 ns. sigma_y(1s) is a clock's Allan deviation at an averaging time of one second;
// q_wf, the white-frequency-noise intensity, is its square.
const toml = `
seed = 42
threshold_ns = 20.0

[time]
step_s = 10.0
duration_s = 7200.0

[gnss]
windows = [
  { t0 = 0.0,    t1 = 600.0,  state = "nominal" },
  { t0 = 600.0,  t1 = 7200.0, state = "denied" },
]

[clock_quantum]
id = "optical-sr-lattice"
provenance = "Strontium optical lattice clock, space-oriented goal sigma_y(1s)=1e-15 (Origlia/Schiller/Bongs et al., arXiv:1503.08457); q_wf=sigma_y(1s)^2; ground-demonstrator maturity, not flown; flicker/aging not modeled"
y0   = 5.0e-17
q_wf = 1.0e-30
q_rw = 0.0

[clock_classical]
id = "csac-sa45s"
provenance = "Microchip SA65 / SA.45s CSAC datasheet sigma_y(1s)=3e-10; q_wf=sigma_y(1s)^2; flicker/aging not modeled"
y0   = 5.0e-10
q_wf = 9.0e-20
q_rw = 0.0
`;

const result = JSON.parse(run(toml));           // the full result document
// timing_p95_ns: the 95th-percentile timing error over the GNSS outage, in nanoseconds
console.log(version(), result.classical.fom.timing_p95_ns);

console.log(summary(toml));                     // the one-line result string
const svg = chart_svg(toml);                    // the same chart the command-line interface (CLI) writes

TypeScript näeb tüübitud tulemusi: run_typed(toml) tagastab väärtuse RunOutput (json, svg, summary, csv: string | null, data: ResultDocument), scenario_kinds() tagastab väärtuse KindMeta[], mille name on kõigi liikide ScenarioKind ühendtüüp, ja error_kind() tagastab väärtuse ErrorKind (või "" edu korral). Iga tulemusdokumendi enda väljad erinevad liigiti; ResultDocument tüüpib ühist ümbrist (schema_version, engine_version ja units plokk, mis koosneb FieldUnit-idest).

import { run_typed, scenario_kinds, type ScenarioKind } from "kshana";

const out = run_typed(toml);
const units = out.data.units;                                // Record<string, FieldUnit>
const kinds: ScenarioKind[] = scenario_kinds().map((k) => k.name);

Veel neli funktsiooni kirjeldavad mootorit kasutajaliidesele. kind_modules() tagastab JSON-objekti liigist moodulitesse, mida selle kontrollimaatriksi read nimetavad, field_importance() sellise, mis seob liigi tulemuse väljadega, mis vastavad selle küsimusele (kuvamise metaandmed; mootor ei loe seda kunagi), iq_signals() signaalide nimed, mida iq_run_short aktsepteerib, ja iq_run_short(fs_hz, duration_s, signal, ids, dopplers_hz, cn0_dbhz, seed) lühikese sünteetilise IQ-stseeni, mälus hangitud ja jälgitud (kuni 0,25 s, 1 000 000 valimit ja 8 satelliiti), sama vastusega nagu natiivne ehitus.

import { list_examples, get_example, export_scenario, animate_scenario } from "kshana";

const names = JSON.parse(list_examples("")).scenarios.map((s) => s.name);   // the bundled scenarios
const toml = get_example("orbit-gnss-challenged");                           // its TOML, byte for byte
const czml = JSON.parse(export_scenario(toml, "czml")).files[0].content;      // a CZML file, in memory
const player = JSON.parse(animate_scenario(toml, "html", 0, NaN, 0)).files;   // {name: html text}

WebAssembly-liideses on iga sisenemispunkt eraldi kutse: run (tulemusdokument JSON-sõnena), summary, chart_svg, table_csv (stsenaariumi CSV (komadega eraldatud väärtuste) tabel sõnena või undefined liikidele, mis tabelit ei avalda; see viskab erandi vigase stsenaariumi korral), run_all (üks mootori käitus, mis tagastab {json, svg, summary, csv} JSON-sõnena — seda tasub kasutada, kui on vaja rohkem kui ühte väljundit, sest iga teine kutse käitab stsenaariumi uuesti), run_typed (samad väljundid ühe tüübitud objektina, dokument juba parsitud kujul data), version, list_kinds / scenario_kinds / error_kind (introspektsioon; scenario_kinds tagastab parsitud loendi), encode_permalink / decode_permalink — jagatava lingi (URL, uniform resource locator) kodek, mida Kshana Studio kasutab kogu stsenaariumi edasi-tagasi teisendamiseks aadressiriba fragmendi kaudu — ning export_sp3 / export_omm / export_oem, SP3-c (Standard Product 3 vormingu redaktsioon c) ja CCSDS (Consultative Committee for Space Data Systems) efemeriidi artefaktid — OMM, Orbit Mean-elements Message, ja OEM, Orbit Ephemeris Message — mida käsurida kirjutab — ning receiver_trust, mis hindab tegelikku vastuvõtja logi, mida kirjeldab receiver-trust stsenaarium, ja tagastab {json, csv, svg, summary} JSON-sõnena (brauseril puudub failisüsteem, seega peavad logi ja iga navigatsioonifail olema stsenaariumis sisse kirjutatud kujul text või base64; tabel [platform] kind = "vessel" lisab mereliikluse monitorid ja 0-100 usaldusskoori, ainult nõuandev), export_formats / export_scenario (milliseid koostalitlusvorminguid stsenaarium toetab, seda käitamata, ja üks eksport mälus: czml, kml, geojson, stk või sigmf JSON-ina {format, spec_url, files}, baitidelt identne samale stsenaariumile, midagi ei laeta üles), import_route (teekonnapunktide rajaga stsenaariumi kirjutatud GeoJSON-marsruut, käsurea --import-route), animate_scenario (käitamise ajarida animeeritud SVG-na, ühe HTML-mängijana või SVG kaadritena), list_examples / get_example (kaasatud etalonstsenaariumid ja nende TOML), evidence_attach_timestamp (seo RFC 3161 tõend tõendipaketiga mälus; pakett peab ikka kontrolli läbima ja ajatempliasutuse allkirja ei kontrollita), osnma_verify (millise satelliitide Galileo navigatsiooniandmeid I/NAV lehefail või UBX-voog autentib, usaldatud Merkle'i juure või avalike võtmetega ja valikulise sõltumatu etalonajaga; see autentib andmeid ega esita ühtki spuufimisvastase toimivuse väidet; midagi ei laeta üles), receiver_trust_replay (piiratud NMEA väljavõte, mida hinnatakse samal viisil nagu reaalajarežiim; ilma lävendita), assess_vessel_log (laeva NMEA logi partiikäitusena), trust_telemetry (usaldusvoog või tulemus Prometheuse tekstina, CEF- või LEEF-süsteemilogi ridadena või OTLP kasulikku koormusena; midagi ei saadeta), evidence_verify (kontrolli allkirjastatud tõendipaketti; midagi ei laeta üles; pakette tehakse käsurea, Pythoni või MCP-ga), bench_export (stsenaariumi liikumine ja sündmused tekstina laborisimulaatori jaoks; signaali ei kirjutata), compliance_report ja compliance_mapping (milliseid avaliku raamistiku nõuderidu tulemusdokumendid toetavad tõendeid (supports evidence for), koos iga rea lüngaga; mitte järeldus, et raamistik on täidetud), ja interference_map (ADS-B või AIS CSV tekst kshana-interference-map/v1 GeoJSON-iks UTC päeva kohta; ainult koondandmed), route_exposure (marsruudi osa läbi nende kaartide halvenenud lahtrite; mitte prognoos), nmea_training (sünteetiline sillal tekkiv NMEA ja instruktori logi meeskonna koolituseks; ainult tekst, mitte kunagi laeva reaalajas navigatsioonisüsteemidele) ning taevageomeetria funktsioonid sky_geometry, sky_monte_carlo, skyline_presets, skyline_profile ja skyplot_svg (milliseid satelliite asukoht näeb, kui hooned, kaid või maastik blokeerivad osa taevast, koos täpsuse halvenemise teguri (DOP), horisontaalse veaellipsi, algväärtustatud (seeded) Monte Carlo pilve ja SVG-tekstina taevagraafikuga; nähtavuse otsust ja ellipsit kontrollitakse sõltumatute teekide vastu, eelseadistused on esindusgeomeetriad, mitte mõõdistused, ja horisondijoon eemaldab otsenähtavuses olevad satelliidid ega midagi enamat). Brauseriehituses puuduvad: receiver-trust live koos oma lävendi ja TCP kuulajaga, voogedastatud koolitus-NMEA ning telemeetria eksportijad (Prometheus, OpenTelemetry, syslog) on pikalt töötavad võrguprotsessid ja jäävad käsurea tööriista külge; tõendipaketi loomiseks on vaja allkirjastamisvõtit, mis kuulub CLI-le või Pythonile. Siin puudub ühe kutsega run_full; see seos on olemas ainult Pythoni wheel-paketis.

Iga võimekus kontrollimaatriksis on märgistatud kui valideeritud (kontrollitud sõltumatu välise etaloni vastu), modelleeritud või partneri omad; optiliste kellade arvud on kosmoseesmärgid maapealsel riistvaral (ükski strontsiumi optiline kell ei ole lennanud). Küpsus ei ole valdkonniti ühtlane — Maa PNT on valideeritud tegelike andmete vastu; kaugkosmose ja Marsi navigatsioon on modelleeritud, ainult selle ehituskivid (valguse levi aeg, planeetide asukohad) on valideeritud väliste sõltumatute etalonide vastu; tegeliku missiooni kaugkosmose OD (orbiidi määramine) on teekaardil.

Võimekused#

Mootoril on 92 stsenaariumi liiki; kshana kinds loetleb need koos nende väljadega. Uus versioonis 0.38.0: gnss-ssv (GNSS-signaalid kosmoselaevadele GNSS-orbiitidest kõrgemal, nende ümber ja kaugemal) ja lunar-infrastructure (Kuu orbiit ja pind navigatsiooni- ja geodeetilise infrastruktuurina), mõlemad MODELLED, ning holdover-test (ajavea kirje ITU-T maskide vastu).

  • Spekter: kuidas segaja võtab GNSS-i L-riba, riba kaupa.
  • Kellad ja ajastus: holdover läve vastu, aja edastamine ning telekommunikatsiooni holdover Rahvusvahelise Telekommunikatsiooniliidu standardimissektori (ITU-T) maskide vastu.
  • Konstellatsioonid mis tahes keha ümber: katvus, täpsuse halvenemise tegur ja kättesaadavus Maa, Kuu või Marsi ümber ning päikesesüsteem ühel epohhil.
  • Madala Maa orbiidi navigatsioon: signaal, läbilend ja side, navigatsioonisõnum ning liidetud fiks, etapp etapi haaval.
  • Kampaaniad: aheldatud missioon, parameetriskaneerimine või Monte Carlo ansambel ühes stsenaariumis.
  • Aruanded, animatsioon ja eksport: iga arv koos oma ühiku ja sildiga; käitamise animeeritud joonis; SP3 (Standard Product 3), CCSDS (Consultative Committee for Space Data Systems) orbiidisõnumid, CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, STK (Systems Tool Kit) ja SigMF (Signal Metadata Format) failid.

Arhitektuur#

Üks avatud mootor keskel, kshana 0.40.0, tüübitud suunamisega 75 liiki hõlmavale; selle ümber käsurida, Rusti teek, Python, WebAssembly ja Kshana Studio, MCP server, Dockeri tõmmis ja JetBrainsi plugin; selle all Kshana Pro, patenteeritud kiht, mis sõltub avatud mootorist ja ei hargne sellest kunagiÜks avatud mootor keskel, kshana 0.40.0, tüübitud suunamisega 75 liiki hõlmavale; selle ümber käsurida, Rusti teek, Python, WebAssembly ja Kshana Studio, MCP server, Dockeri tõmmis ja JetBrainsi plugin; selle all Kshana Pro, patenteeritud kiht, mis sõltub avatud mootorist ja ei hargne sellest kunagi

Sama stsenaariumifail annab igal liidesel samad baidid. MCP on Model Context Protocol: kshana-mcp laseb tehisintellekti (AI) assistendil mootorit käitada.

Uuringud#

Kuus arXivi artiklit tuginevad avatud mootorile, igaühel koos selle taga oleva käsuga: arXiv:2606,22054 (häiretuvastajate optimismilõhe), arXiv:2606,24210 (tingimuslik ajastuse kaitsetase), arXiv:2607,05415 (kui stabiilne on PNT vastupidavuse skoor), arXiv:2607,02566 (Kuu pinnajaamade jälgitavus väga pika baasjoonega interferomeetria abil), arXiv:2607,06212 (Kuu lõunapoolse polaarala geomeetria ja pinnamajakad) ja arXiv:2610,23871 (tsislunaarne navigatsioon jälgitavusprobleemina: kaare pikkus, Grami maatriksi tingimuslikkus ja Doppleri kangi efekt). Vt Uuringud.

Väljaanded#

Kogu mootor on vaba AGPL-3.0 all. Kshana Pro, patenteeritud kiht, mis sõltub avatud mootorist ja ei hargne sellest kunagi, ning kohandatud uuringud on lepingu alusel saadaval Ashforde® OÜ-lt: contact@ashforde.org. Hindu ei ole; vt docs/PRO.md.

Loe lähemalt#

Litsents#

Vaba ja avatud lähtekoodiga GNU AGPL-3.0-only all (GNU Affero üldine avalik litsents, ainult versioon 3). Kommertslitsents on suletud integratsiooniks saadaval Ashforde® OÜ-lt (Eesti osaühing; OÜ = osaühing); vt LICENSING.md. Professionaalselt arendanud ja hooldanud Ashforde® OÜ.