Это предварительная версия документации. Будем признательны за предложения об её улучшении, указания ошибок и недостатков.

1. Введение

Acrux — это миниатюрная навигационная система, которая объединяет инерциальные и спутниковые измерения для определения точной позиции, скорости, ускорения, ориентации и угловой скорости транспортного средства с высокой частотой и малой задержкой.

Ключевые особенности системы:

  • Полноценная и точная калибровка инерциального измерительного блока в рабочем диапазоне температур

  • Поддержка четырёх спутниковых созвездий и прием сигналов в двух частотных диапазонах

  • Независимое от инерциального модуля определение курса при подключении двух антенн, что уточняет и стабилизирует конечное определение курса

  • Обработка “сырых” измерений ГНСС в рамках общего навигационного фильтра, что позволяет детально контролировать качество спутниковых данных и применять продвинутые алгоритмы их коррекции

  • Поддержка высокоточного фазового дифференциального режима позиционирования (“Real Time Kinematics”) с надежным разрешением фазовой неоднозначности за счет двух частот и продвинутых алгоритмов

  • Обработка одометрической информации и учет модели движения для улучшения точности решения, особенно в условиях пропажи ГНСС сигнала

  • Универсальный и надежный алгоритм инициализации системы, который не накладывает никаких ограничений на начальный период движения

  • Точная привязка навигационного решения к спутниковому времени

  • Коммуникации через COM, Ethernet и CAN порты

  • Управление прибором с помощью системы команд через консоль

1.1. Возможности коммуникации

На приборе находятся следующие коннекторы:

  • SMA коннектор для первой ГНСС антенны (PRI)

  • SMA коннектор для второй ГНСС антенны (SEC)

  • Два круговых коннектора (IO1 и IO2) для подачи питания, приема и получения данных

На круговые коннекторы выведены следующие порты:

  • 2 последовательных порта RS232 общего назначения

  • Последовательный порт RS232/RS422 для получения данных по стандарту NMEA 0183

  • Последовательный порт RS422/RS485 общего назначения

  • Ethernet 100Base-TX порт

  • CAN порт

  • PPS сигнал с ГНСС приемника

  • 3 аналоговых импульсных входа

Импульсные входы могут использоваться для получения импульсов-триггеров для выдачи навигационного решения и также для считывания информации с импульсного одометра или лага.

2. Спецификация

2.1. Габаритный чертеж

mechanical drawing 1
Рис. 1. Габаритный чертеж, лист 1
mechanical drawing 2
Рис. 2. Габаритный чертеж, лист 2

2.2. Основные эксплутационные характеристики

Характеристика Значение

Время готовности[1]

30 с

Напряжение питания

12 — 32 В

Максимальная потребляемая мощность

6 Вт

Диапазон рабочих температур

от \$-20^circ\$C до \$+55^circ\$C

Степень защищенности

IP65

Срок службы

12 лет

Наработка на отказ[2]

40000 ч

Габаритные размеры

90 \$times\$ 75.4 \$times\$ 52.5 мм

Масса

380 г

1

Время до начала работы навигационного алгоритма

2

Получено расчетным методом

2.3. Описание контактных разъемов

Прибор имеет 2 круглых контактных разъема с 16 контактами, обозначенных IO1 и IO2. Разъемы обеспечивают надежные и прочные соединения с прибором в сложных условиях и рассчитаны на IP66 в сопряженном положении.

Обозначение Разъем Прилагаемая модель соединителя

IO1

16 контактный разъем с ключом G

LEMO K FGG.1K.316

IO2

16 контактный разъем с ключом A

LEMO K FGA.1K.316

Вид ключей и нумерация контактов изображены на рисунках ниже.

keys
Рис. 3. Вид ключей на контактных разъемах
pins ga
Рис. 4. Схема нумерации контактов
Табл. 1. Описание контактов IO1
Номер контакта Сигнал Назначение Домен питания

1

COM2_RS232_RX

Вход порта COM2 (RS232)

RS232 и PPS

5

COM2_RS232_TX

Выход порта COM2 (RS232)

RS232 и PPS

6

RS485(A)

Порт RS485 (A)

RS485

7

RS485(B)

Порт RS485 (B)

RS485

9

LOG_C+

Вход (+) импульсов события MARK3

Оптическая развязка C

10

LOG_C-

Вход (-) импульсов события MARK3

Оптическая развязка C

11

LOG_RS422/RS232

Вход порта NMEA. Сигнал RS422(B) подключается напрямую, а RS232(TXD) через последовательный ограничивающий резистор 1 кОм

Оптическая развязка D

12

LOG_GND

Вход порта NMEA. Сигнал RS422(A) или земля RS232

Оптическая развязка D

13

COM2_RS232_GND

Земля COM1, COM2 и PPS

RS232 и PPS

15

GND

Минус источника питания и заземление CAN

Бортовая сеть и CAN

16

Vin

Плюс источника питания

Бортовая сеть и CAN

Табл. 2. Описание контактов IO2
Номер контакта Сигнал Назначение Домен питания

1

LOG_A+

Вход (+) счетчика импульсов или события MARK1

Оптическая развязка A

2

ETH_RX+

Ethernet, прием (+)

Трансформаторная развязка

3

CAN_H

CAN-H шины CAN

Бортовая сеть и CAN

4

PPS

PPS, TTL 5V, нагрузка до 50 мА, передний активный фронт

RS232 и PPS

5

LOG_A-

Вход (-) счетчика импульсов или события MARK1

Оптическая развязка A

6

ETH_TX-

Ethernet, передача (-)

Трансформаторная развязка

7

ETH_TX+

Ethernet, передача (+)

Трансформаторная развязка

8

ETH_RX-

Ethernet, прием (-)

Трансформаторная развязка

9

LOG_B+

Вход (+) счетчика импульсов или события MARK2

Оптическая развязка B

10

LOG_B-

Вход (-) счетчика импульсов или события MARK2

Оптическая развязка B

11

CAN_L

CAN-L шины CAN

Бортовая сеть и CAN

12

PPS_GND/GND

Земля COM1, COM2 и PPS

RS232 и PPS

13

COM1_RS232_RX

Вход порта COM1 (RS232)

RS232 и PPS

14

COM1_RS232_TX

Выход порта COM1 (RS232)

RS232 и PPS

15

GND

Минус источника питания и заземление CAN

Бортовая сеть и CAN

16

Vin

Плюс источника питания

Бортовая сеть и CAN

Табл. 3. Подключение IO2 к вилке Ethernet 8P8C (RJ-45)
Контакт IO2 Контакт вилки Сигнал

2

1

ETH_RX+

6

6

ETH_TX-

7

3

ETH_TX+

8

2

ETH_RX-

Рекомендуемая технология изготовления кабеля Ethernet
  • Отрезать от готового покупного кабеля разъем со стороны подключения к прибору.

  • Снять изоляцию и распаять отрезанные концы проводов на разъем прибора.

Параметры дискретных входов LOG_A, LOG_B, LOG_C
  • Допустимый диапазон напряжений: от -12 до +12 В.

  • Низкий логический уровень: от -12 до +1 В.

  • Высокий логический уровень: от +5 до +12 В.

  • Входное сопротивление: 1 кОм.

2.4. Характеристики ГНСС приемников

Оба используемых приемника принимают следующие сигналы:

  • GPS: L1C/A, L2C

  • Galileo: E1, E5b

  • BeiDou: B1I, B2I

  • ГЛОНАСС: L1, L2 (FDMA)

И имеют следующие основные характеристики:

Характеристика Значение

Время холодного старта

25 с

Время горячего старта

2 с

Частота обновления данных[1]

1 Гц

1

Определяется текущими настройками навигационного алгоритма

2.5. Характеристики навигационного решения

Характеристика Значение

Частота обновления решения

200 Гц

Точность привязки решения к спутниковому времени

< 20 мкс

Задержка решения относительно реального времени

< 5 мс

Допустимый диапазон угловых скоростей

\$pm\$ 400 °/с

Допустимый диапазон линейных ускорений

\$pm\$ 5 g

Точность географических координат в горизонтальной плоскости в стандартном режиме[1]

1 м

Точность высоты в стандартном режиме[2]

1.2 м

Точность географических координат в горизонтальной плоскости в режиме RTK[1]

0.025 м

Точность высоты в режиме RTK[2]

0.02 м

Точность компонент скорости[2]

0.02 м/с

Точность углов крена и тангажа[2]

0.05°

Точность угла курса[3]

0.15°

Скорость роста ошибки при пропаже сигнала GNSS[4]

0.5% от пройденного расстояния

Время достижения оптимальной точности

2 минуты после начала движения

1

Среднеквадратичное отклонение по расстоянию

2

Среднеквадратичное отклонение

3

Среднеквадратичное отклонение, в движении и статически при расстоянии между антеннами 2 м

4

C одометром и при автомобильной динамике, пропажа сигнала ГНСС после достижения оптимальной точности, медианное значение

3. Основополагающие сведения и определения из теории навигации

В этом разделе коротко излагаются основные сведения из теории навигации, необходимые для настройки и понимания работы прибора.

3.1. Системы координат и задание их взаимной ориентации

В области навигации понятие системы координат является основополагающим. Прямоугольная декартова система координат определяется её точкой начала и направлением трёх ортогональных осей. Рассматриваются правые системы координат: в них поворот от первой к второй оси производится против часовой стрелки, если он наблюдается со стороны положительного направления третей оси.

Матрицы ориентации

Взаимную ориентацию двух правых систем координат можно однозначно задать ортогональной \$3 \times 3\$ матрицей с определителем +1. Матрицы ориентации используются для представления ориентации во внутренних вычислениях. Пусть имеются две системы координат A и B, смысл матрицы ориентации выражается равенством:

\$x^A = R_B^A x^B\$

Здесь \$R_B^A\$ — матрица ориентации между системами A и B, а \$x^A\$ и \$x^B\$ — один и тот же вектор \$x\$ выраженный в осях систем A и B соответственно. То есть матрица ориентации связывает компоненты (координатные проекции) одного и того же вектора в разных системах координат. Другая интерпретация — матрица \$R_B^A\$ “физически поворачивает” координатные оси системы A, делая их параллельными осям системы B.

Углы Эйлера

Взаимную ориентацию двух систем координат можно описать последовательностью трёх поворотов вокруг координатных осей на заданные углы (называемые углами Эйлера). Углы Эйлера используются для конфигурации прибора и как выходные параметры ориентации.

Существует множество соглашений по определению углов Эйлера, в Acrux используется одно конкретное соглашение, проиллюстрированное ниже.

Оси исходной системы \$xyz\$ совмещаются с осями конечной системы \$XYZ\$, как показано на рисунке ниже. Повороты осуществляются относительно осей вращающейся системы:

  1. Сначала производится поворот вокруг оси \$z\$ на угол \$\alpha_z\$

  2. Затем вокруг оси \$y^'\$ на угол \$\alpha_y\$

  3. И в конце вокруг оси \$x^'""^'\$ на угол \$\alpha_x\$

euler angles
Рис. 5. Определение углов Эйлера

Углы \$\alpha_x, \alpha_y, \alpha_z\$ мы и называем углами Эйлера и используем их именно в описанной выше интерпретации. Диапазоны значений углов:

  • \$\alpha_x\$ — от -180 до 180 градусов

  • \$\alpha_y\$ — от -90 до 90 градусов

  • \$\alpha_z\$ — от -180 до 180 градусов либо от 0 до 360 градусов

Задание конечной ориентации в терминах матрицы имеет вид:

\$R_B^A = R_z(\alpha_z) R_y(\alpha_y) R_x(\alpha_x)\$

Где \$R_(x, y, z)\$ — матрицы ориентации для поворотов вокруг соответствующих координатных осей, иногда называемые элементарными, вид которых может быть легко получен из геометрических соображений.

3.2. Используемые системы координат

Для успешной эксплуатации Acrux важно тщательно изучить материал этой секции и разобраться, как определены используемые системы координат.

Геоцентрическая система координат

С нашей планетой связывают систему координат, которая участвует в её суточном вращении. Центр системы находится в центре масс Земли, оси x и y лежат в плоскости экватора, так что ось x проходит через нулевой меридиан, а ось z направлена вдоль оси вращения к северному полюсу. Положение геоцентрической системы проиллюстрированно на рисунке ниже.

earth
Рис. 6. Земной эллипсоид, геоцентрическая и локальные горизонтальные системы, географические координаты

Международная служба вращения Земли (IERS) определяет и поддерживает упомянутую геоцентрическую систему, которую называют международной земной системой отсчета (ITRF). Последняя редакция ITRF была предложена в 2016 году и называется ITRF2014.

Глобальные спутниковые навигационные системы используют свои геоцентрические системы, в которых определяются положения спутников: GPS — WGS84, ГЛОНАСС — ПЗ-90.11, Galileo — GTRF, BeiDou — BDC. На текущий момент все эти системы приведены с хорошей точностью к реализациям ITRF, так что разность координат одной и той же точки в разных системах не превосходит нескольких сантиметров.

Локальная горизонтальная система

Центр находится в точке, связанной с объектом, для которой определяется навигационное решение. Обозначим эту точку M и её ортогональную проекцию на эллипсоид точкой M'. Оси x и y лежат в плоскости, которая параллельна касательной плоскости к эллипсоиду в точке M'. Ось x лежит в плоскости меридионального сечения, а ось y ортогональна оси x и направлена в восточном направлении (и лежит в т. н. плоскости сечения первого вертикала). Ось z перпендикулярна касательной плоскости и направлена вглубь эллипсоида в сторону уменьшения высоты.

Неформально можно сказать, что ось x направлена на север, ось y на восток, а ось z вниз. В англоязычной литературе эту систему называют North-East-Down или NED.

Приборная система координат

Система связанная с прибором. Центр находится в точке установки акселерометров, см. Положение ИИБ в приборе. Оси направлены вдоль рёбер корпуса согласно схематическому рисунку ниже.

discrete
Рис. 7. Направлений осей приборной системы

Инерциальный модуль измеряет угловые скорости и ускорения в осях приборной системы координат с точностью до остаточного отклонения осей после компенсации.

Транспортная система координат

Система связанная с транспортным средством. Центр совпадает с центром приборной системы. Ось x направлена вдоль продольной оси объекта (к носу или переднему бамперу), ось y направлена к правому борту, ось z дополняет систему до правой ортогональной и направлена к полу.

vehicle axes
Рис. 8. Направлений осей транспортной системы

Пользовательская система координат

Система повернутая и сдвинутая относительно транспортной системы на фиксированные настраиваемые значения. Навигационное решение вычисляется для данной системы. Конфигурируется согласно пользовательским нуждам. По умолчанию совпадает с транспортной.

Системы привязанные к событиями ON_MARKx

Прибор поддерживает генерацию решения по внешнему импульсу, которые принимаются по трём каналам, называемыми MARK1, MARK2 и MARK3. Для каждого события есть возможность определить свою систему координат относительной транспортной, для которой будет генерироваться соответственное решение. По умолчанию все системы совпадают с транспортной.

3.3. Земной эллипсоид и географические координаты

Вместо декартовых координат в геоцентрической системе в навигации принято использовать географические координаты — широту, долготу и высоту. Эти координаты определены в привязке к эллипсоиду, который приближенно описывает форму Земли на среднем уровне мирового океана. Модельный эллипсоид симметричен относительно оси вращения Земли и характеризуется длиной большой полуоси и параметром сжатия. См. рис. Земной эллипсоид, геоцентрическая и локальные горизонтальные системы, географические координаты.

Различные ГНСС используют свои чуть отличающиеся определения эллипсоидов. В Acrux используются параметры принятые в системе WGS84, используемой в GPS. Таким образом, выдаваемые системой географические координаты выражены в системе WGS84.

Определение географических координат точки

Пусть M — точка в пространстве, опустим из нее нормаль на поверхность эллипсоида и направим вектор \$n\$ параллельно данной нормали наружу эллипсоида. Тогда географические координаты имеют следующее строгое определение:

  • Широта — угол между плоскостью экватора и вектором \$n\$ в диапазоне от -90 до 90 градусов, положительный в северном полушарии. Обозначение — \$varphi\$

  • Долгота — угол между плоскостью нулевого меридиана и проекцией вектора \$n\$ на плоскость экватора в диапазоне от -180 до 180 градусов, положительный в восточном полушарии. Обозначение — \$lambda\$

  • Высота — расстояние между точкой M и её проекцией на эллипсоид вдоль направления нормали, взятое со знаком минус для точек находящихся ниже поверхности эллипсоида. Обозначение — \$h\$

Координаты в режиме RTK

В режиме RTK положение системы определяется относительно базовой станции, так что ошибки в её геопривязке (широте, долготе и высоте) аддитивно переносятся в ошибки координат навигационного решения. “Ошибка” в геопривязке может также объясняться тем, что координаты базовой станции заданы в системе координат отличной от ITRF. В этом случае выдаваемые координаты нужно относить к системе координат, указанных в “карточке” базовой станции. Преобразования координат в таких сценариях на данный момент не предусмотрено.

3.4. Системы глобального времени

Навигационное решение, выдаваемое прибором, точным образом привязывается к глобальному времени.

В качестве основной шкалы времени используется время GPS (сокращенно GPST), которое устроено следующим образом:

  • Это непрерывная шкала времени (без внесения дополнительных секунд) c началом отсчета 6 января 1980 года

  • Время в системе GPS описывается номером недели и секундной в рамках текущей недели

Основной шкалой времени для всех мировых процессов является UTC. Она имеет следующие особенности:

  • С целью согласования UTC с астрономическими наблюдениями, оно может корректироваться внесением или отнятием 1 секунды (называемой дополнительной) 31 декабря либо 30 июня

  • Таким образом, время GPS и UTC отличаются на целое число дополнительных секунд (leap seconds), так что GPST = UTC + leap seconds. До конца 2021 года количество дополнительных секунд равно 18

  • Помимо отличия на дополнительные секунды время UTC и GPST отличается на малое значение, которое гарантировано меньше 1 микросекунды, а в действительности обычно существенно меньше

Прибор выдает структуру времени в таком виде, что можно одновременно получить и время по шкале GPS и время UTC. См. Структура GlobalTime.

3.5. Углы крена, тангажа и курса

Ориентация транспортного средства вычисляется относительно локальной горизонтальной системы. Пусть N и C — локальная горизонтальная и транспортная системы координат соответственно. Матрица ориентации между этими системами в терминах углов крена (\$gamma\$), тангажа (\$vartheta\$) и курса (\$psi\$) имеет вид:

\$R_C^N = R_z(psi) R_y(vartheta) R_x(gamma)\$

То есть углы крена, тангажа и курса — это Углы Эйлера транспортной системы относительно локальной горизонтальной системы.

Введенные таким образом углы соответствуют классическим определениям, которые также можно сформулировать следующим образом:

  • угол крена — угол между вертикальной осью объекта и плоскостью, проходящей через продольную ось объекта и географическую вертикаль. Диапазон от -180 до 180 градусов, крен положительный при подъеме правого борта

  • угол тангажа — угол между продольной осью объекта и плоскостью локального горизонта. Диапазон от -90 до 90 градусов, тангаж положительный при подъеме носа

  • угол курса — угол между направлением на север и проекцией продольной оси объекта в плоскость локального горизонта. Диапазон от 0 до 360 градусов, курс увеличивается в направлении от севера в востоку

