Здравствуйте!
К сожалению, я не нашел на Хабре упоминаний о замечательной библиотеке для обработки сырых измерений – 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 режим.
Так же неплохо бы узнать ваше мнение: в каких не очевидных приложениях можно использовать решения с сантиметровой навигацией?
Автор: Svrg