Официальный Minix Russia - Часто задаваемые вопросы.

Конечно, ты можешь купить GPS-приемник в Китае за несколько долларов. А можешь и не покупать - все равно он есть у тебя в телефоне, в навигаторе в машине… Но если ты хочешь быть настоящим хакером-инженером и разобраться в технологии GPS на низком уровне, то добро пожаловать в эту статью. Разберемся так, что мало не покажется!

История разработки глобальной системы позиционирования (Global Positioning System, GPS) уходит корнями в 50-е годы прошлого века, а первый спутник был запущен в 1974 году. Первоначально система использовалась лишь военными, но после трагедии с самолетом авиакомпании Korean Airlines, который был сбит над территорией СССР, гражданские службы также получили возможность работы с GPS. В 1993-м окончательно было решено предоставить GPS для использования гражданскими службами на безвозмездной основе, а после отключения намеренного округления положения точность возросла со ста метров до двадцати. В наши дни точность продолжает увеличиваться, а стоимость приемников - снижаться. Поэтому сделать GPS-логгер, ну или навигатор, может любой, кто родился с паяльником вместо…ладно-ладно, это шутка была. Одно другого не исключает:).

Матчасть

Итак, что же должно делать наше устройство?

  1. Получить информацию о текущем положении от GPS-приемника.
  2. Разобрать ее.
  3. Показать на экране текущее положение приемника, а также видимые спутники.

Для этого придется узнать, что таится за терминами GPS, NMEA-0183 и алгоритм Брезенхема.

GPS

Конечно, детально разбираться в нюансах работы GPS не требуется, поскольку всю работу по вычислению координат, скорости, курса и других параметров за нас возьмет на себя GPS-приемник. Но базу знать надо.

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

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

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

Существуют способы, которые позволяют уменьшить время старта: AGPS (получение альманаха альтернативными способами - через интернет или Почтой России), DGPS (исключение искажения сигнала атмосферой) и другие. Но я их рассматривать не буду, поскольку для выполнения поставленной задачи этого не нужно.

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

NMEA-0183

NMEA - National Marine Electronics Association, а NMEA-0183 (согласно Википедии) - текстовый протокол связи морского (как правило, навигационного) оборудования (или оборудования, используемого в поездах) между собой. Вот строки, приходящие от моего приемника.

(...) $GPRMC,174214.00,A,5541.23512,N,03749.12634,E,3.845,178.09,150914,A*6F $GPVTG,178.09,T,M,3.845,N,7.121,K,A*35 $GPGGA,174214.00,5541.23512,N,03749.12634,E,1,04,4.98,178.2,M,13.1,M,*56 $GPGSA,A,3,20,14,04,17,,8.85,4.98,7.31*02 $GPGSV,4,1,16,01,67,242,02,15,03,15,04,53,284,35*74 $GPGSV,4,2,16,05,23,07,19,08,21,10,24*7F $GPGSV,4,3,16,11,14,12,12,14,35,058,37,17,24,311,34*72 $GPGSV,4,4,16,20,40,275,29,22,08,097,37,25,199,27,39,25,195,32*73 $GPGLL,5541.23512,N,03749.12634,E,174214.00,A,A*6D (...)

Сначала определим похожие части каждой строки. Легко видеть, что все они начинаются одинаково и более-менее одинаково заканчиваются. $GP - информация идет от приемника GPS (ты ведь понимаешь, что на корабле куча других датчиков: если бы у нас был аварийный маяк, то строка начиналась бы с $EP , а если эхолот, то с $SD , ну и так далее). Каждая строка обязательно заканчивается контрольной XOR-суммой всех байтов в строке начиная от $ и заканчивая * - это как раз те два символа в конце строки. И не забываем про символы и после контрольной суммы. Разберем каждую из строк подробнее.

$GPRMC,hhmmss.ss,A,aaaa.aaaa,N,bbbb.bbbb,E,c.c,d.d,DDMMYY,z1,z2,e*ff

  • GPRMC - GPS Recommended Minimum Navigation Information sentence C - рекомендуемый минимум навигационной информации, строка типа С.
  • A - флаг достоверности информации. Если V , то информации верить нельзя.
  • aaaa.aaaaa - величина широты. Первые две цифры - градусы, вторые две - целое значение количества угловых минут, после точки - дробная часть количества угловых минут (переменной длины).
  • bbbb.bbbbb - величина долготы. Первые две цифры - градусы, вторые две - целое значение количества угловых минут, после точки - дробная часть количества угловых минут (переменной длины).
  • c.c - горизонтальная скорость в узлах (умножить на 1,852 для получения скорости в километрах в час), целая и дробная части имеют переменную длину.
  • d.d - направление скорости (путевой угол, курс) в градусах, целая и дробная части имеют переменную длину.
  • DDMMYY - текущая дата.
  • z1 - отсутствующая у нас величина направления магнитного склонения.
  • z2 - также отсутствующее у нас направление магнитного склонения.
  • e - индикатор режима.
  • ff - контрольная сумма.