3.6. Связь между приборной и транспортной системами координат

Алгоритмы инерциальной навигации определяют ориентацию приборной (т. е. связанной с ИИБ) системы координат. Для обработки спутниковых измерений разнесение между ИИБ и антенной должно быть задано также в приборной системе координат. Это означает, что транспортная система координат принципиально не требуется для работы навигационного алгоритма и не наблюдается (или не “чувствуется”) им.

Мы однако определяем и используем “кажущуюся” транспортную систему, ориентация которой относительно локальной горизонтальной определяется, как ориентация приборной системы скомпенсированная на фиксированную заданную ориентацию:

\$R_{C'}^N = R_B^N R_{C'}^B\$

Где N, C', B — обозначение локальной горизонтальной, кажущейся транспортной и приборной систем координат соответственно. Матрица \$R_B^{C'}\$ задается командой SET_ROTATION с аргументом rotation_type = VEHICLE_IMU.

Отсюда вытекает следующее:

  • Ошибка задания ориентации между транспортной и приборной системами приведет к рассогласованию между истиной и кажущейся транспортными системами, что будет выражаться в смещении выдаваемых углов ориентации

  • Точность определения ориентации транспортной системы ограничивается точностью определения ориентации между приборной и транспортной системами

  • Команда SET_TRANSLATION задает компоненты разнесения именно в кажущейся транспортной системе, поэтому при задании точности этих компонент, нужно учитывать, что оси истинной транспортной и кажущейся систем могут различаться

  • При точном определении ориентации между транспортной и приборными системами (скажем с точностью 0.01 градуса), все эти нюансы различия истинной и кажущейся транспортными системами пропадают

При использовании модели движения ориентация транспортной системы становится частично наблюдаемой, и алгоритм оценивает рассогласование между кажущейся и истинной системами. См. CALIBRATE.

3.7. Принцип работы навигационного алгоритма

Алгоритм работает по принципу классической корректируемой системы инерциальной навигации, где для объединения различных источников информации используется фильтр Калмана.

algorithm flow
Рис. 9. Информационная схема работы навигационного алгоритма

Прибор включает микроэлектромеханический ИИБ и два ГНСС приемника, а также опционально может обрабатывать одометрическую информацию и учитывать модель движения транспортного средства, что улучшает точность и надежность решения, особенно в условиях пропажи ГНСС сигнала.

Угловые скорости и ускорения с ИИБ используются для обновления навигационного решения на высокой частоте согласно классическому алгоритму бесплатформенной инерциальной навигации.

Фильтр Калмана сопоставляет измерения с главного ГНСС приемника, системы определения курса и одометрического датчика с соответствующими величинами, полученными по инерциальному решению, и оценивает его ошибки. При наличии корректирующей информации с базовой станции (в формате RTCM 3), фильтр также оценивает неоднозначности разностных фазовых измерений ГНСС приемника, которые затем разрешаются в целые и вновь поступают в фильтр для достижения сантиметровой точности решения. Оцененные ошибки в фильтре Калмана корректируют инерциальное навигационное решение, которое в итоге поступает потребителю.

Система определения курса использует фазовые измерения с двух ГНСС приемников. Разность между фазами сигналов, разрешенная до целых, позволяет определить положение второй антенны относительно первой с суб-сантиметровой точностью и тем самым истинный курс линии между антеннами. Полученный этой системой курс передается в основной фильтр Калмана и уточняет курс инерциального решения.

4. Установка, настройка, эксплуатация

В этом разделе объясняются шаги для правильной установки, подключения и настройки прибора.

4.1. Установка прибора

При установке Acrux в транспортном средстве нужно руководствоваться следующими рекомендациями:

  1. Температура в месте установки не должна выходить за указанный рабочий диапазон

  2. Предпочтительно, чтобы температура в месте установки существенно не изменялась

  3. Вибрационные воздействия на прибор в точке установки будут ощущаться ИИБ и отражаться в выдаваемом решении (линейные и угловые скорости, ускорение, углы крена и тангажа). В худшем случае высокий уровень вибрации может приводить к деградации работы инерциальных датчиков либо к выходу воздействий за границы диапазона измерений ИИБ. Поэтому рекомендуется устанавливать прибор на элементы транспортного средства, которые подвержены вибрации в наименьшей степени

Крепление Acrux в транспортном средстве осуществляется 4 винтами через отверстия ⌀ 4,3 мм.

4.2. Установка антенн

При установке антенн на транспортное средство нужно руководствоваться следующим рекомендациями:

  1. Предпочтительно использовать две антенны одинаковой модели

  2. Опоры антенн должны располагаться горизонтально

  3. Антенны должны иметь полную видимость неба в верхней полусфере. Обычно это означает, что антенны должны располагаться выше всех конструкций на транспортном средстве

  4. Предпочтительно, чтобы длина кабеля антенн была минимально возможной. А также, чтобы кабели у обеих антенн были одинаковой длины

  5. Рядом с антеннами не должно располагаться сильных источников электромагнитных излучений типа радаров, лидаров, ЭВМ и т. д.

  6. Под антеннами должна располагаться плоская проводящая поверхность с минимальным радиусом 6 см либо согласно руководству по эксплуатации антенн

  7. Главная (PRI, ANT1) антенна предпочтительно должна располагаться не слишком далеко от прибора. При большом разнесении между главной антенной и прибором ошибки определения ориентации будут создавать дополнительные ошибки позиционирования

  8. Ошибка определения двухантенного курса обратно пропорциональна расстоянию между антеннами, поэтому большие расстояния предпочтительны. Однако при большом разнесении антенн сложнее точно измерить компоненты вектора разнесения. Хорошие практические значения — 1.5 — 2.5 м

4.3. Подключение источника питания

Подключение источника питания осуществляется через один из контактных разъемов, см. Описание контактных разъемов.

Требование к источнику питания

  • Напряжение в диапазоне от +12 до +32 В постоянного тока

  • Мощность не менее 15 Вт (пиковая)

  • При работе с прибором должны использоваться сертифицированные источники питания

  • Оба разъема имеют подключение к источнику питания. Источник питания должен быть подключен только к одному из них. Подключение двух источников питания может привести к повреждению прибора.

Заземление

Прибор должен иметь защитное заземление, связанное с его корпусом, выполненное кратчайшим путем. Последовательное заземление не допускается.

Заземление прибора осуществляется через отверстие M3x6-7/⌀4x0.5, расположенное под антенными разъемами. Оно обозначено соответствующим знаком заземления на рисунке ниже.

grounding
Рис. 10. Положение отверстия для заземления

4.4. Настройка TCP/IP

При использовании Ethernet нужно правильно настроить параметры TCP/IP прибора и других узлов сети. Параметры на приборе изменяются командой IP_CONFIG, по умолчанию они следующие:

  • IP-адрес фиксированный — 192.168.0.50

  • Маска подсети — 255.255.255.0

  • Шлюз по умолчанию — 192.168.0.1

Если на компьютере выполняется служба mDNS, то вместо IP-адреса прибора можно использовать доменное имя acrux.local. В версиях Windows ниже 10 для поддержки mDNS требуется установка службы печати Bonjour.

4.4.1. Прямое подключение прибора к компьютеру

В случае прямого подключения прибора к компьютеру нужно назначать фиксированный IP-адрес на компьютере в той же подсети, что и у прибора. Если настройки IP_CONFIG не изменялись, то нужно назначить:

  • IP-адрес — 192.168.0.100 (один из вариантов)

  • Маска подсети — 255.255.255.0

4.4.2. Подключение прибора в локальную сеть через маршрутизатор

Если на маршрутизаторе включен DHCP-сервер, то достаточно командой IP_CONFIG задать режим DHCP для автоматического получения IP-адреса.

Если же DHCP-сервер не включен, то IP-адрес нужно задать в соответствующей подсети, а в качестве шлюза по умолчанию (gateway) задать IP-адрес маршрутизатора.

Если настройки корректны и маршрутизатор имеет доступ к интернету, то и прибор получит доступ к интернету. В частности прибор сможет получать данные RTCM по протоколу NTRIP, согласно конфигурации NTRIP_CONFIG.

4.5. Взаимодействие с прибором через telnet

Порт ICOM1 по умолчанию настроен для работы с консольным форматом команд и отвечает на порту 23 по IP адресу прибора. Для работы через telnet необходимо настроить TCP/IP соединение согласно Настройка TCP/IP.

Далее в системах семейства Unix можно воспользоваться встроенной утилитой командой строки:

telnet acrux.local

Вместо доменного имени можно использовать IP адрес прибора. В системах семейства Windows для этой же цели можно воспользоваться клиентом PuTTY.

К одному серверному порту telnet может быть подключено до 255 независимых клиентов, каждый из которых будет получать только свои ответы на команды и логи. Но настройки конфигурации и сохраненные команды логов являются общими для всех.

В клиентской программе нужно включить отображение вводимых символов (эхо), а также если возможно — режим редактирования строки, для удобства.

4.6. Взаимодействие с прибором через последовательный порт

Порт COM1 по умолчанию настроен для работы с консольным форматом команд. Он (как и все) последовательные порты используют 8 бит + 1 стоп-бит без управления потоком. По умолчанию порт COM1 работает на скорости 115200 бит/с. Изменить скорость можно командой SERIAL_CONFIG.

Подключение через последовательный порт можно организовать, воспользовавшись приложением типа PuTTY. См. рекомендацию по настройке клиента в предыдущем пункте.

4.7. Доступ к файловой системе через ssh

Прибор работает на операционной системе Linux и пользователь имеет доступ к ограниченному пользовательскому пространству в ней. Для подключения по ssh необходимо настроить TCP/IP соединение согласно Настройка TCP/IP.

Для подключения в системах семейства Unix используйте команду:

ssh user@acrux.local

Пароль для входа — acrux.

В системах семейства Windows для этой же цели можно воспользоваться программой PuTTY.

Основная назначение ssh соединения — просмотр списка сохраненных файлов логов, их удаление, копирование между хранилищами на приборе (встроенный накопитель, SD карта) и копирование файлов на компьютер пользователя. Для последней цели используйте команду scp. Например, для копирования всей директории с логами в текущую директорию на вашем компьютере, выполните:

scp -r user@acrux.local:~/logs .

В системах семейства Windows для этой же цели можно воспользоваться программой WinSCP.

4.8. Использование файловых накопителей

Прибор может работать с двумя типами накопителей:

  1. Встроенный накопитель на центральной плате прибора. Гарантируется свободный объем более 5 гигабайт

  2. SD карта объемом 32 гигабайт. По согласованию может быть установлена карта большего объема

Выбор накопителя для записи логов осуществляется командой FILE_CONFIG. Там же указаны идентификаторы устройств в Linux и точки монтирования.

Оставшийся доступный объем можно проверить через лог FILE_SYSTEM_CAPACITY.

4.9. Настройки прибора по умолчанию

Настройка прибора реализована по следующим принципам:

  • По умолчанию все переменные в приборе имеют значения типа 0, "выключено", "не используется" (там где это имеет смысл и технически возможно, см. далее)

  • Поверх этого состояния прибор настраивается последовательностью команд, записанных в файл commands/current.txt, а при его отсутствии — commands/factory_default.txt (заводское состояние) Cм. Структура и обновление ПО

Файл factory_default.txt имеет следующее содержание в текущей версии:

FILE_CONFIG INTERNAL
ICOM_CONFIG ICOM1 TCP_SERVER :23 10
INTERFACE_MODE FILE NONE BINARY
INTERFACE_MODE COM1 CONSOLE CONSOLE RESPONSE
INTERFACE_MODE COM2 CONSOLE CONSOLE RESPONSE
INTERFACE_MODE NMEA NMEA0183 NONE
INTERFACE_MODE ICOM1 CONSOLE CONSOLE RESPONSE
INTERFACE_MODE NCOM1 RTCM3 NMEA0183
LOG ALGO RAW_SENSOR ON_NEW 0.00000 0.00000 HOLD
LOG ALGO DMI ON_NEW 0.00000 0.00000 HOLD
LOG ALGO EXT_IMU ON_NEW 0.00000 0.00000 HOLD
LOG ALGO RTCM3 ON_NEW 0.00000 0.00000 HOLD
LOG FILE CONFIG ON_CHANGED 0.00000 0.00000 HOLD
LOG FILE TEXT_MESSAGE ON_NEW 0.00000 0.00000 HOLD
LOG FILE FULL_SOLUTION ON_NEW 0.00000 0.00000 HOLD
LOG FILE RAW_SENSOR ON_NEW 0.00000 0.00000 HOLD
LOG FILE DMI ON_NEW 0.00000 0.00000 HOLD
LOG FILE EXT_IMU ON_NEW 0.00000 0.00000 HOLD
LOG FILE RTCM3 ON_NEW 0.00000 0.00000 HOLD

Помимо этого по умолчанию используются следующие настройки, которые отличаются от тривиальных:

  • Сетевая конфигурация системы (IP_CONFIG) соответствует настройкам, указанным в Настройка TCP/IP

  • Последовательные порты COM1, COM2 и RS485 настроены на скорость передачи 115200 бит/с, а порт NMEA на 4800 бит/с

  • Для одометрического датчика (DMI_CONFIG) масштабный коэффициент назначен равным 1

4.10. Начальная настройка прибора

Для получения оптимальных результатов прибор должен быть правильно настроен. Сюда включаются следующие пункты:

  • Выбрать подходящей профиль движения транспортного средства

  • Задать углы ориентации прибора относительно транспортного средства

  • Задать положение первой антенны относительно прибора

  • При использование двух антенн: задать положение второй антенны относительно первой

  • При использовании одометра: задать интерпретацию его данных и положение точки измерения скорости

  • Настроить получение данных RTCM3 с базовой станции

Предположим прибор установлен на автомобиль горизонтально с поворотом на 90 градусов вокруг оси z (точность установки 1 градус). Первая антенна располагается на 0.3 метра к переду, на 0.2 метра левее и на 0.5 метра выше прибора (точность измерений 0.05 м). Вторая антенна отстоит на 1 метр относительно первой вдоль продольной оси автомобиля (точность измерений 0.02 м). Скорость извлекается из бортовой CAN-сети (протокол HONDA). Используется NTRIP подключение для получения RTK поправок.

Команды конфигурации для данного случая имеют следующий вид (адрес NTRIP подключения, имя пользователя и пароль — вымышленные):

SET_MOTION_PROFILE CAR
SET_ROTATION VEHICLE_IMU 0.0 0.0 90.0 1.0 1.0 1.0
SET_TRANSLATION IMU_ANT1 0.3 -0.2 -0.5 0.05 0.05 0.05
SET_TRANSLATION ANT1_ANT2 1.0 0.0 0.0 0.02 0.02 0.02
CAN_CONFIG ON HONDA 5000000
NTRIP_CONFIG NCOM1 CLIENT 3.13.42.207:2101 RTCM3_2 acrux viscom

Ниже изложены детали по каждому пункту. Предварительно рекомендуется прочесть разделы Используемые системы координат и Связь между приборной и транспортной системами координат.

4.10.1. Выбор профиля движения

Вне зависимости от типа транспортного средства, предполагается, что прибор и антенны закреплены на один жесткий каркас и не совершают относительного движения (кроме возможно низкоамплитудных вибраций).

Выбор профиля движения производится командой SET_MOTION_PROFILE. В настоящий момент реализованы специальные профили:

  • CAR для для четырехколесных легковых или грузовых автомобилей

  • BOAT для малых судов

Если прибор устанавливается на другое транспортное средство, то нужно использовать профиль NONE.

4.10.2. Задание углов ориентации прибора относительно транспортного средства

Прибор может быть установлен на транспортное средство в произвольной ориентации, при этом необходимо указать Углы Эйлера приборной системы относительно транспортной, а также приблизительную точность их определения с помощью команды SET_ROTATION с аргументом rotation_type = VEHICLE_IMU.

Углы установки должны быть определены с точностью не хуже, чем несколько градусов. Введенные параметры точности должны отражать реальную точность определения.

Введенные параметры точности не влияют на выдаваемую точностью углов ориентации (в логе PVA_SD), однако они учитываются алгоритмом, если используется профиль движения, отличный от NONE.

См. Графическая схема возможных стандартных ориентаций прибора в транспортном средстве, чтобы определить примерные значения углов, когда оси прибора приблизительно параллельны осям транспортного средства.

Даже если углы установки номинально нулевые, то команду все равно нужно выполнить, задав подходящие значения СКО, например SET_ROTATION VEHICLE_IMU 0.0 0.0 0.0 1.0 1.0 1.0. В противном случае алгоритм будет работать с нулевым значением СКО, что не является корректным.

4.10.3. Задание положения первой антенны относительно прибора

Положение антенны относительно ИИБ задается командой SET_TRANSLATION с аргументом translation_type = IMU_ANT1. Важно обратить внимание на следующие моменты:

  • Нужно задавать положение фазового центра антенны относительно положения ИИБ (см. Положение ИИБ в приборе). Для высокоточных антенн точка фазового центра должна быть указан в сопроводительной документации, для “обычных” антенн используйте геометрический центр антенны.

  • Положение антенны относительно прибора задается в осях транспортной системы координат

  • При обычной установке антенны выше прибора, значение translation_z будет отрицательным, поскольку ось z транспортной системы направлена вниз

Для параметров точности определения положения антенны рекомендуется следующее:

  • Для режима RTK: измерить положение антенны как можно точнее, оценки же точности измерения лучше вводить консервативно

  • Без режима RTK точность измерения положения антенны не играет большой роли: можно измерить положение с точностью примерно 10 см и указать такую же точность в команде SET_TRANSLATION

  • При отсутствии точных технических средств для измерения ориентации прибора относительно транспортного средства и/или положения антенны относительно прибора либо при использовании недорогой антенны с неизвестным или нестабильным фазовым центром, рекомендуется вводить точность измерения не меньше, чем 5 см

  • Если измерения были проведены точно (включая ориентацию прибора относительно транспортного средства) и используется точная антенна, то рекомендуется вводить точность измерений не меньше, чем 1 см

Алгоритм навигации учитывает введенную точность определения положения антенны в своей работе, однако не пытается уточнить это положение, поскольку этот процесс не очень надежный, если только не используется высокоточный ИИБ. В частности это означает, что точность позиционного решения будет ограничена введенной точностью положения антенны.

4.10.4. Задание положения второй антенны относительно первой

Подключение второй антенны дает дополнительный и независимый источник информации о курсе для системы. Задание положения второй антенны осуществляется командой SET_TRANSLATION с аргументом translation_type = ANT1_ANT2. Рекомендуется использовать две антенны, особенно при использовании профиля движения BOAT или NONE.

Важно обратить внимание на следующие моменты:

  • Нужно задавать вектор между фазовыми центрами антенн (от первой к второй) в осях транспортной системы координат

  • Положение антенн может быть любым, однако точность получаемого антенного курса обратно пропорциональна длине проекции вектора между антеннами в плоскость xy транспортной системы координат. Рекомендуется разнесение антенн не менее 1 метра

  • Измерения должны быть сделаны как можно точнее, при этом введенная точность должна соответствовать реальной точности измерений

  • Алгоритм использует длину введенного вектора между антеннами для верификации решения, а непосредственно в обработке используется направление вектора. Поэтому рекомендуется измерить расстояние между антеннами отдельно и привести измеренный вектор к этой длине (путем нормировки его к единичному и умножением на измеренную длину)

