Rtk gps своими руками

RTKLib – Сантиметровая точность GPS/ГЛОНАСС в пост-обработке

К сожалению, я не нашел на Хабре упоминаний о замечательной библиотеке для обработки сырых измерений – RTKLib. В связи с этим рискнул написать немного о том, как с её помощью можно получить сантиметры в относительной навигации.
Цель простая – обратить внимание общественности.

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

Итак, процесс в общем виде выглядит следующим образом:

Допустим, у нас есть два ГЛОНАСС/GPS приемника, с которых мы умеем получать сырые измерения (raw data). Сырыми они называются потому, что являются первичным материалом для обработки – псевдодальности, доплер, фазовые измерения…
С помощью утилиты STRSVR из состава библиотеки RTKLib нам необходимо записать два потока данных – один от базовой станции, которая будет неподвижно стоять, и второй – от ровера, который планируем перемещать. Запись от базы желательно стартовать заранее, минут за 10-15 до записи ровера.

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

1) Настраиваем Input – Serial обоих ноутах, это поток от GNSS приемника.

2) Output – File, это будет у нас файл сырых измерений.

3) Пускаем базу на запись – Start и неторопливо идем на открытую местность.

Для небольшой демонстрации распечатал лист А4 с буквой H, которую хотел обвести антенной, точнее основанием под установку на штатив. Антенна TW3440 производства Канадской компании Tallysman с заказной подстилающей поверхностью 30х30 см.

4) Располагаемся на мостовой, ставим ровер на запись и пытаемся медленно обвести буковку. Хоть на ровере стоит частота выдачи 5Гц, лучше уж все сделать тщательно.

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

6) Скидываем оба файла на один компьютер и приступаем к обработке.

7) Первое – надо из сырых данных получить стандартные RINEX файлы. В этом нам поможет RTKCONV:

8) Указываем путь к файлу с сырыми данными, а так же папку, куда программа поместит RINEX, формат сырых данных, в моем случае это NVS BINR и в настройках ставим галочки GPS и GLO, остальное можно не трогать.

9) Жмем Convert и получаем файлы для ровера и потом для базы, лучше их расположить в соответствующих папках Base и Rover.

10) Далее самое интересное – пост-обработка. Открываем утилиту RTKPOST.

11) Жмем Options, вкладка Settings 1, в настройке режима указываем Kinematic для обработки относительных измерений. Ставим галочки GPS и GLO, можно потом поиграться с настройками.

12) Вкладка Output – можно выставить формат выходных данных, например NMEA.

13) Важный момент – вкладка Positions, тут надо указать координаты базовой станции, либо взять их из заголовка, либо путем усреднения за период записи. Чем точнее знаем координаты базы тем точнее будут абсолютные координаты ровера.
Для примера укажем RINEX Header Position – взять из заголовка файла.

14) Нажимаем ОК и переходим в основное окно, там в поле Rover указываем путь к RINEX файлу ровера, ну и для базы путь к соответствующему файлу. Нажимаем Execute и ждем результат. После обработки можем посмотреть результат, нажав на Plot.

15) Внизу из рисунка видно, что решений с сантиметровой точностью получено 97.3%, остальное — это плавающее решение, точность которого значительно хуже.

Читайте также:  Автозаправочная станция своими руками

На этом пока все.

Если кому будет интересно, могу написать как реализовать RTK режим.

Так же неплохо бы узнать ваше мнение: в каких не очевидных приложениях можно использовать решения с сантиметровой навигацией?

Источник

Самодвижущаяся роботизированная косилка с привязкой по RTK GPS



Панель приборов имеет следующие переключатели и приборы:
— Общий выключатель
— Первый трехпозиционный переключатель позволяет выбирать режимы работы: ручной режим движения, режим записи дорожки, режим кошения
— Кнопка используется в качестве маркера.
— Два других 3-позиционных переключателя используются для выбора номера файла из 9. Т.е. можно записать 9 программ для 9 полей
— Еще один переключатель предназначен для управления режущей планкой. Положение Вкл, положение Выкл, запрограммированное положение управления.
— Дисплей
— Последний трехпозиционный переключатель для выбора режима отображения на дисплее
— Светодиод показывает состояние GPS. Не горит — нет сигнала GPS. Светодиоды медленно мигают, GPS без корректировки RTK. Быстро мигающий светодиод, получены поправки RTK. Светодиод горит — точное позиционирование.

Наконец, джойстик имеет два 3-позиционных переключателя. Левый управляет левым колесом, правый управляет правым колесом.


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

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

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






Мастер приобрел два RTK GPS-модуля изготовителя Navspark.