$GPVTG,a.a,T,b.b,M,c.c,N,d.d,K,A*e

  • $GPVTG - GPS Track Made Good and Ground Speed - строка с информацией о курсе и скорости.
  • a.a - курс в градусах.
  • T - True, флаг достоверности информации.
  • b.b - направление магнитного склонения (у нас его нет).
  • M - Magnetic, да, действительно магнитное.
  • c.c - горизонтальная скорость в узлах (умножить на 1,852 для получения скорости в километрах в час).
  • N - kNots, узлы.
  • d.d - горизонтальная скорость в километрах в час (и умножать ничего не надо).
  • K - километры в час.
  • ee - контрольная сумма.

$GPGGA,hhmmss.ss,a.a,N,b.b,E,c,d,e.e,f.f,M,g.g,M,h.h,*i

  • $GPGGA - Global Positioning System Fix Data - строка с информацией о текущем местоположении.
  • hhmmss.ss - время по всемирному координированному времени UTC, когда была произведена фиксация положения.
  • a.a - величина широты.
  • N - северная широта. Если S , то южная.
  • b.b - величина долготы.
  • E - восточная долгота. Если W , то западная.
  • c - флаг качества сигнала GPS.
  • d - количество используемых спутников.
  • e.e - фактор снижения точности (DOP, Dilution of precision).
  • f.f - высота расположения приемника над уровнем моря.
  • M - высота дается в метрах.
  • g.g - различие между геоидом (истинной формой нашей планеты) и эллипсоидом по WGS84 (трехмерная система координат для позиционирования).
  • M - различие дается в метрах.
  • h.h - номер станции, передающей поправки DGPS.
  • i - контрольная сумма.

$GPGSA,A,x,y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,z1,z2,z3*i

  • $GPGSA - GPS DOP and Active satellites - строка с информацией о спутниках, использованных для определения местоположения и о факторах снижения точности.
  • A - автоматический режим выбора работы в 2D или 3D, M - ручной режим, когда жестко выбран, например, 2D.
  • x - режим работы приемника: 0 - координаты не определены, 1 - режим 2D, 2 - режим 3D.
  • y1..y12 - номера спутников, используемых для определения местоположения приемника.
  • z1..z2 - PDOP, HDOP, VDOP (факторы снижения точности по положению, в горизонтальной плоскости и в вертикальной плоскости соответственно).
  • i - контрольная сумма.

$GPGSV,a,b,c1,d1,e1,f1,c2,d2,e2,f2,c3,d3,e3,f3,c4,d4,e4,f4*i

  • GPGSV - GPS Satellites in View - строка содержит в себе информацию о номере, азимуте, высоте над горизонтом и соотношением сигнал/шум спутника. В строке максимально может быть четыре спутника.
  • a - общее количество строк GPGSV .
  • b - номер текущей строки.
  • c1..c4 - номер спутника.
  • d1..d4 - высота над горизонтом в градусах (0..90) .
  • e1..e4 - азимут спутника в градусах (0..359) .
  • f1..f4 - соотношение сигнал/шум в дБ (0..99) .

$GPGLL,5541.23512,N,03749.12634,E,174214.00,A,A*6D - на этой строке нет смысла останавливаться подробно, поскольку она содержит в себе координаты и время, а это мы уже имеем в строках GPRMC и GPGGA .

Разумеется, производителям GPS-приемников не запрещается добавлять собственные строки. У моего приемника можно при запуске увидеть такие:

$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 $GPTXT,01,01,02,ANTSTATUS=INIT*25 $GPTXT,01,01,02,ANTSTATUS=OK*3B

Алгоритм Брезенхема

Этот алгоритм является одним из самых старых алгоритмов компьютерной графики - он был разработан Джеком Брезенхемом (IBM) аж в 1962 году. С его помощью происходит растеризация графического примитива, другими словами, этот алгоритм определяет координаты пикселей, которые необходимо зажечь на экране, чтобы полученный рисунок примитива совпадал с оригиналом.

Представим, что мы рисуем линию, идущую из точки (0; 0) в (100, 32) , как ты помнишь, у нашего экрана разрешение 128 x 64 точки. Несложно посчитать, что угол между этой прямой и осью Х составляет менее 45 градусов. Работа алгоритма заключается в последовательном переборе всех координат по оси Х в диапазоне от 0 до 100 и расчете соответствующей координаты Y. Логично, что в большинстве случаев значение координаты Y будет дробным, а это значит, что надо каким-то образом выбрать целочисленное значение координаты. Это делается путем выбора ближайшего пикселя. Для других углов наклона прямой, а также для окружностей, эллипсов и прочего алгоритм имеет аналогичный вид (подробнее о нем можно почитать в Википедии).

Алгоритм Брезенхема использует только операции сложения и вычитания целых чисел: обычно использование арифметики дробных чисел замедляет работу контроллера. Обычно, но не в нашем случае, поскольку внутри контроллера STM32F303VC находится ядро ARM Cortex-M4 с FPU. FPU (Floating Point Unit) - устройство, ускоряющее работу с дробными числами (математический сопроцессор), поэтому нас ничто не ограничивает и мы можем использовать алгоритм DDA-линии . Интересную демонстрацию ускорения работы МК при рисовании фракталов можно посмотреть на YouTube .

Железо

Что же мы используем в проекте?

  • Отладочную плату STM32F3-Discovery;
  • модуль UART GPS NEO-6M от WaveShare на базе приемника u-blox NEO-6M;
  • ЖК-матрицу МТ-12864А.