В зависимости от соотношения между длиной вектора и точностью определения его компонент, алгоритму потребуется время для точной оценки ориентации между вектором и приборной системой координат. Это означает, что на начальном этапе работы, точность антенного курса будет ограничена точностью измерения компонент вектора пользователем и обычно не будет очень высокой.

4.10.5. Настройка одометра

Для настройки одометра используйте команду DMI_CONFIG. Помимо этого:

  • Если скорость извлекается из CAN-сети автомобиля, то нужно сконфигурировать интерпретацию данных через команду CAN_CONFIG

  • Если используются импульсы приращения расстояния, то нужно сконфигурировать импульсные входы с помощью IMPULSE_CONFIG

Также рекомендуется задать положение точки измерения скорости относительно прибора командой SET_TRANSLATION с аргументом translation_type = IMU_DMI. Высокой точности не требуется, достаточно провести измерения с точностью 10-30 см.

4.10.6. Настройка получения данных RTCM3 с базовой станции

Прибор может получать данные RTCM3 по любому порту, для этого формат принимаемых сообщений должен быть настроен на RTCM3 с помощью команды INTERFACE_MODE. Данные должны поступать в виде непрерывного двоичного потока без всякой предобработки. Например, данные могут получаться на персональном компьютере и передаваться в прибор с помощью утилиты STR2STR, входящей в RTKLib.

Логический порт NCOM1 (через Ethernet) реализует подключение и получение поправок с базовой станции по протоколу NTRIP. Для этого прибор должен быть включен в локальную сеть с выходом в интернет, см. Настройка TCP/IP. Для настройки точки подключения используйте команду NTRIP_CONFIG.

Для работы в режиме “network RTK” нужно организовать периодическую выдачу сообщений GGA в порт NCOM1:

LOG NCOM1 GGA ON_TIME 1.0 HOLD

4.10.7. Особенности эксплуатации и настройки для разных типов транспортных средств

Для автомобилей (профиль CAR)

При использовании прибора на автомобиле подключение двух антенн является опциональным — обычно хорошие результаты можно получить и с одной антенной. При конфигурации нужно обратить внимание, что в SET_ROTATION с аргументом VEHICLE_IMU, параметры точности вводимых углов играют роль и должны отражать реальную точность измерений.

Для малых судов (профиль BOAT)

При использовании прибора на судах подключение двух антенн является по сути необходимым. Разнесение между антеннами должно быть тщательно измерено с точностью не хуже, чем 5 см на 1 м разнесения антенн. Сами измерения и их точность должны быть правильно введены в команде SET_TRANSLATION, в противном случае курс с двухантенной системы не сможет быть использован для определения начального курса. Другим сценарием для определения начального курса является движение с большой (выше 15 км/ч) скоростью, что не всегда будет возможно. Кроме этого, двухантенная система существенно помогает в поддержании точности оценки курса при типичном маломаневренном движении судна или стоянке.

4.11. Работа в режиме RTK

Для получения хороших результатов в режиме RTK и правильной их интерпретации, нужно иметь ввиду следующие вещи:

  1. См. Координаты в режиме RTK

  2. См. Формат RTCM3, где указан список номеров поддерживаемых сообщений протокола RTCM3

  3. Базовая станция должна принимать сигналы, совместимые с сигналами, указанным в Характеристики ГНСС приемников (см. Коды RINEX совместимых ГНСС сигналов) Другие типы сигналов не могут быть использованы навигационным алгоритмом Acrux и будут игнорироваться. Крайне рекомендуется, чтобы присутствовали сигналы на двух частотах хотя бы для одного созвездия, например Galileo E1 и E5b

  4. Максимально допустимый “возраст” поправок установлен равным 60 секундам. Если поток RTCM3 данных прерывается по той или иной причине, то через указанное время прибор перейдет к позиционированию стандартной точности (тип решения SPS)

  5. Возможность разрешения фазовой неоднозначности и время, требуемое для этого, ухудшаются по мере удаления Acrux от базовой станции. Качественно результаты работы RTK алгоритма в зависимости от расстояния можно охарактеризовать следующим образом:

    • <10 км — оптимальные результаты

    • 10-20 км — хорошие результаты

    • 20-30 км — результаты деградируют, но использование допустимо

    • >30 км — не рекомендуется использовать RTK

    В настоящий момент прибор не реализует специальных алгоритмов для больших расстояний до базовой станции. Улучшение алгоритмов RTK для этого случая, сбор экпериментальных данных и детализация рекомендаций в этом пункте есть в планах разработчиков.

4.11.1. Коды RINEX совместимых ГНСС сигналов

Символ ☐ означает, что буквенный код в идентификаторе сигнала может быть любым. В скобках указано однобуквенное обозначение систем согласно RINEX.

  • Для GPS (G): 1C, 2S, 2L, 2X

  • Для Galileo (E): 1☐, 7☐, 8☐ (только псевдодальности)

  • Для Beidou (C): 2☐, 7☐

  • Для GLONASS (R): 1C, 2C

4.12. Описание стадий работы навигационного алгоритма

Принципиально навигационный алгоритм проходит следующие стадии работы, которые отражаются в переменной filter_status лога PVA:

  1. Получение начального позиционного решения от ГНСС приемника

  2. Начальное определение углов крена и тангажа

  3. Начальное определение угла курса

  4. Уточнение всех навигационных параметров до оптимальной точности

  5. Работа в режиме оптимальной точности

При превышении оценки среднеквадратичного отклонения по любой из координат 1000 м алгоритм перезагружается и возвращается к стадии 1. Такие большие значения СКО говорят о некотором вырожденном сценарии использования, типа длительной пропажи сигналов ГНСС при отсутствии одометра. В такой ситуации решение уже не представляет ценности, и перезагрузка алгоритма позволяет избежать возможных непредсказуемых ошибок. В будущем логика определения некорректного функционирования и перезагрузки алгоритма будет расширена и улучшена.

Логика отдельных стадий зависит от профиля движения, задаваемого командой SET_MOTION_PROFILE и описана ниже. Начиная со стадии 4, навигационный алгоритм использует только сырые измерения ГНСС приемника.

Получение начального позиционного решения от ГНСС приемника

До получения корректного и достоверного позиционного решения навигационный алгоритм не производит никаких вычислений.

Начальное определение углов крена и тангажа

Для профиля движения NONE определение крена и тангажа производится в течении 10 секунд, когда транспортное средство неподвижно, ориентация прибора относительно вертикали может быть произвольной.

Для профиля движения CAR или BOAT начальные крен и тангаж получаются из предположения, что транспортное средство приблизительно горизонтально. Неподвижность транспортного средства не требуется.

Начальное определение угла курса

Алгоритм определения угла курса зависит от выбранного профиля движения:

  • Для профиля NONE курс будет определен при наборе достаточной скорости из положения покоя либо по двухантенной системе

  • Для профиля CAR при старте из положения покоя курс будет определен при наборе достаточной скорости. Если же старт произошел в движении, то для определения курса алгоритму потребуется некоторое время, чтобы разрешить начальное направление движения (вперед или назад): с помощью двухантенной системы (достаточно одного корректного измерения), либо сопоставляя инерциальные и спутниковые измерения (это занимает обычно не более 5 секунд)

  • Для профиля BOAT курс может быть определен при движении с большой скоростью (выше 15 км/ч) либо напрямую по двухантенной системе. Для инициализации по двухантенной системе точность измерения компонент вектора между антеннами должна быть не хуже, чем 5 см на 1 м расстояния между антеннами

Уточнение всех навигационных параметров до оптимальной точности

На этой стадии алгоритм работает в стандартном режиме и реализует фильтр Калмана. Оптимальная точность будет достигнута после прохождения достаточного расстояния и совершении нескольких поворотов.

Работа в режиме оптимальной точности

Алгоритм работает в стандартном режиме с оптимальной точностью.

4.13. Ответы на частые вопросы

  1. Как проверить, что данные RTCM 3 поступают в прибор?

    Для этого можно использовать логирование LOG RTCM3 ON_NEW. Параметры базовой станции можно узнать с помощью LOG RTCM3_STATUS.

  2. Данные RTCM 3 поступают, однако тип позиции остается SPS. Почему так происходит?

    Скорее всего данная ситуация наблюдается при включении прибора на стоянке, когда фильтр еще не работает в полноценном режиме, а позиционное решение просто ретранслируется с приемника. На данном этапе фильтр еще не использует сырые ГНСС измерения, поэтому не может использовать и данные RTCM 3. Данные RTCM 3 начнут использоваться когда алгоритм перейдет в режим CONVERGING, при этом тип позиционного решения измениться на RTK_FLOAT/RTK_FIXED.

  3. При использовании RTCM 3 почему тип позиционного решения не меняется с RTK_FLOAT на RTK_FIXED либо часто переключается между этими режимами?

    У этого может быть несколько причин:

    • Слишком большое расстояние до базовой станции

    • Базовая станция не передает сигналы на двух частотах, что существенно усложняет получение решения типа RTK_FIXED в сложных условиях приема ГНСС сигналов

    • Неправильно задано положение главной антенны относительно прибора (в команде SET_TRANSLATION). В этом случае предсказание перемещения антенны при поворотах оказывается неверным, что приводит к отбраковке фазовых измерений

    • Антенна и прибор не закреплены на одном жестком каркасе. Ситуация аналогична предыдущему пункту

    • Поток данных RTCM 3 получается не из одного источника, возможно с разных базовых станций. Например через NTRIP-клиент и какой либо порт.

  4. Как настроить прибор для работы в режиме “network RTK”?

    Для этого прибор должен передавать на NTRIP-кастер своё текущее местоположении в виде сообщения GGA формата NMEA 0183. Это достигается следующими настройками (для порта NCOM1):

    INTERFACE_MODE NCOM1 RTCM3 NMEA0183
    LOG NCOM1 GGA ON_TIME 1.0
    NTRIP_CONFIG NCOM1 CLIENT ...

    Первая из этих настроек входит в заводские настройки по умолчанию.

  5. Как проверить, что данные из CAN-шины поступают в прибор?

    Для этого можно использовать логирование LOG CAN_FRAME ON_NEW. Предварительно должна быть проведена настройка с помощью CAN_CONFIG. Если корректно выбран один из поддерживаемых протоколов сообщений CAN, то будут генерироваться сообщения DMI, что можно проверить командой LOG DMI ON_NEW.

  6. Как проверить, что происходит обмен данными через сетевое соединение или последовательный порт?

    Для этого можно использовать логирование LOG PORT_STATS ON_CHANGED. При получении или отправке данных через любой порт, для него будет выведена обновленная статистика числа принятых и отправленных байт.

5. Протокол взаимодействия с прибором

Взаимодействие с прибором осуществляется с помощью системы проприетарных сообщений определенной структуры. Эти сообщения концептуально разделяются на логи, которые содержат навигационные параметры или другую информацию о приборе, и команды, которые изменяют настройки прибора. Проприетарные сообщения могут представлены в трёх форматах:

  • бинарный

  • текстовый

  • консольный

Кроме этого, прибор поддерживает прием и передачу сообщений в форматах NMEA 0183, примем сообщений в формате RTCM 3, а также прием измерений внешних ИИБ.

Выбора формата сообщений осуществляется командой INTERFACE_MODE.

5.1. Бинарный формат сообщений

Бинарный формат является логически основным, в нем каждое сообщение задается последовательностью полей определенного типа и размера. Сообщения предваряются заголовком и завершаются контрольной суммой.

5.1.1. Типы данных

Типы данных обозначаются согласно именам в языке С/C++: int32_t, float и т. д.

Тип char[n] содержит n символов, так что символы с начала до \0 образуют передаваемую строку. Символ \0 должен обязательно содержаться в передаваемом поле, в противном случае поле считается некорректным.

Тип char[] может быть только у последнего поля сообщения. Размер поля определяется, как разница размера из заголовка и суммарного фиксированного размера предшествующих полей. Символ \0 в полях данного типа особым образом не рассматривается.

Аналогично определены типы byte[n] и byte[], но они предназначены для представления произвольного массива байт.

Тип microseconds64_t — это условное обозначение типа для хранения и передачи времени в виде числа микросекунд. В бинарном формате переменные этого типа содержат целое число микросекунд и хранятся, как uint64_t.

Целочисленные типы, которые соответствуют перечислимым, дополняются словом “enum”, например uint8_t enum.

Целочисленные типы, биты которых задают наличие или отсутствие определенных свойств, дополняются словом “flags”, например uint16_t flags.

Числовые значения передаются в порядке от младшего к старшему, т. н. “little endian”.

5.1.2. Структура

Бинарный формат следует строго определенному формату, который описан в таблицах ниже.

Табл. 4. Структура бинарного сообщения
Секция Количество байт

Заголовок пакета

2

Заголовок сообщения

12

Тело сообщения

Определяется по заголовку сообщения

Контрольная сумма сообщения

3

Табл. 5. Структура заголовка пакета
№ поля Имя Тип Описание

1

sync

uint8_t

Байт синхронизации равный 0xAA

2

header_crc

uint8_t

Контрольная сумма последующего заголовка сообщения

Табл. 6. Структура заголовка сообщения
№ поля Имя Тип Описание

1

message_id

uint16_t enum

Идентификатор сообщения, см. Список сообщений

2

message_length

uint16_t

Количество байт в последующем теле сообщения

3

system_time

microseconds64_t

Системное время сообщения — количество микросекунд с момента включения прибора

Для команд посылаемых в прибор системное время заполнять не нужно — оно будет назначено автоматически системному времени в момент получения.
Табл. 7. Структура контрольной суммы сообщения
№ поля Имя Тип Описание

1

message_crc_1

uint8_t

Первый байт контрольной суммы тела сообщения

2

message_crc_2

uint8_t

Второй байт контрольной суммы тела сообщения

3

message_crc_3

uint8_t

Третий байт контрольной суммы тела сообщения

5.1.3. Проверка целостности сообщения

Алгоритм выделения и проверки целостности сообщения из потока байт должен быть реализован следующим образом:

  1. Байты пропускаются до тех пор пока не найден байт синхронизации, равный 0xAA

  2. Следующий байт — контрольная сумма последующего заголовка

  3. Последующие 12 байт — заголовок сообщения. Если его контрольная сумма верная, то переходим к следующему пункту, иначе к пункту 1

  4. Читается тело сообщения, размер которого указан в заголовке, и вычисляется его контрольная сумма

  5. Читаются последовательно 3 байта контрольной суммы — если очередной байт не совпадает с вычисленным байтом контрольной суммы, то целостность сообщения нарушена, переходим к пункту 1

  6. Если все 3 байта контрольной суммы совпали, то было выделено целостное сообщение, которое можно использовать. Переходим к пункту 1

Алгоритм контрольной суммы заголовка сообщения: избыточный циклический код длины 8 с полиномом 0x07, проверочный код — 0xF4. Известен под названиями CRC-8 или CRC-8-CCIT.

Алгоритм контрольной суммы тела сообщения: избыточный циклический код длины 24 с полиномом 0x864CFB, проверочный код — 0xCDE703. Известен под названиями CRC-24-Radix-64 или CRC-24-Qualcomm, используется в сообщениях RTCM 3.

Три байта контрольной суммы сообщения записаны в порядке от старшего к младшему, аналогично тому, как это сделано в протоколе RTCM 3. К примеру, если значение контрольной суммы равно 0xAABBCC, то в потоке данных байты контрольной суммы идут в порядке 0xAA, 0xBB, 0xCC.

См. реализацию вычисления контрольных сумм на языке C в Алгоритмы вычисления контрольных сумм.

5.2. Текстовый формат сообщений

Текстовый формат является альтернативой бинарного и представляет то же самое содержание.

Сообщение начинается с символа '$', за которым следует поля данных, разделенных запятыми:

  • Первым полем данных является имя сообщения

  • Вторым полем данных является системное время сообщения в виде числа секунд (соответствует полю system_time из заголовка бинарного сообщения). Для входящих сообщений поле можно оставить пустым (оно будет сконвертировано в 0), т. к. время входящих сообщений назначается прибором после получения

  • Далее следуют поля данных, специфичных для данного сообщения. Их число должно быть равно числу полей в бинарном формате сообщения

  • За последним полем данных следует символ '*' и контрольная сумма, равная побитовому XOR всех символов между '$' и '*' (аналогично формату NMEA 0183)

  • Сообщение заканчивается символами возврата каретки и перевода строки ('\r\n')

Поля бинарного сообщения представляют в текстовом формате по следующим правилам:

  • Поля целочисленного типа — обычным образом

  • Поля типа float и double — с 3-мя и 8-мя десятичными знаками соответственно

  • Поля типа строк char[n] и char[] — см. ниже

  • Поля типа массива байт byte[n] и byte[] — в виде строки, где каждый байт представлен в шестнадцатеричной системе исчисления с помощью двух символов из диапазонов 0 — 9, A — F

  • Поля типа microseconds64_t — в виде числа секунд с 6-ю десятичными знаками

  • Поля типа битовой маски с флагами — в виде наименований свойств, разделенных вертикальной чертой ('|'), поле естественно может оказаться пустым. Регистр букв для входящих сообщений не играет роли, в выходных сообщениях используются заглавные буквы

  • Поля типа перечисления — в виде текстового эквивалента данного значения. Регистр букв для входящих сообщений не играет роли, в выходных сообщениях используются заглавные буквы

  • Зарезервированные, но неиспользуемые поля — в виде пустой строки

Чтение и вывод строковых переменных устроено следующим образом:

  • Если в строке отсутствуют символы, которые используются для разделения полей сообщения (запятая в текстовом формате и пробел в консольном формате, см. ниже), то строка может передаваться без кавычек

  • Если нужно передать строку в кавычках (с целью экранирования символов разделения), то символы " и \ нужно экранировать как \" и \\

  • Строковая переменная в текстовом формате всегда отображается в кавычках, символы " и \ экранируются

  • Если кавычка встречается не как первый символ в поле, то она рассматривается, как обычный символ, и такой формат считается корректным

Примеры работы со строковой переменной (ввод — внутреннее представление — вывод):

Ввод Внутренне представление Вывод

a"bc\

a"bc\

"a\"bc\\"

" \"pass\\word\" "

 "pass\word" 

" \"pass\\word\" "

Пример входящего сообщения:

$log,,icom1,dynamics,once,0,0,*70\r\n

Пример исходящего сообщения:

$DYNAMICS,482.906300,1336738397.498877,18,TIME_ACCURATE|LS_VALID,-1.379,1.311,3.228,-0.354,0.556,1.350*06\r\n

5.3. Консольный формат сообщений

Консольный формат используется для работы с прибором через консоль (telnet или по последовательному порту).

Сообщения имеют эквивалентное содержание с бинарным форматом, но вводятся и получаются в читаемом текстовом виде. Форматирование полей осуществляется аналогично текстовому формату. Контрольные суммы не используются.

Отличием от текстового формата является возможность не вводить все поля сообщений, а опираться на логику использования значений по умолчанию. Эта возможность реализована в виде простого алгоритма “жадного” поглощения токенов (слов, разделенных пробелами), который можно описать следующим образом:

  • Алгоритм пытается назначить значения для каждого поля сообщения, последовательно проходя по токенам из переданной строки

  • Если текущий токен подходит под текущее поле, то данное поле назначается токену

  • Если текущий токен не подходит под текущее поле, то опциональное поле получает значение по умолчанию, а в противном случае фиксируется ошибка типа INVALID_PARAMETER

  • Если в итоге полного соответствия между полями и токенами получено не было, то фиксируется ошибка TOO_MANY_PARAMETERS или MISSING_PARAMETER

