Как сделать локализацию gps приемник

Добавил пользователь Дмитрий К.
Обновлено: 04.10.2024

Trema GPS модуль ATGM336H - является навигационным устройством позволяющим определить свои координаты по широте, долготе и высоте. Дополнительно модуль способен определить текущую дату, время, скорость и направление передвижения.

Модуль получает данные на основе информации поступающей со спутников навигационных систем GPS (США), Глонасс (Россия) и Beidou (Китай).

Видео:

Спецификация:

  • Напряжение питания: 3,3 В или 5 В, поддерживаются оба напряжения.
  • Питание резервной батареи: 3 В.
  • Ток потребляемый модулем: до 25 мА.
  • Интерфейс: UART.
  • Скорость шины UART: 4800, 9600 (по умолчанию), 19200, 38400, 57600, 115200 бит/с.
  • Конфигурация шины UART: 8 бит данных, без проверки четности, с одним стоповым битом.
  • Уровень логической 1 на линиях шины UART: 3,3 В.
  • Протокол передачи данных: NMEA 0183.
  • Частота обновления выводимых данных: от 1 (по умолчанию) до 10 Гц.
  • Поддерживаемые навигационные системы: GPS (США), Глонасс (Россия) и Beidou (Китай).
  • Время холодного старта: ≤ 35 сек.
  • Время горячего старта: ≤ 1 сек.
  • Точность позиционирования:

Подключение:

На плате модуля расположен разъем из 5 выводов.

  • TX - выход данных шины UART от модуля. Подключается к выводу RX Arduino.
  • RX - вход данных шины UART в модуль. Подключается к выводу TX Arduino.
  • Vcc - вход питания 3,3 или 5 В.
  • GND - общий вывод питания.
  • PPS - выход меандра с частотой 1 Гц. Передний фронт импульсов совпадает с временем UTC.

При подключении модуля не к аппаратной, а к программной шине UART, вы сами назначаете выводы TX и RX Arduino к которым подключается модуль.

Модуль удобно подключать 5 способами, в зависимости от ситуации:

Способ - 1: Используя провода, Piranha UNO и программный UART


Способ - 2: Используя провода, Piranha ULTRA и аппаратный UART

С данным подключением будет использоваться второй аппаратный UART на Piranha ULTRA. Стоит заметить, что программный порт на UNO безошибочно работает на скорости до 57600 бод, в то время как аппаратный без проблем может работать на скорости 115200, вдвое большей.


Способ - 3: Используя Trema Set Shield

При таком подключении можно использовать программный UART на 8 и 9 цифровых выводах. Так же на этих выводах находиться второй аппаратный последовательный порт Piranha ULTRA, что ещё больше упрощает работу с модулем.


Способ - 4: Используя проводной шлейф и Shield

Используя 2-х и 3-х проводные шлейфы, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.


Способ - 5: Напрямую к ПК через USB-UART


Питание:

Подробнее о модуле:

Для работы с Trema GPS модулем - ATGM336H, нами разработано две библиотеки:

Подробнее про установку библиотеки читайте в нашей инструкции.

Примеры:

В данном разделе раскрыты примеры настройки работы Trema GPS модуля ATGM336H при помощи библиотеки iarduino_GPS_ATGM336 и получения данных отправляемых данным модулем при помощи библиотеки iarduino_GPS_NMEA по аппаратной шине UART-1. Обе библиотеки позволяют работать не только с аппаратной, но и с программной шиной UART.

Примеры работы с программной и аппаратной шиной UART доступны из меню Arduino IDE:

  • Файл / Примеры / iarduino GPS NMEA (парсер) - без настройки модуля.
  • Файл / Примеры / iarduino GPS ATGM336 (навигационный модуль).

Примеры получения данных библиотекой iarduino_GPS_NMEA без настройки модуля, доступны по ссылке Wiki - Парсер протокола NMEA.

Получение координат:

Пример выводит координаты широты и долготы в градусах, 5 раз в секунду.