Про ЖК-экран я рассказывал в сентябрьском номере (№ 188), кратко лишь скажу, что сделан он на базе контроллеров KS0108, а схема подключения к STM32F3-Discovery не изменилась: разъем для подключения экрана содержит в себе 20 пинов, описание представлено в списке по следующей маске: <номер> - <название из даташита> - <описание из даташита> - <куда подключается>.

  • 1 - Ucc - питание - к 5V на Discovery.
  • 2 - GND - земля - к GND на Discovery.
  • 3 - Uo - вход питания ЖК-панели для управления контрастностью - к подстроечному резистору.
  • 4..11 - DB0..DB7 - шина данных - к PD0..PD7 на Discovery.
  • 12, 13 - E1, E2 - выбор контроллера - к PD8,PD9 на Discovery.
  • 14 - RES - сброс - к PD10 на Discovery.
  • 15 - R/W - выбор: чтение/запись - к PD11 на Discovery.
  • 16 - A0 - выбор: команда/данные - к PD12 на Discovery.
  • 17 - E - стробирование данных - к PD13 на Discovery.
  • 18 - Uee - выход DC-DC преобразователя - к подстроечному резистору.

NEO-6M

Данный приемник производится швейцарской компанией u-blox, основанной в 1997 году. Линейка модулей Neo-6 представлена разновидностями G, Q, M, P, V и T, каждый из которых обладает своими характерными возможностями: например, Neo-6P имеет возможность очень точного (с ошибкой <1 м) определения положения за счет метода Precise Point Positioning (PPP).

Приемник Neo-6M обладает следующими свойствами:

  • время холодного или теплого старта - 27 с;
  • время горячего старта - 21 с;
  • максимальная частота выдачи информации - 1 Гц;
  • диапазон частот импульсов на пин PPS - 0,25 Гц - 1 кГц;
  • максимальная точность определения положения - 2,5 м;
  • максимальная точность определения скорости - 0,1 м/с;
  • максимальная точность определения курса - 0,5 градуса.

Neo-6M умеет использовать SBAS (Satellite Based Augmentation System) - спутниковые системы дифференциальной коррекции, что увеличивает точность определения положения до 2 м, а также AGPS (Assisted GPS) для снижения времени холодного старта. Получение данных AGPS происходит с сайта u-blox с помощью сервисов AssistNow Online и AssistNow Offline (долгосрочный альманах). Модуль обладает поддержкой протоколов NMEA, UBX и RTCM. UBX - проприетарный протокол от u-blox, а RTCM - протокол для передачи модулю данных о дифференциальной коррекции DGPS. Также для связи доступны интерфейсы UART, I2C, SPI и USB.

Для работы с приемниками существует оригинальная утилита u-center, имеющая на момент написания статьи версию 8.11 (рис. 1).

Видно, что Neo-6M обладает огромным потенциалом, но детально описать все его возможности не хватит места, поэтому ограничимся предлагаемыми из коробки: только UART на скорости 9600, только NMEA, частота импульсов - 1 Гц.

В плане подключения все предельно просто: линии VCC, GND, RX и TX на приемнике подключаем к +3.3V, GND, PA9 и PA10 на Discovery соответственно.

Программа

Она должна отображать текущее положение приемника, скорость, направление движения, факторы снижения точности, время, дату, а еще показывать в полярной системе координат используемые спутники. Вот примерно так, как это делает u-center на рис. 2.

Как только строка line от Neo-6M принимается контроллером, происходит ее разбитие на токены (массив charTokens) - на подстроки, которые в исходной строке разделены запятыми.