Пример входящего сообщения:

log dynamics

Пример исходящего сообщения:

[881.790420] DYNAMICS 1336738796.388646 18 TIME_ACCURATE|LS_VALID 0.149 -0.077 -0.086 0.000 -0.005 -0.006

5.4. Формат NMEA 0183

Это текстовый формат, используемый для коммуникации между морским навигационным оборудованием. Для сообщений, генерируемых Acrux, используются следующие соглашения:

  • В качестве “NMEA talker” используется аббревиатура GN

  • Формат сообщений по стандарту 4.10

  • Широта и долгота выводятся с точностью до шестой десятичной цифры минут

  • Все прочие поля выводятся согласно точности определения соответствующих значений

  • Все сообщения сопровождаются контрольной суммой

5.5. Формат RTCM3

Это бинарный формат, в котором передаются сообщения с базовых станций для реализации дифференциального позиционирования по сигналам ГНСС.

Следующие номера сообщений поддерживаются и обрабатываются прибором: 1005, 1006, 1074-1077, 1084-1087, 1094-1097, 1124-1127.

5.6. Прием внешних ИИБ

Прибор может принимать и использовать внешние ИИБ определенных моделей. Поддерживаемые модели и соответствующие идентификаторы форматов указаны в INTERFACE_MODE.

5.7. Порты

Получение и отправка сообщений прибором осуществляется через порты, которые в этом контексте рассматриваются как логические сущности и задаются своим идентификатором.

Табл. 8. Физические последовательные порты

Имя

Направление

Интерфейс

Назначение

RX

TX

RS232

RS422

COM1

+

+

+

-

Порт общего назначения работающий на прием и передачу

COM2

+

+

+

-

Дополнительный порт общего назначения работающий на прием и передачу

NMEA

+

-

+

+

Прием предложений NMEA0183 по длинной линии связи

RS485

+

+

-

+

Полудуплексный порт общего назначения

Табл. 9. Сетевые Ethernet порты
Имя Назначение

ICOMx

Взаимодействие с прибором через консоль telnet, выдача логов потребителю на высокой скорости

NCOMx

Клиент NTRIP для получения RTCM поправок

Табл. 10. Специальные порты
Имя Назначение

ALGO

Логический порт для приема навигационной информации и выдачи навигационного решения

FILE

Запись файла логов на встроенный накопитель или SD карту

В бинарном протоколе порты задаются типом uint16_t enum, значения которого описаны в таблице:

Табл. 11. Идентификаторы портов
Числовое значение Текстовый эквивалент

0

AUTO

2

ALGO

3

COM1

4

COM2

5

NMEA

6

RS485

16

FILE

24

ICOM1

25

ICOM2

26

ICOM3

32

NCOM1

Интерпретация значения AUTO зависит от команды: он может указывать на все порты или на порт, в который поступали команда.

5.8. Структура GlobalTime

Для выдачи глобального времени навигационного решения (см. Системы глобального времени) используется специальная структура GlobalTime:

№ поля Имя Тип Описание

1

gps_time

microseconds64_t

Количество микросекунд с начала отсчета времени GPS

2

leap_seconds

uint16_t

Количество дополнительных секунд для вычисления времени UTC

3

time_flags

uint16_t flags

Свойства выдаваемого времени, см. Интерпретация битов time_flags

Табл. 12. Интерпретация битов time_flags
Биты Интерпретация значений

0-1

  • 00 — время непригодно для использования

  • 01 — время пригодно для использования

  • 11 — время пригодно для использования и определено с использованием спутниковых измерений с точностью лучше чем 1 микросекунда

2-3

  • 00 — число дополнительных секунд не определено и не может быть использовано для вычисления времени UTC

  • 01 — число дополнительных секунд корректно и может быть использовано для вычисления времени UTC

  • 11 — число дополнительных секунд корректно, и в данный момент происходит добавление дополнительной секунды, так что UTC время суток нужно отображать в виде 23:59:60

Предположим, десятичное значение time_flags равно 7, что в двоичной форме имеет представление 0111. Согласно таблице выше, это означает, что время точно определено и число дополнительных секунд известно, добавления дополнительной секунды в данный момент не происходит.

5.8.1. Алгоритмы вычисления времени

Алгоритмы ниже записаны, как корректный код на языке Python 3.

По значению gps_time вычисление недели и секунды GPST производится следующим образом:

gps_week = int(gps_time * 1e-6 / 604800)
gps_second = gps_time * 1e-6 - gps_week * 604800

Если согласно флагам число дополнительных секунд корректно, то время UTC вычисляется следующим образом:

from datetime import datetime, timedelta
utc = datetime(1980, 1, 6) + timedelta(microseconds=gps_time) - timedelta(seconds=leap_seconds)

6. Список сообщений

Таблица ниже содержит список поддерживаемых сообщений, разделенных на категории.

Идентификатор Имя

0

RESPONSE

Системные команды

2

CAN_CONFIG

4

FILE_CONFIG

7

ICOM_CONFIG

8

INTERFACE_MODE

9

LOG

10

NTRIP_CONFIG

11

NTRIP_TIMEOUT

12

RESET

13

SAVE_CONFIG

14

SAVE_IP_CONFIG

16

SERIAL_CONFIG

18

UNLOG

19

UNLOG_ALL

21

IP_CONFIG

23

IMPULSE_CONFIG

33

REMOVE_FILES

Команды навигационной конфигурации

1000

SET_ROTATION

1001

SET_TRANSLATION

1002

SET_MOTION_PROFILE

1003

DMI_CONFIG

1040

CALIBRATE

Системные логи

2000

CONFIG

2001

FILE_STATUS

2002

FILE_SYSTEM_CAPACITY

2005

LOG_LIST

2007

PORT_STATS

2009

VERSION

2010

USAGE_STATS

2100

TEXT_MESSAGE

Навигационные логи

3000

PVA

3001

PVA_SD

3002

DYNAMICS

3003

FULL_SOLUTION

3004

PVA_COV

3020

LAST_TIME_PULSE

3030

FILTER_UPDATES

3031

RTCM3_STATUS

Оценки параметров для автоматической калибровки

3041

TRANSLATION_ANT1_ANT2

3042

ROTATION_VEHICLE_IMU

3043

DMI_SCALE_FACTOR

Навигационные логи в формате NMEA 0183

3100

GGA

3101

GLL

3102

GNS

3104

GST

3106

HDT

3107

HPR

3108

RMC

3109

ROT

3110

THS

3111

VTG

3112

ZDA

Входная навигационная информация

4000

RAW_SENSOR

4001

DMI

4002

EXT_IMU

4003

RTCM3

4004

CAN_FRAME

6.1. RESPONSE

Выдается в ответ на сообщение и содержит информацию было ли оно успешно принято, либо причину ошибки.

Идентификатор: 0

Бинарный формат:

№ поля Имя Тип Описание

1

response

uint16_t enum

См. Значения response

Табл. 13. Значения response
Числовое значение Текстовый эквивалент Описание

0

OK

Сообщение успешно принято

1

UNKNOWN_MESSAGE_ID

Неизвестный идентификатор сообщения в бинарном формате либо неизвестное имя сообщения в текстовом или консольном форматах

2

INVALID_FORMAT

Некорректный размер сообщения в бинарном формате либо некорректный формат сообщения в текстовом формате

3

TOO_MANY_PARAMETERS

Избыточное число аргументов в текстовом или консольном формате

4

MISSING_PARAMETER

Недостаточное число аргументов в текстовом или консольном формате

5

INVALID_PARAMETER

Некорректное значение параметра (если не попадает под специфичную ошибку ниже)

6

INVALID_PORT

Некорректное значение порта

7

INVALID_RX_MODE

Некорректное значение соответствующего параметра в INTERFACE_MODE

8

INVALID_TX_MODE

Некорректное значение соответствующего параметра в INTERFACE_MODE

9

INVALID_LOG

Некорректное значение запрошенного сообщения в команде LOG

10

INVALID_PERIOD

Некорректное значение периода в команде LOG

11

INVALID_OFFSET

Некорректное значение смещения в команде LOG

12

INVALID_TRIGGER

Некорректное значение триггера в команде LOG

13

INVALID_IP_FORMAT

Некорректное значение IP-адреса, маски подсети или точки подключения в формате адрес:порт

6.2. Системные команды

6.2.1. CAN_CONFIG

Конфигурация интерфейса CAN.

Идентификатор: 2

Бинарный формат:

№ поля Имя Тип Описание

1

switch

uint16_t enum

См. Значения switch

2

can_protocol

uint16_t enum

Протокол, см. Значения can_protocol

3

speed

uint32_t

Скорость (бит/с) из ряда: 1000000, 500000, 250000, 125000, 100000, 50000, 20000, 10000

Табл. 14. Значения switch
Числовое значение Текстовый эквивалент Описание

0

ON

Включить

1

OFF

Выключить

Табл. 15. Значения can_protocol
Числовое значение Текстовый эквивалент Описание

0

NONE

Используется для регистрации сырых данных из сети CAN

3

ISO_15765_11_MONITOR

Прием данных по протоколу ISO 15765-4 с 11 битными идентификаторами сообщений. Запрос выдачи данных о скорости должен осуществляться пользователем

5

HONDA

Проприетарный протокол Honda

6

HYUNDAI_KIA

Проприетарный протокол Hyundai-Kia

7

TOYOTA

Проприетарный протокол Toyota

8

SUBARU

Проприетарный протокол Subaru

9

LADA_VESTA

Проприетарный протокол, используемый в автомобилях LADA Vesta

10

RENAULT

Проприетарный протокол Renault

Консольный формат:

CAN_CONFIG switch [can_protocol] [speed]

Примечания:

  • Параметры can_protocol и speed будут назначены по умолчанию NONE и 0 соответственно, что является допустимым при switch = OFF

Примеры:

CAN_CONFIG ON HONDA 250000
CAN_CONFIG OFF

6.2.2. FILE_CONFIG

Включает и выключает запись логов в файл (порт FILE).

Идентификатор : 4

Бинарный формат:

№ поля Имя Тип Описание

1

media

uint16_t enum

Носитель для записи файлов, см. Значения media

2

name

char[]

Часть имени файла

Табл. 16. Значения media
Числовое значение Текстовый эквивалент Устройство Linux Точка монтирования Описание

0

OFF

Запись файла отключена

1

INTERNAL

/dev/mmcblk0p2

/

Запись на основной встроенный накопитель в каталог /home/user/logs

2

SD_CARD

/dev/mmcblk1p1

/mnt/sdcard

Запись на карту памяти в ее корневой каталог. Монтирование выполняется при включении записи, а размонтирование при выключении

Полное имя файла формируется, как конкатенация серийного номера прибора и переданного имени. Если же имя пустое, то оно будет сформировано с помощью текущей даты и времени. Если в момент создания файла время UTC было определено неверно (отсчитывалось от нулевого времени ОС), то файл будет переименован при получении времени UTC от ГНСС.

Например для серийного номера 322005:

  • name = "test_log"322005_test_log

  • name = ""322005_20220908T170305

Если файл с данным именем уже существует, то к имени добавляется очередной порядковый номер в скобках.

Файлы с бинарным содержанием получают расширение .vbp, а с текстовым — .txt.

Для обеспечения работоспособности системы, запись файла на основной накопитель останавливается если объем доступного дискового пространства становится меньше 500 МБ.

Консольный формат:

FILE_CONFIG media [name]

Примеры:

FILE_CONFIG INTERNAL test_log
FILE_CONFIG SD_CARD
FILE_CONFIG OFF

6.2.3. ICOM_CONFIG

Конфигурация порта ICOMx, связанного с IP-сетью (Ethernet).

Идентификатор: 7

Бинарный формат:

№ поля Имя Тип Описание

1

port

uint16_t enum

Порт для которого выбирается конфигурация: ICOM1, ICOM2 или ICOM3. См. Порты

2

icom_mode

uint16_t enum

Протокол сокета, см. Значения icom_mode

3

endpoint

char[82]

Адрес подключения, см. Значения icom_mode и примеры ниже

4

timeout

uint16_t

Таймаут подключения в секундах

Табл. 17. Значения icom_mode
Числовое значение Текстовый эквивалент Описание

0

DISABLED

Сокет закрыт

1

UDP

Сокет является UDP-клиентом/узлом. Требуется указать адрес и порт для передачи (разделяются ':') и порт для приема (отделяется ';')

2

TCP

Сокет является TCP-клиентом. Требуется указать адрес и порт сервера для подключения

3

TCP_SERVER

Сокет является TCP-сервером. Требуется указать порт для прослушивания, адрес можно оставить пустым. Может быть подключено до 255 независимых клиентов.

Соединение автоматически переустанавливается в следующих случаях:

  • Любая ошибка при подключении

  • Истек таймаут подключения клиента TCP или корректного приема сообщений от сервера

Консольный формат:

ICOM_CONFIG port icom_mode [endpoint [timeout]]

Примечания:

  • Значение endpoint назначается по умолчанию пустым (допустимо только когда mode = DISABLED)

  • Значение timeout по умолчанию назначается 10

Примеры:

ICOM_CONFIG ICOM1 DISABLED
ICOM_CONFIG ICOM1 UDP 192.168.0.100:3001;1024
ICOM_CONFIG ICOM2 TCP 192.168.0.100:3001 20
ICOM_CONFIG ICOM3 TCP_SERVER :23

6.2.4. INTERFACE_MODE

Определяет формат принимаемых и выдаваемых сообщений для порта.

Идентификатор: 8

Бинарный формат:

№ поля Имя Тип Описание

1

port

uint16_t enum

Порт для которого выбираются форматы, см. Порты

2

rx_mode

uint16_t enum

Формат принимаемых сообщений, см. Идентификаторы форматов сообщений

3

tx_mode

uint16_t enum

Формат выдаваемых сообщений, см. Идентификаторы форматов сообщений

4

imode_flags

uint16_t flags

См. Интерпретация imode_flags

Табл. 18. Идентификаторы форматов сообщений
Числовое значение Текстовый эквивалент Описание

0

NONE

Прием или передачи отключены

1

BINARY

Бинарный формат

2

TEXT

Текстовый формат

3

CONSOLE

Консольный формат

4

RTCM3

Формат RTCM3

5

NMEA0183

Формат NMEA 0183

10

IMU_PGM_V

Прием данных ИИБ гирогоризонткомпасса PGM-V-024 производства ПАО “ПНППК”

11

IMU_OPTOLINK_501

Прием данных ИИБ БЧЭ501 производства ООО НПК “Оптолинк”. Блок должен функционировать в режиме II с выдачей угловых скоростей

Табл. 19. Интерпретация imode_flags
Бит Текстовый эквивалент Описание

0

RESPONSE

Если бит выставлен, то прибор генерирует ответ при получении сообщения на порт, см. RESPONSE. Также если rx_mode и tx_mode назначены CONSOLE, то в ответ на команды отправляется полный вид этой команды (после подстановки значений по умолчанию)

Прием ИИБ возможен только по последовательным портам COM1, COM2 и RS485.

Консольный формат:

INTERFACE_MODE port rx_mode tx_mode [RESPONSE]

Примеры:

INTERFACE_MODE ICOM1 CONSOLE CONSOLE RESPONSE
INTERFACE_MODE ICOM2 RTCM3 NONE
INTERFACE_MODE COM1 IMU_PGM_V NONE

6.2.5. IP_CONFIG

Настройка параметров сетевого адаптера.

Идентификатор: 21

Бинарный формат:

№ поля Имя Тип Описание

1

adapter

uint16_t enum

Настраиваемый адаптер, см. Значения adapter

2

adapter_mode

uint16_t enum

Режим адаптера, см. Значения adapter_mode

3

address

char[16]

Адрес в формате IPv4

4

reserved

uint16_t

5

mask

char[16]

Маска адреса в формате IPv4

6

reserved

uint16_t

7

gateway

char[16]

Шлюз в формате IPv4

8

reserved

uint16_t

Настройки не применяются сразу после выполнения команды. Требуется команда сохранения SAVE_IP_CONFIG и последующий перезапуск системы.

Табл. 20. Значения adapter
Числовое значение Текстовый эквивалент Описание

0

ETH0

Основной адаптер Ethernet

Табл. 21. Значения adapter_mode
Числовое значение Текстовый эквивалент Описание

0

STATIC

Параметры устанавливаются данной командой

1

DHCP

Параметры устанавливаются удаленным сервером DHCP

Консольный формат:

IP_CONFIG adapter adapter_mode [address [netmask [gateway]]]

Примечания:

  • Все опциональные поля можно не указывать в режиме DHCP. В режиме STATIC они должны являться корректным адресами IPv4

Примеры:

IP_CONFIG ETH0 STATIC 192.168.0.50 255.255.255.0 192.168.0.1
IP_CONFIG ETH0 DHCP

6.2.6. LOG

Активирует выдачу сообщений согласном одному из механизмов (определяется параметром trigger):

  • ONCE: сообщение выдается один раз и содержит текущую информацию. Если запрошенное сообщение еще не было сгенерировано в приборе, то ответ будет пустым. Используется для того, чтобы узнать текущие настройки или навигационное решение

  • ON_CHANGED: сообщение выдается каждый раз, когда его содержание изменяется. Может использоваться для мониторинга параметров, которые редко меняются

  • ON_TIME: сообщения выдается с заданным фиксированным периодом. Для сообщений содержащих навигационное решение с привязкой к спутниковому времени периодичность и выравнивание по секундам (с учетом параметра offset) производится по спутниковому времени. В этом случае решение будет иметь логическую задержку относительно реального времени не превосходящую период опроса ИИБ. Для всех остальных сообщений это делается по системному времени (параметр offset в этом случае не имеет эффекта). Это один из основных механизмов получения навигационного решения от прибора

  • ON_NEXT: выдается следующее появившееся сообщение запрошенного типа

  • ON_NEW: выдается каждое новое сообщение данного типа. Этот механизм может быть использован для получения навигационного решения на максимальной частоте. Логическая задержка типа ON_TIME при этом не возникает, однако решение не будет иметь строгой периодичности по времени (на уровне нестабильности частоты ИИБ)

  • ON_MARKx: сообщение выдается по физическому импульсу, поданному на импульсный вход x (x = 1, 2, 3). Используется для получения навигационного решения, точно привязанного к моменту времени входного импульса

Логирование ON_CHANGED и ON_NEW также сгенерирует текущее сообщение в приборе, аналогично триггеру ONCE.

Идентификатор: 9

Бинарный формат:

№ поля Имя Тип Описание

1

port

uint16_t enum

Порт для выдачи сообщения, см. Порты. Если он равен AUTO, то будет использоваться порт, по которому было получено данное сообщение

2

message

uint16_t enum

Идентификатор сообщения, см. Список сообщений

3

trigger

uint16_t enum

Триггер для выдачи сообщения, см. Триггеры выдачи сообщений

4

period

microseconds64_t

Для триггера ON_TIME период выдачи сообщений в микросекундах

5

offset

microseconds64_t

Для триггера ON_TIME смещение времени выдачи сообщения в пределах одного периода в микросекундах (только для сообщений, привязанных к спутниковому времени)

6

log_flags

