Входные данные от машин и датчиков (0,38)
Читатели, подключающие к виду receiver-trust другие приёмники, решатели и датчики. Все они только читают: это чистые функции над байтами или текстом, возвращающие ту же временную последовательность, что и читатели UBX, RINEX, Android и NMEA, пропускающие и подсчитывающие повреждённые записи вместо отказа. Всё здесь MODELLED: форматы прочитаны по общедоступной документации, и ни один результат не проверен по внешнему оракулу сверх прямо указанного.
Программное обеспечение консультативного характера. Не навигационное оборудование с утверждённым типом. Ответственность за безопасное судовождение остаётся на операторе.
RTKLIB .pos (format = "rtklib-pos")#
Файл решения, который записывают rnx2rtkp RTKLIB и RTKPOST. Считываются: время (календарное yyyy/mm/dd hh:mm:ss.sss либо неделя GPS и секунды недели), положение (широта и долгота в градусах с высотой либо ECEF X/Y/Z, преобразованные в геодезические) и число спутников. Шкала времени из заголовка столбца (GPST, UTC, JST) сохраняется в метке. Файлы в градусах-минутах-секундах отклоняются. Строки, начинающиеся с %, являются строками заголовка.
NovAtel OEM7 (format = "novatel")#
Журналы ASCII (#BESTPOSA,...*crc) и двоичные (заголовок AA 44 12) в произвольном сочетании. Раскладки следуют общедоступной документации OEM7 (docs.novatel.com): заголовки сообщений, 32-битный CRC и таблицы полей трёх журналов. Записи с несовпадающим CRC пропускаются и подсчитываются.
| Журнал | ID | Используется |
|---|---|---|
BESTPOS |
42 | статус решения (определение места даёт только SOL_COMPUTED), широта, долгота, высота над средним уровнем моря плюс ундуляция (высота определения места эллипсоидальная), число использованных спутников |
RANGE |
43 | C/No по сигналам (дБ-Гц); система определяется по битам 16–18 статуса слежения, тип сигнала — по битам 21–25 |
RXSTATUS |
93 | бит 15 статуса приёмника (обнаружен источник помех) становится self_report эпохи (подавление (jamming) 2 отмечено, 1 нет; в RXSTATUS нет признака спуфинга), сравнивается с тревогами Kshana по receiver-self-report; дополнительные 1 битов помех (RF1–RF6) возвращаются в NovatelRead.status |
Процедура CRC проверена по значению CRC, которое документация указывает для собственного примера BESTPOSA (приведено ссылкой, не цитируется); тесты используют строки, написанные самостоятельно. Не читаются: сокращённый ASCII, другие журналы. Признак подавления (jamming) — собственное сообщение приёмника, а не вывод Kshana; согласие с мониторами Kshana не является валидацией.
GNSS-SDR (format = "gnss-sdr")#
См. integrations/gnss-sdr/README.md. Выходные данные NMEA и RINEX из GNSS-SDR уже читаются через nmea и rinex; потоки UDP Monitor и PVT-monitor (Protocol Buffers) передаются в строки JSON с помощью relay.py и читаются через gnss-sdr.
IMU ([log.imu])#
format = "csv": строка заголовка с названиями столбцов, затем по одному отсчёту в строке. Столбцы (в любом порядке, имена без учёта регистра): t_s — секунды по часам журнала приёмника, gx, gy, gz — угловая скорость в рад/с, ax, ay, az — удельная сила в м/с². format = "euroc": раскладка EuRoC MAV imu0 data.csv (#timestamp [ns], w_RS_S_x/y/z [rad s^-1], a_RS_S_x/y/z [m s^-2]); первый отсчёт — t_s = 0. Строки, которые не разбираются, и строки, время в которых не возрастает, пропускаются. О том, как используется курс по гироскопу, см. RECEIVER-TRUST.md.
IMU в гибридных сценариях и сценариях слияния (kshana imu-fit)#
Сценарии hybrid и fusion (UKF с 17 состояниями) являются симуляциями: они принимают параметры шума датчика ([accel_quantum], [accel_classical]: bias, q_va, gyro_bias, q_arw, bias_instability), а не измеренный ряд. imu-fit считывает эти параметры со стационарного журнала IMU, так что сценарий можно запустить с тем датчиком, который у вас есть:
kshana imu-fit still.csv --format csv --axis x --expected-mean 0 --id bench-imu # prints the TOML table
kshana imu-fit still.csv --axis z --expected-mean 9.80665 --json # whole report
Метод: перекрывающаяся девиация Аллана интегрированного сигнала (allan::overlapping_adev_curve): q_va = (sigma(tau0) sqrt(tau0))^2, то же для гироскопа по оси z (q_arw), bias и gyro_bias как средние и bias_instability как минимум кривой, если после него кривая идёт вверх. q_aa не подгоняется (для этого нужен журнал намного длиннее минимального). Отчёт содержит частоту и длительность журнала и начальный наклон девиации Аллана каждого канала (около -0.5, где преобладает белый шум); журнал, в котором датчик не неподвижен, либо слишком короткий (менее 2000 отсчётов), либо с неравномерной дискретизацией, отклоняется или даёт параметры, помеченные наклонами. В происхождении таблицы указан SHA-256 журнала. MODELLED: оценка проверена на синтетических журналах белого шума с известными коэффициентами (восстановлены с точностью до 10 %), но не по внешнему оракулу. Доступно в CLI, Python (imu_fit), WebAssembly (imu_fit), MCP (fit_imu_log) и плагине (/kshana-fit-imu).
RTCM 3 MSM4 и MSM7 (format = "rtcm3")#
Поток байтов кадров RTCM 3 (выходные данные наблюдений базовой станции или приёмника). Считываются: сообщения MSM4 и MSM7 (GPS 1074/1077, ГЛОНАСС 1084/1087, Galileo 1094/1097, SBAS 1104/1107, QZSS 1114/1117, BeiDou 1124/1127, NavIC 1134/1137): эпоха и отношение несущей к шуму каждой ячейки сигнала (MSM4: 6 бит, дБ-Гц; MSM7: 10 бит, 1/16 дБ-Гц), что и нужно мониторам C/N0. Поля псевдодальности и фазы пропускаются, а не используются, поэтому RTCM даёт мониторам доверия C/N0 и ничего больше; в MSM нет положения. Кадры с неверным CRC-24Q пропускаются и подсчитываются.
Откуда взята раскладка. Не из стандарта RTCM (платный документ, не использовался): из декодера с открытым исходным кодом pyrtcm 1.2.0, BSD 3-Clause, лицензия и уведомление которого находятся в NOTICE (решение владельца от 18 октября 2026: «использовать открытые декодеры»). pyrtcm заявляет, что его таблицы следуют RTCM 10403,3; Kshana опирается на опубликованные таблицы на условиях лицензии pyrtcm и не делает никаких заявлений о стандарте. Время: MSM не содержит номера недели, поэтому метки читаются как GPS TOW <s>; эпохи ГЛОНАСС (московское время) переводятся во время GPS с GPS-UTC = 18 с (значение с 2017-01-01).
Проверено по: контрольному значению каталога CRC-24Q (123456789 даёт 0xCDE703) и, однократно во время разработки, по собственному декодеру pyrtcm на тех же самостоятельно написанных кадрах (тот же C/N0). Тестовые данные написаны самостоятельно; ни одна запись с реального приёмника не снималась, поэтому читатель остаётся MODELLED, пока не прочитает такую запись.