Char *token = malloc(strlen(line) + 1); char *token2 = malloc(strlen(line) + 1); int currentTokenNumber = 0; int currentCharInTokenNumber = 0; strcpy(token, line); char *delimeter = ","; while (token != NULL) { token2 = strpbrk(token + 1, delimeter); if (token2 == NULL) { // В конце строки меняем разделитель на "*" delimeter = "*"; token2 = strpbrk(token + 1, "*"); } /* Копируем часть строки между разделителями */ currentCharInTokenNumber = 0; /* Очищаем значение токена */ memset(charTokens, "", MAX_TOKEN_LENGTH); for (char *ch = token + 1; ch < token2; *(ch++)) { charTokens = *ch; currentCharInTokenNumber++; } currentTokenNumber++; if (delimeter == "*") { token = NULL; } else { token = token2; } }

Казалось бы, вполне логично использовать функцию strtok , но я этого не делаю. Причину покажу на примере. Пусть имеется строка a,b,c . Результат разбития ее на токены с помощью strtok будет таким: "a", "b", "c" . Для разбора NMEA это недопустимо, поскольку в этом протоколе значения токенов зависят от положения в строке. Результат работы описанного выше метода включает в себя пустые токены - "a", "b", "0", "0" "c" .

Для удобного хранения информации о положении приемника, о точности определения положения, а также о параметрах спутников были написаны три структуры данных.

Положение и скорость приемника, а также дата и время:

Struct _minimumNavigationInfo { float latitude; char latModificator; // East or West float longitude; char lonModificator; // North or South float groundSpeed; float speedAngle; float height; char heightModificator; // Metres or smth else char time; // "hh:mm:ss" char date; // "DD.MM.YY" char isValid; };

Структура точности определения координат:

Struct _fixInfo { double PDOP; double HDOP; double VDOP; };

Структура о номере спутника, его положении и качестве сигнала:

Struct _satelliteInfo { int satelliteId; float height; float azimuth; float SNR; //signal-to-noise ratio -- соотношение сигнал/шум int isFull; };

Если информация о спутнике не полная, например есть информация о высоте и азимуте, но нет о соотношении сигнал/шум, то в поле isFull записывается нулевое значение. Такие спутники при выводе на «радар» будут игнорироваться.

Заполнение структуры на основе массива токенов происходит очень просто: после разбора строки GPGSA в массиве charTokens значения факторов снижения точности *DOP находятся в элементах за номерами 15, 16 и 17.

FixInfo->PDOP = atof(charTokens); fixInfo->HDOP = atof(charTokens); fixInfo->VDOP = atof(charTokens);

Теперь можно разобранную информацию смело выводить на экран (рис. 3).


Рис. 3. А вот и реальность!

FIN

Теперь ты знаешь, что в GPS тоже нет ничего сложного (если не лезть в дебри), а если тебе хочется понять суть спутниковой навигации, то добро пожаловать на курс от Стэнфорда GPS: An Introduction to Satellite Navigation, with an interactive Worldwide Laboratory using Smartphones или от Университета Миннесоты From GPS and Google Maps to Spatial Computing на Coursera.

А в качестве домашнего задания я поставлю перед тобой три задачи: 1. Добавить возможность записи трека. 2. Заменить монохромный экран на цветной. 3. Вместе с WizFi220 (из номера 188) снабдить устройство возможностью получения A-GPS. Если возникли какие-нибудь вопросы, пиши мне на email, который можно найти в начале статьи. Удачи!

SRC

Весь код ты можешь найти на https://github.com/argrento . Просто скопируй с заменой файлы в папку Template из Standard Peripheral Library.

Не забывай заземляться! Помни, что разряд статического электричества может убить и модуль GPS, и антенну, и экран, и контроллер!

Здесь рассмотрим как настроить самый популярный GPS модуль u-blox NEO-6M. Даже если на сайте продавца написано, что модуль подходит для APM, то не факт, что в нем загружены верные настройки, поэтому нам необходимо сделать эту процедуру.

Вот так выглядят модули с RCTimer.com и MyAirBot.com:


На данных модулях GPS кроме самого модуля имеется flash-память для хранения настроек, конвертер логических уровней и стабилизатор питания 3.3В. На некоторых модулях конвертера может не быть, но память везде быть обязана! Если ее нет, то можно смело искать другой модуль. На модуле от MyAirBot.com на борту еще имеется внешний компас и светодиод для индикации 3D-fix.

Для настройки конфигурации нам понадобится:

1) Переходник USB-COM, например на микросхеме FT232RL (может быть и другой), который мы использовали для прошивки загрузчиков и .
2) Программа U-Center. Можно скачать с официального сайта по .
3) Конфигурационный файл с настройкой для APM. Скачиваем . В еще имеются сохраненные мной конфигурационные файлы.

Производим подключение переходника COM и модуля NEO-6M в соответствии с: VCC-VCC, GND-GND, RX-TX, TX-RX.
Подключение модуля GPS к FT232RL

Подключаем разъем USB переходника в ПК, устанавливаем по необходимости драйвер, в диспетчере устройств смотрим, какой назначился порт для переходника.

Устанавливаем программу U-Center на ПК, запускаем.

Нажмите кнопку с «волшебной палочкой» для установки автоматической скорости порта.

Выберите порт, который появился при подключении переходника.

После подключения в нижней части окна должны увидеть зеленый значок, это значит что модуль успешно подключился.

Нажимаем меню «Tools», «GPS Configuration» (GNSS Configuration в свежих версиях программы).

Выбираем конфигурационный файл «3DR-Ublox.txt» и в окне диалога нажимаем «Open». Ставим галку «Store configuration into BBR/Flash».

Нажимаем кнопку «File >> GPS».

Появится окно с предупреждением о несоответствии версий конфигураций, где надо нажать «Yes» (если слева в колонке версия не отображается, то необходимо сбросить настройки модуля на стандартные. Для этого нажимаем меню «Receiver — Action — Revert Config», после чего пробуем загрузить настройки снова).

Раньше до заливки конфигурационного файла мы могли видеть цветные квадратики, полоски в окне спутников, а теперь их нет. Это нормально!

Чтобы успокоиться и посмотреть данные спутников, необходимо нажать кнопку «Debug».

Теперь полоски могут долго не появляться из-за того, что после загрузки конфигурации был произведен холодный старт модуля. Модуль должен заново получить данные от спутников, чему могут мешать естественные и искусственные объекты и т.д. Теперь просто ждем. Ждать можно долго, но обычно продохит 5-10 минут и данные начинают появляться. Модуль в этот момент лучше разместить у окна. Постепенно появится больше и больше данных.

В параметрах необходимо проверить параметр TP и настроить его. Цитирую Артема:

За моргание светодиода отвечает пункт TP (Timepulse), в выпадающем списке справа надо поставить «+1 risisng edge» и нажать внизу Send, чтоб настройка прописалась. Светодиод вновь радует глаз при 2D/3D Fix.

На данном этапе настройка модуля завершена и далее можно переходить к подключению.

Также можно воспользоваться другим способом настройки, используя плату APM в качестве связующего звена между ПК и модулем GPS. Для этого необходимо загрузить особую прошивку «APM2 / Ublox passthrough» на плату, которая качается по (+ ссылка) и загружается через Mission Planner. ВНИМАНИЕ! Летная прошивка стирается и, после процедуры настройки модуля, необходимо опять загрузить летную прошивку, а так же произвести все настройки с нуля.

Ниже представлено видео данного процесса использования контроллера APM для настройки модуля GPS.

Update 15.06.2014:

Описание загрузки конфигурационного файла через контроллер APM.

Сергей Макаров:

Давайте с самого начала:
ПРОШИВАЕМ ЧЕРЕЗ APM:

Открываете пример: Файл -> Примеры -> Communication -> MultiSerialMega.
9600 .
Идете в U-Centre, загружаете конфиг, получаете ошибку, игнорируете.
Открываете среду Ардуино, в свойствах выбираете плату и порт.
Открываете пример: Файл -> Примеры -> Communication -> MultiSerialMega.
Редактируете две строчки:
Serial.begin(38400 );
Serial1.begin(38400 );

Жмете кнопку «Загрузить». APM теперь просто транслятор сигналов на скорости 38400 .
Идете в U-Centre, меняете скорость на 38400 , загружаете конфиг, уже не получаете ошибку, радуетесь.
Что может быть проще?
PS ну настройки APM ведь сохранили? Прошиваем любимую прошивку и восстанавливаем настройки только ручками!

Update 11.08.2014: Видеоинструкция от Юлиана.

Update 14.11.2014: По просьбе Сергея добавил информацию от Артема по поводу параметра отображения 3D Fix светодиодом.

Update 25.05.2015/02.06.2015: Информация от Андрея об модуле ublox neo-m8n.

Развернуть

Update 02.06.2015: Информация от Ильи об модуле ublox neo-m8n.

Развернуть

Хочу отметить, что я в коптероводстве недавно, а уж с GPS вообще никогда никак связан не был совсем. Так что всё, что я здесь пишу - исключительно личный опыт (и некоторое количество гугления)
Отвечу всем - и, надеюсь, надолго для себя закрою тему)