uint16_t flags

См. Интерпретация log_flags

Примечания:

  • Если аргумент message является командой, то прибор выдает последовательность введенных уникальных команд с этим идентификатором

  • При отправке команды через TCP клиент со значением port = AUTO логи будут посылаться только для этого клиента

  • Величины period и offset для навигационных логов должны быть кратны 5000 мкс

Табл. 22. Триггеры выдачи сообщений
Числовое значение Текстовый эквивалент

0

ONCE

1

ON_CHANGED

2

ON_TIME

3

ON_NEXT

4

ON_NEW

10

ON_MARK1

11

ON_MARK2

12

ON_MARK3

Табл. 23. Интерпретация log_flags
Бит Текстовый эквивалент Описание

0

HOLD

Если бит выставлен, то лог не сбрасывается при вызове команды UNLOG_ALL

Консольный формат:

LOG [port] message [trigger] [period [offset]] [HOLD]

Примечания:

  • Если port не указан, то он назначается AUTO

  • Если trigger не указан, то используется триггер ONCE

  • Параметры period и offset указываются в секундах и нужны только при trigger равном ON_TIME

Примеры:

LOG SET_ROTATION
LOG COM1 PVA ON_TIME 1.0 0.5 HOLD
LOG ICOM1 PVA ON_NEW

6.2.7. IMPULSE_CONFIG

Настройка интерпретации входных импульсов на дискретных входах LOG_A, LOG_B, LOG_C.

Идентификатор: 23

Бинарный формат:

№ поля Имя Тип Описание

1

input_id

uint16_t

Идентификатор входа, может принимать значения 1, 2 или 3 (для LOG_A, LOG_B, LOG_C соответственно)

2

mode

uint16_t enum

Режим входа, см. Значения mode

3

polarity

uint16_t enum

Полярность сигнала, см. Значения polarity

4

time_bias

int16_t

Смещение метки времени события в микросекундах для режима MARK

5

time_guard

uint16_t

Время в микросекундах после обработки импульса, в течение которого последующие импульсы игнорируются

Табл. 24. Значения mode
Числовое значение Текстовый эквивалент Описание

0

OFF

Вход выключен

1

MARK

Использовать вход для регистрации событий типа "ON MARK"

2

COUNT

Использовать вход для подсчета импульсов с подключенного одометра с целью генерации сообщений DMI типа приращения пройденного пути. Применимо только для input_id 1 и 2. Если оба входа находятся в этом режиме, то включается квадратурный декодер для определения направления движения. Цену одного импульса в метрах требуется задать как масштабный коэффициент в команде DMI_CONFIG.

Табл. 25. Значения polarity
Числовое значение Текстовый эквивалент Описание

0

RISE

Событие по фронту импульса

1

FALL

Событие по спаду импульса

Консольный формат:

IMPULSE_CONFIG input_id mode [polarity] [time_bias [time_guard]]]

Примечания:

  • Параметр polarity назначается по умолчанию RISE

  • Параметры time_bias и time_guard назначаются по умолчанию нулями

Примеры:

IMPULSE_CONFIG 1 COUNT
IMPULSE_CONFIG 2 COUNT RISE
IMPULSE_CONFIG 3 MARK FALL 10 5

6.2.8. REMOVE_FILES

Удаляет файлы-логи, которые записываются с помощью команды FILE_CONFIG.

Идентификатор : 33

Бинарный формат:

№ поля Имя Тип Описание

1

media

uint16_t enum

Носитель для записи файлов, см. Значения media. Если значение OFF, то команда не имеет эффекта

Файлы, имена которых начинаются с серийного номера прибора, будут удалены.

Консольный формат:

REMOVE_FILES media

Примеры:

REMOVE_FILES INTERNAL

6.2.9. NTRIP_CONFIG

Настраивает работу NTRIP клиента для получения данных формата RTCM 3. После получения команды, периодически будут производиться попытки установить соединение с указанными параметрами.

Идентификатор: 10

Бинарный формат:

№ поля Имя Тип Описание

1

port

uint16_t enum

Порт для получения поправок, должен быть один из NCOMx, см. Порты

2

mode

uint16_t enum

Режим работы порта, см. Значения mode

3

reserved

uint16_t

Поле зарезервировано, но не используется

4

endpoint

char[82]

Сетевой адрес подключения в формате host:port. Значение host должно быть в формате IPv4

5

mountpoint

char[80]

Имя точки подключения

6

login

char[30]

Имя пользователя

7

password

char[30]

Пароль

Табл. 26. Значения mode
Числовое значение Текстовый эквивалент Описание

0

DISABLED

Порт не используется

1

CLIENT

Порт используется как NTRIP клиент

Консольный формат:

NTRIP_CONFIG [port] mode [endpoint [mountpoint [login [password]]]]

Примечания:

  • Значение port по умолчанию устанавливается NCOM1

  • Строковые параметры можно не указывать в режиме DISABLED.

  • Для корректного функционирования в режиме CLIENT требуется указать endpoint и mountpoint, а также login и password, если требуется авторизация

Примеры:

NTRIP_CONFIG NCOM1 DISABLED
NTRIP_CONFIG CLIENT 3.23.52.207:2101 A_CMS_01

6.2.10. NTRIP_TIMEOUT

Установка тайм-аута подключения NTRIP клиента. При отсутствии данных в течении указанного времени, происходит повторная попытка подключения.

Идентификатор: 11

Бинарный формат:

№ поля Имя Тип Описание

1

port

uint16_t enum

Порт NCOMx

2

timeout

uint16_t

Время в секундах

Консольный формат:

NTRIP_TIMEOUT [port] timeout

Примечания:

  • Если port не указан, то он назначается NCOM1

Примеры:

NTRIP_TIMEOUT 30

6.2.11. RESET

Команда осуществляет перезапуск.

Идентификатор: 12

Бинарный формат:

№ поля Имя Тип Описание

1

mode

uint16_t_enum

Способ перезапуска, см. Значения mode

Табл. 27. Значения mode
Числовое значение Текстовый эквивалент Описание

0

SOFT

Перезапуск только прикладного программного обеспечения. Системное время сбрасывается

1

HARD

Полная перезагрузка прибора, аналогичная выключению-включению электропитания

2

NAVIGATION

Перезапуск только навигационного алгоритма. Системное время не сбрасывается

3

FACTORY

Установка в начальное состояние (по умолчанию) всех настроек конфигурации кроме Ethernet. Изменения применяются после перезапуска (SOFT или HARD).

Особенности режимов SOFT и HARD:

  • Все изменения конфигурации, несохраненные в энергонезависимую память, будут утрачены

  • Сетевые соединения будут разорваны, подключение к прибору в режиме TCP_SERVER нужно будет выполнить заново

Консольный формат:

RESET [mode]

Примечания:

  • Если параметр mode не указан, то он назначается SOFT

Примеры:

RESET
RESET HARD

6.2.12. SAVE_CONFIG

Команда сохраняет в энергонезависимой памяти текущую конфигурацию прибора, исключая данные команды IP_CONFIG. Для последней необходима команда SAVE_IP_CONFIG.

Команда не принимает параметров.

Идентификатор: 13

6.2.13. SAVE_IP_CONFIG

Сохраняет текущую сетевую конфигурацию адаптера, заданную командой IP_CONFIG, в системных файлах. Изменения применяются после полной перезагрузки прибора (RESET с аргументом HARD).

Ошибочная конфигурация может привести к потере доступа к прибору по сетевому интерфейсу

Идентификатор: 14

Бинарный формат:

№ поля Имя Тип Описание

1

adapter

uint16_t enum

Сетевой адаптер, см. Значения adapter

Консольный формат:

SAVE_IP_CONFIG adapter

Примеры:

SAVE_IP_CONFIG ETH0

Идентификатор: 31

6.2.14. SERIAL_CONFIG

Конфигурация последовательного порта.

Идентификатор: 16

Бинарный формат:

№ поля Имя Тип Описание

1

port

uint16_t enum

Настраиваемый порт: один из COM1, COM2, RS485 или NMEA. См. Порты

2

baudrate

uint32_t

Скорость (бит/с) из ряда: 921600, 576000, 500000, 460800, 230400, 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1800, 1200, 600, 300, 200, 150, 134, 110, 75, 50

Консольный формат:

SERIAL_CONFIG port baudrate

Примеры:

SERIAL_CONFIG COM1 230400

6.2.15. UNLOG

Отменяет выдачу определенного лога по указанному порту.

Идентификатор: 17

Бинарный формат:

№ поля Имя Тип Описание

1

port

uint16_t enum

Идентификатор порта, см. Порты. Если значение соответствует AUTO, то выбирается порт, по которому была получена эта команда

2

message_id

uint16_t enum

Идентификатор сообщения, см. Список сообщений

Примечания:

  • При отправке команды через TCP клиент со значением port = AUTO команда будет применена только для данного клиента

Консольный формат:

UNLOG [port] message_id

Примечания:

  • Если port не указан, то назначается значение AUTO

Примеры:

UNLOG PVA
UNLOG ICOM1 DYNAMICS

6.2.16. UNLOG_ALL

Отменяет выдачу всех логов по указанному порту.

Идентификатор: 18

Бинарный формат:

№ поля Имя Тип Описание

1

port

uint16_t enum

Идентификатор порта, см. Порты. Если значение соответствует AUTO, то команда применяется ко всем портам

2

flags

uint16_t flags

См. Интерпретация флагов UNLOG_ALL

Табл. 28. Интерпретация флагов UNLOG_ALL
Бит Текстовый эквивалент

0

HOLD

Если бит выставлен, то логи помеченные флагом HOLD также будут отменены

Консольный формат:

UNLOG_ALL [port] [HOLD]

Примечания:

  • Если port не указан, то назначается значение AUTO

Примеры:

UNLOG_ALL COM1 HOLD
UNLOG_ALL

6.3. Команды навигационной конфигурации

6.3.1. SET_ROTATION

Задает ориентацию между системами координат в виде последовательности углов Эйлера (см. Углы Эйлера).

Для ориентации между транспортной и приборной системами (VEHICLE_IMU), также учитываются параметры точности задания ориентации. Обратите внимание, что эти точности задаются для осей исходной (транспортной) системы координат. Они должны отражать характерные величины ошибок углов крена, тангажа и курса транспортной системы за счет ошибок задания ориентации прибора относительно транспортной системы.

Для определения углов типа VEHICLE_IMU, когда оси прибора примерно параллельны осям транспортного средства, см. Графическая схема возможных стандартных ориентаций прибора в транспортном средстве.

Идентификатор: 1000

Бинарный формат:

№ поля Имя Тип Описание

1

rotation_type

uint32_t enum

Определяет системы координат, между которыми задается ориентация. См. Значения rotation_type

2

x

float

Угол поворота вокруг оси x в градусах

3

y

float

Угол поворота вокруг оси y в градусах

4

z

float

Угол поворота вокруг оси z в градусах

5

x_sd

float

Точность задания ориентации относительно оси x в исходной системе в градусах

6

y_sd

float

Точность задания ориентации относительно оси y в исходной системе в градусах

7

z_sd

float

Точность задания ориентации относительно оси z в исходной системе в градусах

Табл. 29. Значения rotation_type
Числовое значение Текстовый эквивалент Описание

0

VEHICLE_USER

Определяет ориентацию между транспортной и пользовательскими системами

1

VEHICLE_IMU

Определяет ориентацию между транспортной и приборной системами

10

VEHICLE_MARK1

Определяет ориентацию между транспортной системой и системой привязанной к событию MARK1

11

VEHICLE_MARK2

Определяет ориентацию между транспортной системой и системой привязанной к событию MARK2

12

VEHICLE_MARK3

Определяет ориентацию между транспортной системой и системой привязанной к событию MARK3

Консольный формат:

SET_ROTATION rotation_type x y z [x_sd [y_sd [z_sd]]]

Примечания:

  • Параметры x_sd, y_sd, z_sd назначаются по умолчанию 5 градусам

Примеры:

SET_ROTATION VEHICLE_IMU 3.0 -1.0 90.0 2.0 2.0 2.0

6.3.2. SET_TRANSLATION

Задает пространственное разнесение навигационных датчиков и систем координат. Компоненты пространственного разнесения задаются в транспортной системе координат в метрах.

Для разнесения между ИИБ до антенны и между антеннами (IMU_ANT1, ANT1_ANT2) учитываются параметры точности измерений.

Идентификатор: 1001

Бинарный формат:

№ поля Имя Тип Описание

1

translation_type

uint32_t enum

Определяет точки между которыми задается пространственное разнесение. См. Значения translation_type

2

x

float

Разнесение вдоль оси x транспортной системы координат в метрах

3

y

float

Разнесение вдоль оси y транспортной системы координат в метрах

4

z

float

Разнесение вдоль оси z транспортной системы координат в метрах

5

x_sd

float

Точность определения разнесения вдоль оси x транспортной системы координат в метрах

6

y_sd

float

Точность определения разнесения вдоль оси y транспортной системы координат в метрах

7

z_sd

float

Точность определения разнесения вдоль оси z транспортной системы координат в метрах

Табл. 30. Значения translation_type
Числовое значение Текстовый эквивалент Описание

0

IMU_USER

Разнесение между центром ИИБ и центром пользовательской СК

1

IMU_ANT1

Разнесение между центром ИИБ и фазовым центром первой антенны

2

IMU_DMI

Разнесение между центром ИИБ и точкой измерения одометрического датчика

3

ANT1_ANT2

Разнесение между фазовыми центром первой и второй антенн

10

IMU_MARK1

Разнесением между центром ИИБ и центром системы привязанной к событию MARK1

11

IMU_MARK2

Разнесением между центром ИИБ и центром системы привязанной к событию MARK2

12

IMU_MARK3

Разнесением между центром ИИБ и центром системы привязанной к событию MARK3

Консольный формат:

SET_TRANSLATION translation_type x y z [x_sd [y_sd [z_sd]]]

Примечания:

  • Параметры x_sd, y_sd, z_sd назначаются по умолчанию 0.2 м

Примеры:

SET_TRANSLATION IMU_ANT1 1.0 0.5 -2.0 0.1 0.1 0.05

6.3.3. SET_MOTION_PROFILE

Задает модель движения транспортного средства.

Идентификатор: 1002

Бинарный формат:

№ поля Имя Тип Описание

1

motion_profile

uint8_t enum

Определяет тип модели движения. См. Значения motion_profile

Табл. 31. Значения motion_profile
Числовое значение Текстовый эквивалент Описание

0

NONE

Не накладывает дополнительных ограничений на движение. Рекомендуется использовать, когда другие профили не подходят

1

CAR

Модель движения для наземного транспорта

2

BOAT

Модель движения для небольших судов

Консольный формат:

SET_MOTION_PROFILE motion_profile

Примеры:

SET_MOTION_PROFILE CAR

6.3.4. DMI_CONFIG

Задает масштабный коэффициент и задержку одометрических измерений.

Идентификатор: 1003

Бинарный формат:

№ поля Имя Тип Описание

1

reserved

uint32_t

Поле зарезервировано, но не используется

2

scale_factor

float

Масштабный коэффициент одометра: положительное значение единицы измерения в м/с для скорости и в метрах для перемещения

3

delay

float

Ожидаемая задержка поступления данных относительно реального времени в секундах в диапазоне от 0.0 до 0.5

Существует 4 способа передачи одометрических данных в прибор:

  1. Передача сообщения DMI по любому порту

  2. Подключение к сети CAN, см. CAN_CONFIG. При наличии нужных пакетов прибор будет генерировать сообщения DMI со скорость в м/с

  3. Передача сообщения VBW формата NMEA 0183. При наличии нужных полей в сообщении прибор будет генерировать сообщения DMI со скорость в м/с

  4. Получение приращений пройденного пути с помощью инкрементального энкодера, подключенного к входам LOG_A и/или LOG_B, см. IMPULSE_CONFIG. В этом случае прибор генерирует сообщения DMI с приращением пути в единицах цены импульса энкодера

Консольный формат:

DMI_CONFIG scale_factor delay

Примеры:

DMI_CONFIG 0.95 0.05

6.3.5. CALIBRATE

Обновляет конфигурацию по текущим оценкам алгоритма, см. Оценки параметров для автоматической калибровки.

Если требуется применить оба параметра TRANSLATION_ANT1_ANT2 и ROTATION_VEHICLE_IMU, то для этого нужно выполнить команду с аргументом ALL или GEOMETRY. В этом случае будет учтена коррекция ориентации между транспортной и приборной системами координат при вычислении обновленных компонент вектора между антеннами.

Поле safety_factor предназначено для того, чтобы избежать записи излишне оптимистичных значений среднеквадратичных отклонений и сохранить возможность алгоритма к адаптации. Рекомендуется использовать значение 3.

После выполнения, параметры команд SET_TRANSLATION, SET_ROTATION, DMI_CONFIG будут обновлены. Чтобы сохранить эти изменения выполните SAVE_CONFIG.

Выполнение команды не повлияет на текущую работу алгоритма.

Идентификатор: 1040

Бинарный формат:

№ поля Имя Тип Описание

1

calibration_parameter

uint32_t enum

Параметр или группа параметров по которым нужно обновить конфигурацию

2

safety_factor

float

Коэффициент (должен быть >= 1), на который умножатся оцененные среднеквадратичные отклонения при записи в конфигурацию

3

reserved

uint32_t

Зарезервированное поле

Табл. 32. Значения calibration_parameter
Числовое значение Текстовый эквивалент Описание

0

ALL

Применить все оценки

1

GEOMETRY

Применить геометрические оценки (TRANSLATION_ANT1_ANT2 и ROTATION_VEHICLE_IMU)

5

TRANSLATION_ANT1_ANT2

Применить оценку вектора между антеннами

6

ROTATION_VEHICLE_IMU

Применить оценку углов между транспортной и приборными системами

7

DMI_SCALE_FACTOR

Применить оценку масштабного коэффициента одометрического датчика

Консольный формат:

CALIBRATE [calibration_parameter] [safety_factor]

Примечания:

  • Параметр calibration_parameter назначается по умолчанию ALL

  • Параметр safety_factor назначается по умолчанию 3

Примеры:

CALIBRATE
CALIBRATE DMI_SCALE_FACTOR 3.0

6.4. Системные логи

6.4.1. CONFIG

Пакет сообщений, каждое из которых является командой текущей конфигурации. В число этих команд не входит конфигурация, задаваемая IP_CONFIG. При использовании триггера ON_CHANGED или ON_NEW логируется текущий список команд конфигурации, а также все последующие введенные команды.

Идентификатор: 2000

6.4.2. FILE_STATUS

Сообщение о состоянии записи лога в файл, см. FILE_CONFIG.

Идентификатор: 2001

Бинарный формат:

№ поля Имя Тип Описание

1

switch

uint16_t enum

Cм. Значения switch

2

size

uint32_t

Текущий размер файла в байтах

3

errno

int32_t

Код последней ошибки ОС Linux

4

name

char[]

Текущее имя файла

6.4.3. FILE_SYSTEM_CAPACITY

Лог содержит пакет сообщений, описывающих состояние файловых накопителей. Информация обновляется раз в секунду.

Информация о внутреннем накопителе (media = INTERNAL) выдается всегда, информация о SD-карте (media = SD_CARD) только если на неё осуществляется в данный момент запись.

Идентификатор: 2002

Бинарный формат:

№ поля Имя Тип Описание