Поскольку проект расположен на юго-западе Франции, мастер выбрал схемы, работающие с группировкой американских спутников GPS, а также с российской группировкой Глонасс.

Для получения максимальной точности важно иметь максимальное количество спутников. В данном случае у мастера сейчас от 10 до 16 спутников.

Так же для этой системы нужны:
— 2 USB-адаптера, необходимых для подключения цепи GPS к ПК (тестирование и настройка)
— 2 GPS антенны + 2 переходных кабеля
— пара передатчиков-приемников 3DR.






Для управления устройством мастер использует Arduino MEGA, а для управления ножами Arduino UNO.
Режущий брус состоит из 4 дисков, вращающихся со скоростью 1200 об / мин. Каждый диск оснащен 3 ножами. Эти диски расположены так, что они образуют непрерывную полосу резки шириной 1,2 м.

Двигатели должны контролироваться для ограничения тока:
— при запуске из-за инерции дисков
— во время стрижки из-за засоров, вызванных слишком большим количеством травы

Для этого ток в цепи каждого двигателя измеряется спиральными резисторами. Плата UNO подключена и запрограммирована для измерения этих токов и отправки команды ШИМ, адаптированной к двигателям.

Таким образом, при запуске скорость постепенно увеличивается до максимального значения за 10 сек. В случае засорения травой двигатель останавливается на 10 сек и повторяет попытку в течение 2 сек. Если проблема не устраняется, цикл повторного 10-секундного отдыха и повторного запуска через две секунды. При этих условиях двигатель не перегревается.

Источник

GPS Tracker на ардуино своими руками

После нескольких экспериментов с ардуиной решил сделать простенький и не очень дорогой GPS-tracker с отправкой координат по GPRS на сервер.
Используется Arduino Mega 2560 (Arduino Uno), SIM900 — GSM/GPRS модуль (для отправки информации на сервер), GPS приёмник SKM53 GPS.

Всё закуплено на ebay.com, в сумме около 1500 р (примерно 500р ардуина, немного меньше — GSM модуль, немного больше — GPS).

Читайте также:  Автомобильного холодильник своими руками

GPS приемник

Для начала нужно разобраться с работой с GPS. Выбранный модуль — один из самых дешевых и простых. Тем не менее, производитель обещает наличие батарейки для сохранения данных о спутниках. По даташиту, холодный старт должен занимать 36 секунд, однако, в моих условиях (10 этаж с подоконника, вплотную зданий нет) это заняло аж 20 минут. Следующий старт, однако, уже 2 минуты.

Важный параметр устройств, подключаемых к ардуине — энергопотребление. Если перегрузить преобразователь ардуины, она может сгореть. Для используемого приемника максимальное энергопотребление — 45mA @ 3.3v. Зачем в спецификации указывать силу тока на напряжении, отличном от требуемого (5V), для меня загадка. Тем не менее, 45 mA преобразователь ардуины выдержит.

Подключение

GPS не управляемый, хотя и имеет RX пин. Для чего — неизвестно. Основное, что можно делать с этим приемником — читать данные по протоколу NMEA с TX пина. Уровни — 5V, как раз для ардуины, скорость — 9600 бод. Подключаю VIN в VCC ардуины, GND в GND, TX в RX соответствующего serial. Читаю данные сначала вручную, затем с использованием библиотеки TinyGPS. На удивление, всё читается. После перехода на Uno пришлось использовать SoftwareSerial, и тут начались проблемы — теряется часть символов сообщения. Это не очень критично, так как TinyGPS отсекает невалидные сообщения, но довольно неприятно: о частоте в 1Гц можно забыть.

Небольшое замечание относительно SoftwareSerial: на Uno нет хардверных портов (кроме соединённого с USB Serial), поэтому приходится использовать программный. Так вот, он может принимать данные только на пине, на котором плата поддерживает прерывания. В случае Uno это 2 и 3. Мало того, данные одновременно может получать только один такой порт.

Вот так выглядит «тестовый стенд».

GSM приемник/передатчик

Теперь начинается более интересная часть. GSM модуль — SIM900. Он поддерживает GSM и GPRS. Ни EDGE, ни уж тем более 3G, не поддерживаются. Для передачи данных о координатах это, вероятно, хорошо — не будет задержек и проблем при переключении между режимами, плюс GPRS сейчас есть почти везде. Однако, для каких-то более сложных приложений этого уже может не хватить.

Подключение

Модуль управляется также по последовательному порту, с тем же уровнем — 5V. И здесь нам уже понадобятся и RX, и TX. Модуль — shield, то есть, он устанавливается на ардуину. Причем совместим как с mega, так и с uno. Скорость по умолчанию — 115200.