*у меня 3.2.1 - но, наверное, не суть*

3. Все пишут, что в 3.2 NMEA нет. Люди специально компилируют кастомные прошивки с NMEA.

Вот, собственно, я так же думал.
пока не получил по недосмотру м8н БЕЗ ЕЕПРОМ , жёстко сконфигурированный на NMEA 9800. И коптер - висел в точке! а значит, либо верно Ваше понимание того, что APM полностью конфигурирует ublox, вплоть до протоколов - либо….мозги понимают NMEA
в пользу своей точки зрения добавлю, что сейчас у меня нормальный м8н сконфигурирован на вывод Ublox+NMEA (дефолтная установка), но я добился, что в u-centre отображается стабильный NMEA без прерываний на UBX.
И, опять же, когда у меня был сконфигурирован вывод только UBX, коптер улетал в Россию.
Насколько я понимаю, всё это вкупе свидетельствует о том, что всё же коптер опирается на NMEA
Или же включение дополнительно NMEA как-то влияет на восприятие коптером UBX…но это за гранью моего понимания.

2. SBAS, кстати, по мнению некоторых, негативно влияет на точность (и барометр)
Точность - да, барометр - не знаю. Но сейчас заметил, что коптер иногда необъяснимо теряет высоту на метр, а потом возвращается. Может, вы и правы с преконфигурацией апм……

Считаю что было бы уместным предположить, что в случае с NEO M8N частота обновления актуальна НЕ ТОЛЬКО ДЛЯ ОПТИМАЛЬНОЙ РАБОТЫ С APM

Нет-нет, и я так тоже не считаю.
Я лишь заметил, что повышение частоты обновления при неизменно низкой скорости порта - в какой-то момент приводит к пропускам пакетов - или, даже, регулярному выпадению спутников на долю секунды.
В связи с чем, рекомендую обратить на это внимание тем, кто будет играть с частотой обновления.
Мне это наблюдение позволило получить 4ГЦ и стабильный поток пакетов без прерывания. Всё.

Если честно, я по горло сыт мучениями с GPS вместо полётов, - так что, думаю, флаг будет нести кто-то другой.

*а вот по поводу сохранения настроек, буду признателен
Потому как у меня при выборе Save GNSS вечно вылезали таймауты по ВСЕМ параметрам. Или по части.
А action - save config - я так и не понял, работает ли - и если да, то куда сохраняет.


Если вы нашли ошибку на странице, то нажмите Shift + Enter или , чтобы уведомить нас.

This div height required for enabling the sticky sidebar

Sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update

Для исправления тиринга (обрыва картинки) для драйверов Nvidia нужно в Параметрах системы- Экран- Обеспечение эффектов- в опции Предотвращение разрывов выбрать Повторное использование. Затем нужно выполнить следующие команды:

Sudo sh -c "echo "export __GL_YIELD=2USLEEP2" >> /etc/profile" sudo sh -c "echo "export KWIN_TRIPLE_BUFFER=1" >> /etc/profile"

