Ранее в статье Получаем спутниковые координаты GPS/ГЛОНАСС с помощью модуля SIM868 на Repka Pi мы рассказали про модуль GSM/GPRS/GNSS Bluetooth HAT, реализующий все основные функции смартфона, в том числе получение координат GPS.
Теперь вы узнаете, как подключить к микрокомпьютеру Repka Pi модули, созданные компанией u-blox AG, созданные специально для работы со спутниковыми системами глобального позиционирования GNSS. Такие модули пригодятся, например, если вам не нужна полная функциональность SIM868.
Пользуясь нашей статьей, вы научитесь настраивать конфигурацию таких модулей с помощью программы, составленной на языке Python, а также мощной программой U-CENTER, созданной компанией u-blox AG. Такая настройка пригодится, например, для работы с российской системой ГЛОНАСС.
Содержание
Получение данных от модуля U-BLOX
Редактирование конфигурации модулей U-BLOX в программе U-CENTER
Подключение модулей U-BLOX
В продаже есть разные версии и модификации модулей, созданных компанией u-blox AG (мы будем называть их модулями U-BLOX) с разными характеристиками и по очень разной цене.
При подготовке этой статьи были проверены в работе модули U-BLOX GY-GPS6MV2 на базе NEO-6M-0-001, GY-GPSV3-NEO0 со сборкой NEO-M8N-0-10, а также современный модуль NEO-M10 на базе NEO-M10-0-10 (с чипом M10050).
Забегая вперед, скажем, что наилучшие результаты в работе, особенно со спутниками ГЛОНАСС, были получены именно на модуле NEO-M10. Но и другие модули успешно работают с такими системами, как GPS, Galileo, BeiDou и некоторыми другими.
Вы можете использовать модули U-BLOX для навигации в автомобилях, самокатах, дронах, роботах, в устройствах IoT, и в других аналогичных устройствах, требующих точного определения местоположения.
Модули U-BLOX, рассмотренные в нашей статье, подключается к Repka Pi или другим устройствам сбора данных через порт UART и, как правило, поставляется вместе с антенной.
На рис. 1 показан модуль GY-GPSV3-NEO0 со сборкой NEO-M8N-0-10.
На рис. 2 вы можете увидеть устаревший модуль GY-GPS6MV2 на базе NEO-6M-0-001 и относительно новый модуль NEO-M10.
Чтобы подключить модули GY-GPSV3-NEO0 и GY-GPS6MV2 к микрокомпьютеру Repka Pi, соедините выводы GND и VCC с землей и питанием 3.3 В, соответственно. Выводы RX и TX модулей нужно подключить к UART2-TX и UART2-RX, установив в Repka-PI третий вариант распиновки.
Подключение модуля NEO-M10 выполняется так:
P — сигнал синхронизации PPS (Pulse-Per-Second), оставляем свободным;
M — UART2-RX, оставляем свободным;
D — UART2-TX3, оставляем свободным;
RX — UART/TTL, RXD;
TX —UART/TTL, TXD;
G — GND;
V — питание VCC, 3.3 В
Подключение модуля GY-GPSV3-NEO0 к микрокомпьютеру Repka-Pi показано на рис. 3.
Также вы можете подключить модули U-BLOX к контактам SUART-TX и SUART-RX (рис. 4).
А можно ли подключать эти модули к контактам UART0-TX и UART0-RX?
Такое подключение может вызвать проблемы на этапе загрузки ОС. Дело в том, что модули U-BLOX сразу после включения питания начинают отправлять данные позиционирования сплошным потоком, и эти данные могут помешать нормальной загрузке Repka OS. В этом случае даже отключение вывода сообщений на UART0 с помощью программы repka-config не помогает.
Однако если вначале дать загрузиться ОС, а потом только включить питание модуля U-BLOX, то при упомянутом выше отключении вывода сообщений на UART0 модуль будет работать правильно даже при подключении к контактам UART0-TX и UART0-RX.
Получение данных от модуля U-BLOX
Для получения данных от U-BLOX мы будем использовать терминал minicom, а также подготовленную для этой статьи программу get-gnss-u-blox.py, составленную на языке Python.
Установка и запуск терминала minicom
После того как вы подключили свой модуль U-BLOX к Repka Pi через UART, установите терминальную программу minicom:
# apt install minicom
При запуске программе minicom нужно передать правильный порт UART (в нашем случае UART2-TX и UART2-RX), а также указать скорость передачи 9600 бит/с:
# minicom -D /dev/ttyS2 -b 9600
Модуль NEO-M10 по умолчанию настроен на скорость 38400, поэтому для него нужно задать параметр b следующим образом:
# minicom -D /dev/ttyS2 -b 38400
В консоли SSH появится окно программы minicom для ввода AT-команды и просмотра результатов их выполнения. Для удобства включите эхо-режим командой ATE1. Если вы ввели команду AT, увидели ее и ответ на команду OK, эхо-режим включен. Команда ATE0 выключает эхо-режим.
Просмотр и интерпретация данных
Если модуль U-BLOX подключен, то сразу после запуска minicom в окне этой терминальной программы вы увидите поток сообщений NMEA (National Marine Electronics Association):
$GNVTG,,T,,M,0.069,N,0.128,K,A*39
$GNGGA,073933.00,5538.55XXX,N,03720.26XXX,E,1,08,3.45,204.6,M,13.6,M,,*44
$GNGSA,A,3,02,17,22,32,,,,,,,,,5.46,3.45,4.23,1*04
$GNGSA,A,3,15,13,21,,,,,,,,,,5.46,3.45,4.23,3*06
$GNGSA,A,3,03,,,,,,,,,,,,5.46,3.45,4.23,5*06
$GPGSV,3,1,09,02,09,021,25,12,28,258,12,14,17,082,17,15,18,217,16,1*64
$GPGSV,3,2,09,17,48,066,36,19,63,116,16,22,39,080,30,24,68,258,15,1*6D
$GPGSV,3,3,09,32,10,333,19,1*56
$GPGSV,1,1,03,06,13,133,,10,06,308,,13,10,185,,0*50
$GAGSV,1,1,04,13,30,068,30,15,11,017,33,18,08,048,13,21,34,082,21,7*7B
$GAGSV,2,1,05,04,34,224,,05,08,335,,09,39,289,,26,19,124,,0*76
$GAGSV,2,2,05,26,19,124,,0*4A
$GQGSV,1,1,01,03,18,059,34,1*55
$GNGLL,5538.55XXX,N,03720.26XXX,E,073933.00,A,A*7F
$GNRMC,073934.00,A,5538.55XXX,N,03720.26XXX,E,0.134,,130324,,,A,V*1F
Здесь некоторые цифры скрыты символом X.
Текст сообщений NMEA начинается с символа "$", за которым идет двухсимвольный идентификатор спутниковой системы, от которой получена информация:
GP — GPS (США);
GL — Глонасс (Россия);
GA — Galileo (Европа);
BD — Beidou (Китай);
GQ — QZSS (Япония);
GN —спутники разных навигационных систем
Далее идет трехсимвольный идентификатор строки и поля данных, разделенные запятыми. В зависимости от идентификатора строки поля могут содержать такие данные, как время, координаты GPS, скорость и так далее.
С точки зрения определения координат важны сообщения CGA и RMC.
Раскодируем строку:
$GNGGA,073933.00,5538.55XXX,N,03720.26XXX,E,1,08,3.45,204.6,M,13.6,M,,*44
Здесь:
GN — информация получена от спутников разных навигационных систем;
GGA — данные о последнем зафиксированном местоположении;
073933.00 — время в формате UTC (в данном случае, 07 часов 39 минут и 33.00 секунд);
5538.55XXX,N — широта (55 градусов, 38.55XXX минуты северной широты);
03720.26111,E — долгота (37 градусов, 20.26111 минуты восточной долготы);
1 — способ вычисления координат;
08 — количество активных спутников, используемых для фиксации;
3.45— горизонтальный геометрический фактор ухудшения точности DOP;
204.6,M— высота над уровнем моря (в метрах)
13.6,M — геоидальное различие в метрах (различие между земным эллипсоидом WGS 84 и уровнем моря);
*44 — контрольная сумма строки (используется для проверки целостности данных)
Строка RMC содержит рекомендуемый минимум навигационных данных:
$GNRMC,073934.00,A,5538.55XXX,N,03720.26XXX,E,0.134,,130324,,,A,V*1F
Здесь после времени идет статус данных. Действительные данные обозначаются буквой A, ошибочные — буковой V. Ваша программа должна учитывать только действительные данные.
Далее идет широта и долгота, скорость в узлах и дата в формате ДДММГГ. Более подробное описание формата NMEA вы найдете в нашей статье «Получаем спутниковые координаты GPS/ГЛОНАСС с помощью модуля SIM868 на Repka Pi», а также здесь.
Программа get-gnss-u-blox.py
С помощью библиотеки pynmea2 ваша программа, составленная на Python, может очень просто извлекать координаты местоположения устройства. Установите эту библиотеку следующим образом:
# pip3 install pynmea2
Далее запустите программу get-gnss-u-blox.py (листинг 1).
Листинг 1. https://github.com/AlexandreFrolov/rover_connect2/blob/main/get-gnss-data.py
import serial
import time
import string
import pynmea2
while True:
port="/dev/ttyS2"
ser=serial.Serial(port, baudrate=9600, timeout=0.5)
dataout = pynmea2.NMEAStreamReader()
newdata=ser.readline().decode('unicode_escape')
if newdata[0:6] == "$GPRMC":
newmsg=pynmea2.parse(newdata)
lat=newmsg.latitude
lng=newmsg.longitude
gps = "(широта, долгота): (" + str(lat) + "," + str(lng) + ")"
print(gps)
Программа будет выводить в цикле на консоль широту и долготу, полученную от модуля U-BLOX через UART:
# python3 get-gnss-u-blox.py
(широта, долгота): (55.642XXX,37.342XXX)
…
(широта, долгота): (55.642XXX,37.342XXX)
(широта, долгота): (55.642XXX,37.342XXX)
При подготовке программы для своего устройства вы можете, например, сохранять эти координаты в базе данных или отправлять на управляющий сервер через интернет, по каналу LoRa либо использовать их как-то еще.
Данные о конфигурации модуля U-BLOX
Сразу после включения модули U-BLOX передают через UART данные о своей версии и конфигурации. Чтобы увидеть эти данные, вам нужно сначала запустить терминальную программу minicom, а после этого включить питание модуля.
При включении в окне терминальной программы появятся сообщения экрана загрузки (boot screen).
Для модуля GY-GPS6MV2 на базе NEO-6M-0-001 вы увидите следующие строки:
$GPTXT,01,01,02,u-blox ag – www.u-blox.com*50
$GPTXT,01,01,02,HW UBX-G60xx 00040007 FF7FFFFFp*53
$GPTXT,01,01,02,ROM CORE 7.03 (45969) Mar 17 2011 16:18:34*59
$GPTXT,01,01,02,ANTSUPERV=AC SD PdoS SR*20
$GPTXT,01,01,02,ANTSTATUS=DONTKNOW*33
Здесь:
u-blox ag – www.u-blox.com — начало экрана загрузки;
HW UBX-G60xx 00040007 FF7FFFFFp — версия аппаратного обеспечения приемника u-blox;
ROM CORE 7.03 (45969) Mar 17 2011 16:18:34 — версия 7.03 программного обеспечения (firmware), загруженного из ROM;
ANTSUPERV=AC SD PdoS SR — конфигурация антенного супервизора (antenna supervisor)
В строке конфигурации антенного супервизора:
AC — включено активное управление антенной;
SD — включено обнаружение короткого замыкания;
OD — включено обнаружение обрыва цепи;
PDoS — включена логика отключения питания при коротком замыкании;
SR — автоматическое восстановление из состояния короткого замыкания
Модуль GY-GPSV3-NEO0 на базе NEO-M8N-0-10 в экране загрузки выдаст такие данные:
$GNTXT,01,01,02,u-blox AG - www.u-blox.com*4E
$GNTXT,01,01,02,HW UBX 10 000A0000*53
$GNTXT,01,01,02,ROM SPG 5.10 (7b202e)*7C
$GNTXT,01,01,02,FWVER=SPG 5.10*40
$GNTXT,01,01,02,PROTVER=34.10*1E
$GNTXT,01,01,02,CHIPID=0000005593960F5654*00
$GNTXT,01,01,02,GPS;GLO;GAL;BDS*77
$GNTXT,01,01,02,SBAS;QZSS*60
$GNTXT,01,01,02,ANTSUPERV=*22
$GNTXT,01,01,02,ANTSTATUS=DONTKNOW*2D
$GNTXT,01,01,02,PF=F7FFF*4F
$GNTXT,01,01,02,Starting GNSS*5A
Здесь среди прочего указаны:
версия аппаратного обеспечения HW UBX 10 000A0000;
версия прошивки ROM SPG 5.10;
версия протокола FWVER=SPG 5.10;
серийный номер микросхемы CHIPID=0000005593960F5654;
спутниковые системы, с которыми возможна работа GPS;GLO;GAL;BDS (GPS, GLONASS, Galileo, BeiDou);
дополнительные системы улучшения точности позиционирования SBAS;QZSS;
статус антенны ANTSTATUS=DONTKNOW (в данном случае неизвестен);
начало работы с GNSS — Starting GNSS
Анализируя содержимое сообщений экрана загрузки, можно извлечь такую полезную информацию, как версии аппаратного обеспечения, прошивки и протокола. В зависимости от версий можно использовать те или иные возможности модуля.
Протокол UBX
Теперь вы умеете получать данные от модуля U-BLOX с помощью UART и протокола NMEA. Однако в том, что касается конфигурирования этого модуля, не обойтись без протокола UBX, разработанного компанией u-blox AG. Он позволяет модулю и микрокомпьютеру обмениваться бинарными данными.
Полное описание протокола UBX занимает сотни страниц и для актуальных версий модулей доступно только на английском языке. Тем не менее, для версии U-BLOX 7 имеется перевод на русский язык.
Структура пакета UBX
На рис. 5 мы показали структуру пакета UBX.
Пакет начинается с двух байт синхронизации 0xB5 и 0x62. Далее следуют байты класса, а также идентификатора сообщения Class и ID, соответственно.
Вслед за ID идет длина блока полезной нагрузки Payload, а также сам блок полезной нагрузки. В конце пакета располагаются два байта контрольной суммы.
В качестве примера рассмотрим бинарный код команды CFG-RATE, устанавливающей скорость, с которой модуль U-BLOX выдает данные измерений в порт UART:
B5 62 06 08 06 00 E8 0f 01 00 01 00 0D 75
Рассмотрим содержимое полей команды:
0xB5 0x62 — байты синхронизации, отмечают начало пакета;
0x06 — класс сообщения;
0x08 — идентификатор сообщения ID;
0x0006 — длина блока полезной нагрузки Payload;
0xE8 0x0F 0x01 0x00 0x01 0x00 — блок полезной нагрузки Payload;
0x0D 0x75 — контрольная сумма
Если найти в описании протокола UBX команду CFG-RATE, то видно, что для нее задается класс сообщения 0x06, а также идентификатор сообщения 0x08. У других сообщений значения этих полей, разумеется, будут другими.
Что касается блока полезной нагрузки, то в документации UBX для команды CFG-RATE в них должна находиться такая информация:
0xE8 0x0F — частота измерений в мс measRate;
0x01 0x00 — скорость навигации в количестве циклов измерений navRate;
0x01 0x00 — выравнивание по опорному времени, 1 — по времени GPS, 0 — по времени UTC
После выдачи такой команды модуль U-BLOX будет посылать данные в UART каждые 4 072 мс или каждые четыре секунды.
Чтобы увеличить скорость, выдайте следующую команду:
B5 62 06 08 06 00 E8 00 01 00 01 00 FE 2A
Здесь частота измерений measRate указана как 0x00E8 или 232 мс, а скорость навигации navRate 0x0001.
Теперь установим measRate равным 0x0FE8, а navRate — равным 0x0001:
B5 62 06 08 06 00 E8 0F 01 00 01 00 0D 75
Скорость сильно замедлится.
Для очень большого увеличения скорости можно попробуйте такую команду:
B5 62 06 08 06 00 64 00 01 00 01 00 7A 12
Здесь measRate равно 0x6400, а navRate — равно 0x0100.
Выдача такой команды приведет к тому, что данные не будут успевать передаваться через UART, настроенный для работы со скоростью 9600 бит/с.
Программа ublox-ubx.py
Для экспериментов с командами UBX вы можете использовать программу ublox-ubx.py (листинг 2).
Листинг 2. https://raw.githubusercontent.com/AlexandreFrolov/rover_connect2/main/ublox-ubx.py
import serial
import time
import string
# https://github.com/semuconsulting/pyubx2/blob/master/src/pyubx2/ubxhelpers.py
def calculate_checksum(content: bytes) -> bytes:
"""
Calculate checksum using 8-bit Fletcher's algorithm.
:param bytes content: message content, excluding header and checksum bytes
:return: checksum
:rtype: bytes
"""
check_a = 0
check_b = 0
for char in content:
check_a += char
check_a &= 0xFF
check_b += check_a
check_b &= 0xFF
return bytes((check_a, check_b))
def isvalid_checksum(message: bytes) -> bool:
"""
Validate message checksum.
:param bytes message: message including header and checksum bytes
:return: checksum valid flag
:rtype: bool
"""
lenm = len(message)
ckm = message[lenm - 2 : lenm]
return ckm == calculate_checksum(message[2 : lenm - 2])
# CFG-RATE
# measRate=0xE800, navRate=0x0100
msg_cfg_rate = b'\x06\x08\x06\x00\xE8\x00\x01\x00\x01\x00'
# measRate=0xE800, navRate=0x010F
#msg_cfg_rate = b'\x06\x08\x06\x00\xE8\x0F\x01\x00\x01\x00'
# measRate=0x6400, navRate=0x0100
#msg_cfg_rate = b'\x06\x08\x06\x00\x64\x00\x01\x00\x01\x00'
hex_string = ''.join(['{:02x} '.format(byte) for byte in msg_cfg_rate])
print("Команда CFG-RATE без контрольной суммы: " + hex_string)
msg_to_write = b'\xB5\x62'
msg_to_write += msg_cfg_rate
checksum_a, checksum_b = calculate_checksum(msg_cfg_rate)
msg_to_write += bytes([checksum_a, checksum_b])
hex_string = ''.join(['{:02x} '.format(byte) for byte in msg_cfg_rate])
hex_string = ''.join(['{:02x} '.format(byte) for byte in msg_to_write])
print("Полная команда CFG-RATE: " +hex_string)
rc = isvalid_checksum(msg_to_write)
print("Контрольная сумма верна: " + str(rc))
port="/dev/ttyS2"
ser=serial.Serial(port, baudrate=9600, timeout=0.5)
rc = ser.write(msg_to_write)
print("Записано байт в UART: " + str(rc))
ser.close()
Эта программа выдает в модуль команду CFG-RATE для изменения скорости выдачи сообщений навигации.
Обратите внимание, что программа ublox-ubx.py добавляет к строке команды msg_cfg_rate байты контрольной суммы, вычисленные при помощи функции calculate_checksum. Перед выдачей команды в порт UART контрольная сумма проверяется функцией isvalid_checksum.
При запуске программа выводит на консоль команду CFG-RATE без контрольной суммы и полностью сформированную, а также результаты проверки контрольной суммы:
# python3 ublox-ubx.py
Команда CFG-RATE без контрольной суммы: 06 08 06 00 e8 00 01 00 01 00
Полная команда CFG-RATE: b5 62 06 08 06 00 e8 00 01 00 01 00 fe 2a
Контрольная сумма верна: True
Записано байт в UART: 14
После отправки данных в модуль программа показывает количество записанных байт. Для нашего случая оно должно быть равно 14.
Коды функций вычисления и проверки контрольной суммы мы взяли из проекта https://github.com/semuconsulting/pyubx2. Они определены там в файле https://github.com/semuconsulting/pyubx2/blob/master/src/pyubx2/ubxhelpers.py.
Изменения в конфигурации, выполненные программой ublox-ubx.py, будут потеряны при сбросе модуля U-BLOX по питанию. Для сохранения изменений в энергонезависимой памяти модуля предназначена команда CFG-CFG. Ее описание вы найдете в документации протокола UBX.
Программа U-CENTER
Конфигурирование модуля U-BLOX посредством формирования пакетов UBX в своей программе — не очень простая задача. Компания u-blox создала программу U-CENTER, работающую в среде ОС Microsoft Windows, способную получать и обрабатывать различные данные от модуля, а также настраивать конфигурацию модулей (рис. 6).
Подключение модуля U-BLOX к USB компьютера
Чтобы воспользоваться программой U-CENTER, вам нужно подключить модуль U-BLOX к порту USB через такой модуль, как CH341T V3 (рис. 7).
На модуле CH341T V3 установите перемычки питания в положение 3.3V, а переключатель I2C/TTL — в положение TTL (рис. 7).
Далее соедините контакты питания VCC и земли GND модуля CH341T V3 с соответствующими контактами модуля U-BLOX. Что касается контактов UART, то TXD и RXD модуля CH341T V3 подключите к контактам RX и TX модуля U-BLOX соответственно.
Питание и землю к модулю NEO-M10 нужно подключить через контакты V и G, соответственно. При этом контакты TXD и RXD модуля CH341T V3 нужно подключить к контактам RX и TX модуля NEO-M10.
Модуль CH341T V3 подключите к порту USB компьютера с установленной ОС Microsoft Windows. При подготовке статьи была использована версия 11 этой ОС.
После подключения модуля CH341T V3 откройте в панели управления компьютером Диспетчер устройств и раскройте ветку Порты (COM и LPT), как это показано на рис. 8.
Найдите в раскрытой ветке строку USB-SERIAL CH341A. В ней также указан соответствующий COM-порт, в данном случае это COM4. Запомните название этого COM-порта, он будет нужен при подключении программы U-CENTER к модулю U-BLOX.
Установка программы U-CENTER
Для установки U-CENTER скачайте дистрибутив программы с сайта этой программы и запустите на выполнение. Далее выполните все действия, предложенные программой установки и запустите программу.
Далее рекомендуем вам ознакомиться с руководством пользователя программы U-CENTER. Перевод старой версии руководства на русский язык можно скачать здесь.
Запуск U-CENTER и подключение к модулю U-BLOX
Для подключения к модулю U-BLOX прежде всего в панели Receiver Tool Bar раскройте список доступных портов для подключения и выберите порт COM4 (рис. 9).
В нашем случае модуль R-BLOX был подключен через UART и CH341T к порту COM4 (у вас название интерфейсного модуля UART-COM, а также использованный COM-порт могут быть другими).
После выбора COM-порта в этой же панели Receiver Tool Bar выберите скорость обмена данными (рис. 10).
По умолчанию модули R-BLOX на базе NEO-6M-0-001 и NEO-M8N-0-10 передают данные со скоростью 9600 бит/c, поэтому для них выбираем строку 9600. Что касается модуля NEO-M10, то для него нужна скорость 38400 бит/c.
Если соединение установлено, то значок в панели Receiver Tool Bar, а также в нижней панели главного окна программы U-CENTER будет зеленого цвета.
Просмотр данных навигации
Для просмотра данных навигации, полученных от модуля U-BLOX, воспользуйтесь меню View (рис. 11).
Если выбрать строку Text Console, то откроется окно, в котором будут отображаться полученные данные в виде строк NMEA (рис. 12).
В нижней части окна Text Console есть поле фильтра, позволяющее просматривать только нужные вам строки, например, содержащие подстроки RMC или GGA.
Исследуйте другие окна, которые можно открыть в меню View.
Например, строка Binary Console позволит вам просматривать сообщения в шестнадцатеричном и текстовом режиме одновременно. С помощью окна Messages View можно контролировать изменения значений в отдельных сообщениях NMEA, например, в сообщениях GNGGA.
Для настройки конфигурации модуля R-BLOX предназначены строки меню Configuration View и Generation 9 Configuration View. Настройку конфигурации R-BLOX с помощью программы U-CENTER мы рассмотрим позже.
Строка Docking Windows меню View открывает возможность просмотра очень интересных и полезных окон, позволяющих, например, получить информацию об используемых спутниках.
Самые нужные окна можно открыть с помощью кнопок стандартной панели Standard Toolbar (рис. 13).
На этом рисунке показано назначение только некоторых кнопок стандартной панели, полное описание вы найдете в документации программы U-CENTER.
Редактирование конфигурации модулей U-BLOX в программе U-CENTER
Ранее в этой статье мы рассказывали про протокол UBX и приводили пример программы ublox-ubx.py. Используя команду CFG-RATE, эта программа устанавливала скорость, с которой модуль U-BLOX выдает данные измерений в порт UART.
Теперь выполним настройку и сохранение конфигурации с помощью программы U-CENTER.
Настройка скорости выдачи данных в порт UART
Выберите в меню View строку Configuration View. В левом блоке открывшегося окна найдите и щелкните строку RATE (рис. 14).
В правой части окна появится форма, с помощью которой можно задать параметры команду CFG-RATE. Откройте в программе U-CENTER окно просмотра текстовых сообщений Text Console, в котором непрерывно появляются строки NMEA, отправляемые модулем U-BLOX.
Теперь в форме UBX-CFG-RATE окна Configure – Rates (рис. 14) отредактируйте содержимое поля Measurement Period, задающего период изменений. Укажите там вместо 1000 мс значение 10000 мс, а затем щелкните кнопку Send, расположенную в нижней части окна.
После этого содержимое окна Text Console будет обновляться очень медленно.
Вы можете провести эксперименты, задавая в этом окне различные значения. Текущие настройки модуля U-BLOX можно загрузить в поля формы при помощи кнопки Poll.
Подключение спутников ГЛОНАСС
Новые версии модуля U-BLOX поддерживают получение данных со спутников ГЛОНАСС, однако по умолчанию этот режим отключен.
Чтобы его включить, щелкните в меню View строку Configuration View. В левом блоке открывшегося окна найдите и щелкните строку GNSS (рис. 15).
Здесь вам нужно сначала отключить по одной системы QZSS, BeiDou и SBAS, чтобы освободить каналы для спутников ГЛОНАСС. При необходимости можно отключить все спутниковые системы, кроме ГЛОНАСС. Для отключения снимите флажок в столбце Enable в строке той или иной системы, а затем щелкните кнопку Send.
Далее включите ГЛОНАСС, установив флажки, как это показано на рис. 15, и снова воспользуйтесь кнопкой Send.
Теперь нужно дождаться, когда модуль U-BLOX получит данные со спутников ГЛОНАСС. Это можно контролировать в окне Satellite Signal (рис. 16).
Чтобы модуль U-BLOX мог полноценно определять координаты, ему нужно не менее 4 спутников. Спутники, с которых приходит достаточно сильный сигнал, выделены в окне Satellite Signal зеленым цветом.
На рис. 16 мы обвели красной рамкой спутники ГЛОНАСС, имеющие обозначение Rxx. Другие обозначения:
Gxx — GPS;
Rxx — GLONASS;
Bxx — BeiDou;
Exx — Galileo;
Sxx — SBAS;
Qxx — QZSS
Сохранение и восстановление конфигурации
При изменении конфигурации модуля U-BLOX описанным выше способом все выполненные настройки пропадут при выключении питания.
Чтобы настройки остались, нужно сохранить конфигурацию в энергонезависимой памяти модуля U-BLOX. Для этого щелкните в меню View строку Configuration View. В левом блоке открывшегося окна Configuration найдите и щелкните строку CFG (рис. 17).
Чтобы сохранить текущую конфигурацию в энергонезависимой памяти, выберите Save current configuration и щелкните кнопку Save.
Перед сохранением укажите в списке Devices хранилища конфигурации — BBU (энергонезависимая память) или FLASH (FLASH-память). Успех сохранения будет зависеть от модели и версии пошивки, а также от конфигурации аппаратного обеспечения модуля U-BLOX.
В только что описанном окне Configuration можно восстановить конфигурацию, сохраненную в прошлый раз (Revert to last saved configuration), а также восстановить конфигурацию по умолчанию (Revert to default configuration).
Работа с конфигурацией в окне Generation 9 Configuration View
Выбрав из меню View строку Generation 9 Configuration View, вы получите доступ к более удобному инструменту, предназначенному для работы с конфигурацией модулей U-BLOX. Этот инструмент доступен, однако, только для новых версий модулей U-BLOX.
Для примера на рис. 18 мы показали редактирование параметров команды CFG-RATE, увеличив период измерений с 1000 мс до 10000 мс.
Чтобы сохранить изменения в памяти модуля U-BLOX, щелкните кнопку Set in RAM. Кнопка Set in BBR позволит сохранить данные в энергонезависимой памяти, а кнопка Set in Flash — в флеш-памяти, установленной в модуле.
Вы также можете установить значение по умолчанию, щелкнув строку layer 7 (Default).
Обратите внимание на блок UBX-CFG-VALSET messages hex codes. Здесь показаны байты бинарных команд изменения конфигурации.
Как мы уже говорили, возможность сохранения конфигурации в энергонезависимой памяти модуля U-BLOX зависит от его модели, версии прошивки и конфигурации аппаратного обеспечения модуля.
Для подключения спутников ГЛОНАСС после выбора из меню View строки Generation 9 Configuration View щелкните в левой панели строку GNSS Configuration (рис. 19).
Далее воспользуйтесь флажками, расположенными в столбце Enable, чтобы сначала отключить ненужные системы, а затем подключить ГЛОНАСС.
Для сохранения конфигурации щелкните кнопку Send Configuration, отметив флажки RAM, BBR и Flash (все или только некоторые из них). Результат сохранения появится в блоке Status.
Кнопка Poll Active Configuration (RAM Layer) извлекает текущую конфигурацию спутниковых систем, извлеченную из памяти RAM модуля U-BLOX.
Настроив конфигурацию для работы с ГЛОНАСС, выберите из меню View строку Sky View. Вы увидите окно инструмента, позволяющего анализировать доступность спутников разных систем и работу антенны (рис. 20).
Здесь можно увидеть, какие спутники используются для определения координат — у них зеленый цвет. По обозначению спутника можно понять, к какой спутниковой системе они относятся. Например, спутники ГЛОНАСС обозначаются как Rxx, а спутники GPS — как Gxx.
Есть много других возможностей, но их подробное изложение выходит за рамки этой статьи. Вы сможете их использовать после чтения документации на программу U-CENTER.
Итоги
В результате работы над этой статьей вы научились подключать навигационные модули производства компании u-blox AG к микрокомпьютеру Repka Pi, а также к порту USB обычных компьютеров через модуль CH341T.
Теперь вы можете получать от модулей U-BLOX сообщения в формате NMEA с помощью терминальной программы minicom, а также составлять программы на Python, способные извлекать из этих сообщений данные навигации.
Познакомившись с протоколом UBX, вы написали программу Python для выдачи команд настройки конфигурации модулей U-BLOX.
Далее, вы установили мощную программу U-CENTER, разработанную компанией u-blox AG, и научились с ее помощью получать данные от модулей навигации U-BLOX, просматривать их в виде красивых диаграмм и таблиц, а также изменять конфигурацию модулей.
Надеемся, что все это позволит вам с успехом использовать модули навигации U-BLOX в своих разработках, основанных на применении микрокомпьютеров.
Полезные ссылки
u-blox 8 GNSS module Data Sheet
NEO-6 series Versatile u-blox 6 GPS modules
NEO-6 u-blox 6 GPS Modules Data Sheet
u-blox 8 / u-blox M8 Receiver description Including protocol specification
u-blox 6 Receiver Description Including Protocol Specification
Описание GPS приемника серии u-blox 7, часть 1
Протокол NMEA в приемниках u-blox 7, часть 2
Комментарии (3)
Sergey78
11.06.2024 08:20А можно ссылку на модуль с М10?
В ядре линукса есть какая-то поддержка Ublox https://www.kernel.org/doc/Documentation/devicetree/bindings/gnss/u-blox.txt
Подозреваю, что там уже реализована поддержка протокола UBX и можно просто через device tree указать на каком uart приемник и использовать устройство /dev/gnss для получения координат.
NutsUnderline
Тут у Вас UCENTER предыдущей версии который не обучен работать с M10, т.е. поиграться то можно, но не на 100%. UCenter 2 умеет M10 но для его работы нужна онлайн учетка, соответственно интернет - для первого запуска, ну и карты он там берет. Визуально в нем все по другому, но суть та же, хорошие подсказки по UBX встроены