1

media

uint16_t enum

Накопитель, см. Значения media

2

free_space

uint32_t

Объем свободного места в мегабайтах

3

total_space

uint32_t

Полный объем в мегабайтах

6.4.4. LOG_LIST

Пакет сообщений, содержащий текущий список активных логов в виде команд LOG. Допустимые триггеры логирования ONCE и ON_TIME.

Идентификатор: 2005

6.4.5. PORT_STATS

Пакет сообщений, каждое из которых содержит данные об использовании порта. Информация обновляется раз в секунду.

Идентификатор: 2007

Бинарный формат:

№ поля Имя Тип Описание

1

port

uint16_t enum

Идентификатор порта, см. Порты

2

in_count

uint32_t

Счетчик принятых байтов

3

out_count

uint32_t

Счетчик переданных байтов

6.4.6. VERSION

Сообщение содержит информацию о модели и версии прибора.

Идентификатор: 2009

Бинарный формат:

№ поля Имя Тип Описание

1

model

char[32]

Название модели

2

serial_number

char[32]

Серийный номер

3

hw_version

char[32]

Версия аппаратной части в формате “major.minor.patch”

4

hw_crc

uint32_t

Контрольная сумма исполняемого файла приложения микроконтроллера

4

sw_version

char[32]

Версия программного обеспечения в формате “major.minor.patch[+commit]”. Суффикс “commit” присутствует только для последних (“ночных”) сборок ПО, для релизных версий он отсутствует.

5

sw_crc

uint32_t

Контрольная сумма исполняемого файла основного навигационного приложения

6.4.7. USAGE_STATS

Статистика по использованию прибора.

Идентификатор: 2010

Бинарный формат:

№ поля Имя Тип Описание

1

total_runs

uint32_t

Число запусков навигационного приложения

2

total_hours

float

Полное время работы навигационного приложения в часах

6.4.8. TEXT_MESSAGE

Произвольное текстовое сообщение. Может передаваться в прибор по любому порту с целью его сохранения в файле-логе или ретрансляции в другой порт.

Идентификатор: 2100

Бинарный формат:

№ поля Имя Тип Описание

1

message

char[]

Текстовое сообщение

6.5. Навигационные логи

Логи выдаваемые по триггеру ON_MARKx выдаются для соответствующей системы координат. Логи выдаваемые по другим триггерам выдаются для пользовательской системы координат. См. Используемые системы координат.

6.5.1. PVA

Сообщение содержит позицию, скорость и ориентацию транспортного средства (Position Velocity Attitude).

Идентификатор: 3000

Бинарный формат:

№ поля Имя Тип Описание

1

time

GlobalTime

Время решения, см. Структура GlobalTime

2

filter_status

uint16_t enum

Статус работы фильтра, см. Значения filter_status и Пригодность компонент решения в зависимости от filter_status

3

position_type

uint16_t enum

Тип позиционного решения, см. Значения position_type

4

latitude

double

Географическая широта в градусах

5

longitude

double

Географическая долгота в градусах

6

altitude

float

Географическая высота в метрах (над поверхностью эллипсоида)

7

velocity_north

float

Компонента вектора скорости в северном направлении в м/с

8

velocity_east

float

Компонента вектора скорости в восточном направлении в м/с

9

velocity_down

float

Компонента вектора скорости в направлении вниз в м/с

10

roll

float

Угол крена в градусах

11

pitch

float

Угол тангажа в градусах

12

heading

float

Угол курса в градусах

13

distance

float

Пройденное расстояние с начала инициализации алгоритма в метрах

Табл. 33. Значения filter_status
Числовое значение Текстовый эквивалент Описание

0

NO_POSITION

Алгоритм не получил начальной позиции и не производит никаких вычислений

1

NO_ATTITUDE

Алгоритм в процессе определения начальной оценки углов тангажа и крена

2

AMBIGUOUS_HEADING

Алгоритм в процессе разрешения начального направления движения

3

NO_HEADING

Алгоритм работает без известного курса в локальной системе координат

4

CONVERGING

Алгоритм работает в полноценном режиме и сходится к оптимальной точности

5

FULL_ACCURACY

Алгоритм работает в полноценном режиме и достиг оптимальной точности

Табл. 34. Пригодность компонент решения в зависимости от filter_status
filter_status Позиция Скорость Крен и тангаж Курс Пройденное расстояние

NO_POSITION

Нет

Нет

Нет

Нет

Нет

NO_ATTITUDE

Ограниченно

Ограниченно

Нет

Нет

Нет

AMBIGUOUS_HEADING

Ограниченно

Ограниченно

Нет

Нет

Нет

NO_HEADING

Ограниченно

Ограниченно

Да

Нет

Да

CONVERGING

Да

Да

Да

Да

Да

FULL_ACCURACY

Да

Да

Да

Да

Да

Под ограниченной пригодностю позиции и скорости подразумевается использование решения GNSS приемника в точке антенны. При этом частота обновления не гарантируется (типично 1 Гц), разнесение антенны и запрошенной точки для решения не учитывается.

Табл. 35. Значения position_type
Числовое значение Текстовый эквивалент Описание

0

NONE

Позиционное решение отсутствует

1

DEAD_RECKONING

Позиционное решение вычислено с помощью инерциальной и одометрической информации

2

SPS

Спутниковое решение стандартной точности

3

SBAS

Спутниковое решение с использованием информации SBAS

4

SSR

Спутниковое решение с использованием сервиса коррекции для псевдодальностей

5

SSR_FLOAT

Спутниковое решение с использованием сервиса коррекции и действительными оценками фазовых неоднозначностей

6

SSR_FIXED

Спутниковое решение с использованием сервиса коррекции и разрешенными оценками фазовых неоднозначностей до целых

7

DGNSS

Спутниковое решение с использованием корректирующей информации с близлежащей базовой станции для псевдодальностей

8

RTK_FLOAT

Спутниковое решение с использованием корректирующей информации с близлежащей базовой станции с действительными оценками фазовых неоднозначностей

9

RTK_FIXED

Спутниковое решение с использованием корректирующей информации с близлежащей базовой станции и разрешенными оценками фазовых неоднозначностей до целых

6.5.2. PVA_SD

Сообщение содержит оценки точности (ожидаемые среднеквадратичные ошибки) для позиции, скорости и ориентации (Position Velocity Attitude Standard Deviation).

Идентификатор: 3001

Бинарный формат:

№ поля Имя Тип Описание

1

time

GlobalTime

Время решения, см. Структура GlobalTime

2

position_north_sd

float

Точность позиционного решения в северном направлении в метрах

3

position_east_sd

float

Точность позиционного решения в восточном направлении в метрах

4

position_down_sd

float

Точность позиционного решения в вертикальном направлении в метрах

5

velocity_north_sd

float

Точность северной компоненты скорости в м/с

6

velocity_east_sd

float

Точность северной компоненты скорости в м/с

7

velocity_down_sd

float

Точность вертикальной компоненты скорости в м/с

8

roll_sd

float

Точность угла крена в градусах

9

pitch_sd

float

Точность угла тангажа в градусах

10

heading_sd

float

Точность угла курса в градусах

11

distance_sd

float

Точность пройденного расстояния в метрах

Если навигационный параметр в данный момент не определяется (согласно логике работы алгоритма), то соответствующая характеристика точности будет иметь отрицательное значение.

6.5.3. DYNAMICS

Сообщение содержит оценки угловой скорости и ускорения транспортного средства, выраженных в осях пользовательской системы или системы привязанной к событию MARKx.

Угловая скорость определена относительно локальной горизонтальной системы. Это измерение угловой скорости ИИБ скомпенсированное на ошибки датчиков и угловую скорость вращения Земли.

Ускорение определено для центра соответствующей системы координат относительно локальной горизонтальной системы. Это измерение кажущегося ускорения ИИБ скомпенсированное на ошибки датчиков, силу тяжести и силу Кориолиса.

Угловая скорость и ускорение вычисляется при значениях поля filter_status равных NO_HEADING, CONVERGING и FULL_ACCURACY, см. PVA. В остальных случаях структура будет содержать нули.

Идентификатор: 3002

Бинарный формат:

№ поля Имя Тип Описание

1

time

GlobalTime

Время решения, см. Структура GlobalTime

2

angular_rate_x

float

Угловая скорость относительно оси x в град/с

3

angular_rate_y

float

Угловая скорость относительно оси y в град/с

4

angular_rate_z

float

Угловая скорость относительно оси z в град/с

5

acceleration_x

float

Ускорение вдоль оси x в м/с2

6

acceleration_y

float

Ускорение вдоль оси y в м/с2

7

acceleration_z

float

Ускорение вдоль оси z в м/с2

6.5.4. FULL_SOLUTION

Сообщения является объединением PVA, PVA_SD и DYNAMICS.

Идентификатор: 3003

Бинарный формат:

№ поля Имя Тип Описание

1

time

GlobalTime

Время решения, см. Структура GlobalTime

2

filter_status

uint16_t enum

Статус работы фильтра, см. Значения filter_status и Пригодность компонент решения в зависимости от filter_status

3

position_type

uint16_t enum

Тип позиционного решения, см. Значения position_type

4

latitude

double

Географическая широта в градусах

5

longitude

double

Географическая долгота в градусах

6

altitude

float

Географическая высота в метрах (над поверхностью эллипсоида)

7

velocity_north

float

Компонента вектора скорости в северном направлении в м/с

8

velocity_east

float

Компонента вектора скорости в восточном направлении в м/с

9

velocity_down

float

Компонента вектора скорости в направлении вниз в м/с

10

roll

float

Угол крена в градусах

11

pitch

float

Угол тангажа в градусах

12

heading

float

Угол курса в градусах

13

distance

float

Пройденное расстояние с начала инициализации алгоритма в метрах

14

position_north_sd

float

Точность позиционного решения в северном направлении в метрах

15

position_east_sd

float

Точность позиционного решения в восточном направлении в метрах

16

position_down_sd

float

Точность позиционного решения в вертикальном направлении в метрах

17

velocity_north_sd

float

Точность северной компоненты скорости в м/с

18

velocity_east_sd

float

Точность северной компоненты скорости в м/с

19

velocity_down_sd

float

Точность вертикальной компоненты скорости в м/с

20

roll_sd

float

Точность угла крена в градусах

21

pitch_sd

float

Точность угла тангажа в градусах

22

heading_sd

float

Точность угла курса в градусах

23

distance_sd

float

Точность пройденного расстояния в метрах

24

angular_rate_x

float

Угловая скорость относительно оси x в град/с

25

angular_rate_y

float

Угловая скорость относительно оси y в град/с

26

angular_rate_z

float

Угловая скорость относительно оси z в град/с

27

acceleration_x

float

Ускорение вдоль оси x в м/с2

28

acceleration_y

float

Ускорение вдоль оси y в м/с2

29

acceleration_z

float

Ускорение вдоль оси z в м/с2

6.5.5. PVA_COV

Сообщение содержит элементы матрицы ковариации для ошибок позиции, скорости и ориентации.

Матрица ковариации определена для 9 переменных (и имеет размер 9 * 9 = 81):

  1. Ошибки позиции в направлениях на север, восток и вертикально вниз, выраженные в метрах: \$p_n, p_e, p_d\$

  2. Ошибки скорости в направлениях на север, восток и вертикально вниз, выраженные в м/с: \$v_n, v_e, v_d\$

  3. Ошибки ориентации, как компоненты вектора малого поворота локальной горизонтальной системы вдоль направлений на север, восток и вертикально вниз, выраженные в радианах: \$a_n, a_e, a_d\$

Сообщение содержит элементы верхнетреугольной части матрицы, записанные в построчном порядке:

\$P = [[P_{p_n p_n}, P_{p_n p_e}, P_{p_n p_d}, P_{p_n v_n}, P_{p_n v_e}, P_{p_n v_d}, P_{p_n a_n}, P_{p_n a_e}, P_{p_n a_d}], [ , P_{p_e p_e}, P_{p_e p_d}, P_{p_e v_n}, P_{p_e v_e}, P_{p_e v_d}, P_{p_e a_n}, P_{p_e a_e}, P_{p_e a_d}], [ , , P_{p_d p_d}, P_{p_d v_n}, P_{p_d v_e}, P_{p_d v_d}, P_{p_d a_n}, P_{p_d a_e}, P_{p_d a_d}], [ , , , P_{v_n v_n}, P_{v_n v_e}, P_{v_n v_d}, P_{v_n a_n}, P_{v_n a_e}, P_{v_n a_d}], [ , , , , P_{v_e v_e}, P_{v_e v_d}, P_{v_e a_n}, P_{v_e a_e}, P_{v_e a_d}], [ , , , , , P_{v_d v_d}, P_{v_d a_n}, P_{v_d a_e}, P_{v_d a_d}], [ , , , , , , P_{a_n a_n}, P_{a_n a_e}, P_{a_n a_d}], [ , , , , , , , P_{a_e a_e}, P_{a_e a_d}], [ , , , , , , , , P_{a_d a_d}] ]\$

Если какая-то переменная не определяется алгоритмом (если filter_status не равен CONVERGING или FULL_ACCURACY), то соответствующий диагональный элемент (дисперсия) назначается равным -1, а все элементы кроссковариации с этой переменной назначаются равными 0.

Идентификатор: 3004

Бинарный формат:

№ поля Имя Тип Описание

1

time

GlobalTime

Время решения, см. Структура GlobalTime

2 — 46

cov_x_y

float

Элементы верхнетреугольной части матрицы ковариации в построчном порядке, всего 45 штук

Если требуется матрица ковариации для другого определения ошибок, то нужно воспользоваться преобразованием вида

\$P^prime = U P U^T,\$

где \$U\$ матрица преобразования ошибок размера 9 \$times\$ 9.

К примеру, если требуется ковариация для ошибок углов крена, тангаж и курса, то матрица преобразований имеет вид:

\$U_{PHI}^{RPY} = [[1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, -frac{cos psi}{cos vartheta}, -frac{sin psi}{cos vartheta}, 0], [0, 0, 0, 0, 0, 0, sin psi, -cos psi, 0], [0, 0, 0, 0, 0, 0, -cos psi tan vartheta, -sin psi tan vartheta, -1]]\$

Где \$psi\$ и \$vartheta\$ — углы курса и крена соответственно.

Если требуется ковариация для ошибок определенных вдоль осей локальной горизонтальной системы ENU (оси на восток, север и вертикально вверх), то матрица преобразований имеет вид:

\$U_{NED}^{ENU} = [[0, 1, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, -1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, -1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, -1]]\$

6.5.6. UNDULATION

Сообщение содержит значение возвышения геоида (среднего уровня моря) над эллипсоидом в текущем географическом месте.

Соотношение между высотами имеет вид:

\$h_e = h_g + Delta h\$

Где

  • \$h_e\$ — высота над поверхностью эллипсоида, содержащееся в логах PVA и FULL_SOLUTION

  • \$h_g\$ — высота над поверхностью геоида

  • \$Delta h\$ — возвышение геоида над эллипсоидом, содержащееся в данном логе

Поскольку значение возвышения мало изменяется при небольшом изменении координат и сама модель носит приближенный характер, то точной синхронизации между определяемой высотой и возвышением не требуется.

Используются данные EGM2008 с разрядностью географической сетки в 1 градус. Информация в сообщении обновляется раз в секунду.

Идентификатор: 3015

Бинарный формат:

№ поля Имя Тип Описание

1

undulation

float

Возвышение геоида над эллипсоидом

6.5.7. LAST_TIME_PULSE

Сообщение содержит глобальное время для последнего выданного PPS импульса. Оно может быть использовано для синхронизации пользовательских часов со спутниковым временем.

Идентификатор: 3020

Бинарный формат:

№ поля Имя Тип Описание

1

time

GlobalTime

Время последнего PPS импульса, см. Структура GlobalTime

6.5.8. FILTER_UPDATES

Сообщение содержит информацию об использовании источников навигационной информации в течении последней секунды. Интерпретация значений указана в Значения полей сообщения FILTER_UPDATES.

Идентификатор: 3030

Бинарный формат:

№ поля Имя Тип Описание

1

gnss_position_update

uint8_t enum

Статус использования позиционного решения ГНСС приемника

2

gnss_velocity_update

uint8_t enum

Статус использования скоростного решения ГНСС приемника

3

gnss_raw_update

uint8_t enum

Статус использования сырых измерений ГНСС приемника

4

dual_antenna_update

uint8_t enum

Статус использования двухантенного курса

5

dmi_update

uint8_t enum

Статус использования одометрической информации

6

motion_model_update

uint8_t enum

Статус использования модели движения

7

zero_velocity_update

uint8_t enum

Статус использования информации о нулевой скорости

8

zero_rate_update

uint8_t enum

Статус использования информации о нулевой угловой скорости

Табл. 36. Значения полей сообщения FILTER_UPDATES

Числовое значение

Текстовый эквивалент

Описание

0

NA

Информация не поступала в прибор

1

UNUSUED

Информация поступала, но не обрабатывалась согласно логике или специфическими настройками алгоритма

2

REJECTED

Информация была отбракована, как недостоверная

3

PARTIALLY_ACCEPTED

Информация была использована частично

4

ACCEPTED

Информация была использована полностью

6.5.9. RTCM3_STATUS

Сообщение содержит данные о работе базовой станции, транслирующей данные в формате RTCM 3.

Идентификатор : 3031

Бинарный формат

№ поля Имя Тип Описание

1

base_station_id

int16_t

Идентификатор базовой станции (передается в сообщениях 1005 и 1006 протокола RTCM 3). Отрицательное значение означает, что идентификатор базовой станции не был получен

2

correction_age

int16_t

Число секунд с момента актуальности последних полученных ГНСС измерений (возраст поправок), округленное до целых. Отрицательное значение означает, что данных не было, либо возраст превысил \$2^15 - 1\$ секунд

3

distance_km

float

Расстояние между базовой станцией и навигационной системой (ровером) в километрах. Отрицательное значение означает, что расстояние определить невозможно (неизвестна позиция базовой станции или ровера)

4

signals

char[]

Список ГНСС сигналов в последнем наборе измерений. Описание формата смотрите ниже

Список сигналов представлен в виде строки переменной длины. Например следующего содержания:

G:1C,2L;E:1C;C:2I,7I;R:1C,2C

Строка состоит из блоков формата система:сигнал1,сигнал2,…​, разделенных символом ;. Обозначение систем и сигналов согласно формату RINEX. Возможность использования сигнала определяется наличием его кода в Коды RINEX совместимых ГНСС сигналов. Для двухчастотного RTK требуется наличие совместимых сигналов на двух разных частотах (определяется первой цифрой).

6.6. Оценки параметров для автоматической калибровки

Данная группа содержит оценки параметров, нарабатываемые алгоритмом, которые могут быть затем применены для уточнения конфигурации с помощью команды CALIBRATE.

6.6.1. TRANSLATION_ANT1_ANT2

Оценка компонент вектора между первой и второй антенной, выраженного в транспортной системе координат. Это уточненные значения параметров, задаваемых командой SET_TRANSLATION c аргументом ANT1_ANT2.

Упомянутые ниже углы возвышения и азимута измеряются относительно транспортной системы. По их точности можно судить о степени полезности двухантенных измерений для определения ориентации системой.

Идентификатор: 3041

Бинарный формат:

№ поля Имя Тип Описание

1

x

float

Оценка компоненты x в метрах