Собираем на Mega, и тут нас ждет первый неприятный сюрприз: TX пин модуля попадает на 7й пин меги. На 7м пину меги недоступны прерывания, а значит, придется соединить 7й пин, скажем, с 6м, на котором прерывания возможны. Таким образом, потратим один пин ардуины впустую. Ну, для меги это не очень страшно — всё-таки пинов хватает. А вот для Uno это уже сложнее (напоминаю, там всего 2 пина, поддерживающих прерывания — 2 и 3). В качестве решения этой проблемы можно предложить не устанавливать модуль на ардуину, а соединить его проводами. Тогда можно использовать Serial1.

После подключения пытаемся «поговорить» с модулем (не забываем его включить). Выбираем скорость порта — 115200, при этом хорошо, если все встроенные последовательные порты (4 на меге, 1 на uno) и все программные работают на одной скорости. Так можно добиться более устойчивой передачи данных. Почему — не знаю, хотя и догадываюсь.

Итак, пишем примитивный код для проброса данных между последовательными портами, отправляем atz, в ответ тишина. Что такое? А, case sensitive. ATZ, получаем OK. Ура, модуль нас слышит. А не позвонить ли нам ради интереса? ATD +7499… Звонит городской телефон, из ардуины идет дымок, ноутбук вырубается. Сгорел преобразователь Arduino. Было плохой идеей кормить его 19 вольтами, хотя и написано, что он может работать от 6 до 20V, рекомендуют 7-12V. В даташите на GSM модуль нигде не сказано о потребляемой мощности под нагрузкой. Ну что ж, Mega отправляется в склад запчастей. С замиранием сердца включаю ноутбук, получивший +19V по +5V линии от USB. Работает, и даже USB не выгорели. Спасибо Lenovo за защиту.

Читайте также:  Изготовление фуганка своими руками

После выгорания преобразователя я поискал потребляемый ток. Так вот, пиковый — 2А, типичный — 0.5А. Такое явно не под силу преобразователю ардуины. Нужно отдельное питание.

Программирование

Модуль предоставляет широкие возможности передачи данных. Начиная от голосовых вызовов и SMS и заканчивая, собственно, GPRS. Причем для последнего есть возможность выполнить HTTP запрос при помощи AT команд. Придется отправить несколько, но это того стоит: формировать запрос вручную не очень-то хочется. Есть пара нюансов с открытием канала передачи данных по GPRS — помните классические AT+CGDCONT=1,«IP»,«apn»? Так вот, тут то же самое нужно, но слегка хитрее.

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

В результате, при наличии соединения, получим ответ от сервера. То есть, фактически, мы уже умеем отправлять данные о координатах, если сервер принимает их по GET.

Питание

Поскольку питать GSM модуль от преобразователя Arduino, как я выяснил, плохая идея, было решено купить преобразователь 12v->5v, 3A, на том же ebay. Однако, модулю не нравится питание в 5V. Идем на хак: подключаем 5V в пин, с которого приходит 5V от ардуины. Тогда встроенный преобразователь модуля (существенно мощнее преобразователя ардуины, MIC 29302WU) сделает из 5V то, что нужно модулю.

Сервер

Сервер написал примитивный — хранение координат и рисование на Яндекс.картах. В дальнейшем возможно добавление разных фич, включая поддержку многих пользователей, статус «на охране/не на охране», состояние систем автомобиля (зажигание, фары и пр.), возможно даже управление системами автомобиля. Конечно, с соответствующей поддержкой трекера, плавно превращающегося в полновесную сигнализацию.

Полевые испытания

Вот так выглядит собранный девайс, без корпуса:

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

Припаивал провода, вынул несколько контактов из колодок ардуины. Выглядят так:

Подключил 12V в машине, проехался по Москве, получил трек:

Точки трека достаточно далеко друг от друга. Причина в том, что отправка данных по GPRS занимает относительно много времени, и в это время координаты не считываются. Это явная ошибка программирования. Лечится во-первых, отправкой сразу пачки координат со временем, во-вторых, асинхронной работой с GPRS модулем.

Время поиска спутников на пассажирском сидении автомобиля — пара минут.

Выводы

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

Ну и ещё нужно поправить код для более плавного трека, хотя основную задачу трекер и так выполняет.

Использованные устройства

  • Arduino Mega 2560 [compatible]
  • Arduino Uno [compatible]
  • GPS SkyLab SKM53
  • SIM900 based GSM/GPRS Shield
  • DC-DC 12v->5v 3A converter

Литература

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

Для компиляции кода для ардуино нужно импортировать библиотеку tinygps.

Источник

Оцените статью