Обратите внимание на то, что в примере не указана скорость шины Serial1 , так как она автоматически настраивается на скорость модуля функцией SettingsGPS.begin(Serial1); , а далее устанавливается функцией SettingsGPS.baudrate(9600); .

Получение скорости и курса:

Пример выводит скорость и курс, 5 раз в секунду.

Обратите внимание на то, что в примере не указана скорость шины Serial1 , так как она автоматически настраивается на скорость модуля функцией SettingsGPS.begin(Serial1); , а далее устанавливается функцией SettingsGPS.baudrate(9600); .

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

Пример выводит ссылку на Yandex карту 1 раз в секунду.

Пример выводит ссылку на Google карту 1 раз в секунду.

Обратите внимание на то, что в примере не указана скорость шины Serial1 , так как она автоматически настраивается на скорость модуля функцией SettingsGPS.begin(Serial1); , а далее устанавливается функцией SettingsGPS.baudrate(9600); .

Получение текущей даты и времени:

Пример выводит время, дату, день недели и UnixTime, 5 раз в секунду.

Обратите внимание на то, что в примере не указана скорость шины Serial1 , так как она автоматически настраивается на скорость модуля функцией SettingsGPS.begin(Serial1); , а далее устанавливается функцией SettingsGPS.baudrate(9600); .

Получение данных о спутниках:

Пример выводит данные о наблюдаемых спутниках: ID, уровень приёма, положение относительно GPS-модуля, тип навигационной системы и флаг участия спутника в позиционировании, 1 раз в 2 секунды.

Обратите внимание на то, что в примере не указана скорость шины Serial1 , так как она автоматически настраивается на скорость модуля функцией SettingsGPS.begin(Serial1); , а далее устанавливается функцией SettingsGPS.baudrate(9600); .

Перезагрузка модуля со сбросом его настроек на заводские:

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

Описание функций библиотеки iarduino_GPS_ATGM336:

В данном разделе описаны функции библиотеки iarduino_GPS_ATGM336 для настройки работы Trema GPS модуля.

Библиотека iarduino_GPS_ATGM336 может использовать как аппаратную, так и программную реализацию шины UART для работы с Trema GPS-модулем.

Подключение библиотеки:

  • Если GPS-модуль подключён по аппаратной шине UART (в примере используется UART-1):

Строки со звездочкой в комментарии можно исключить, если вы не собираетесь читать данные при помощи библиотеки iarduino_GPS_NMEA.

  • Если GPS-модуль подключён по программной шине UART (в примере используются выводы D8 и D9 для подключения модуля к Arduino):

Строки со звездочкой в комментарии можно исключить, если вы не собираетесь читать данные при помощи библиотеки iarduino_GPS_NMEA.

  • Вывод TX Arduino подключается к выводу RX модуля, а вывод RX Arduino подключается к выводу TX модуля.