Установка deb пакетов по умолчанию осуществляется через Центр программ Discover, при этом в системе предустановлена программа Qapt . Для того что бы сменить по умолчанию открытие deb пакетов другой программой нажимаем правой кнопкой мыши по deb пакету- Открыть с помощью- В другой программе- выбираем из списка нужную нам программу и ставим галочку на Запомнить связь с приложением (для Qapt нужно ввести название qapt-deb-installer).

Дополнительно для удобства работы с пакетами и репозиториями можно установить программу synaptic:

Sudo apt install synaptic

Подключаем репозиторий Партнеры Canonical. Открываем synaptic - настройки-репозитории- ставим галочки напротив репозитория Partner.
Встроенная программа Discover (центр программ) позволяет устанавливать и удалять программы, отключать репозитории, проверять обновления. Так же для данной программы установлен и включен виджет Обновления в системном лотке нижней панели, который уведомляет о доступности обновлений. С помощью правой кнопки мышки по виджету можно выполнить проверку обновлений в Discover. В большинстве сторонних тем отсутствует значок виджета Обновленй, да и сама возможность установки обновлений через Discover может показаться неудобной. В таком случае можно установить Менеджер обновлений из Linux Mint (в рунете часто не рекомендуют его устанавливать в KDE neon из-за возможных проблем с зависимостями, на англоязычных форумах пользователи его устанавливают и отрицательных отзывов я не встречал, так же и у меня не было с ним проблем при обновлении KDE Applications), правда скачаем deb пакет из репозитория Maui Linux. Скачиваем и устанавливаем пакет mint-common , затем пакет mintupdate .

Устанавливаем Adobe flash player для браузеров на основе Chromium:

Sudo apt install adobe-flashplugin

Ставим дополнительные кодеки:

Sudo apt install kubuntu-restricted-extras

Шрифты. Для управления шрифтами используется приложение Шрифты
По умолчанию в KDE neon установлены шрифты Noto Sans, довольно хорошие, но мне нравятся шрифты Verdana . Дополнительно установил патчи Infinility.

Устанавливаем патч и шрифты от компании Microsoft:

Sudo add-apt-repository ppa:no1wantdthisname/ppa sudo apt-get update sudo apt-get upgrade sudo apt-get install fontconfig-infinality sudo apt-get install msttcorefonts

Перезагружаем систему и запускаем скрипт настройки шрифтов из патча Infinality:

Sudo bash /etc/fonts/infinality/infctl.sh setstyle

В появившемся окне выбираем нужный нам вариант (я выбрал Win7). Далее открываем приложение Шрифты и устанавливаем нужные нам шрифты.

Устанавливаем DnsCrypt (шифрование dns трафика) с помощью нескольких команд:

Wget https://raw.github.com/simonclausen/dnscrypt-autoinstall/master/dnscrypt-autoinstall chmod +x dnscrypt-autoinstall su -c ./dnscrypt-autoinstall

Установка автоматическая с одним запросом о выборе сервера.

Ставим pavucontol для настройки звука. Лично у меня опция по настройки звука уведомлений не срабатывала в стандартном виджете Громкость, pavucontol решил проблему.

Sudo apt install pavucontrol

Рекомендую ознакомится с приложением Rambox , которое служит для объединения большого количества чатов и почтовых сервисов в одно приложение.
Можно воспользоваться репозиторием пользователя Алексея, внесшего большой вклад в популяризацию KDE в рунете, для установки некоторых программ одной командой:

Sudo add-apt-repository ppa:varlesh-l/ubuntu-tools sudo apt update sudo apt dist-upgrade sudo apt install git muon kate clementine qbittorrent libreoffice libreoffice-l10n-ru libreoffice-help-ru sudo apt install yakuake p7zip-full ffmulticonverter simplescreenrecorder youtube-dl caffeine myspell-ru

Устанавливаем Redshift (аналог f-lux в Windows) -утилиту регулирующее цветовую температуру монитора, в зависимости от времени суток:

Sudo apt install libqt5qml-graphicaleffects redshift redshift-plasmoid geoclue-hostip Затем добавляем виджет Redshift Control на панель задач.

Решаем проблему с использованием VPN, установкой утилиты Fruho. Fruho - менеджер VPN-соединений с графическим интерфейсом, работающий через автоматическую настройку OpenVPN. Количество сервисов ограничено. Я с его помощью использую SecurityKISS и VpnBook. Скачать deb пакет можно с официального сайта.

Темы оформления

Для Plasma 5.9 доступны новые темы оформления Plasma, скачать их можно из настроек внешней среды Plasma. Они позволяют изменить внешний вид по подобию таких рабочих окружений как окружение в дистрибутиве ElementaryOS, окружениях Unity (Ubuntu) и Gnome Shell.

Подробнее показано на видео: Plasma 5.9

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

