在浏览器中试用
适合所有人,无需安装。依赖:无。
引擎以WebAssembly形式在本地运行;不会上传任何内容。
机器翻译,未经母语人士审校。以英文版为准。
一个用于GNSS(全球导航卫星系统)和PNT(定位、导航与授时)韧性的Rust引擎:命令行界面(CLI)、Rust、Python和JavaScript软件包、浏览器中的Kshana Studio、JetBrains IDE(集成开发环境)插件和MCP(模型上下文协议)服务器,使AI(人工智能)助手运行经独立外部参考基准核对的引擎,而不是猜测数学。以AGPL-3.0(GNU Affero通用公共许可证,第3版)开源,或采用商业许可。
The recorded session plays here with JavaScript.
由代码仓库的清单文件生成,并对照其README交叉核对,因此每条命令都与v0.40.0一致。kshana-mcp让你的AI助手使用同一个引擎:输入TOML(Tom的显而易见的极简语言)场景,输出JSON(JavaScript对象表示法)和CSV(逗号分隔值)。
面向任何使用支持MCP的助手的人。
然后检查cargo install --list | grep kshana-mcp
注册表名称io.github.ashfordeOU/kshana-mcp。请按kshana-mcp的README,将其注册到客户端:
{
"mcpServers": {
"kshana": {
"command": "/Users/you/.cargo/bin/kshana-mcp",
"env": { "KSHANA_MCP_IQ_DIR": "/Users/you/iq" }
}
}
}{
"mcpServers": {
"kshana": {
"command": "/Users/you/.cargo/bin/kshana-mcp",
"args": [],
"env": {}
}
}
}面向没有Rust工具链的情形;以容器形式运行MCP服务器。
然后检查docker image inspect ghcr.io/ashfordeou/kshana-mcp:0.40.0 --format '{{.Id}}'
面向IntelliJ、PyCharm和CLion用户。
Settings → Plugins → Marketplace → 搜索“Kshana”(插件ID dev.kshana.ide)。右键单击场景 .toml文件,选择Run Kshana Scenario。
Rust引擎AGPL-3.0或商业许可每次发布均附软件物料清单和构建溯源信息
已记录的会话在此逐步播放。
Studio中的同一次运行:引擎v0.40.0 · clock-holdover.toml · 随机种子42在Kshana Studio中打开报告
49个工具,基于公开的Kshana API(应用程序接口),在官方MCP注册表中为io.github.ashfordeOU/kshana-mcp。轨道导出:SP3(Standard Product 3)以及CCSDS(空间数据系统咨询委员会)OMM和OEM(轨道平均根数与星历消息,TEME:真赤道平春分点坐标系)。可在AI助手(MCP服务器)或Docker镜像下注册。MCP服务器文档
run_scenario由TOML定义运行一个Kshana PNT韧性场景,并返回其性能指标。先返回人类可读的摘要,再返回完整结果JSON(性能指标、曲线)。Kshana对照已发表的参考文献验证SGP4/SDP4、IAU参考坐标系、阿伦偏差、GNSS可用性/DOP、ARAIM保护级、GNSS/INS融合和量子传感器模型。每种类型都通过这一个工具运行,包括spectrum(射频频谱与瀑布图)、solar-system、constellation-design和body-pnt(围绕任意天体的星座)、campaign(串联阶段、参数扫描、蒙特卡罗集合和组合场景),以及低地球轨道导航类型leo-signal、leo-pass、leo-navmsg、leo-pvt、leo-ppp、ntn-positioning和leo-pnt-chain。内容以内联方式给出:指向文件的场景字段会被拒绝,场景至多4 MiB。先调用list_scenario_kinds以了解场景类型及其字段,并用list_example_scenarios / get_example_scenario获取某一类型的完整可运行场景。
list_scenario_kinds以JSON数组列出每一种内置Kshana场景类型,及其描述和必填/可选的TOML字段。用它来了解可以运行哪些场景,以及如何为run_scenario构造有效的场景TOML。
validate_scenario对Kshana场景TOML进行预检:验证它能否按TOML解析并检测其场景类型,但不运行。返回检测到的类型,或对格式错误的TOML给出描述性错误。(run_scenario通过执行场景来完成全面验证。)
assess_receiver_log评估真实GNSS接收机日志的可信度:读取u-blox UBX、RINEX 3(可附广播导航文件,这会加入引擎自己的定位解、RAIM和时钟辅助监测器)、Android GnssLogger或NMEA日志,对照校准基线运行信任监测器(载噪比下降、AGC、干扰指示、失锁、位置跳变、RAIM、时钟),并返回接收机何时以及为何不再可信。可选的[[events]]带有起始时间和预测的C/N0下降,对照场景中所述的容差评分:检测到、迟到或漏检,以及相符或不符。返回摘要和完整结果JSON(按需提供图表和CSV;船舶运行的CSV以带有咨询语句的#注释行开头,CSV读取器用其注释选项跳过它)。日志的字节以text或base64内联在TOML中(仅限内联,至多4 MiB)。[platform] kind = "vessel"表选择海事监测器(运动学一致性、航向与航迹向、航速计、天线高度、C/N0离散度、时间一致性),并为每个历元加上0-100的信任分及造成扣分的监测器。每个历元还带有其卫星geometry(good;卫星少或PDOP或HDOP高时为degraded;日志中没有卫星高度角或DOP时为unknown);每个历元带有label(good、fair、poor);对船舶,geometry监测器加入评分,仅在几何为poor时扣分(至多15分:degraded,从不untrusted),每项扣分带一个类别:geometry(天空状况)、environment或inconsistency(类攻击)。对带门限的数据流片段,使用assess_vessel_stream。仅供参考;证据等级MODELLED。
list_example_scenarios以JSON列出内置参考场景:count,以及scenarios,一个由name、kind和about(文件自身头部注释的第一句)组成的数组。每一个都是可直接运行的完整场景,因此这是获得某个类型有效TOML的最快途径:选一个名称,用get_example_scenario取回,编辑,运行。传入kind可仅列出某一类型的示例(例如spectrum、solar-system、constellation-design、campaign、leo-signal、leo-pass、leo-navmsg、leo-pvt)。
get_example_scenario返回一个内置参考场景的TOML文本,与代码仓库在scenarios/下提供的文件逐字节一致。把文本(无论是否编辑)传给run_scenario、report_scenario、animate_scenario或某个导出工具。名称来自list_example_scenarios。存在于代码仓库但未内置的场景会被拒绝,并说明原因。
report_scenario运行一个Kshana场景并返回其报告:执行摘要、输入、每个结果数值及其单位和VALIDATED或MODELLED标签、事件、该运行所用到的能力行,以及可复现性记录(引擎版本、场景和结果的SHA-256摘要、随机种子、复现它的命令)。format为json(默认;机器可读的report.json)或html(可打印的、嵌入图表的自包含report.html)。测评活动的报告还带有其扫描表或蒙特卡罗分布。报告是场景的纯函数:不读取时钟。
animate_scenario运行一个Kshana场景,并以动画形式返回其时间序列。format为svg(默认:一个带动画的SVG,无脚本)、html(一个自包含的播放器页面)或frames(带编号的静态SVG帧加manifest.json,一次回复中至多120帧)。可选的fps(1至60,默认12)、duration_s(0.5至600,默认8)和width(480至3840像素,默认960)。第一个内容项是所绘内容的JSON摘要:时间范围和单位、图表标题、阶段和事件数、是否有频谱瀑布图、读取曲线所用的结果路径、被省略的任何序列,以及文件名。随后是各文件,每个一个内容项,顺序依摘要的files所列。结果没有采样时间轴的类型会被拒绝,并给出相应说明。该动画是对该次运行自身数字的MODELLED呈现;相同的场景和选项得到字节完全相同的文件。
list_export_formats不经运行,报告哪些互操作导出格式适用于某个Kshana场景:一个JSON数组,每种格式一项(czml、kml、geojson、stk、sigmf),给出applies、不适用时的reason,以及spec_url,即写出程序所遵循的已发布规范。CZML(Cesium Language)、KML(Keyhole Markup Language)、GeoJSON和STK(Systems Tool Kit)星历.e描述场景的几何;SigMF(Signal Metadata Format)记录带[iq]块的spectrum场景所合成的采样。在export_interop之前调用它。
export_interop以一种互操作格式导出Kshana场景:czml(Cesium Language,用于CesiumJS)、kml(Keyhole Markup Language,用于Google Earth和地理信息系统工具)、geojson(RFC 7946)、stk(Systems Tool Kit星历.e,每颗卫星一个文件)或sigmf(spectrum场景合成采样的Signal Metadata Format记录)。第一个内容项是JSON索引:format、spec_url和files,每个带有其suffix(命令行附加到输出名称之后的内容,例如.czml或.G01.e)、bytes、sha256和encoding。随后是各文件,每个一个内容项,按索引顺序:utf-8文件以其文本给出,二进制的SigMF采样文件以base64给出。测评活动会导出该格式所适用的每个成员场景。不适用的格式会被拒绝并说明原因;list_export_formats一次报告全部五种。时间为协调世界时(UTC);相同的场景得到字节完全相同的文件。
import_route把GeoJSON路线写入一个按航点航迹飞行的Kshana场景,并返回新的场景TOML(用run_scenario运行)。路线是由经度、纬度位置组成的LineString(或装有一条这样路线的Feature / FeatureCollection);它会替换场景的start_lat_deg、start_lon_deg、step_lat_deg、step_lon_deg和waypoints。接受路线的类型有terrain-nav、terrain-slam、gravity-map和combined-altpnt;任何其他类型都会被拒绝并说明原因。给出航迹的两个端点,或沿一条直线均匀分布的位置:航迹类型按start + i*step飞行,因此任何其他形状都会被拒绝。
export_sp3把orbit场景外推的星座导出为SP3-c精密星历文本(标准的GNSS后处理格式)。若场景不是orbit类型则报错。
export_omm把orbit场景的平均根数导出为CCSDS 502.0-B-2 OMM(Orbit Mean-Elements Message)目录:每颗卫星一条OMM。若场景不是orbit类型则报错。
export_oem把orbit场景外推的星座导出为CCSDS OEM 2.0星历文本:惯性(TEME)状态时间序列,同时含位置和速度,供飞行动力学工具(GMAT / Orekit / STK)读取。这是仅含位置的export_sp3的、带速度的补充。若场景不是orbit类型则报错。
export_table_csv运行一个Kshana场景,并以CSV文本返回其可复现性表格:命令行写出为<scenario>.table.csv并被论文引用的字节级稳定表格。只有这些类型会输出表格:realtime-frame-eop、lunar-time-budget、lunar-jamming、telecom-timing、leo-navmsg(当其encode-decode分析在kepler16或kepler-rac电文模型上运行时,即广播星历表),以及moonlight-service-volume(当export_site_lat_deg和export_site_lon_deg均已设置时)。其他任何类型(或无效场景)都会报错;性能指标请用run_scenario。
sky_geometry方位角相关天际线(街道峡谷、港口、峡湾、集装箱码头)下的天空几何:根据站点、时间和星座预设、两行根数集(tle,带UTC epoch)或以方位角/高度角或ECEF给出的卫星,得出哪些卫星可见、哪些被天际线遮挡,由经gnss_lib_py核对的DOP内核得出GDOP/PDOP/HDOP/VDOP/TDOP,东-北-天协因数和协方差(每个系统一个接收机钟差,或共用一个),以及针对所述UERE在一个sigma和所述置信度下的水平误差椭圆。没有request时,描述一个REPRESENTATIVE天际线预设及其来源和每度的截取(空的skyline_preset会列出它们)。orbit和integrity(带user_site)、gnss-sim、jamming、leo-pvt和leo-pass类型的场景通过run_scenario采用相同的[skyline]部分。证据等级MODELLED:在所述误差模型下的几何,仅视线;不是对接收机真实误差的预测,也不是完好性界限;预设星座是具有代表性的天空,而不是某一日期的天空;带epoch(UTC)的tle文本给出这些根数集在该历元所给出的天空(SGP4),而不是测量,sky_source会说明是哪一种。带有咨询声明:不是经型式认可的导航设备。MCP上没有蒙特卡罗(批量采样;请用命令行、Python或WASM)。仅限内联,至多4 MiB。
iq_signalsGNSS IQ层的设置,以JSON给出:signals(iq_scene、iq_acquire和iq_track接受的信号名称)、enabled(IQ文件工具是否开启)、work_dir(它们读写的唯一文件夹;所有路径参数均相对于它)、max_samples(一次调用可生成或处理的复数采样的最大数量),以及在关闭时的reason。IQ采样从不经由该协议传送:工具接收工作目录中的文件路径,并以紧凑的JSON摘要回复。IQ层不增加干扰或欺骗源合成;任何内容都不会被发射。请先调用它。
iq_info不经处理地描述工作目录中的一个IQ录制文件:类型(带附属文件的原始、SigMF、SigMF集合)、采样格式、采样率、中心频率、总采样数、时长、数据文件及其大小、采集边界和标注数,以JSON给出(与kshana iq info打印的行相同)。可选的raw描述没有附属文件的原始文件;可选的hash加入每个数据文件的SHA-256(会读取整个文件)。
iq_scene在工作目录中生成多卫星GNSS IQ场景文件(kshana iq scene)。所述配置模式:signal + prns(+ 可选的dopplers_hz、cn0_dbhz、data)。广播模式:nav(工作目录中的RINEX导航文件)+ rx_pos [lat, lon, alt] 把每颗健康的GPS卫星放在其真实的广播几何位置上。可选的channel在信号层面施加电离层、对流层、闪烁、多路径、陆地移动遮蔽或NLOS。rate_hz × duration_s必须符合采样预算(见iq_signals)。写出录制文件(原始 + <out>.json附属文件,或一对SigMF)和一个真值附属文件;回复所写出的文件及其字节数、采样数和采样情况,以及每颗卫星真值的首个历元(码相位、多普勒、C/N0),用于对照评分iq_acquire。IQ层不增加干扰或欺骗源合成;任何内容都不会被发射。
iq_acquire对工作目录中的IQ录制文件进行一个或多个PRN的FFT捕获(kshana iq acquire)。只读取一次搜索所需的采样(相干 × 非相干码周期),其数量必须符合采样预算。可选的frontend阶段(带通、陷波、消隐、切除、AGC、量化器)先运行。每个PRN回复一次检测:acquired、doppler_hz、code_phase_chips、归一化峰值statistic、其检测threshold和peak_ratio;json_out / csv_out还把完整结果保存为文件,而surface_out(一个PRN;.csv、.json或 .bin)保存整个多普勒 × 码相位相关功率曲面,以及峰值及其抛物线和精搜索多普勒细化结果。
iq_track对工作目录中的IQ录制文件先捕获再跟踪一个或多个PRN(kshana iq track):捕获初始化每个通道,然后DLL/PLL(可选FLL辅助)环路组把录制文件回放一次。所跟踪的采样(整个录制文件,或其前max_seconds)必须符合采样预算。环路来自design(工作目录中的kshana.loop-design/1 TOML文件,用design_name选择其一)或内置设计,环路参数会覆盖它;reacquire会重新捕获失锁或虚锁的通道。跟踪以流式进行,因此内存不会随录制文件增长。回复设计的名称和哈希、任何warnings(commensurate_sampling:采样率是码速率一半的整数倍会使码环抖动和偏差失去代表性),以及每个通道的历元数、跟踪秒数、最终多普勒和码相位、最终和平均C/N0(dB-Hz)、相位锁定和码锁定的历元占比、locked_at_end、最终锁定状态、检测到的虚锁以及重新捕获次数。逐历元输出仅进入文件:epochs_out(E/P/L、鉴别器、环路状态、C/N0、锁定状态;.csv/.jsonl/.bin)、events_out、json_out / csv_out。未被捕获的PRN会被拒绝,并给出其统计量和阈值。
iq_frontend对工作目录中的IQ录制文件应用接收机前端和干扰抑制DSP,并把结果写成带<out>.json附属文件的新原始录制文件(kshana iq frontend)。stages可选取以下任意项:bandpass_hz [lo, hi] FIR、自适应notch、脉冲blank、频域excise、agc,以及bits位量化器(除非no_agc,否则前置自动AGC),始终按此顺序。整个输入必须符合采样预算。回复所处理的采样以及所写出的文件及其字节数。它处理录制文件;不合成任何内容。
iq_campaign运行工作目录中的实验室回放测评活动(kshana iq campaign):录制文件(每个由陈述实验室已知真值的kshana.test-conditions/1文件描述)x前端链路x环路设计,每个单元格均被跟踪并对照所述条件评分(失锁时间、重新捕获时间、对照所述J/S的C/N0劣化及一条标注为MODELLED的解析参考、虚锁率、PLL/DLL抖动、可用性)。增量式:一次调用运行符合采样预算(或max_cells)的待处理单元格,每个已完成的单元格都会保留,下一次调用接着运行。回复单元格数、失败项、所写出的文件,以及所有单元格完成后的digest。只对已记录的数据评分;不合成任何干扰。
iq_campaign_status从工作目录中的输出文件夹报告实验室回放测评活动的进度,仅读取文件:已完成和待处理的单元格,计划中的录制文件、前端和设计,以及所有单元格完成后的digest。
iq_sweep在多个跟踪环设计下回放工作目录中的一个IQ录制文件,并报告每个设计的稳态结果(kshana iq sweep):这些设计是kshana.loop-design/1文件(design)的每个设计,或内置设计上pll_bws_hz、dll_bws_hz、spacings_chips和coherents列表的乘积。每个PRN只捕获一次,每个(设计,PRN)通道跟踪相同的采样,因此每个结果与单独运行该设计的结果完全相同。对每个设计和PRN回复epochs、phase_jitter_deg和code_jitter_chips(在运行的后半段)、phase_lock_frac、code_lock_frac、mean_cn0_dbhz和设计的哈希;json_out / csv_out把表格保存为文件。所跟踪的跨度必须符合采样预算(max_seconds可将其缩小),每次调用至多运行256个(设计,PRN)通道。它处理录制文件;不合成任何内容。
iq_monitor对工作目录中的IQ录制文件运行干扰和欺骗干扰(spoofing)检测监测器(kshana iq monitor):宽带power和spectral监测器,以及在给定signal + prns时的逐卫星C/N0和信号质量监测器,各自对照由前baseline_s秒(或由设置文件)学得的基线。回复各序列(名称和长度)、监测器触发的每个事件(起始、结束、监测器、变化内容;回复中至多200个),以及监测器学得的设置和基线;json_out保存整份报告(每个序列、事件和频谱),csv_prefix写出<prefix>.series.csv和<prefix>.events.csv。跨度必须符合采样预算(max_seconds可将其缩小)。监测器事件表示某个被测量脱离了其学得的基线;它不能确定原因或来源。它只对已记录的数据评分;不合成任何内容。证据等级:MODELLED。
iq_test_conditions验证实验室测试条件文件(kshana iq conditions):一个kshana.test-conditions/1文件,TOML或JSON文本,陈述实验室对某个录制文件已知的真值(预期卫星、稳定时间、所述的压制干扰或干扰计划)。回复解析后的条件及其hash,或该文件无效的原因。仅限内联:不从磁盘读取任何内容,文件中所写的录制文件路径不会被打开(测评活动在工作目录内解析这些路径)。输入上限为4 MiB。
iq_labfit把跟踪环失锁模型拟合到实验室运行(kshana iq labfit):一个iq-labfit场景TOML列出一个或多个运行,每个运行包含一份接收机日志及其所述测试条件;引擎载入每份日志,拟合环路模型和经验模型,用自助法估计不确定度并计算保留集误差。一切都是内联的:每个运行的log给出text或base64(path会被拒绝),该工具不读写任何文件,因此不需要IQ工作目录。或者,场景的[input]指定campaign = "<out-dir>",即一个已完成的kshana iq campaign输出文件夹:此时工具把C/N0和锁定模型拟合到其已评分的单元格(一份kshana.labfit-iq/1报告;Q是给定的,从不拟合,可识别的J/S偏移则会被拟合;在mode = "validation"下需要一张[validation]表)。该文件夹相对于IQ工作目录解析,且必须位于其内部(任何在外部的都会被拒绝);它只被读取,不写入任何内容。回复解析后的report、残差和预测(CSV文本)以及Markdown摘要。输入上限为4 MiB。该拟合描述的是所给的实验室运行;它不是对其他接收机或条件的预测,报告所述者除外。证据等级:MODELLED。
assess_vessel_stream按kshana receiver-trust live的评分方式,对船舶NMEA 0183数据流的有界片段评分,并返回逐历元信任状态(calibrating、nominal、degraded、untrusted)和0-100分,以及造成扣分的监测器(实时JSON-lines模式1.3:每个历元带position、声明输出仅供参考的advisory语句,以及其卫星geometry(good;degraded,并给出few-satellites或high-pdop等原因;片段中没有GSV或GSA时为unknown),附label(good、fair、poor;几何仅在poor时扣分);每项扣分带一个class:geometry(天空状况,不是未发生攻击的结论)、environment或inconsistency(类攻击)),摘要(按状态、几何和类别的计数,最低分和最终分,首个untrusted历元出现的时间)以及最后一条$PKSHT语句。session_toml声明该船舶([platform] kind = "vessel"、其速度、加速度和转向率限值、天线高度、总线上是否有航向传感器)。片段必须包含校准窗口;输入上限为2 MiB和20,000个历元,回复至多携带200行degraded或untrusted历元。这是live命令的有界形式:不打开套接字,也不向任何端口写入内容,门限和遥测导出器(长期运行的进程及其--listen服务器)仅限命令行。这些检查无法发现其定位解与总线上一切内容都一致的欺骗源。仅供参考:不是经型式认可的导航设备;责任仍由操作人员承担。证据等级:MODELLED。
jammertest_import读取已发布的Jammertest测试目录和发射计划(NPRA/jammertest-plan,MIT),作为计划真值(kshana jammertest import):一个测试区域的时隙成为receiver-trust事件,每个标签中带有目录编号和年份。plans每天包含一份计划文件,log_start_utc是日志的首个历元,local_offset_h是计划相对UTC的偏移(默认2,CEST)。返回events_toml(追加到receiver-trust会话中)、events(测试编号、类型、自日志开始起以秒计的起始和结束),以及被跳过的计数。这些事件是计划的时隙,不是记录下来的实际播发时间:时隙可能晚开始或根本没有运行,且计划的status字段多为空。不读取计划中的任何联系方式或个人字段。每段文本的输入上限为4 MiB。证据等级:MODELLED。
jammertest_score对照Jammertest计划为接收机日志评分(kshana jammertest score):对每个计划测试给出检测延迟(首次告警减去计划开始),是否在容差内检测到、迟到或漏检,以及恢复时间(持续recover_hold_s的无告警时段),另有所有时隙及其保护间隔之外的虚警。session_toml只需要[log] format = "ubx"(或rinex、android、nmea、sbf);日志以log(文本格式)或log_base64(二进制)给出。需要目录和计划JSON(catalog_json、plans)以及测试区域(location)。返回评分卡:tests、summary、baseline_contaminated和一个MODELLED标签。该计划是计划的时隙,不是记录下来的实际播发时间,因此漏检可能是一个从未运行的测试。已签名证据包需要签名密钥:请使用命令行(kshana jammertest score --key)。每段文本的输入上限为4 MiB。仅供参考:不是经型式认可的导航设备;责任仍由操作人员承担。证据等级:MODELLED。
assess_vessel_log以批处理方式评估船舶的NMEA 0183日志(kshana receiver-trust,带[platform] kind = "vessel"):评分模型、已运行的监测器和每个历元的0-100分及其扣分项,其卫星几何(good、degraded、unknown),每个历元带label(good、fair、poor),几何仅在poor时扣分,每项扣分带一个类别(geometry、environment、inconsistency),并附geometry_model(阈值、生效的上限和下限以及来源)和geometry_summary。session_toml陈述该船舶的限值以及任何监测器或评分设置(无需[log]表),nmea是日志文本,这样就避免把它粘贴进TOML字符串内。输入上限为4 MiB;回复携带的文档中,epochs被裁减为按状态的计数以及至多200个degraded或untrusted历元。对于其他格式的日志,或带有待评分[[events]]的日志,请使用assess_receiver_log。仅供参考:不是经型式认可的导航设备;责任仍由操作人员承担。证据等级:MODELLED。
generate_training_nmea由nmea-scenario TOML(kshana nmea-scenario)生成供船员训练使用的合成驾驶台NMEA 0183:一条船舶航迹和一条脚本化事件时间线(压制干扰、位置拖离、时间欺骗、重放延迟,以及恢复)。返回校验和有效的语句集(GGA、RMC、VTG、GSV、GSA、GNS、ZDA、HDT、VBW;前2000行)和教员日志(何时注入了什么,附真实航迹和峰值速度与加速度的顶层summary;拖离事件带有其峰值拖离速度和加速度;模式kshana-nmea-training/1),以JSON和文本给出。接收机的可见卫星上限是receiver.max_used(默认12)。按seed确定性生成。仅限文本:此处没有任何内容合成RF、IQ或任何波形,没有任何内容被发射,输出用于训练和测试,绝不用于船舶的实时导航系统(数据流中的标记语句会这样说明)。仅供参考,不是经型式认可的导航设备。向TCP或UDP地址的流式输出仅限命令行。scenarios/training/ 中附带四个示例场景。
create_evidence_pack为船舶NMEA 0183日志的一个时间窗创建已签名证据包(kshana receiver-trust evidence):该窗口的原始日志字节、含每个阈值的配置、逐历元结果及原因、一个自包含的摘要页面,以及一份清单,列出每个文件的SHA-256、完整日志的哈希和一条哈希链,并以Ed25519签名。from_s/to_s是自日志首个历元起的秒数。以JSON返回这些文件(供给verify_evidence_pack)、签名者的公钥及其指纹。签名种子从不返回或记录;若省略signing_key_seed_hex,则使用一次性密钥并随后丢弃,因此证据包证明的是相对于其自称密钥的完整性,而不是谁签了名:对于重要的密钥,请在命令行上创建证据包(在此传入的种子会经过对话)。输入上限为4 MiB,回复上限为4 MiB(请缩小时间窗)。证据包是引擎在所述设置下由日志计算出的内容的技术记录;它不是法律意见,不是对任何事件的事实认定,也不是认证。证据等级:MODELLED。
create_round_trip_pack创建已签名的实验室往返包(kshana evidence round-trip,docs/spec/TEST-CONDITIONS.md):以哈希链接产生该运动的场景、实验室的kshana.test-conditions/1文档、接收机日志及其对照所述事件的评分,放入一个已签名证据包,其config.json带有round_trip块。若条件与评分事件不一致,或所述日志SHA-256并非该日志的,则拒绝该证据包。无信号:不写出、不回放、不调度任何内容;场景的运动如何到达接收机由操作人员负责,且仅按所述记录。签名种子从不返回或记录;若省略,则使用一次性密钥并随后丢弃(保证完整性,而非身份)。输入上限为4 MiB,回复上限为4 MiB。这是技术记录,不是法律意见,也不是认证。证据等级:MODELLED。
verify_evidence_pack验证已签名证据包(kshana evidence verify):每个文件的SHA-256对照清单、哈希链、Ed25519签名;给出public_key(经另一途径取得的签名者密钥)时,验证签名者即为预期之人;给出full_log时,验证你持有的日志就是证据包所记录的日志,且该片段出自其中。返回报告:ok、按代码和文件列出的每个失败项、每项检查、signer_pinned、备注,以及一个verdict:verified(签名者已固定)、intact-signer-not-pinned(一切检查通过,但没有给出可信的public_key,因此该签名只证明证据包相对于其自称的密钥是完整的,而这种密钥任何人都能生成;要这样说明,不要称其已验证)或failed,并附一个message向用户展示。require_timestamp会使不带时间戳令牌的证据包失败。输入上限为4 MiB。已验证的通过表示记录未被改动以及是谁签的名(即你所提供的密钥);它不表示任何事件的起因、谁应负责,也不表示日志显示的就是接收机实际收到的内容。
build_interference_map基于以CSV文本给出的开放许可的飞机(ADS-B NIC/NACp)或船舶(AIS)位置报告,构建GNSS干扰地图(kshana interference-map adsb|ais)。每个UTC日返回一份GeoJSON文档(模式kshana-interference-map/v1)(文件名<source>-<dataset>-<date>.geojson;方法版本2),其中每个已发布的网格单元格为degraded、not_degraded、insufficient_sample、withheld_day_confounded或withheld_no_background(ADS-B),或anomalous/not_anomalous(AIS),并嵌入方法、其预先登记的阈值、数据集许可和署名。低于发布下限(5)的每个单元格计数均为null(被扣留,绝不是零),背景无法估计的一天会扣留其判定。仅聚合:标识符在内存中哈希,绝不返回,不同飞机或船舶少于5个的单元格不会发布。dataset是经批准的预设或custom(附licence、licence_url、attribution)。输入上限为4 MiB,回复上限为4 MiB(更多数据请使用更粗的cell_deg或命令行)。不会获取任何内容:陆地多边形(若AIS需要)由调用方传入。劣化单元格并不表明干扰是其原因;未发布的单元格不是该单元格畅通的证据;这不是预报。证据等级:MODELLED。
route_exposure概述一条路线有多大比例穿过一个或多个干扰地图中的劣化单元格(kshana route-exposure):对每张地图(每个来源每个UTC日一张,即build_interference_map返回的GeoJSON),给出路线长度,以及其长度中位于劣化单元格、未劣化单元格、样本太少无法评估的单元格和未观测单元格的占比。路线是GeoJSON LineString或lat,lon CSV文本;date_from/date_to(YYYY-MM-DD)保留某个日期范围内的地图。每项的输入上限为4 MiB。未观测的单元格不是路线畅通的证据;劣化单元格并不表明干扰是其原因;这描述的是过去的报告,不是预报。证据等级:MODELLED。
compliance_report由Kshana结果文档填充公共框架映射(kshana compliance-report):六个韧性框架和标准(美国DHS Resilient PNT框架v2.0、IMO船舶指南、EASA航空指南、NIS2第21条、EN 16803、NIST IR 8323r1)中,所给运行为哪些行提供证据支持,哪些行没有,以及每一行仍然存在的差距。把每个运行作为label、result(结果JSON文本)传入,若有,还传入scenario(场景TOML,它指明结果本身未指明的类型;receiver-trust结果不需要)。总共至多64个运行和4 MiB;不从磁盘读取任何内容。每一行的status为evidenced、partly-evidenced、not-evidenced或out-of-scope,且每一行即使有证据也保留其gap;无法使用的输入列在unrecognised中,不计入任何内容。与任何结果一起,逐字展示报告的statement:状态表示某个运行为该行所指名的能力提供证据支持;它不是某个框架已被满足的结论,也不意味着任何产品已被任何人评级或批准。不要用更强的措辞描述该输出。证据等级:MODELLED。
compliance_mapping以Markdown形式给出静态的公开框架映射(kshana compliance-report --mapping / --sources):每个框架一张表,列出各行经转述的要求、为其提供证据支持(supports evidence for)的Kshana输出,以及这些输出尚未弥补的差距;若sources为true,则给出表中所引用的来源文件及其版本和URL。开头是每份报告都带有的声明,任何摘录都须保留:标为evidenced的行表示有一次运行为该行所列的能力提供证据支持;这并不是认定某个框架已被满足,也不表示任何产品已被任何一方评级或批准。无需任何运行。
fit_imu_log根据静止状态的IMU日志(kshana imu-fit,docs/MACHINE-INPUTS.md)拟合hybrid和fusion场景的传感器参数。这些场景接受的是噪声参数,而不是时间序列:本工具通过对积分信号的重叠阿伦偏差,从传感器保持静止时记录的日志中读出这些参数。返回JSON:fit(加速度计偏置、速度随机游走PSD q_va、陀螺偏置、角随机游走PSD q_arw、日志足够长时的偏置不稳定性下限、日志的速率和时间跨度、早期的阿伦斜率,以及说明哪些内容无法拟合或不可信的notes)、toml(一张[accel_classical]表,其出处注明该日志的SHA-256,可直接粘贴进场景)和sha256。若日志并非静止状态,或过短、采样不均匀,则会给出错误的参数或被拒绝;斜率(白噪声占主导时约为 -0.5)可说明是哪种情况。不向磁盘写入任何内容。证据等级:MODELLED(对日志应用的估计器,没有外部参考基准)。
list_standards_packs列出标准包(kshana standards-pack list):针对DHS Resilient PNT框架测试配置文件、IMO MSC.1/Circ.1575和ICAO Doc 9849附录F的评分场景集,每个包都带有运行前声明的判据,以及它为其提供证据支持的compliance行。无需输入。标准包依据声明的判据衡量建模场景;它不对任何产品评级。证据等级:MODELLED。
run_standards_pack运行一个标准包(kshana standards-pack run <id>):其中的每个场景,均依据运行前声明的判据评分。返回报告(每项测试为MET、NOT MET,或在需要接收机日志而未评分时为NEEDS INPUT;每条判据附带其测得值和预期值)以及同样内容的markdown版本。将报告JSON传给compliance_report,即可查看该标准包为其提供证据支持的行。须明确说明:MET的判据表示建模场景达到了声明的判据,NOT MET是一条留有记录的结果;绝不可把输出描述为表明某个产品或某个框架已被满足。仅供参考:分析输出,不是经型式认可的导航设备。证据等级:MODELLED。
lunanet_afs_check对照已发布的规范检查LunaNet增强前向信号(AFS),固定为LNIS第5版适用文件1卷A(LSIS-AFS V1.0,29一月2025)(kshana lunanet-afs-check,docs/LUNANET-AFS.md)。模式spec将本实现与文件印出的码表(PRN 1至210的每个AFS-I Gold码、AFS-Q Weil码和三级码的前后各24个码片,以及两个勒让德序列)和算例(SB1 BCH、CRC-24Q)逐一核对,即预先登记的判据B1至B10;B4报告了一处未达标(文件对三级码PRN 147和151印出了相同的后24个码片)。模式symbols检查硬判决符号流(由0和1组成的文本)的同步图样、SB1解码、FID、TOI连续性和帧间隔。子帧2至4(码率1/2的LDPC、CRC-24Q)并未经过验证:LDPC矩阵位于另一份附件中,尚未实现。模式generate返回带有占位子帧的测试流:是符号,不是波形;Kshana不写出任何信号。VALIDATED仅针对该版本印出的码表,而文件本身将这些码表标为TBC;须如实说明,且不得把结果描述为表明任何LunaNet节点或服务是正确的。仅供参考。
score_benchmark为一份kshana-bench提交评分(kshana bench score,bench/SPEC.md,docs/BENCH.md):将预测文件(kshana-bench-predictions/1)与真值文件(kshana-bench-truth/1)比对,二者均为JSON文本,各不超过4 MiB,并返回结果文件(kshana-bench-result/1),其中含规范版本、任务(a为接收机日志上的检测,b为IQ上的检测,c为授时守时(holdover)预测,d为分布外乐观差距)、划分、两份输入的SHA-256,以及该任务的指标(AUC、虚警上限下的检测概率、各预测时域的RMSE,或乐观差距)。threshold是任务a和b声明的告警阈值。不从磁盘读取,也不向磁盘写入。每个得分均为MODELLED,描述的是日志或语料,绝不是产品;它不是认证,也不表示任何机构因某个得分而获得背书。证据等级:MODELLED。
render_leaderboard将kshana-bench结果文件(kshana bench leaderboard)渲染为静态排行榜页面,回复中为HTML文本:results是kshana-bench-result/1 JSON文本的列表(至多256个,每个不超过4 MiB),每个都先经过校验;按另一个主版本规范评分的文件会被拒绝,因为不同主版本的结果绝不放入同一张表。一行表示该文件在该划分上得到了这个分数;它并不表示任何产品已被任何一方评级或批准。不写入任何内容。证据等级:MODELLED。
trust_telemetry将GNSS信任度流或receiver-trust结果渲染为安全遥测文本(kshana trust-telemetry,docs/TRUST-TELEMETRY.md),使用与命令行相同的编码器:prometheus(最终状态的展示格式)、cef或leef(每次频段变化输出一行RFC 5424 syslog,使用syslog_all时则每个历元一行;不含时间戳,因为不读取任何时钟)或otlp(OTLP/HTTP JSON指标载荷)。input_kind为jsonl(默认)或result;无法解析的流行会被跳过,并计入kshana_trust_input_errors_total。不发送、不提供服务、不写入任何内容:输出是回复中的文本(运行中的导出器是一个进程,仍留在命令行)。除非expose_position为true,否则不包含接收机报告的位置。携带卫星几何信息的输入(实时模式1.3,自0.36起的结果)会增加几何标签(good、fair、poor;除poor外从不评分)以及状态、HDOP、PDOP、VDOP和所用卫星数,并在每条原因上增加class标签(geometry、environment、inconsistency);较早的输入则与以往完全相同地渲染。仅供参考:Kshana不是经型式认可的导航设备(IEC 61108、IEC 61162),责任仍由操作人员承担。证据等级:MODELLED。
export_test_bench为实验室GNSS模拟器导出场景的载体运动和事件(kshana bench-export,docs/TEST-BENCH.md):一份运动CSV及其JSON描述(地固坐标和大地坐标位置、速度、姿态、UTC)、NMEA 0183 GGA/RMC语句、在采样网格为毫秒规则时的航点文本,以及场景的事件,以CSV形式和供receiver-trust场景使用的[[events]] TOML形式给出。适用于gnss-ins(其导航状态中断即为事件)、jamming和gnss-sim;其他类型会被拒绝并附上原因。epoch是运动时间零点的UTC时刻,YYYY-MM-DDTHH:MM:SS(默认为2024-01-01T00:00:00Z)。不向磁盘写入任何内容:第一个内容项是JSON索引(含suffix、bytes、sha256的files;任何被省略的文件的notes;notice),随后按索引顺序依次是每个文件的文本。相同的场景和历元给出逐字节相同的文件。NO SIGNAL(无信号):所导出的任何内容都不是、也不建模或驱动射频或基带信号,事件只是带标签的时间区间,不是产生干扰的配方;信号由模拟器及其操作人员提供,并由其负责仅在获得授权的场所运行。请将该声明与这些文件放在一起。Kshana不发布此类运行的结果。证据等级:MODELLED。
attach_evidence_timestamp在内存中将RFC 3161时间戳令牌绑定到证据包(kshana evidence attach-timestamp):files是create_evidence_pack所返回的包,token_base64是时间戳机构提供的.tsr文件的字节。令牌以timestamp.tsr存放在已签名清单旁边,而不是其内部,并且带有令牌的包必须仍能通过验证,否则不附加任何内容;已有的令牌会保留,除非replace为true。返回更新后的files(将其与为true的require_timestamp一起交给verify_evidence_pack,以坚持要求令牌存在)以及验证说明。这并不检查时间戳机构对令牌的签名,也不检查该机构的证书(它检查令牌的结构,以及其消息摘要是否为该包manifest.json的哈希):须如实说明,并引导用户使用openssl ts -verify。输入和回复均限制在4 MiB。时间戳表明某个哈希在该机构所述的时间已经存在;它不是法律意见。证据等级:MODELLED。
一张表,由仓库的packaging/channels.json生成,并与其README交叉核对,因此每条命令都与README所示一致,固定为v0.40.0。包括适用于各操作系统的预构建二进制文件、桌面助手扩展、Cursor和VS Code的一键按钮、npx和uvx启动器、Homebrew、Scoop和winget、各类注册表,以及自托管的HTTP模式。标为发布时上线的渠道将随版本发布上线。
单独的引擎,用于您工作所用的语言或环境。
适合所有人,无需安装。依赖:无。
引擎以WebAssembly形式在本地运行;不会上传任何内容。
适合需要kshana命令的工程师。依赖:Rust。
固定为v0.40.0cargo install kshana --version 0.40.0
然后检查kshana --version
适合嵌入引擎的Rust开发者。依赖:Rust。
固定为v0.40.0cargo add kshana@0.40.0
然后检查cargo tree --depth 1 | grep kshana
适合分析人员和notebook。依赖:Python。
固定为v0.40.0pip install kshana==0.40.0
然后检查python -c "import kshana; print(kshana.version())"
适合Web和Node.js开发者。依赖:Node。
固定为v0.40.0npm install kshana@0.40.0
然后检查npm ls kshana
仅供参考,不是经型式认可的导航设备:导航责任仍由操作人员承担。服务器运行在本机;不向Ashforde OÜ 发送任何内容。
适合任何使用支持MCP的助手的人。依赖:Rust 1.88+。
固定为v0.40.0cargo install kshana-mcp --version 0.40.0
然后检查cargo install --list | grep kshana-mcp
适合没有Rust工具链的情况;容器中的MCP服务器。依赖:Docker。
固定为v0.40.0docker run --rm -i ghcr.io/ashfordeou/kshana-mcp:0.40.0
然后检查docker image inspect ghcr.io/ashfordeou/kshana-mcp:0.40.0 --format '{{.Id}}'
适合桌面助手用户,无需终端。依赖:无。
macOS(Apple芯片)macOS(Intel)WindowsLinux(x86-64)Linux(Arm)
双击kshana-mcp-<target>.mcpb。
适合Cursor用户。依赖:Node,或Docker。
固定为v0.40.0kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0
适合VS Code和Insiders用户。依赖:Node,或Docker。
固定为v0.40.0kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0
适合Node用户,任何MCP客户端。依赖:Node 18+。
固定为v0.40.0kshana-mcp@0.40.0
然后检查npx -y kshana-mcp@0.40.0 --version
一个启动器:它下载发布版二进制文件,校验SHA256SUMS并运行。
适合Python用户,任何MCP客户端。依赖:Python 3.9+,以及uv或pipx。
固定为v0.40.0kshana-mcp==0.40.0
然后检查uvx kshana-mcp==0.40.0 --version
适合macOS和Linux。依赖:brew。
固定为v0.40.0formula for v0.40.0
然后检查kshana-mcp --version
适合Windows。依赖:Scoop。
固定为v0.40.0manifest for v0.40.0
然后检查kshana-mcp --version
适合Windows。依赖:winget。
固定为v0.40.0winget install AshfordeOU.KshanaMcp --version 0.40.0
然后检查kshana-mcp --version
待Microsoft合并该提交后才会出现。
适合不使用包管理器的情况。依赖:无。
从发布版下载kshana-mcp-<target>,并对照SHA256SUMS检查。
适合支持注册表的MCP客户端。依赖:支持注册表的客户端。
搜索io.github.ashfordeOU/kshana-mcp。
适合接受URL的客户端。依赖:您自己的主机。
固定为v0.40.0v0.40.0
默认仅限回环地址;绑定到非回环地址需要 --allow-remote和一个bearer令牌。Kshana不托管任何端点。
将Kshana带入其他工具的插件和镜像。
适合IntelliJ、PyCharm和CLion用户。依赖:JetBrains IDE。
Settings → Plugins → Marketplace → 搜索“Kshana”(插件ID dev.kshana.ide)。右键单击场景 .toml文件,选择Run Kshana Scenario。
适合运行Signal K服务器的船主。依赖:Node,Signal K服务器。
固定为v0.40.0npm install signalk-kshana-trust@0.40.0
然后检查npm ls signalk-kshana-trust
适合OpenCPN海图仪用户。依赖:OpenCPN 5.8+。
从发布版下载插件压缩包。发布版附带该压缩包及其目录元数据XML;列入OpenCPN的目录需要手动提交一个拉取请求。
适合运行Grafana的运维人员。依赖:Grafana。
从发布版导入kshana-grafana-*.json。
适合gate和bench部署。依赖:Docker。
固定为v0.40.0docker pull ghcr.io/ashfordeou/kshana-reference-build:0.40.0
从浏览器标签页到持续集成(CI)回归套件。每一种入口运行的都是同一个引擎,写出的都是同样的JSON结果、SVG(可缩放矢量图形)图表和HTML(超文本标记语言)报告。任选其一;每条命令都是真实的,一键即可复制。
仅Kshana Studio,用于课程页面或报告,并预先选定场景和视图
studio/index.html?embed=1&scenario=integrity-raim&tab=timeserieskshana <scenario>.toml会写出result.json、chart.svg和report.html
输出由场景、随机种子和引擎版本确定,因此已提交的result.json就是一项回归测试(CI:持续集成):重新运行并比对差异
kshana --study:将一套场景运行为一份带标记的study.json和study.html,免费。不是付费的定制研究。
kshana::api::run_toml返回JSON、SVG、摘要和CSV(逗号分隔值)
kshana.run和run_full,以及validate_toml和list_kinds
在浏览器或Node.js中使用run、summary和chart_svg
AI助手可调用的49个工具,每个都是对公开API的轻量封装
无需Rust工具链的MCP服务器,支持多种架构
命令行、Rust、Python和JavaScript绑定,以及引擎读写的文件格式,并列呈现。此处的一切都属于免费的开源核心。
kshana --help来自二进制文件kshana <scenario.toml> [--study-name <s>] [--eop <finals2000A>] [--export-sp3 <out.sp3>] [--export-omm <out.omm>] [--export-oem <out.oem>] [--export <czml|kml|geojson|stk|sigmf|all|list>]... [--import-route <route.geojson>]
kshana <scenario.toml> --animate <svg|html|frames|all> [--animate-fps <n>] [--animate-duration <s>]
kshana --study <suite.toml>
kshana --validate <scenario.toml>
kshana receiver-trust <scenario.toml>
kshana receiver-trust live <session.toml> [--stdin | --file <path> [--follow] | --tcp <host:port> | --udp <port>] [--gate] (kshana receiver-trust live --help)
kshana receiver-trust evidence <scenario.toml> --from <t0> --to <t1> --key <keyfile> --out <dir> (kshana evidence --help)
kshana evidence <keygen|verify|attach-timestamp> ... (kshana evidence --help)
kshana jammertest <import|score> ... (kshana jammertest --help)
kshana evidence round-trip <scenario.toml> --scenario <bench-scenario> --conditions <file> --from <t0> --to <t1> --key <keyfile> --out <dir> (kshana evidence --help)
kshana trust-telemetry [options] (kshana trust-telemetry --help)
kshana imu-fit <imu.csv> [--format csv|euroc] [--axis x|y|z] [--expected-mean <m/s2>] [--id <name>] [--json]
kshana nmea-scenario <scenario.toml> [--out <file.nmea>] [--tcp <addr>|--udp <addr>] (kshana nmea-scenario --help)
kshana interference-map <adsb|ais|fetch-land> ... (kshana interference-map --help)
kshana route-exposure --route <route> --map <map.geojson|dir> [--from <date>] [--to <date>]
kshana bench <spec|truth|cases|score|baseline|seal|reveal-check|manifest|verify-manifest|validate|leaderboard> ... (kshana bench --help)
kshana bench-export <scenario.toml> [--out <base>] [--epoch <YYYY-MM-DDTHH:MM:SS>]
kshana compliance-report [--out <base>] <result.json>... | --mapping | --sources
kshana lunanet-afs-check <spec [--json] [--strict]|symbols <file> [--max-sp-errors <n>] [--json]|generate --frames <n> [--toi0 <t>] --out <file>>
kshana standards-pack <list|run <id> [--json] [--out <base>]|rows <id>|tests <id>>
kshana partner check <submission.toml> [--json]
kshana osnma verify <pages|vectors.csv|stream.ubx> [--merkle-root <hex>] [--public-key <id:type:hex>] [--reference-time <gst-s>] [--json] (kshana osnma --help)
kshana iq <scene|acquire|track|sweep|labfit|campaign|conditions|frontend|monitor|inventory|info|extract|convert|decimate> ... (kshana iq --help)
kshana sky <request.json|request.toml> | --site <lat,lon[,h]> --systems <a,b,...> [--time <s>] [--mask <deg>] [--skyline-preset <name>] [--uere <m>] [--monte-carlo <n> --seed <s>] [--svg] (kshana sky --help)
kshana skyline --preset <name> [--json] | --presets | --profile <skyline.json|toml>
kshana kinds [--json]
kshana example [<name>]
kshana --help | --version一次运行会在场景旁写出result.json、chart.svg、report.html、report.json、table.csv;--export-sp3、--export-omm和--export-oem写出轨道文件;--animate还会把运行写成会动的形式(animation.svg、animation.html、frames:动画SVG、自包含的HTML播放器,或一个带编号帧的文件夹),并以--animate-fps和--animate-duration设定播放速率和时长;--export为其他工具写出场景的几何或其合成信号:CZML(Cesium语言)、KML(Keyhole标记语言)、GeoJSON(地理JSON)、STK(系统工具包)星历文件、SigMF(信号元数据格式);--import-route读取以GeoJSON线绘制的路线;--eop从finals2000A文件注入地球定向参数;--study将一套免费的场景运行为study.json和study.html;kshana kinds --json列出每种类型及其字段;kshana example打印一个可作为起点的场景。结果可以放在Kshana交换格式(KIF)信封中传递。MCP服务器将轨道导出作为工具提供。
kshana --study是免费的套件运行器。如果希望由他人代为完成分析,那是付费的定制研究。
result.json、chart.svg、report.html,以及与report.json相同的报告,外加为发布此类表格的类型提供的CSV(逗号分隔值)表。应要求还会写出运行的动画(--animate)以及供其他工具读取的场景格式(--export)。每个程序都运行内置的clock-holdover场景(用kshana example clock-holdover > clock-holdover.toml写出),并打印同样的单行摘要。完整版本见各软件包的README。
cargo add kshana之后use kshana::api;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let toml = std::fs::read_to_string("clock-holdover.toml")?;
let out = api::run_toml(&toml)?; // RunOutput { json, svg, summary, csv }
println!("{}", out.summary); // the one-line result string
std::fs::write("clock-holdover.result.json", &out.json)?;
Ok(())
}kshana::api还提供run_scenario、validate_scenario、list_scenario_kinds和轨道导出器。Rust文档
pip install kshana之后import json, kshana
toml = open("clock-holdover.toml").read()
result = json.loads(kshana.run(toml)) # the full result document
print(result["quantum"]["fom"]["integrity"])
result_json, chart_svg, summary = kshana.run_full(toml)
print(kshana.version(), summary)该软件包还提供validate_toml和list_kinds。Python文档
npm install kshana之后import { readFileSync } from "node:fs";
import { createRequire } from "node:module";
import { initSync, run, summary, version } from "kshana";
const wasm = createRequire(import.meta.url).resolve("kshana/kshana_bg.wasm");
initSync({ module: readFileSync(wasm) }); // in a browser: await init()
const toml = readFileSync("clock-holdover.toml", "utf8");
const result = JSON.parse(run(toml)); // the full result document
console.log(version(), result.classical.fom.timing_p95_ns);
console.log(summary(toml)); // the one-line result string同一个软件包可在浏览器中运行;Kshana Studio用的就是它。npm文档
引擎目前处理的格式,取自仓库的标准页面(文档:标准)。展开一行可查看如何使用它以及其检查所依据的对象。
--export-oem,MCP export_oem--export-omm,MCP export_omm--export-sp3,MCP export_sp3space-packet场景pvtorbit场景--eop配合finals2000A文件export_table_csv“Kshana — PNT simulator” 插件:右键单击任意场景.toml,选择Run Kshana Scenario,即可在工具窗口中查看性能指标。
kshana bench score将提交文件和某个划分的真值转换为结果文件,kshana bench leaderboard则将结果文件渲染为静态页面。不会代您运行任何内容,也不上传任何内容。