Функция begin();

  • Назначение: Инициализация работы с GPS модулем по шине UART.
  • Синтаксис: begin( SERIAL );
  • Параметры:
    • SERIAL - объект или класс для работы с шиной UART по которой подключён GPS-модуль.
    • Функция должна быть вызвана до обращения к функции begin() библиотеки iarduino_GPS_NMEA, если таковая используется в скетче.
    • Функция определяет наличие GPS модуля на шине UART, узнаёт скорость передачи данных на которую настроен модуль (это может занять несколько секунд) и указывает шине UART работать на обнаруженной скорости.
    • Если шине UART была задана скорость до обращения к данной функции, то функция сначала проверит соответствует ли указанная скорость для работы с модулем, а если скорость не подходит, то изменит её на скорость передачи данных модуля.

    Функция baudrate();

    • Назначение: Установка скорости передачи данных модуля по шине UART.
    • Синтаксис: baudrate( [СКОРОСТЬ] );
    • Параметры:
      • uint32_t СКОРОСТЬ - целое число может принимать следующие значения:
        • 4800 бит/сек.
        • 9600 бит/сек. - это значение установлено в модуле по умолчанию.
        • 19200 бит/сек.
        • 38400 бит/сек.
        • 57600 бит/сек.
        • 115200 бит/сек.
        • Функция устанавливает указанную скорость и модулю и шине UART.
        • Если функцию вызвать без параметра, то функция обнаружит текущую скорость модуля и установит её для шины UART.
          При этом функция вернет:
          • false (0) - если скорость модуля не определена.
          • true (1) - если скорость модуля совпадает с уже установленной скоростью шины UART.
          • СКОРОСТЬ - обнаруженная скорость модуля установленная для шины UART.

          Функция updaterate();

          Функция composition();

          Функция system();

          • Назначение: Выбор используемых спутниковых навигационных систем.
          • Синтаксис: system( СИСТЕМЫ );
          • Параметры:
            • uint8_t СИСТЕМЫ - от 1 до 3 спутниковых навигационных систем, указываются через запятую и могут принимать следующие значения:
              • GPS_GP - использовать данные поступающие от спутников GPS.
              • GPS_BD - использовать данные поступающие от спутников Beidu.
              • GPS_GL - использовать данные поступающие от спутников Glonass.
              • По умолчанию модуль использует спутниковые навигационные системы GPS и Glonass.

              Функция model();

              • Назначение: Выбор динамической модели навигационной платформы.
              • Синтаксис: model( МОДЕЛЬ );
              • Параметр:
                • uint8_t МОДЕЛЬ - может принимать одно из следующих значений:
                  • GPS_PORTABLE - модуль используется в портативном устройстве.
                  • GPS_STATIC - модуль используется статично.
                  • GPS_WALKING - модуль используется пешеходом.
                  • GPS_VEHICLE - модуль используется в автомобиле.
                  • GPS_VOYAGE - модуль используется на морском судне.
                  • GPS_AVIATION_1G - модуль используется на воздушном судне reset(GPS_FACTORY_SET) .

                  Описание функций библиотеки iarduino_GPS_NMEA:

                  С подробным описанием функций библиотеки и примерами её работы можно ознакомиться на странице Wiki - Парсер протокола NMEA.

                  Список функций библиотеки:

                  Библиотека содержит 4 функции:

                  • begin() - инициализация получения данных из строк NMEA.
                  • timeZone() - установка / получение часовой зоны.
                  • timeOut() - ограничение времени чтения данных.
                  • read() - чтение данных.

                  Чтение данных:

                  • float latitude - Широта (±90.0°).
                  • float longitude - Долгота (±180.0°).
                  • uint16_t altitude - Высота над уровнем моря (±32767м).
                  • uint8_t speed - Скорость (0-255 км/ч).
                  • float course - Курс (±180.0°).
                  • uint8_t satellites[GPS_ACTIVE] - Количество активных спутников (0-12).
                  • uint8_t satellites[GPS_VISIBLE] - Количество наблюдаемых спутников.
                  • float PDOP - Пространственный геометрический фактор ухудшения точности (0-25.5).
                  • float HDOP - Горизонтальный геометрический фактор ухудшения точности (0-25.5).
                  • float VDOP - Вертикальный геометрический фактор ухудшения точности (0-25.5).
                  • uint8_t seconds - Секунды (0-59).
                  • uint8_t minutes - Минуты (0-59).
                  • uint8_t hours - Часы (1-12).
                  • uint8_t Hours - Часы (0-23).
                  • uint8_t midday - Полдень (0-am, 1-pm).
                  • uint8_t day - День месяца (1-31).
                  • uint8_t weekday - День недели (0-воскресенье, 1-понедельник, . , 6-суббота).
                  • uint8_t month - Месяц (1-12).
                  • uint8_t year - Год (0-99).
                  • uint16_t Year - Год (0-65'535).
                  • uint32_t Unix - Unix время (0-‭4'294'967'296 сек).
                  • Функцию read() можно вызвать с указанием массива в качестве параметра, тогда этот массив будет заполнен данными о наблюдаемых спутниках.



                  Подключил usb gps ublox7 (он же vk 172) к mk908II с Android 4.2.2.
                  Делал всё по инструкции Rage2, за что ему большое спасибо!
                  Взял наугад модуль cdc-acm.ko(ну почти наугад т.к. в windows он не определялся как pl, ft, cp.), и повезло, появилось устройство ttyACM0 ))
                  Закинул либу, выставил скорость "busybox stty -F /dev/ttyACM0 9600"
                  проверил "cat /dev/ttyACM0" данные бегут)
                  Но не было пункта "Настройки -> Местоположения" и никакие программы не видели gps приемник. После 3х дневных танцев с бубнов сменил прошивку на Finless 1.6 Andorid 4.2.2 (до этого был Andorid 4.4 ). В ней этот пункт не вырезан.

                  Забросил свисток в шкаф, и забил на проблему. Прошел год, просматривая сайт по продаже и подготовке планшетов, наткнулся на LS23030G. Характеристики устройства радуют:


                  Российские карты создавались и создаются на математической основе отличной от основы используемой при создании картографических материалов других стран. В частности, российские карты используют в качестве основы систему координат 1942 года (СК-42 она же Pulkovo-1942), в определение которой входит эллипсоид Красовского.

                  Если вы по той или иной причине хотите, чтобы ваш приемник отображал координаты в этой системе координат (СК), вам нужно либо выбрать ее в списке поддерживаемых СК или задать вручную набор специальных параметров, описывающих как эта система соотносится с WGS84, в которой работает система GPS.

                  Система координат СК-42 в GPS приемники фирмы Garmin как правило не встроена, но ее можно прописать вручную, задав пользовательский набор параметров трансформации (User Datum). В этот набор, кроме параметров самого эллипсоида (разница в длине между большими полуосями - DA, разность сжатий - DF) входят еще относительные параметры положения его центра (DX, DY, DZ). Эти параметры задаются относительно общемировой системы координат WGS 84 (World Geodetic System 1984).

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

                  • По тем или иным причинам необходимо получить максимальную точность отображения координат на экране прибора. Разница между координатами одной и той же точки в разных системах координат составляет порядка 150 м (откуда взята эта цифра).
                  • Получаемые координаты с GPS вручную тут же переносятся на бумажную или электронную карту с известной системой координат отличной от WGS 84.

                  Важно помнить, что, независимо от того, какая система координат настроена в GPS, загрузка данных с него с помощью кабеля, будет все равно происходить в системе координат WGS 84. Таким образом, этих данные все равно придется пересчитывать в нужную систему координат.

                  • Если вы не первый раз вводите эти настройки, а меняете User Datum на другой, то вам нужно сначала сменить его на любой другой, например WGS-84, а потом снова выбрать User Datum и отредактировать его параметры.

                  Кнопка Page до страницы Main Menu
                  Пункт Setup Menu -->Enter
                  Пункт Navigation -->Enter
                  Пункт Map Datum -->Enter
                  Клавиша Вверх до пункта User -->Enter
                  Ввести параметры из таблицы

                  Далее нужно ввести следующие значения:

                  Смещение эллипсоида по оси X

                  Смещение эллипсоида по оси Y

                  Смещение эллипсоида по оси Z

                  Разница в длине между большими полуосями (а) эллипсоидов WGS-84-Красовского

                  Масштабированная разность сжатий (f1-f2)*10000
                  эллипсоидов WGS-84 и Красовского

                  • для ввода отрицательных значений введите минус в первом знаке поля, пролистав 123456. ;
                  • в некоторых моделях GPS дробные значения dx,dy,dz обычно ввести нельзя, поэтому в таблице также приведены округленные значения;
                  • Использованы значения из ГОСТ 51794-2001 >>>

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

                  На примере видна разница между точками в СК-42 (фиолетовые точки) и WGS 84 (красные) наложенных на топооснову масштаба 1:200000 находящуюся в СК-42. При таком использовании, точки в WGS-84 попадают в море. Точки в СК-42 получены с помощью GPS, настроенного используя вышеприведенные параметры (территория - Куршская Коса, побережье Балтийского моря).

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

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

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

                  Существует 3 основных способа связи приемников:

                  1. По каналу УКВ
                  2. По голосовой связи (CSD)
                  3. По сети Интернет

                  УКВ (ультракоротковолновая) радиосвязь требует использования специализированного УКВ-модема (встроенного в приемник или внешнего) и радиоантенны. В зависимости от модели УКВ-модемы работают на прием, передачу или прием/передачу поправок. На Базовом приемнике модем настраивается на передачу, а на Ровере – на прием. Главное условие соединения – правильная настройка этого оборудования! У передающего и у принимающего радиомодемов должны совпадать рабочие характеристики: частота, протокол шифрования, скорость в эфире и скорость физического соединения. В таком случае соединение стабильное и быстрое. Еще один плюс использования радиосвязи в том, что к одной Базе можно подключить неограниченное количество Роверов, соответствующе настроив их работу.



                  В некоторых случаях возникают сложности в использовании радиосвязи. Например, дальность связи определяется мощностью УКВ-модема и сильно зависит от рельефа. Мощные радиомодемы (35 Ватт) способны покрыть расстояние около 30 км, но и стоимость такого оборудование гораздо выше. Комплект получается тяжелым – к весу модема прибавляется вес внешнего аккумулятора для питания. Из-за этого внешний радиомодем обычно размещают на Базе, а Ровер используют с внутренним радиомодемом. Также, если между радиоантеннами Базы и Ровера расположено препятствие (массив леса, высокий холм, здание), то необходимо использовать ретранслятор (отдельное устройство для обхода преграды) либо антенну выше препятствия.



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




                  Самый передовой на данный момент вид связи осуществляется по сети Интернет. Встроенные GSM модемы современных приемников поддерживают и GPRS связь, а в качестве внешнего GPRS модема используется модем контроллера. Понадобится только СИМ-карта с возможностью выхода в Интернет. В современном мире уже сложно представить себе жизнь без Интернета, поэтому сеть покрытия довольно обширна. Информация, передаваемая в поправках, малого веса, значит трафик небольшой, и в итоге услуга связи стоит совсем недорого. Алгоритм работы основан на использовании некоторого сервера, на который поступают поправки от Базы и к которому обращается Ровер, чтобы эти поправки получить. Таким образом от одной Базы поправки могут получить бесчисленное количество Роверов. Естественно, их число ограничено возможностями сервера.

                  Сервер - это программное обеспечение для хранения данных в Интернете, имеет статический IP- адрес и предоставляет доступ к данным по запросу.

                  Основные протоколы для приема-передачи поправок это NTRIP и TCP/IP. Они различаются структурой и возможностями. Схема работы по протоколу TCP/IP: База-Сервер-Ровер. Любой пользователь Ровера, который знает адрес сервера (IP и Порт) может подключиться к нему для приема поправок. Также один TCP-порт поддерживает только один поток данных и, соответственно, один формат поправок.



                  Протокол NTRIP работает по схожей схеме, но появляется еще один элемент – кастер. Этот софт позволяет к одному адресу привязать множество потоков с различной информацией (виды поправок). С помощью кастера настраивается доступ к данным только для авторизованных пользователей. Это значит, что получать данные с сервера по NTRIP протоколу можно только при наличии адреса и аккаунта. Такой тип передачи данных используется в различных сетях референцных станций. Количество подключенных одновременно пользователей ограничивается только физическими возможностями сетевого оборудования.



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

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



                  У каждого способа есть достоинства и недостатки. Вывод один: универсального решения нет. Куда бы Вы ни направились со своим оборудованием, сперва изучите местность на доступность сетей связи. Россия обширна, а работа ведется везде. Если Вы оказались в месте, где на многие километры нет сотовой связи или Интернета, то придется воспользоваться радиосвязью. И наоборот, если такая возможность есть, используйте Интернет.

                  Читайте также: