Это предварительная версия документации. Будем признательны за предложения об её улучшении, указания ошибок и недостатков. |
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. Габаритный чертеж
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 г |
2.3. Описание контактных разъемов
Прибор имеет 2 круглых контактных разъема с 16 контактами, обозначенных IO1 и IO2. Разъемы обеспечивают надежные и прочные соединения с прибором в сложных условиях и рассчитаны на IP66 в сопряженном положении.
Обозначение | Разъем | Прилагаемая модель соединителя |
---|---|---|
IO1 |
16 контактный разъем с ключом G |
LEMO K FGG.1K.316 |
IO2 |
16 контактный разъем с ключом A |
LEMO K FGA.1K.316 |
Вид ключей и нумерация контактов изображены на рисунках ниже.
Номер контакта | Сигнал | Назначение | Домен питания |
---|---|---|---|
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 |
Номер контакта | Сигнал | Назначение | Домен питания |
---|---|---|---|
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 |
Контакт IO2 | Контакт вилки | Сигнал |
---|---|---|
2 |
1 |
ETH_RX+ |
6 |
6 |
ETH_TX- |
7 |
3 |
ETH_TX+ |
8 |
2 |
ETH_RX- |
-
Отрезать от готового покупного кабеля разъем со стороны подключения к прибору.
-
Снять изоляцию и распаять отрезанные концы проводов на разъем прибора.
-
Допустимый диапазон напряжений: от -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 Гц |
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 минуты после начала движения |
3. Основополагающие сведения и определения из теории навигации
В этом разделе коротко излагаются основные сведения из теории навигации, необходимые для настройки и понимания работы прибора.
3.1. Системы координат и задание их взаимной ориентации
В области навигации понятие системы координат является основополагающим. Прямоугольная декартова система координат определяется её точкой начала и направлением трёх ортогональных осей. Рассматриваются правые системы координат: в них поворот от первой к второй оси производится против часовой стрелки, если он наблюдается со стороны положительного направления третей оси.
Матрицы ориентации
Взаимную ориентацию двух правых систем координат можно однозначно задать ортогональной \$3 \times 3\$ матрицей с определителем +1. Матрицы ориентации используются для представления ориентации во внутренних вычислениях. Пусть имеются две системы координат A и B, смысл матрицы ориентации выражается равенством:
Здесь \$R_B^A\$ — матрица ориентации между системами A и B, а \$x^A\$ и \$x^B\$ — один и тот же вектор \$x\$ выраженный в осях систем A и B соответственно. То есть матрица ориентации связывает компоненты (координатные проекции) одного и того же вектора в разных системах координат. Другая интерпретация — матрица \$R_B^A\$ “физически поворачивает” координатные оси системы A, делая их параллельными осям системы B.
Углы Эйлера
Взаимную ориентацию двух систем координат можно описать последовательностью трёх поворотов вокруг координатных осей на заданные углы (называемые углами Эйлера). Углы Эйлера используются для конфигурации прибора и как выходные параметры ориентации.
Существует множество соглашений по определению углов Эйлера, в Acrux используется одно конкретное соглашение, проиллюстрированное ниже.
Оси исходной системы \$xyz\$ совмещаются с осями конечной системы \$XYZ\$, как показано на рисунке ниже. Повороты осуществляются относительно осей вращающейся системы:
-
Сначала производится поворот вокруг оси \$z\$ на угол \$\alpha_z\$
-
Затем вокруг оси \$y^'\$ на угол \$\alpha_y\$
-
И в конце вокруг оси \$x^'""^'\$ на угол \$\alpha_x\$
Углы \$\alpha_x, \alpha_y, \alpha_z\$ мы и называем углами Эйлера и используем их именно в описанной выше интерпретации. Диапазоны значений углов:
-
\$\alpha_x\$ — от -180 до 180 градусов
-
\$\alpha_y\$ — от -90 до 90 градусов
-
\$\alpha_z\$ — от -180 до 180 градусов либо от 0 до 360 градусов
Задание конечной ориентации в терминах матрицы имеет вид:
Где \$R_(x, y, z)\$ — матрицы ориентации для поворотов вокруг соответствующих координатных осей, иногда называемые элементарными, вид которых может быть легко получен из геометрических соображений.
3.2. Используемые системы координат
Для успешной эксплуатации Acrux важно тщательно изучить материал этой секции и разобраться, как определены используемые системы координат.
Геоцентрическая система координат
С нашей планетой связывают систему координат, которая участвует в её суточном вращении. Центр системы находится в центре масс Земли, оси x и y лежат в плоскости экватора, так что ось x проходит через нулевой меридиан, а ось z направлена вдоль оси вращения к северному полюсу. Положение геоцентрической системы проиллюстрированно на рисунке ниже.
Международная служба вращения Земли (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.
См. рис. Земной эллипсоид, геоцентрическая и локальные горизонтальные системы, географические координаты.
Приборная система координат
Система связанная с прибором. Центр находится в точке установки акселерометров, см. Положение ИИБ в приборе. Оси направлены вдоль рёбер корпуса согласно схематическому рисунку ниже.
Инерциальный модуль измеряет угловые скорости и ускорения в осях приборной системы координат с точностью до остаточного отклонения осей после компенсации.
Транспортная система координат
Система связанная с транспортным средством. Центр совпадает с центром приборной системы. Ось x направлена вдоль продольной оси объекта (к носу или переднему бамперу), ось y направлена к правому борту, ось z дополняет систему до правой ортогональной и направлена к полу.
Пользовательская система координат
Система повернутая и сдвинутая относительно транспортной системы на фиксированные настраиваемые значения. Навигационное решение вычисляется для данной системы. Конфигурируется согласно пользовательским нуждам. По умолчанию совпадает с транспортной.
Системы привязанные к событиями 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\$) имеет вид:
То есть углы крена, тангажа и курса — это Углы Эйлера транспортной системы относительно локальной горизонтальной системы.
Введенные таким образом углы соответствуют классическим определениям, которые также можно сформулировать следующим образом:
-
угол крена — угол между вертикальной осью объекта и плоскостью, проходящей через продольную ось объекта и географическую вертикаль. Диапазон от -180 до 180 градусов, крен положительный при подъеме правого борта
-
угол тангажа — угол между продольной осью объекта и плоскостью локального горизонта. Диапазон от -90 до 90 градусов, тангаж положительный при подъеме носа
-
угол курса — угол между направлением на север и проекцией продольной оси объекта в плоскость локального горизонта. Диапазон от 0 до 360 градусов, курс увеличивается в направлении от севера в востоку
3.6. Связь между приборной и транспортной системами координат
Алгоритмы инерциальной навигации определяют ориентацию приборной (т. е. связанной с ИИБ) системы координат. Для обработки спутниковых измерений разнесение между ИИБ и антенной должно быть задано также в приборной системе координат. Это означает, что транспортная система координат принципиально не требуется для работы навигационного алгоритма и не наблюдается (или не “чувствуется”) им.
Мы однако определяем и используем “кажущуюся” транспортную систему, ориентация которой относительно локальной горизонтальной определяется, как ориентация приборной системы скомпенсированная на фиксированную заданную ориентацию:
Где N, C', B — обозначение локальной горизонтальной, кажущейся транспортной и приборной систем координат соответственно.
Матрица \$R_B^{C'}\$ задается командой SET_ROTATION с аргументом rotation_type = VEHICLE_IMU
.
Отсюда вытекает следующее:
-
Ошибка задания ориентации между транспортной и приборной системами приведет к рассогласованию между истиной и кажущейся транспортными системами, что будет выражаться в смещении выдаваемых углов ориентации
-
Точность определения ориентации транспортной системы ограничивается точностью определения ориентации между приборной и транспортной системами
-
Команда SET_TRANSLATION задает компоненты разнесения именно в кажущейся транспортной системе, поэтому при задании точности этих компонент, нужно учитывать, что оси истинной транспортной и кажущейся систем могут различаться
-
При точном определении ориентации между транспортной и приборными системами (скажем с точностью 0.01 градуса), все эти нюансы различия истинной и кажущейся транспортными системами пропадают
При использовании модели движения ориентация транспортной системы становится частично наблюдаемой, и алгоритм оценивает рассогласование между кажущейся и истинной системами. См. CALIBRATE.
3.7. Принцип работы навигационного алгоритма
Алгоритм работает по принципу классической корректируемой системы инерциальной навигации, где для объединения различных источников информации используется фильтр Калмана.
Прибор включает микроэлектромеханический ИИБ и два ГНСС приемника, а также опционально может обрабатывать одометрическую информацию и учитывать модель движения транспортного средства, что улучшает точность и надежность решения, особенно в условиях пропажи ГНСС сигнала.
Угловые скорости и ускорения с ИИБ используются для обновления навигационного решения на высокой частоте согласно классическому алгоритму бесплатформенной инерциальной навигации.
Фильтр Калмана сопоставляет измерения с главного ГНСС приемника, системы определения курса и одометрического датчика с соответствующими величинами, полученными по инерциальному решению, и оценивает его ошибки. При наличии корректирующей информации с базовой станции (в формате RTCM 3), фильтр также оценивает неоднозначности разностных фазовых измерений ГНСС приемника, которые затем разрешаются в целые и вновь поступают в фильтр для достижения сантиметровой точности решения. Оцененные ошибки в фильтре Калмана корректируют инерциальное навигационное решение, которое в итоге поступает потребителю.
Система определения курса использует фазовые измерения с двух ГНСС приемников. Разность между фазами сигналов, разрешенная до целых, позволяет определить положение второй антенны относительно первой с суб-сантиметровой точностью и тем самым истинный курс линии между антеннами. Полученный этой системой курс передается в основной фильтр Калмана и уточняет курс инерциального решения.
4. Установка, настройка, эксплуатация
В этом разделе объясняются шаги для правильной установки, подключения и настройки прибора.
4.1. Установка прибора
При установке Acrux в транспортном средстве нужно руководствоваться следующими рекомендациями:
-
Температура в месте установки не должна выходить за указанный рабочий диапазон
-
Предпочтительно, чтобы температура в месте установки существенно не изменялась
-
Вибрационные воздействия на прибор в точке установки будут ощущаться ИИБ и отражаться в выдаваемом решении (линейные и угловые скорости, ускорение, углы крена и тангажа). В худшем случае высокий уровень вибрации может приводить к деградации работы инерциальных датчиков либо к выходу воздействий за границы диапазона измерений ИИБ. Поэтому рекомендуется устанавливать прибор на элементы транспортного средства, которые подвержены вибрации в наименьшей степени
Крепление Acrux в транспортном средстве осуществляется 4 винтами через отверстия ⌀ 4,3 мм.
4.2. Установка антенн
При установке антенн на транспортное средство нужно руководствоваться следующим рекомендациями:
-
Предпочтительно использовать две антенны одинаковой модели
-
Опоры антенн должны располагаться горизонтально
-
Антенны должны иметь полную видимость неба в верхней полусфере. Обычно это означает, что антенны должны располагаться выше всех конструкций на транспортном средстве
-
Предпочтительно, чтобы длина кабеля антенн была минимально возможной. А также, чтобы кабели у обеих антенн были одинаковой длины
-
Рядом с антеннами не должно располагаться сильных источников электромагнитных излучений типа радаров, лидаров, ЭВМ и т. д.
-
Под антеннами должна располагаться плоская проводящая поверхность с минимальным радиусом 6 см либо согласно руководству по эксплуатации антенн
-
Главная (PRI, ANT1) антенна предпочтительно должна располагаться не слишком далеко от прибора. При большом разнесении между главной антенной и прибором ошибки определения ориентации будут создавать дополнительные ошибки позиционирования
-
Ошибка определения двухантенного курса обратно пропорциональна расстоянию между антеннами, поэтому большие расстояния предпочтительны. Однако при большом разнесении антенн сложнее точно измерить компоненты вектора разнесения. Хорошие практические значения — 1.5 — 2.5 м
4.3. Подключение источника питания
Подключение источника питания осуществляется через один из контактных разъемов, см. Описание контактных разъемов.
Требование к источнику питания
-
Напряжение в диапазоне от +12 до +32 В постоянного тока
-
Мощность не менее 15 Вт (пиковая)
-
При работе с прибором должны использоваться сертифицированные источники питания
-
Оба разъема имеют подключение к источнику питания. Источник питания должен быть подключен только к одному из них. Подключение двух источников питания может привести к повреждению прибора.
Заземление
Прибор должен иметь защитное заземление, связанное с его корпусом, выполненное кратчайшим путем. Последовательное заземление не допускается.
Заземление прибора осуществляется через отверстие M3x6-7/⌀4x0.5, расположенное под антенными разъемами. Оно обозначено соответствующим знаком заземления на рисунке ниже.
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. Использование файловых накопителей
Прибор может работать с двумя типами накопителей:
-
Встроенный накопитель на центральной плате прибора. Гарантируется свободный объем более 5 гигабайт
-
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 подключения, имя пользователя и пароль — вымышленные):
|
Ниже изложены детали по каждому пункту. Предварительно рекомендуется прочесть разделы Используемые системы координат и Связь между приборной и транспортной системами координат.
4.10.1. Выбор профиля движения
Вне зависимости от типа транспортного средства, предполагается, что прибор и антенны закреплены на один жесткий каркас и не совершают относительного движения (кроме возможно низкоамплитудных вибраций).
Выбор профиля движения производится командой SET_MOTION_PROFILE. В настоящий момент реализованы специальные профили:
-
CAR для для четырехколесных легковых или грузовых автомобилей
-
BOAT для малых судов
Если прибор устанавливается на другое транспортное средство, то нужно использовать профиль NONE.
4.10.2. Задание углов ориентации прибора относительно транспортного средства
Прибор может быть установлен на транспортное средство в произвольной ориентации, при этом необходимо указать Углы Эйлера приборной системы относительно транспортной, а также приблизительную точность их определения с помощью команды SET_ROTATION с аргументом rotation_type = VEHICLE_IMU
.
Углы установки должны быть определены с точностью не хуже, чем несколько градусов. Введенные параметры точности должны отражать реальную точность определения.
Введенные параметры точности не влияют на выдаваемую точностью углов ориентации (в логе PVA_SD), однако они учитываются алгоритмом, если используется профиль движения, отличный от NONE.
См. Графическая схема возможных стандартных ориентаций прибора в транспортном средстве, чтобы определить примерные значения углов, когда оси прибора приблизительно параллельны осям транспортного средства.
Даже если углы установки номинально нулевые, то команду все равно нужно выполнить, задав подходящие значения СКО, например |
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 и правильной их интерпретации, нужно иметь ввиду следующие вещи:
-
См. Формат RTCM3, где указан список номеров поддерживаемых сообщений протокола RTCM3
-
Базовая станция должна принимать сигналы, совместимые с сигналами, указанным в Характеристики ГНСС приемников (см. Коды RINEX совместимых ГНСС сигналов) Другие типы сигналов не могут быть использованы навигационным алгоритмом Acrux и будут игнорироваться. Крайне рекомендуется, чтобы присутствовали сигналы на двух частотах хотя бы для одного созвездия, например Galileo E1 и E5b
-
Максимально допустимый “возраст” поправок установлен равным 60 секундам. Если поток RTCM3 данных прерывается по той или иной причине, то через указанное время прибор перейдет к позиционированию стандартной точности (тип решения
SPS
) -
Возможность разрешения фазовой неоднозначности и время, требуемое для этого, ухудшаются по мере удаления 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:
-
Получение начального позиционного решения от ГНСС приемника
-
Начальное определение углов крена и тангажа
-
Начальное определение угла курса
-
Уточнение всех навигационных параметров до оптимальной точности
-
Работа в режиме оптимальной точности
При превышении оценки среднеквадратичного отклонения по любой из координат 1000 м алгоритм перезагружается и возвращается к стадии 1. Такие большие значения СКО говорят о некотором вырожденном сценарии использования, типа длительной пропажи сигналов ГНСС при отсутствии одометра. В такой ситуации решение уже не представляет ценности, и перезагрузка алгоритма позволяет избежать возможных непредсказуемых ошибок. В будущем логика определения некорректного функционирования и перезагрузки алгоритма будет расширена и улучшена.
Логика отдельных стадий зависит от профиля движения, задаваемого командой SET_MOTION_PROFILE и описана ниже. Начиная со стадии 4, навигационный алгоритм использует только сырые измерения ГНСС приемника.
Получение начального позиционного решения от ГНСС приемника
До получения корректного и достоверного позиционного решения навигационный алгоритм не производит никаких вычислений.
Начальное определение углов крена и тангажа
Для профиля движения NONE определение крена и тангажа производится в течении 10 секунд, когда транспортное средство неподвижно, ориентация прибора относительно вертикали может быть произвольной.
Для профиля движения CAR или BOAT начальные крен и тангаж получаются из предположения, что транспортное средство приблизительно горизонтально. Неподвижность транспортного средства не требуется.
Начальное определение угла курса
Алгоритм определения угла курса зависит от выбранного профиля движения:
-
Для профиля NONE курс будет определен при наборе достаточной скорости из положения покоя либо по двухантенной системе
-
Для профиля CAR при старте из положения покоя курс будет определен при наборе достаточной скорости. Если же старт произошел в движении, то для определения курса алгоритму потребуется некоторое время, чтобы разрешить начальное направление движения (вперед или назад): с помощью двухантенной системы (достаточно одного корректного измерения), либо сопоставляя инерциальные и спутниковые измерения (это занимает обычно не более 5 секунд)
-
Для профиля BOAT курс может быть определен при движении с большой скоростью (выше 15 км/ч) либо напрямую по двухантенной системе. Для инициализации по двухантенной системе точность измерения компонент вектора между антеннами должна быть не хуже, чем 5 см на 1 м расстояния между антеннами
Уточнение всех навигационных параметров до оптимальной точности
На этой стадии алгоритм работает в стандартном режиме и реализует фильтр Калмана. Оптимальная точность будет достигнута после прохождения достаточного расстояния и совершении нескольких поворотов.
Работа в режиме оптимальной точности
Алгоритм работает в стандартном режиме с оптимальной точностью.
4.13. Ответы на частые вопросы
-
Как проверить, что данные RTCM 3 поступают в прибор?
Для этого можно использовать логирование
LOG RTCM3 ON_NEW
. Параметры базовой станции можно узнать с помощьюLOG RTCM3_STATUS
. -
Данные RTCM 3 поступают, однако тип позиции остается
SPS
. Почему так происходит?Скорее всего данная ситуация наблюдается при включении прибора на стоянке, когда фильтр еще не работает в полноценном режиме, а позиционное решение просто ретранслируется с приемника. На данном этапе фильтр еще не использует сырые ГНСС измерения, поэтому не может использовать и данные RTCM 3. Данные RTCM 3 начнут использоваться когда алгоритм перейдет в режим
CONVERGING
, при этом тип позиционного решения измениться наRTK_FLOAT
/RTK_FIXED
. -
При использовании RTCM 3 почему тип позиционного решения не меняется с
RTK_FLOAT
наRTK_FIXED
либо часто переключается между этими режимами?У этого может быть несколько причин:
-
Слишком большое расстояние до базовой станции
-
Базовая станция не передает сигналы на двух частотах, что существенно усложняет получение решения типа
RTK_FIXED
в сложных условиях приема ГНСС сигналов -
Неправильно задано положение главной антенны относительно прибора (в команде SET_TRANSLATION). В этом случае предсказание перемещения антенны при поворотах оказывается неверным, что приводит к отбраковке фазовых измерений
-
Антенна и прибор не закреплены на одном жестком каркасе. Ситуация аналогична предыдущему пункту
-
Поток данных RTCM 3 получается не из одного источника, возможно с разных базовых станций. Например через NTRIP-клиент и какой либо порт.
См. также Работа в режиме RTK.
-
-
Как настроить прибор для работы в режиме “network RTK”?
Для этого прибор должен передавать на NTRIP-кастер своё текущее местоположении в виде сообщения
GGA
формата NMEA 0183. Это достигается следующими настройками (для портаNCOM1
):INTERFACE_MODE NCOM1 RTCM3 NMEA0183 LOG NCOM1 GGA ON_TIME 1.0 NTRIP_CONFIG NCOM1 CLIENT ...
Первая из этих настроек входит в заводские настройки по умолчанию.
-
Как проверить, что данные из CAN-шины поступают в прибор?
Для этого можно использовать логирование
LOG CAN_FRAME ON_NEW
. Предварительно должна быть проведена настройка с помощью CAN_CONFIG. Если корректно выбран один из поддерживаемых протоколов сообщений CAN, то будут генерироваться сообщения DMI, что можно проверить командойLOG DMI ON_NEW
. -
Как проверить, что происходит обмен данными через сетевое соединение или последовательный порт?
Для этого можно использовать логирование
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. Структура
Бинарный формат следует строго определенному формату, который описан в таблицах ниже.
Секция | Количество байт |
---|---|
Заголовок пакета |
2 |
Заголовок сообщения |
12 |
Тело сообщения |
Определяется по заголовку сообщения |
Контрольная сумма сообщения |
3 |
№ поля | Имя | Тип | Описание |
---|---|---|---|
1 |
sync |
uint8_t |
Байт синхронизации равный 0xAA |
2 |
header_crc |
uint8_t |
Контрольная сумма последующего заголовка сообщения |
№ поля | Имя | Тип | Описание |
---|---|---|---|
1 |
message_id |
uint16_t enum |
Идентификатор сообщения, см. Список сообщений |
2 |
message_length |
uint16_t |
Количество байт в последующем теле сообщения |
3 |
system_time |
microseconds64_t |
Системное время сообщения — количество микросекунд с момента включения прибора |
Для команд посылаемых в прибор системное время заполнять не нужно — оно будет назначено автоматически системному времени в момент получения. |
№ поля | Имя | Тип | Описание |
---|---|---|---|
1 |
message_crc_1 |
uint8_t |
Первый байт контрольной суммы тела сообщения |
2 |
message_crc_2 |
uint8_t |
Второй байт контрольной суммы тела сообщения |
3 |
message_crc_3 |
uint8_t |
Третий байт контрольной суммы тела сообщения |
5.1.3. Проверка целостности сообщения
Алгоритм выделения и проверки целостности сообщения из потока байт должен быть реализован следующим образом:
-
Байты пропускаются до тех пор пока не найден байт синхронизации, равный 0xAA
-
Следующий байт — контрольная сумма последующего заголовка
-
Последующие 12 байт — заголовок сообщения. Если его контрольная сумма верная, то переходим к следующему пункту, иначе к пункту 1
-
Читается тело сообщения, размер которого указан в заголовке, и вычисляется его контрольная сумма
-
Читаются последовательно 3 байта контрольной суммы — если очередной байт не совпадает с вычисленным байтом контрольной суммы, то целостность сообщения нарушена, переходим к пункту 1
-
Если все 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-ю десятичными знаками
-
Поля типа битовой маски с флагами — в виде наименований свойств, разделенных вертикальной чертой ('|'), поле естественно может оказаться пустым. Регистр букв для входящих сообщений не играет роли, в выходных сообщениях используются заглавные буквы
-
Поля типа перечисления — в виде текстового эквивалента данного значения. Регистр букв для входящих сообщений не играет роли, в выходных сообщениях используются заглавные буквы
-
Зарезервированные, но неиспользуемые поля — в виде пустой строки
Чтение и вывод строковых переменных устроено следующим образом:
-
Если в строке отсутствуют символы, которые используются для разделения полей сообщения (запятая в текстовом формате и пробел в консольном формате, см. ниже), то строка может передаваться без кавычек
-
Если нужно передать строку в кавычках (с целью экранирования символов разделения), то символы
"
и\
нужно экранировать как\"
и\\
-
Строковая переменная в текстовом формате всегда отображается в кавычках, символы
"
и\
экранируются -
Если кавычка встречается не как первый символ в поле, то она рассматривается, как обычный символ, и такой формат считается корректным
Примеры работы со строковой переменной (ввод — внутреннее представление — вывод):
Ввод | Внутренне представление | Вывод |
---|---|---|
|
|
|
|
|
|
Пример входящего сообщения:
$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. Порты
Получение и отправка сообщений прибором осуществляется через порты, которые в этом контексте рассматриваются как логические сущности и задаются своим идентификатором.
Имя |
Направление |
Интерфейс |
Назначение |
||
---|---|---|---|---|---|
RX |
TX |
RS232 |
RS422 |
||
COM1 |
+ |
+ |
+ |
- |
Порт общего назначения работающий на прием и передачу |
COM2 |
+ |
+ |
+ |
- |
Дополнительный порт общего назначения работающий на прием и передачу |
NMEA |
+ |
- |
+ |
+ |
Прием предложений NMEA0183 по длинной линии связи |
RS485 |
+ |
+ |
- |
+ |
Полудуплексный порт общего назначения |
Имя | Назначение |
---|---|
ICOMx |
Взаимодействие с прибором через консоль telnet, выдача логов потребителю на высокой скорости |
NCOMx |
Клиент NTRIP для получения RTCM поправок |
Имя | Назначение |
---|---|
ALGO |
Логический порт для приема навигационной информации и выдачи навигационного решения |
FILE |
Запись файла логов на встроенный накопитель или SD карту |
В бинарном протоколе порты задаются типом uint16_t enum, значения которого описаны в таблице:
Числовое значение | Текстовый эквивалент |
---|---|
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 |
Биты | Интерпретация значений |
---|---|
0-1 |
|
2-3 |
|
Предположим, десятичное значение |
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 |
|
Системные команды |
|
2 |
|
4 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
16 |
|
18 |
|
19 |
|
21 |
|
23 |
|
33 |
|
Команды навигационной конфигурации |
|
1000 |
|
1001 |
|
1002 |
|
1003 |
|
1040 |
|
Системные логи |
|
2000 |
|
2001 |
|
2002 |
|
2005 |
|
2007 |
|
2009 |
|
2010 |
|
2100 |
|
Навигационные логи |
|
3000 |
|
3001 |
|
3002 |
|
3003 |
|
3004 |
|
3020 |
|
3030 |
|
3031 |
|
Оценки параметров для автоматической калибровки |
|
3041 |
|
3042 |
|
3043 |
|
Навигационные логи в формате NMEA 0183 |
|
3100 |
|
3101 |
|
3102 |
|
3104 |
|
3106 |
|
3107 |
|
3108 |
|
3109 |
|
3110 |
|
3111 |
|
3112 |
|
Входная навигационная информация |
|
4000 |
|
4001 |
|
4002 |
|
4003 |
|
4004 |
6.1. RESPONSE
Выдается в ответ на сообщение и содержит информацию было ли оно успешно принято, либо причину ошибки.
Идентификатор: 0
Бинарный формат:
№ поля | Имя | Тип | Описание |
---|---|---|---|
1 |
response |
uint16_t enum |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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 |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
0 |
ON |
Включить |
1 |
OFF |
Выключить |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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[] |
Часть имени файла |
Числовое значение | Текстовый эквивалент | Устройство 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 |
Таймаут подключения в секундах |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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 |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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 с выдачей угловых скоростей |
Бит | Текстовый эквивалент | Описание |
---|---|---|
0 |
RESPONSE |
Если бит выставлен, то прибор генерирует ответ при получении сообщения на порт, см. RESPONSE. Также если |
Прием ИИБ возможен только по последовательным портам 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 и последующий перезапуск системы.
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
0 |
ETH0 |
Основной адаптер Ethernet |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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 |
Примечания:
-
Если аргумент
message
является командой, то прибор выдает последовательность введенных уникальных команд с этим идентификатором -
При отправке команды через TCP клиент со значением
port = AUTO
логи будут посылаться только для этого клиента -
Величины
period
иoffset
для навигационных логов должны быть кратны 5000 мкс
Числовое значение | Текстовый эквивалент |
---|---|
0 |
ONCE |
1 |
ON_CHANGED |
2 |
ON_TIME |
3 |
ON_NEXT |
4 |
ON_NEW |
10 |
ON_MARK1 |
11 |
ON_MARK2 |
12 |
ON_MARK3 |
Бит | Текстовый эквивалент | Описание |
---|---|---|
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 |
Время в микросекундах после обработки импульса, в течение которого последующие импульсы игнорируются |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
0 |
OFF |
Вход выключен |
1 |
MARK |
Использовать вход для регистрации событий типа "ON MARK" |
2 |
COUNT |
Использовать вход для подсчета импульсов с подключенного одометра с целью генерации сообщений DMI типа приращения пройденного пути.
Применимо только для |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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. Если значение |
Файлы, имена которых начинаются с серийного номера прибора, будут удалены.
Консольный формат:
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] |
Пароль |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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 |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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 |
Бит | Текстовый эквивалент | |
---|---|---|
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 в исходной системе в градусах |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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 транспортной системы координат в метрах |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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 |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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 способа передачи одометрических данных в прибор:
-
Передача сообщения DMI по любому порту
-
Подключение к сети CAN, см. CAN_CONFIG. При наличии нужных пакетов прибор будет генерировать сообщения DMI со скорость в м/с
-
Передача сообщения VBW формата NMEA 0183. При наличии нужных полей в сообщении прибор будет генерировать сообщения DMI со скорость в м/с
-
Получение приращений пройденного пути с помощью инкрементального энкодера, подключенного к входам 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 |
Зарезервированное поле |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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 |
Пройденное расстояние с начала инициализации алгоритма в метрах |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
0 |
NO_POSITION |
Алгоритм не получил начальной позиции и не производит никаких вычислений |
1 |
NO_ATTITUDE |
Алгоритм в процессе определения начальной оценки углов тангажа и крена |
2 |
AMBIGUOUS_HEADING |
Алгоритм в процессе разрешения начального направления движения |
3 |
NO_HEADING |
Алгоритм работает без известного курса в локальной системе координат |
4 |
CONVERGING |
Алгоритм работает в полноценном режиме и сходится к оптимальной точности |
5 |
FULL_ACCURACY |
Алгоритм работает в полноценном режиме и достиг оптимальной точности |
filter_status | Позиция | Скорость | Крен и тангаж | Курс | Пройденное расстояние |
---|---|---|---|---|---|
NO_POSITION |
Нет |
Нет |
Нет |
Нет |
Нет |
NO_ATTITUDE |
Ограниченно |
Ограниченно |
Нет |
Нет |
Нет |
AMBIGUOUS_HEADING |
Ограниченно |
Ограниченно |
Нет |
Нет |
Нет |
NO_HEADING |
Ограниченно |
Ограниченно |
Да |
Нет |
Да |
CONVERGING |
Да |
Да |
Да |
Да |
Да |
FULL_ACCURACY |
Да |
Да |
Да |
Да |
Да |
Под ограниченной пригодностю позиции и скорости подразумевается использование решения GNSS приемника в точке антенны. При этом частота обновления не гарантируется (типично 1 Гц), разнесение антенны и запрошенной точки для решения не учитывается.
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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
Идентификатор: 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):
-
Ошибки позиции в направлениях на север, восток и вертикально вниз, выраженные в метрах: \$p_n, p_e, p_d\$
-
Ошибки скорости в направлениях на север, восток и вертикально вниз, выраженные в м/с: \$v_n, v_e, v_d\$
-
Ошибки ориентации, как компоненты вектора малого поворота локальной горизонтальной системы вдоль направлений на север, восток и вертикально вниз, выраженные в радианах: \$a_n, a_e, a_d\$
Сообщение содержит элементы верхнетреугольной части матрицы, записанные в построчном порядке:
Если какая-то переменная не определяется алгоритмом (если filter_status
не равен CONVERGING
или FULL_ACCURACY
), то соответствующий диагональный элемент (дисперсия) назначается равным -1, а все элементы кроссковариации с этой переменной назначаются равными 0.
Идентификатор: 3004
Бинарный формат:
№ поля | Имя | Тип | Описание |
---|---|---|---|
1 |
time |
GlobalTime |
Время решения, см. Структура GlobalTime |
2 — 46 |
cov_x_y |
float |
Элементы верхнетреугольной части матрицы ковариации в построчном порядке, всего 45 штук |
Если требуется матрица ковариации для другого определения ошибок, то нужно воспользоваться преобразованием вида
где \$U\$ матрица преобразования ошибок размера 9 \$times\$ 9.
К примеру, если требуется ковариация для ошибок углов крена, тангаж и курса, то матрица преобразований имеет вид:
Где \$psi\$ и \$vartheta\$ — углы курса и крена соответственно.
Если требуется ковариация для ошибок определенных вдоль осей локальной горизонтальной системы ENU (оси на восток, север и вертикально вверх), то матрица преобразований имеет вид:
6.5.6. UNDULATION
Сообщение содержит значение возвышения геоида (среднего уровня моря) над эллипсоидом в текущем географическом месте.
Соотношение между высотами имеет вид:
Где
-
\$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 |
Статус использования информации о нулевой угловой скорости |
Числовое значение |
Текстовый эквивалент |
Описание |
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 |
Тип решения:
|
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 |
Тип решения:
|
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 |
Тип решения, повторенный для каждого из четырех созвездий:
|
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 |
Тип решения:
|
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 |
Тип решения:
|
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 |
|
2 |
value |
float |
Измерение датчика |
Бит | Текстовый эквивалент | Интерпретация |
---|---|---|
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 |
|
2 |
id |
uint32_t |
Идентификатор сообщения |
2 |
data |
byte[] |
Содержание сообщения размером до 8 байт |
Числовое значение | Текстовый эквивалент | Описание |
---|---|---|
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
В этой версии основное навигационное приложение было существенно переработано. Алгоритм получения навигационного решения и основные навигационные логи и команды конфигурации не поменялись. Список изменений и причин для их внесения приведен в таблице ниже.
Изменение | Причина |
---|---|
Форматы сообщений |
|
Поля по умолчанию в бинарных сообщения больше не поддерживаются, сообщения должны передаваться со всеми полями |
Данная возможность ничего принципиального не добавляла, фиксированный размер и структура бинарного сообщения уменьшают возможность ошибок и неясных моментов |
Специальная логика обработки полей сообщений убрана |
Пример такой логики — использование старых значений, если какое-то поле передано пустым. Такой подход создавал зависимость обработки команды от текущего состояния системы, что усложняет концепцию системы и реализацию. Помимо этого такая логика не давала существенных плюсов или удобства |
Текстовые сообщения должны содержать все поля, пропуск полей не разрешен |
Это делает соответствие между бинарным и текстовым форматом более явным. Текстовый формат выступает, как 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
-
Реализованы базовые функции редактирования и истории для работы в консоли через telnet или последовательный порт
-
Реализована возможность обновления конфигурации по наработанным оценкам. См. CALIBRATE и Оценки параметров для автоматической калибровки
Версия 0.10.0 от 10.06.2022
-
Добавлен лог FULL_SOLUTION
-
Реализована поддержка внешних ИИБ с помощью команды [EXT_IMU_CONFIG] и сообщения EXT_IMU
-
Улучшена работа сетевого соединения по протоколу UDP
-
Идентификатор сообщения LAST_TIME_PULSE изменен с 3003 на 3020
-
Идентификаторы NMEA навигационных логов начинаются с 3100, а не с 3004
-
Изменены имена сообщений в текстовом и консольном форматах:
-
DMI_INPUT
→DMI
-
NAVIGATION_SOLUTION
→PVA
-
NAVIGATION_SOLUTION_ACCURACY
→PVA_SD
-
VEHICLE_DYNAMICS
→DYNAMICS
-
-
Изменены имена полей сообщений в текстовом и консольном формате:
-
ONNEW
→ON_NEW
и аналогично для других типов триггеров -
RTK_FIX
→RTK_FIXED
-
SSR_FIX
→SSR_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
на приборе.
Для этого нужно проделать следующее:
-
Зайти на прибор
ssh admin@acrux.local
-
Остановить работу навигационного сервиса
sudo service navigation stop
-
Скопировать файлы обновления. Для этого из директории содержащей
app
на компьютере выполнить:scp -r ./app admin@acrux.local:~
-
Заново запустить навигационный сервис
sudo service navigation start
, либо перезагрузить ОСsudo reboot
, либо отключить и включить подачу питания на прибор
Копирование файлов из Windows
При копировании файлов обновления из ОС Windows может произойти потеря флагов для исполняемых файлов. Чтобы их восстановить выполните команду в консоли:
|
После обновления в ответе на команду 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. Положение ИИБ в приборе
8.4. Графическая схема возможных стандартных ориентаций прибора в транспортном средстве
Ниже приведены иллюстрации возможных ориентаций прибора в транспортном средстве, когда углы ориентации кратны 90 градусам.
На рисунках предполагается, что транспортное средство расположено параллельно плоскости рисунка с продольной осью, направленной вверх.
Для каждой изображенной ориентации приводятся Углы Эйлера в градусах, которые нужно использовать в команде SET_ROTATION с аргументом rotation_type = VEHICLE_IMU
.