Рекомендую попробовать тему Arc KDE. Любителям темы из дистрибутива ElementaryOS можно настроить тему следующим образом: Устанавливаем глобальную тему внешнего вида рабочего окружения ELPlas (не нажимать на применение расположения виджетов, если не хотим изменять расположение виджетов (панели и меню запуска и других виджетов), в настройках Темы рабочего стола нажимаем на Загрузить новые темы, выбираем тему Evolvere и применяем ее. Скачиваем иконки и распаковываем в директорию /usr/share/icons/. Применяем иконки в настройках Значков (Параметры системы).

Устанавливаем видео обои:

Mkdir .local/share/plasma/wallpapers cd .local/share/plasma/wallpapers git clone https://github.com/halverneus/org.kde.video.git

Можно настроить горячие клавиши в приложении Konsole (терминал), для привычного копирования и вставки через ctrl+c и ctrl+v, для этого открываем терминал - Настройки- Комбинации клавиш и выставляем нужные нам комбинации.

Стоит отметить, что несмотря на то что используется новая версия KDE Plasma 5.9, а не отточеная версия 5.8 , рабочее окружение работает стабильно. Как правило сразу же после релиза встречаются проблемы, но в KDE neon они решаются в большинстве случаев через несколько дней.

Относится к серии профессиональных модулей позиционирования, сочетает в себе низкое энергопотребление, высокую точность, а также, кроме GPS, поддерживает отечественный ГЛОНАСС.

Так как GPS и ГЛОНАСС модуль может задействовать только в режиме ИЛИ , то первым делом необходимо определиться, что мы будем использовать. Вот сводная таблица некоторых характеристик из официального даташита:

С более подробной информацией можно ознакомиться на сайте производителя https://www.u-blox.com/en/product/neo-7-series .

Из таблицы уже становится понятно, что ГЛОНАСС нам абсолютно не подходит. Но всё же, я решил это проверить еще и на практике, для наглядности.

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

С режимом ГЛОНАСС я просидел в ожидании почти 20 минут, но, больше 5 спутников так и не увидел , зафиксировать положение даже в режиме 2D, модуль по ним тоже не смог.

Подключение NEO-7 к ESP8266

Общение с модулем реализовано через UART (com порт), поэтому подключить его к нашей плате мы можем через аппаратный интерфейс (пины RX, TX) либо через софтверный (пины D7, D8).

Давайте для первоначальной настройки подключим через софтверный порт, так как аппаратный у нас задействован в соединении с компьютером, и напишем простой «бридж» com порта, который будет перенаправлять данные из GPS на порт компьютера.

Код будет предельно простым – два цикла, в которых ожидаются данные с com портов и при их поступлении пересылаются дальше. Создайте новый скетч в Arduino IDE со следующим содержимым и запустите его.

#include SoftwareSerial gps(D7, D8, false, 256); void setup() { Serial.begin(9600); gps.begin(9600); } void loop() { while (gps.available() > 0) { Serial.write(gps.read()); } while (Serial.available() > 0) { gps.write(Serial.read()); } }

Если у вас есть USB – TTL конвертер, то вы можете просто подключить модуль через него к компьютеру и сразу приступить к настройке.

Теперь, если вы откроете «Монитор порта», то увидите поток данных в формате NMEA.

Настройка U-Blox NEO-7m

Чем по-настоящему меня порадовал модуль U-Blox, так это возможностью настраивать абсолютно все параметры чипа, как через фирменную утилиту U-Center, так и по хорошо задокументированным протоколам NMEA и UBX.

Скачайте U-Center с официального сайта https://www.u-blox.com/en/product/u-center-windows и установите его.

По умолчанию модуль отправляет данные в com порт в формате NMEA и UBX на скорости 9600 бод c частотой 1 раз в секунду. Нам для работы не нужен весь поток данных и обновление раз в секунду тоже не устраивает, поэтому мы перенастроим модуль под себя. К тому же и поддерживают скорость com порта вплоть до 115200 бод, так что её мы тоже увеличим.

Откройте U-Center, выберите скорость порта 9600 и ваш com порт.

Кнопка станет зеленой, а в правой части окна начнут появляться спутники.

Неизвестно, кто и что настраивал в этом модуле до нас, поэтому первым делом скинем настройки на дефолтные. Открываем окно конфигурации, «View – Configuration View» , выбираем пункт «CFG (Configuration)» , ставим переключатель в положение «Revert to default configuration» и нажимаем кнопку «Send» .

Теперь переходим в пункт «GNSS (GNSS Config)» , отключаем всё кроме GPS и SBAS, жмём «Send» .

В пункте «NAV5 (Navigation 5)» , устанавливаем «Dynamic Model» в положение «3-Pedestrian» , не забываем нажать кнопку «Send» .

Увеличим частоту обновления данных, для этого в пункте «RATE (Rates)» вводим в поле «Measurement Period» число 100, и применяем настройки, нажав кнопку «Send» . Теперь данные будут прилетать с частотой 10 герц.

В пункте «SBAS (SBAS Settings)» , устанавливаем переключатель «PRN Codes» в положение «Auto-Scan» и нажимаем «Send» .

На этом основные настройки почти закончены, нам осталось только поднять скорость порта до 115200 бод и сохранить конфигурацию.

Перейдите в пункт «PRT (Ports)» , переключите параметр «Protocol out» в положение «0 - UBX» , это отключит вывод всех проколов кроме фирменного UBX, тем самым мы разгрузим и модуль , и сам , для которого мы напишем простой парсер протокола а не будем использовать тяжеловесные сторонние библиотеки. В строке «Baudrate» выберите скорость «115200» и как всегда нажмите кнопку «Send» .

Вот и всё, ваш модуль благополучно отвалился !))) Не пугайтесь, всё в порядке, вы же помните, что изначально мы ставили скорость 9600 а теперь изменили ее на 115200. Откройте скетч, и поправьте в нём строки инициализации портов и загрузите его.