2

y

float

Оценка компоненты y в метрах

3

z

float

Оценка компоненты z в метрах

4

x_sd

float

Оценка точности компоненты x в метрах

5

y_sd

float

Оценка точности компоненты y в метрах

6

z_sd

float

Оценка точности компоненты z в метрах

7

elevation_sd

float

Оценка точности угла возвышения вектора в градусах

8

azimuth_sd

float

Оценка точности угла азимута вектора в градусах

6.6.2. ROTATION_VEHICLE_IMU

Оценка углов ориентации между транспортной и приборной системами (см. Углы Эйлера). Это уточненные значения параметров, задаваемых командой SET_ROTATION с аргументом VEHICLE_IMU.

Возможность оценки углов обеспечивается учетом модели движения (см. SET_MOTION_PROFILE):

  • Для профиля NONE оценка производится не будет

  • Для профиля CAR углы поворота относительно боковой и вертикальной осей автомобиля эффективно уточняются, а угол поворота относительно продольной оси машины не может быть уточнен. Это будет отражаться в том, что только значения y_sd и z_sd будут уменьшаться.

Идентификатор: 3042

Бинарный формат:

№ поля Имя Тип Описание

1

x

float

Оценка угла x в градусах

2

y

float

Оценка угла y в градусах

3

z

float

Оценка угла z в градусах

4

x_sd

float

Оценка точности ориентации относительно оси x транспортной системы в градусах

5

y_sd

float

Оценка точности ориентации относительно оси y транспортной системы в градусах

6

z_sd

float

Оценка точности ориентации относительно оси z транспортной системы в градусах

6.6.3. DMI_SCALE_FACTOR

Оценка масштабного коэффициента одометрического датчика. Это уточнённое значение соответствующего параметра команды DMI_CONFIG.

Идентификатор: 3043

Бинарный формат:

№ поля Имя Тип Описание

1

value

float

Оценка масштабного коэффициента

2

sd

float

Оценка точности

6.7. Навигационные логи в формате NMEA 0183

См. Формат NMEA 0183 про используемые соглашения. Сообщения генерируются только, если все содержащиеся в них параметры уже определяются навигационным алгоритмом.

6.7.1. GGA

Время, координаты, тип решения, информация о спутниках и базовой станции.

Формат:

       1          2           3 4            5 6 7  8   9  10 11 12 13  14
       |          |           | |            | | |  |   |   | |   | |   |
$GNGGA,hhmmss.sss,ddmm.mmmmmm,a,dddmm.mmmmmm,a,x,xx,x.x,x.x,M,x.x,M,xxx,xxxx*hh<CR><LF>
№ поля Описание

1

Время суток UTC

2

Широта в градусах и минутах

3

Индикатор полушария для широты: 'N' — северное, 'S' — южное

4

Долгота в градусах и минутах

5

Индикатор полушария для долготы: 'E' — восточное, 'W' — западное

6

Тип решения:

  • 0 — нет решения

  • 1 — спутниковое решение стандартной точности

  • 2 — спутниковое решение с дифференциальными поправками

  • 4 — спутниковое решение RTK

  • 5 — спутниковое решение float RTK

  • 6 — одометричекое решение

7

Количество используемых спутников

8

Параметр горизонтальной точности (HDOP)

9

Высота относительно геоида (среднего уровня моря) в метрах

10

'M' - метры

11

Возвышение геоида над эллипсоидом в метрах

12

'M' - метры

13

Возраст поправок в секундах (присутствует если используется дифференциальное позиционирование)

14

Идентификатор базовой станции (присутствует если используется дифференциальное позиционирование)

6.7.2. GLL

Время, широта, долгота, статус и тип решения.

Формат:

       1           2 3            4 5          6 7
       |           | |            | |          | |
$GNGLL,ddmm.mmmmmm,a,dddmm.mmmmmm,a,hhmmss.sss,a,m*hh<CR><LF>
№ поля Описание

1

Широта в градусах и минутах

2

Индикатор полушария для широты: 'N' — северное, 'S' — южное

3

Долгота в градусах и минутах

4

Индикатор полушария для долготы: 'E' — восточное, 'W' — западное

5

Время суток UTC

6

Статус решения: 'A' — имеется спутниковое решение, 'V' — спутниковое решение отсутствует

7

Тип решения:

  • 'N' — нет решения

  • 'A' — спутниковое решение стандартной точности

  • 'D' — спутниковое решение с дифференциальными поправками

  • 'E' — одометрическое решение

6.7.3. GNS

Время, координаты, тип решения, информация о спутниках и базовой станции.

Формат:

       1          2           3 4            5 6    7  8   9   10  11  12   13
       |          |           | |            | |    |  |   |   |   |   |    |
$GNGNS,hhmmss.sss,ddmm.mmmmmm,a,dddmm.mmmmmm,a,xxxx,xx,x.x,x.x,x.x,xxx,xxxx,V*hh<CR><LF>
№ поля Описание

1

Время суток UTC

2

Широта в градусах и минутах

3

Индикатор полушария для широты: 'N' — северное, 'S' — южное

4

Долгота в градусах и минутах

5

Индикатор полушария для долготы: 'E' — восточное, 'W' — западное

6

Тип решения, повторенный для каждого из четырех созвездий:

  • 'N' — нет решения

  • 'A' — спутниковое решение стандартной точности

  • 'D' — спутниковое решение с дифференциальными поправками

  • 'R' — спутниковое решение RTK

  • 'F' — спутниковое решение float RTK

  • 'E' — одометрическое решение

7

Количество используемых спутников

8

Параметр горизонтальной точности (HDOP)

9

Высота относительно геоида (среднего уровня моря) в метрах

10

Возвышение геоида над эллипсоидом в метрах

11

Возраст поправок в секундах (присутствует если используется дифференциальное позиционирование)

12

Идентификатор базовой станции (присутствует если используется дифференциальное позиционирование)

13

Фиксированное поле 'V', обозначающее, что прибор не предоставляет данных о безопасности использования данных

6.7.4. GST

Время, параметры эллипса ковариации горизонтальных ошибок и точности оценки координат.

Формат:

       1           2    3    4    5    6    7
       |           |    |    |    |    |    |
$GNGST,hhmmss.sss,,x.xx,x.xx,x.xx,x.xx,x.xx,x.xx*hh<CR><LF>
№ поля Описание

1

Время суток UTC

2

Большая полуось эллипса ошибок в метрах

3

Малая полуось эллипса ошибок в метрах

4

Угол между направлением на север и большой осью эллипса ошибок в градусах

5

Стандартное отклонение широты в метрах

6

Стандартное отклонение долготы в метрах

7

Стандартное отклонение высоты в метрах

6.7.5. HDT

Угол курса.

Формат:

       1   2
       |   |
$GNHDT,x.x,T*hh<CR><LF>
№ поля Описание

1

Истинный курс в градусах

2

Фиксированное поле 'T', обозначающее, что выдается истинный курс

6.7.6. HPR

Истинный курс, тангаж и крен. Предложение не входит в стандарт NMEA 0183.

Формат:

       1   2    3
       |   |    |
$GNHPR,x.x,x.xx,x.xx*hh<CR><LF>
№ поля Описание

1

Истинный курс в градусах

2

Тангаж в градусах (угол килевой качки)

3

Крен в градусах (угол бортовой качки)

6.7.7. RMC

Рекомендованный минимальный набор данных: время и дата, широта, долгота, скорость, путевой угол, статус и тип решения.

Формат:

       1          2 3           4 5            6 7   8   9       10 11
       |          | |           | |            | |   |   |        | |
$GNRMC,hhmmss.sss,x,ddmm.mmmmmm,a,dddmm.mmmmmm,a,x.x,x.x,ddmmyy,,,x,V*hh<CR><LF>
№ поля Описание

1

Время суток UTC

2

Статус решения: 'A' — имеется спутниковое решение, 'V' — спутниковое решение отсутствует

3

Широта в градусах и минутах

4

Индикатор полушария для широты: 'N' — северное, 'S' — южное

5

Долгота в градусах и минутах

6

Индикатор полушария для долготы: 'E' — восточное, 'W' — западное

7

Скорость в узлах

8

Путевой угол в градусах

9

Дата UTC

10

Тип решения:

  • 'N' — нет решения

  • 'A' — спутниковое решение стандартной точности

  • 'D' — спутниковое решение с дифференциальными поправками

  • 'E' — одометрическое решение

11

Фиксированное поле 'V', обозначающее, что прибор не предоставляет данных о безопасности использования данных

6.7.8. ROT

Угловая скорость поворота.

Формат:

       1   2
       |   |
$GNROT,x.x,A*hh<CR><LF>
№ поля Описание

1

Угловая скорость поворота относительно вертикальной оси в градус/мин

2

Фиксированное поле 'A', которое обозначает, что данные достоверны

6.7.9. THS

Угол истинного курса.

Формат:

       1   2
       |   |
$GNTHS,x.x,A*hh<CR><LF>
№ поля Описание

1

Истинный курс

2

Фиксированное поле 'A', которое обозначает, что данные достоверны

6.7.10. VTG

Путевой угол, скорость и тип решения.

Формат:

       1   2    3   4  5  6 7
       |   |    |   |  |  | |
$GNVTG,x.x,T,,M,x.x,N,x.x,K,m*hh<CR><LF>
№ поля Описание

1

Путевой угол в градусах

2

Фиксированное поле 'T', обозначающее, что путевой угол действительно определяется

3

Скорость в узлах

4

'N' — узлы

5

Скорость в км/ч

6

'K' — км/ч

7

Тип решения:

  • 'N' — нет решения

  • 'A' — спутниковое решение стандартной точности

  • 'D' — спутниковое решение с дифференциальными поправками

  • 'E' — одометрическое решение

6.7.11. ZDA

Время и дата.

Формат:

       1          2  3  4
       |          |  |  |
$GNZDA,hhmmss.sss,xx,xx,xxxx,,*hh<CR><LF>
№ поля Описание

1

Время суток UTC

2

День месяца UTC

3

Месяц UTC

4

Год UTC

6.8. Входные навигационные сообщения

Эти сообщения содержат входную навигационную информацию, которая используется алгоритмом для обновления навигационного решения. По умолчанию все сообщения из этой категории передаются в навигационный алгоритм, что описывается следующими командами:

LOG ALGO RAW_SENSOR ON_NEW HOLD
LOG ALGO DMI ON_NEW HOLD
LOG ALGO EXT_IMU ON_NEW HOLD
LOG ALGO RTCM3 ON_NEW HOLD

Отключить использование сообщений в алгоритме можно командой UNLOG ALGO …​. Например, если в систему поступают данные от внешнего ИИБ, но требуется, чтобы система работала по сигналам встроенного ИИБ, то нужно выполнить:

UNLOG ALGO EXT_IMU
Отключение отправки RAW_SENSOR в порт ALGO приведет к пропаже навигационного решения.

Логирование сообщений из этой категории позволит воспроизвести работу алгоритма по логу, выявить и устранить возможные проблемы. По умолчанию все сообщения из этой категории логируются в файл:

LOG FILE RAW_SENSOR ON_NEW HOLD
LOG FILE DMI ON_NEW HOLD
LOG FILE EXT_IMU ON_NEW HOLD
LOG FILE RTCM3 ON_NEW HOLD

6.8.1. RAW_SENSOR

Содержит измерения внутренних датчиков прибора. Целесообразно логировать сообщения этого типа, для возможности воспроизвести работу навигационного алгоритма в случае возникновения проблем. Содержание этого сообщения не раскрывается.

Идентификатор: 4000

Бинарный формат:

№ поля

Имя

Тип

Описание

1

data

byte[]

Бинарное содержание сообщения

6.8.2. DMI

Измерения одометрического датчика. Сообщение генерируется автоматически при получении информации из CAN-шины, сообщения VBW (NMEA 0183) или импульсных входов. Также оно может передаваться в цифровом виде через любой порт. Настройка осуществляется командой DMI_CONFIG.

Идентификатор: 4001

Бинарный формат:

№ поля Имя Тип Описание

1

dmi_flags

uint32_t enum

См. Интерпретация dmi_flags

2

value

float

Измерение датчика

Табл. 37. Интерпретация dmi_flags
Бит Текстовый эквивалент Интерпретация

0

DIRECTED

Если бит выставлен, то измерение получено с определением направления движения, так что отрицательные числа интерпретируются как движение задним ходом. Иначе используется модуль измерения, а направление движения определяется автоматически

1

SPEED или INCREMENT

Если бит выставлен, то измерение интерпретируется, как приращение пути, иначе как скорость

6.8.3. EXT_IMU

Данные внешнего ИИБ. Генерируется системой при получении полного пакета данных с подключенного внешнего ИИБ.

Идентификатор: 4002

Бинарный формат:

№ поля Имя Тип Описание

1

format

uint16_t enum

Формат данных для идентификации модели ИИБ. См. Идентификаторы форматов сообщений

2

data

byte[]

Поле переменного размера, содержащее полный пакет ИИБ

6.8.4. RTCM3

Сообщения RTCM3. Генерируются системой при выделении одного валидного сообщения из потока RTCM3.

Идентификатор: 4003

Бинарный формат:

№ поля Имя Тип Описание

1

number

uint16_t

Номер сообщения согласно протоколу RTCM3

2

data

byte[]

Полное сообщение, начиная с заголовочных бит и заканчивая контрольной суммой

6.8.5. CAN_FRAME

Кадр CAN. Генерируются системой при получении одного валидного кадра из CAN сети транспортного средства.

Идентификатор: 4004

Бинарный формат:

№ поля Имя Тип Описание

1

can_type

uint8_t enum

См. Значения can_type

2

id

uint32_t

Идентификатор сообщения

2

data

byte[]

Содержание сообщения размером до 8 байт

Табл. 38. Значения can_type
Числовое значение Текстовый эквивалент Описание

0

CAN_A

Тип CAN 2.0A с 11-битным идентификатором

1

CAN_B

Тип CAN 2.0B с 29-битным идентификатором

7. История версий ПО

Изменения, создающие обратную несовместимость, могут вноситься до версии 1.0.0. При этом принимается во внимание соотношение между полезностью и нужностью таких изменений и неудобствами, которые они создают, учитывая насколько широко использовалась та или иная возможность пользователями. После версии 1.0.0 такие изменения будут вноситься только в исключительных ситуациях.

Изменения, касающиеся пакета для постобработки, описываются в соответствующем руководстве.

Версия 0.20.0

  • Добавлен протокол ISO_15765_11_MONITOR в команде CAN_CONFIG

  • Добавлен профиль движения BOAT в команде SET_MOTION_PROFILE

  • Улучшена стабильность работы NTRIP-клиента

  • Добавлена поддержка CAN протокола RENAULT

Версия 0.19.0 от 01.05.2024

  • Добавлена логика переименования файлов с неверным временем и датой в имени при получении правильного времени UTC, см FILE_CONFIG

Версия 0.18.0 от 21.02.2024

  • Добавлена поддержка CAN протокола LADA_VESTA

  • Реализована защита от переполнения основного диска файлами логов

  • Добавлено сообщение TEXT_MESSAGE

Версия 0.17.0 от 23.10.2023

  • Улучшена логика обработки сообщений DMI с приращением пути

  • Улучшена логика определения и обработки остановки транспортного средства

  • Изменена схема указания версии ПО: релизные версии не содержат больше хеш-кода коммита

Версия 0.16.1 от 07.09.2023

  • Исправлена техническая ошибка с формированием сообщения CAN_FRAME

Версия 0.16.0 от 05.09.2023

  • Реализован алгоритм автономного определения остановки для автомобилей, который позволяет стабилизировать решение в случае пропажи сигналов ГНСС и отсутствия одометрического датчика

  • Существенно улучшена производительность вычислений в реальном времени. Вероятность кратковременных переходов решения в режим DEAD_RECKONING из-за задержки вычислений существенно снижена

  • Устранены некоторые недочеты и ошибки в формировании навигационного решения и общей функциональности

Версия 0.15.0 от 04.08.2023

  • Реализована обработка сигналов геостационарных спутников Beidou (C01-C05, C59-C63). Для активации требуется обновление прошивки навигационных приемников

  • Добавлен лог USAGE_STATS, который содержит общее время работы и число запусков системы

  • Устранена ошибка с выдачей “пустых” кодов сигналов в логе RTCM3_STATUS

  • Улучшена стабильность установки соединений типа UDP и TCP_SERVER

Версия 0.14.1 от 27.03.2023

  • Исправлена ошибка при выключении или смене соединения в NTRIP_CONFIG

Версия 0.14.0 от 16.03.2023

  • Добавлен лог RTCM3_STATUS

  • Добавлен лог PVA_COV

  • Уточнена и исправлена логика, управляемая командой IMPULSE_CONFIG

  • Улучшена логика работы NTRIP-клиента, когда сообщения отправляются на NTRIP-кастер для режима “network RTK”

  • Исправлены некоторые технические ошибки

Версия 0.13.2 от 20.12.2022

  • Улучшена логика инициализации алгоритма в движении для профиля CAR

Версия 0.13.1 от 07.11.2022

Версия 0.13.0 от 24.10.2022

  • Добавлена возможность отправки сообщений в порты NCOMx — это может потребоваться для работы в режиме “network RTK”. Для реализации этой возможности, порты NCOMx должны настраиваться командой INTERFACE_MODE

  • Реализована поддержка переключения базовой станции RTCM при работе алгоритма. Смена базовой станции детектируется по изменению её идентификатора, при этом состояние алгоритма связанное с RTK обнуляется

  • Исправлены некоторые технические ошибки

    Версия 0.12.0 от 16.10.2022

    В этой версии основное навигационное приложение было существенно переработано. Алгоритм получения навигационного решения и основные навигационные логи и команды конфигурации не поменялись. Список изменений и причин для их внесения приведен в таблице ниже.

Табл. 39. Список изменений в версии 0.12.0
Изменение Причина

Форматы сообщений

Поля по умолчанию в бинарных сообщения больше не поддерживаются, сообщения должны передаваться со всеми полями

Данная возможность ничего принципиального не добавляла, фиксированный размер и структура бинарного сообщения уменьшают возможность ошибок и неясных моментов

Специальная логика обработки полей сообщений убрана

Пример такой логики — использование старых значений, если какое-то поле передано пустым. Такой подход создавал зависимость обработки команды от текущего состояния системы, что усложняет концепцию системы и реализацию. Помимо этого такая логика не давала существенных плюсов или удобства

Текстовые сообщения должны содержать все поля, пропуск полей не разрешен

Это делает соответствие между бинарным и текстовым форматом более явным. Текстовый формат выступает, как 1-к-1 текстовое представление бинарного формата

Входящие текстовые сообщения должны иметь поле времени, однако его можно оставить пустым

Мотивация аналогичная предыдущему пункту. Различное число полей во входящих и исходящих сообщений является дополнительным фактором неопределенности

Отдельные слова в представлении переменных-масок в текстовом и консольном форматах разделяются символом |, а не пробелом

Пробел используется для разделения токенов в консольном формате, что делает его использование внутри токена неудобным

В выходном формате консольных сообщений убрано двоеточие между именем сообщения и содержанием

Это уменьшает различие между входным и выходным форматом. В частности позволяет скопировать часть выходного сообщения и без редактирования отправить его снова в прибор

Формат JSON убран

Формат в данный момент не востребован

Сообщения NMEA