Serial.begin(115200);
gps.begin(115200);

Не забудьте выставить в самом ЮЦентре правильную скорость.

Если вы подключались через USB - TTL конвертер, то сразу просто измените скорость порта.

Сохраним нашу конфигурацию. Откройте пункт «CFG (Configuration)» , установите переключатель в положение «Save current configuration» и нажмите кнопку «Send» .

Поздравляю, с настройкой мы закончили!

Использование GPS в Wemos D1

Я объединил всё в простой скетч, который вы можете скачать тут - .

Если вы загрузите его в ваш и откроете монитор порта, то увидите примерно такую картину:


Количество спутников, тип фиксации, текущие дату и время, координаты, скорость, высоту и точность позиционирования.

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

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

Вот так выглядят модули с RCTimer.com и MyAirBot.com:

На данных кроме самого модуля имеется flash-память для хранения настроек, конвертер логических уровней и стабилизатор питания 3.3В. На некоторых модулях конвертера может не быть, но память везде быть обязана! Если ее нет, то можно смело искать другой модуль. На модуле от MyAirBot.com на борту еще имеется внешний компас и светодиод для индикации 3D-fix.

Для настройки конфигурации нам понадобится:

1) Переходник USB-COM, например на микросхеме FT232RL (может быть и другой), который мы использовали для прошивки загрузчиков ATMega32u2 и ATMega2560 .
2) Программа U-Center. Можно скачать с официального сайта по ссылке .
3) Конфигурационный файл с настройкой для APM. Скачиваем . В архиве еще имеются сохраненные мной конфигурационные файлы.

Производим подключение переходника COM и в соответствии с: VCC-VCC, GND-GND, RX-TX, TX-RX.

Подключаем разъем USB переходника в ПК, устанавливаем по необходимости драйвер, в диспетчере устройств смотрим, какой назначился порт для переходника.

Устанавливаем программу U-Center на ПК, запускаем.

Нажмите кнопку с «волшебной палочкой» для установки автоматической скорости порта.

Выберите порт, который появился при подключении переходника.

После подключения в нижней части окна должны увидеть зеленый значок, это значит что модуль успешно подключился.

Нажимаем меню «Tools», «GPS Configuration» (GNSS Configuration в свежих версиях программы).

Выбираем конфигурационный файл «3DR-Ublox.txt» и в окне диалога нажимаем «Open». Ставим галку «Store configuration into BBR/Flash».

Нажимаем кнопку «File >> GPS».

Появится окно с предупреждением о несоответствии версий конфигураций, где надо нажать «Yes» (если слева в колонке версия не отображается, то необходимо сбросить настройки модуля на стандартные. Для этого нажимаем меню «Receiver - Action - Revert Config», после чего пробуем загрузить настройки снова).

Раньше до заливки конфигурационного файла мы могли видеть цветные квадратики, полоски в окне спутников, а теперь их нет. Это нормально!

Чтобы успокоиться и посмотреть данные спутников, необходимо нажать кнопку «Debug».

Теперь полоски могут долго не появляться из-за того, что после загрузки конфигурации был произведен холодный старт модуля. Модуль должен заново получить данные от спутников, чему могут мешать естественные и искусственные объекты и т.д. Теперь просто ждем. Ждать можно долго, но обычно продохит 5-10 минут и данные начинают появляться. Модуль в этот момент лучше разместить у окна. Постепенно появится больше и больше данных.

На данном этапе настройка модуля завершена и далее можно переходить к подключению.

Также можно воспользоваться другим способом настройки, используя плату APM в качестве связующего звена между ПК и модулем GPS. Для этого необходимо загрузить особую прошивку на плату, которая качается по ссылке и загружается через Mission Planner. ВНИМАНИЕ! Летная прошивка стирается и, после процедуры настройки модуля, необходимо опять загрузить летную прошивку, а так же произвести все настройки с нуля.

Ниже представлено видео данного процесса использования контроллера APM для настройки модуля GPS.

Update 15.06.2014:

Описание загрузки конфигурационного файла через контроллер APM.

Сергей Макаров:

Давайте с самого начала:
ПРОШИВАЕМ ЧЕРЕЗ APM:

Открываете пример: Файл -> Примеры -> Communication -> MultiSerialMega.
9600 .
Идете в U-Centre, загружаете конфиг, получаете ошибку, игнорируете.
Открываете среду Ардуино, в свойствах выбираете плату и порт.
Открываете пример: Файл -> Примеры -> Communication -> MultiSerialMega.
Редактируете две строчки:
Serial.begin(38400 );
Serial1.begin(38400 );

Жмете кнопку «Загрузить». APM теперь просто транслятор сигналов на скорости 38400 .
Идете в U-Centre, меняете скорость на 38400 , загружаете конфиг, уже не получаете ошибку, радуетесь.
Что может быть проще?
PS ну настройки APM ведь сохранили? Прошиваем любимую прошивку и восстанавливаем настройки только ручками!

Update 11.08.2014: Видеоинструкция от Юлиана.