Команды конфигурации формата NMEA сообщений были убраны. Используются разумные настройки по умолчанию

Необходимость и структура этих команд нуждается в проработке

Сообщения следуют стандарту 4.10

Использование фиксированного современного формата выглядит рациональным

Префикс GN в именах сообщений убран

Это упрощает ввод и читаемость имен сообщений

Сообщения GSA и GSV убраны

Востребованность подобных сообщений в формате NMEA вызывает большие сомнения

Порядок полей в сообщение HPR изменен на "курс-тангаж-крен"

Это лучше соответствует мнемонике названия

Высота относительно уровня моря вычисляется с учетом возвышения геоида над эллипсоидом

Это требуется согласно формату сообщений NMEA

Заполняется поле со значением возвышения геоида над эллипсоидом

Т. к. эта информация теперь вычисляется прибором, то имеет смысл заполнить это поле

Поддержка внешних ИИБ

Команда EXT_IMU_CONFIG убрана, настройка приема осуществляется через команду INTERFACE_MODE

Предыдущая реализация требовала настройки приема через 2 вышеупомянутые команды, новая схема логичней и проще

Первое поле в сообщении EXT_IMU является теперь форматом сообщения

Это следует из предыдущего пункта

Пакеты внешних ИИБ сохраняются полностью, без исключения вспомогательных байт

Это уменьшает возможность запутаться в организации данных

Формат файлов конфигурации

Файлы конфигурации сохраняются с расширением .txt и содержат команды в консольном формате

Использование формата YAML требовало дополнительно логики и не привносило ничего принципиально полезного

Запись логов в файл

Если имя файла не указано, то файл создается и при отсутствии верифицированного времени в ОС

Такое поведение выглядит более предпочтительным, чем отсутствующий файл

Файл может записываться в текстовом формате, конфигурация осуществляется через INTERFACE_MODE

Эта возможность естественно следует из общего дизайна системы

Команда FILE_ROTATE_CONFIG убрана, максимальный размер файла установлен равным 2 ГБ

Предложенная логика ротации файлов с ограничением размера в 2 ГБ кажется достаточной для всех практических ситуаций

Работа через консоль

Поддержка редактирования строки на стороне сервера убрана

Редактирование строки на стороне сервера может создавать задержки в отображении текста, также этот функционал требует существенных усилий для корректной реализации и поддержки

Команда ECHO убрана

Отображение вводимых символов поддерживается в большинстве терминалах

Изменения в структуре бинарных сообщений

В ICOM_CONFIG сетевой адрес и порт хранится одним текстовым полем

Это позволяет универсально задать точку подключения для любого режима работы сетевого соединения. Ввод этого параметра в консольном и текстовом форматах реализован стандартным единообразным образом

В DMI_CONFIG первое поле "dmi_source" теперь игнорируется (оно считается зарезервированным)

Указание источника одометрических данных выглядит избыточным, поскольку сложно придумать ситуацию, когда этих источников будет несколько. Это избавляет от необходимости вводить команду DMI_CONFIG если не нужно изменять параметр масштабного коэффициента или задержки

Возможные значения в сообщении RESPONSE обновлены (0 по прежнему означает успешное принятие сообщения)

Новый набор значений более логично отражает возможные ситуации ошибок

Изменения в текстовых сообщений

Название порта SPEED изменено на NMEA

Новое название более подходящее

Функционал USB

Описание функционала USB, соответствующие команды и поля были убраны

В настоящий момент USB не реализован

Функционал CAN

Убрана поддержка протоколов J1939, NMEA2000, ISO15765

Это довольно сложный функционал, который нужно дополнительно верифицировать. Также его востребованность под вопросом

Убрана возможность отправлять навигационные логи в CAN сеть

Возможность опиралась на протоколы J1939 и NMEA2000

Убраны сообщения CCOM_CONFIG, J1939_CONFIG, J1939_STATUS

Следует из предыдущих пунктов

Туннельный режим портов

Возможность задавать туннельный режим порта в INTERFACE_MODE убрана

Эта возможность не выглядит необходимой для пользователя, её реализация достаточно сложная

Команда TUNNEL_ESCAPE убрана

Следует из предыдущего пункта

Конфигурация импульсных входов

Команды MARK_CONTROL и PULSE_CONFIG убраны, вместо этого предложена команда IMPULSE_CONFIG

IMPULSE_CONFIG позволяет настроить все нужные параметры более удобным и понятным способом. Частота генерации приращений пути зафиксирована на 1 Гц

Протокол UDP

Принимающий порт UDP назначается явно в поле endpoint команды ICOM_CONFIG

Это позволяет настроить порты UDP произвольным образом без всяких ограничений

Прочие убранные сообщения

Сообщение HELP

Поддерживать качественное описание функционала в разных местах достаточно трудно. Это сообщение может быть восстановлено в будущем

Сообщение UPTIME

Время работы прибора содержится в поле системного времени любого сообщения. Сообщение выглядит избыточным

Новые сообщения

Добавлено сообщение UNDULATION, которое содержит значение возвышения геоида над эллипсоидом

Данная информация требуется для корректного заполнения сообщений NMEA, поэтому её необходимо вычислять в приборе. Отдельное сообщение может быть полезно, если требуется получать высоту относительно среднего уровня моря в данной точке при использовании проприетарных сообщений

Добавлено сообщение RTCM3. Сообщение содержит номер сообщение согласно протоколу RTCM3, как первое поле

Это позволяет следить, какие сообщения с базовой станции поступают в прибор. Также это следует концепции выделения содержательного сообщения из сырого потока аналогично сообщению DMI

Добавлено сообщение CAN_FRAME, которое содержит выделенные кадры из CAN сети

Это позволяет следить за работой CAN сети, собирать оттуда данные для последующего анализа

Помимо изменений интерфейсной части были исправлены некоторые ошибки в генерации навигационного решения.

Версия 0.11.2 от 02.08.2022

  • Улучшена работа сетевых соединение в режиме NTRIP и TCP клиентов

  • Добавлены логи [ICOM_STATUS] и [NCOM_STATUS]

  • Время представляемое в бинарном формате в микросекундах выдается с 6 цифрами после запятой в текстовом формате

  • Изменена разрядность выдачи чисел с плавающей точкой в текстовом формате:

    • Поля типа double выдаются с 8 знаками после запятой

    • Поля типа float выдаются с 3 знаками после запятой

    Теперь широта и долгота выдаются с миллиметровой точностью, а прочие навигационные параметры не содержат избыточных цифр после запятой.

  • Улучшена схема распределения вычислительной нагрузки, тем самым устранена возможная ситуация с задержкой использования данных ГНСС

Версия 0.11.1 от 12.07.2022

  • Исправлены некоторые технические ошибки в работе ПО

Версия 0.11.0 от 07.07.2022

Версия 0.10.0 от 10.06.2022

  • Добавлен лог FULL_SOLUTION

  • Реализована поддержка внешних ИИБ с помощью команды [EXT_IMU_CONFIG] и сообщения EXT_IMU

  • Улучшена работа сетевого соединения по протоколу UDP

Изменения, создающие обратную несовместимость
  • Идентификатор сообщения LAST_TIME_PULSE изменен с 3003 на 3020

  • Идентификаторы NMEA навигационных логов начинаются с 3100, а не с 3004

  • Изменены имена сообщений в текстовом и консольном форматах:

    • DMI_INPUTDMI

    • NAVIGATION_SOLUTIONPVA

    • NAVIGATION_SOLUTION_ACCURACYPVA_SD

    • VEHICLE_DYNAMICSDYNAMICS

  • Изменены имена полей сообщений в текстовом и консольном формате:

    • ONNEWON_NEW и аналогично для других типов триггеров

    • RTK_FIXRTK_FIXED

    • SSR_FIXSSR_FIXED

Версия 0.9.2 от 11.03.2022

  • Добавлена поддержка новых проприетарных CAN протоколов в CAN_CONFIG для получения скорости автомобиля

  • Устранена вычислительная задержка навигационного решения с триггером ONNEW

  • Реализована поддержка MSM сообщений в RTCM, которые строго не соответствуют стандарту, однако могут передаваться с некоторых базовых станций

Изменения, создающие обратную несовместимость
  • Структура DMI_CONFIG и [DMI_INPUT] изменена. Теперь флаги интерпретации данных содержаться в [DMI_INPUT]. Они проставляются автоматически при задании dmi_source равным CAN, NMEA0183 или PULSE. Параметр accuracy убран

Версия 0.9.1 от 16.01.2022

  • Улучшена стабильность NTRIP подключения

  • Команда PORT_STATS выводит статистику для CANA и CANB

  • Файлы логов записываются с расширением vbp вместо dat

  • Улучшено форматирование в telnet

  • Исправлена ошибка с двойным выводом команд конфигурации в файл при использовании LOG CONFIG

  • Улучшено вычисление пройденного расстояния

Изменения, создающие обратную несовместимость
  • Расширен набор статусов работы алгоритма (filter_status) в [NAVIGATION_SOLUTION]

  • В [NAVIGATION_SOLUTION_ACCURACY] добавлено поле distance_accuracy, отвечающее за точность вычисления пройденного расстояния

Версия 0.9.0 от 19.12.2021

  • Начальная документированная версия

8. Приложения

8.1. Структура и обновление ПО

Пользователь admin

Пользователь admin имеет sudo права. Пароль установленный по умолчанию — icewind.

Структура ПО

Файлы навигационного приложения находятся в директории /home/admin/app со следующей структурой:

app
├── firmware
└── navigation
    ├── commands
    │   └── factory_default.txt
    ├── logs
    ├── build_info.txt
    ├── communication
    ├── launch.yaml
    └── start

Назначение директорий и файлов:

  • firmware — директория со скриптами для работы с микроконтроллером

  • commands — директория с txt файлами, содержащими команды для конфигурации прибора. Файл factory_default.txt содержит команды по умолчанию. Текущие команды ищутся в файле current.txt, если он отсутствует при запуске, то будет создан как копия factory_default.txt.

  • logs - символьная ссылка на директорию /home/user/logs, через которую записываются логи на приборе

  • build_info.txt — файл с информацией о сборке

  • communication — основное приложение

  • launch.yaml — файл с параметрами запуска для communication, в текущий версии он пустой

  • start — скрипт для запуска приложения

Запуск и остановка приложения

Для запуска и остановки приложения используйте утилиту service с именем скрипта navigation:

  • sudo service navigation start для запуска

  • sudo service navigation stop для остановки

  • sudo service navigation restart для перезапуска

  • service navigation status для проверки статуса

Обновление ПО

Обновление доставляется в виде zip архива с именем типа acrux_version.zip, например acrux_0.9.2-e372483c.zip. Архив содержит директорию с именем, дублирующем имя архива, в которой содержится директория app. Для обновления ПО нужно скопировать директорию app в домашнюю директорию admin на приборе. Для этого нужно проделать следующее:

  1. Зайти на прибор ssh admin@acrux.local

  2. Остановить работу навигационного сервиса sudo service navigation stop

  3. Скопировать файлы обновления. Для этого из директории содержащей app на компьютере выполнить: scp -r ./app admin@acrux.local:~

  4. Заново запустить навигационный сервис sudo service navigation start, либо перезагрузить ОС sudo reboot, либо отключить и включить подачу питания на прибор

Копирование файлов из Windows

При копировании файлов обновления из ОС Windows может произойти потеря флагов для исполняемых файлов. Чтобы их восстановить выполните команду в консоли:

find /home/admin/app -type f ! -name "*.*" -exec chmod +x {} \;

После обновления в ответе на команду LOG VERSION должна присутствовать строка версии, совпадающая с частью имени архива с обновлением.

8.2. Алгоритмы вычисления контрольных сумм

Ниже приводится код на языке C с алгоритмами вычислений контрольных сумм заголовка и тела сообщения. В функции main проверяется совпадение вычисленной суммы для тестовой строки "123456789" с ожидаемой.

#include <assert.h>
#include <stddef.h>
#include <stdint.h>

uint8_t ComputeCrcCcit8(const void* data, size_t count) {
    static const uint8_t kTable[256] = {
        0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15,
        0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D,
        0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65,
        0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D,
        0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5,
        0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD,
        0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85,
        0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD,
        0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2,
        0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA,
        0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2,
        0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A,
        0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32,
        0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A,
        0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42,
        0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A,
        0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C,
        0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4,
        0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC,
        0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4,
        0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C,
        0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44,
        0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C,
        0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34,
        0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B,
        0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63,
        0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B,
        0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13,
        0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB,
        0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83,
        0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB,
        0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3
    };
    const uint8_t* d = (const uint8_t*) data;
    uint8_t result = 0;
    for (size_t i = 0; i < count; ++i) {
        result = kTable[result ^ d[i]];
    }
    return result;
}

uint32_t ComputeCrcQualcomm24(const void* data, size_t count) {
    static const uint32_t kTable[256] = {
        0x000000, 0x864CFB, 0x8AD50D, 0x0C99F6, 0x93E6E1, 0x15AA1A,
        0x1933EC, 0x9F7F17, 0xA18139, 0x27CDC2, 0x2B5434, 0xAD18CF,
        0x3267D8, 0xB42B23, 0xB8B2D5, 0x3EFE2E, 0xC54E89, 0x430272,
        0x4F9B84, 0xC9D77F, 0x56A868, 0xD0E493, 0xDC7D65, 0x5A319E,
        0x64CFB0, 0xE2834B, 0xEE1ABD, 0x685646, 0xF72951, 0x7165AA,
        0x7DFC5C, 0xFBB0A7, 0x0CD1E9, 0x8A9D12, 0x8604E4, 0x00481F,
        0x9F3708, 0x197BF3, 0x15E205, 0x93AEFE, 0xAD50D0, 0x2B1C2B,
        0x2785DD, 0xA1C926, 0x3EB631, 0xB8FACA, 0xB4633C, 0x322FC7,
        0xC99F60, 0x4FD39B, 0x434A6D, 0xC50696, 0x5A7981, 0xDC357A,
        0xD0AC8C, 0x56E077, 0x681E59, 0xEE52A2, 0xE2CB54, 0x6487AF,
        0xFBF8B8, 0x7DB443, 0x712DB5, 0xF7614E, 0x19A3D2, 0x9FEF29,
        0x9376DF, 0x153A24, 0x8A4533, 0x0C09C8, 0x00903E, 0x86DCC5,
        0xB822EB, 0x3E6E10, 0x32F7E6, 0xB4BB1D, 0x2BC40A, 0xAD88F1,
        0xA11107, 0x275DFC, 0xDCED5B, 0x5AA1A0, 0x563856, 0xD074AD,
        0x4F0BBA, 0xC94741, 0xC5DEB7, 0x43924C, 0x7D6C62, 0xFB2099,
        0xF7B96F, 0x71F594, 0xEE8A83, 0x68C678, 0x645F8E, 0xE21375,
        0x15723B, 0x933EC0, 0x9FA736, 0x19EBCD, 0x8694DA, 0x00D821,
        0x0C41D7, 0x8A0D2C, 0xB4F302, 0x32BFF9, 0x3E260F, 0xB86AF4,
        0x2715E3, 0xA15918, 0xADC0EE, 0x2B8C15, 0xD03CB2, 0x567049,
        0x5AE9BF, 0xDCA544, 0x43DA53, 0xC596A8, 0xC90F5E, 0x4F43A5,
        0x71BD8B, 0xF7F170, 0xFB6886, 0x7D247D, 0xE25B6A, 0x641791,
        0x688E67, 0xEEC29C, 0x3347A4, 0xB50B5F, 0xB992A9, 0x3FDE52,
        0xA0A145, 0x26EDBE, 0x2A7448, 0xAC38B3, 0x92C69D, 0x148A66,
        0x181390, 0x9E5F6B, 0x01207C, 0x876C87, 0x8BF571, 0x0DB98A,
        0xF6092D, 0x7045D6, 0x7CDC20, 0xFA90DB, 0x65EFCC, 0xE3A337,
        0xEF3AC1, 0x69763A, 0x578814, 0xD1C4EF, 0xDD5D19, 0x5B11E2,
        0xC46EF5, 0x42220E, 0x4EBBF8, 0xC8F703, 0x3F964D, 0xB9DAB6,
        0xB54340, 0x330FBB, 0xAC70AC, 0x2A3C57, 0x26A5A1, 0xA0E95A,
        0x9E1774, 0x185B8F, 0x14C279, 0x928E82, 0x0DF195, 0x8BBD6E,
        0x872498, 0x016863, 0xFAD8C4, 0x7C943F, 0x700DC9, 0xF64132,
        0x693E25, 0xEF72DE, 0xE3EB28, 0x65A7D3, 0x5B59FD, 0xDD1506,
        0xD18CF0, 0x57C00B, 0xC8BF1C, 0x4EF3E7, 0x426A11, 0xC426EA,
        0x2AE476, 0xACA88D, 0xA0317B, 0x267D80, 0xB90297, 0x3F4E6C,
        0x33D79A, 0xB59B61, 0x8B654F, 0x0D29B4, 0x01B042, 0x87FCB9,
        0x1883AE, 0x9ECF55, 0x9256A3, 0x141A58, 0xEFAAFF, 0x69E604,
        0x657FF2, 0xE33309, 0x7C4C1E, 0xFA00E5, 0xF69913, 0x70D5E8,
        0x4E2BC6, 0xC8673D, 0xC4FECB, 0x42B230, 0xDDCD27, 0x5B81DC,
        0x57182A, 0xD154D1, 0x26359F, 0xA07964, 0xACE092, 0x2AAC69,
        0xB5D37E, 0x339F85, 0x3F0673, 0xB94A88, 0x87B4A6, 0x01F85D,
        0x0D61AB, 0x8B2D50, 0x145247, 0x921EBC, 0x9E874A, 0x18CBB1,
        0xE37B16, 0x6537ED, 0x69AE1B, 0xEFE2E0, 0x709DF7, 0xF6D10C,
        0xFA48FA, 0x7C0401, 0x42FA2F, 0xC4B6D4, 0xC82F22, 0x4E63D9,
        0xD11CCE, 0x575035, 0x5BC9C3, 0xDD8538
    };
    const uint8_t* d = (const uint8_t*) data;
    uint32_t result = 0;
    for (size_t i = 0; i < count; ++i) {
        result = kTable[(result >> 16u) ^ d[i]] ^ ((result << 8u) & 0xFFFFFFu);
    }
    return result;
}

int main() {
    assert(ComputeCrcCcit8("123456789", 9) == 0xF4);
    assert(ComputeCrcQualcomm24("123456789", 9) == 0xCDE703);
    return 0;
}

8.3. Положение ИИБ в приборе

imu position
Рис. 11. Положении ИИБ в приборе

8.4. Графическая схема возможных стандартных ориентаций прибора в транспортном средстве

Ниже приведены иллюстрации возможных ориентаций прибора в транспортном средстве, когда углы ориентации кратны 90 градусам. На рисунках предполагается, что транспортное средство расположено параллельно плоскости рисунка с продольной осью, направленной вверх. Для каждой изображенной ориентации приводятся Углы Эйлера в градусах, которые нужно использовать в команде SET_ROTATION с аргументом rotation_type = VEHICLE_IMU.

installation angles 1
Рис. 12. Иллюстрация ориентаций в транспортном средстве, лист 1
installation angles 2
Рис. 13. Иллюстрация ориентаций в транспортном средстве, лист 2