Ты наверное сейчас занят решением проблемы взлома очередного
мега-супер-гипер сервака, но знаешь ли ты, что такое GPS и как с ним
обращаться?! Если нет, то тебе сюда! В этой статье я расскажу тебе о
том, как работают GPS приемники, как получить с них информацию, а так
же как самому написать простенькую программу для работы с GPS-модулем.
GPS (Global Positioning System, Система Глобального
Позиционирования) была введена в действие США в 1994 году. Состоит она
из 24 спутников и наземных приемных комплексов, коим может являться и
твой GPS-навигатор или GPS-модуль (в дальнейшем навигатор). Для точного
определения координат твой навигатор должен видеть минимум 4 спутника.
В недалеком прошлом точность определения координат вне территории США
(а точнее для потребителей не из США) была искусственно снижена, но не
так давно это ограничение было убрано и теперь ты можешь определять
свое местоположение даже в тайге с точностью до нескольких метров.
На пальцах все это работает так: твой навигатор получает информацию
с каждого из видимых спутников, которые являются для него как бы
маяками. Внутри навигатора находится микропроцессор с зашитой в него
программой, которая на основе полученных данных и высчитывает твое
местоположение.
В настоящее время в продаже имеется огромное количество
GPS-навигаторов и GPS-модулей для КПК и ноутбуков. GPS-навигатор это
GPS-приемник с экраном, на котором отображается информация о твоем
местоположении, а GPS-модуль – это GPS-приемник, который подключается к
компьютеру и передает всю навигационную информацию программе, которая с
ним работает. Все они в принципе отличаются только форм-фактором и
принципиальных различий в работе не имеют. Но нас с тобой больше
интересует каким же все таки образом он общается с компьютером и как
вытащить из него информацию. Сейчас все расскажу и покажу.
Какого бы форм-фактора (COM, USB, BlueTooth и т.п.) не был
GPS-модуль, он будет логически связан с компьютером через COM-порт,
т.е. при подключении создается соединение по последовательному порту.
Навигационная информация в большинстве случаев передается по протоколу
NMEA. Это самый распространенный протокол передачи для GPS-модулей.
Хотя есть и другие протоколы, но мы их рассматривать не будем.
Ну а теперь самое время узнать как же сделать софтину для работы со
всем этим хозяйством. Скажу сразу, что мне не очень хочется сейчас
объяснять как тыкать в кнопки в том же
VB, статья носит больше ознакомительный характер. Для тех кто в танке я
объясню подобно процесс создания программы в следующих статьях.
Я освещу лишь наиболее важные моменты и я думаю у тебя все получится.
Скажу сразу, что ваять прогу можно в любых языках программирования,
лишь бы была возможность работы с последовательным портом и со
строками.
Первое с чего нужно начать это с открытия COM-порта. Почти все
приемники по умолчанию имеют установки: скорость 9600 бит/с, 8/N/1. Как
только ты откроешь порт тебе сразу с интервалом в секунду будет
приходить навигационная информация примерно такого вида:
$GPGGA,143345.264, 0936.23,N,06354.15,E, 0,06,0.0,230.6,M,0.0,M,0.0,0345*76
$GPRMC,143345.26, A,0936.23,N,06354.15, E,0.0,0.0,230306,0.0,E,A*45
$GPGSA,A,3,03, 04,05,07,11,12,0.0,0.0,0.0*Е2
$GPGSV,1,1,06,05,67,120,20*34
Теперь приступим к разбору:
Данные передаются в виде предложений. Формат предложений следующий:
$AAAAA[, <данные> ]*hh<CR><LF>, где
$ - символ начала предложения (код 24h);
AAAAA - пятисимвольный адрес (имя) предложения;
[, <данные> ] - список полей данных разделенных запятыми (код 2Сh);
* - признак контрольной суммы (код 2Ah);
hh - контрольная сумма;
<CR><LF>, - конечный ограничитель (коды 0Dh и 0Ah).
Типы полей данных.
Тип поля |
Обозначение |
Определение |
Специальный формат полей |
Статус |
A |
Поле одного символа. А= да, данные
достоверны, предупредительного сигнала
нет. V= нет, данные не достоверны, есть
сигнал предупреждения. |
Широта |
llll.ll |
Поле постоянной/переменной длины:
градусы-минуты доли минуты. 2 знака
градусов, 2 знака минут и переменное
число знаков долей минуты. Если первый
знак градусов или минут отсутствует, то
его заменяют нулем с тем, чтобы
сохранить постоянное число знаков.
Децимальная точка и последующие знаки
долей минут являются дополнительными и
могут не использоваться, если не нужно
большое разрешение. |
Долгота |
yyyyy.yy |
Поле постоянной/переменной длины:
градусы-минуты и доли минуты. 3 знака
градусов, 2 знака минут и переменное
число знаков долей минуты. Если первые
знаки или первый знак минут отсутствует,
то их заменяют нулем для того, чтобы
сохранить постоянное число знаков.
Децимальная точка и последующие знаки
долей минут являются дополнительными и
могут не использоваться, если не нужно
большое разрешение. |
Время |
hhmmss.ss |
Поле постоянной/переменной длины: часы/минуты/секунды
и доли секунды. 2 знака часов, 2 знака
минут, 2 знака секунд и переменное число
знаков долей секунд. В качестве первого
знака часов, минут, секунд может быть
поставлен ноль, для сохранения
постоянного числа знаков. Если не
требуется высокая точность, то
децимальная точка и доли секунд могут
быть опущены. |
Определенные поля |
|
Некоторые поля специально
предназначаются для размещения заранее
определенных постоянных величин, чаще
всего буквенных обозначений. Признаком
таких полей является наличие одного или
нескольких знаков. |
Поля цифровых величин
Переменное число |
x.x |
Цифровое
поле постоянной или переменной длины для целых и дробных чисел. Первый
и последний знаки могут быть заменены нулями. Децимальная точка и
дробная часть являются дополнением и могут быть опущены, если не
требуется высокое разрешение. |
Шестнадцатеричное постоянной длины |
hh |
Только шестнадцатеричное число постоянной длины, старший значащий бит слева. |
Информационные поля
Изменяемый текст |
c—c |
Поле знаков изменяемой длины. |
Постоянное буквенное поле |
aa |
Поле постоянной длины, включающее в себя большие или малые буквенные знаки. |
Постоянное цифровое поле |
xx |
Поле постоянной длины, включающее в себя цифровые знаки. |
Постоянное текстовое поле |
cc |
Поле знаков постоянной длины.ъ |
Примечания:
1. Пробелы могут быть использованы только в полях текстов изменяемой длины.
2. Отрицательный знак “-” (код 2Dh) является первым знаком поля,
если в нем приводятся отрицательные величины. При использовании
отрицательного знака в полях фиксированной длины их длина увеличивается
на единицу. При положительных величинах знак опускается.
GGA – Данные определения места по GPS
Время место и данные относящиеся к обсервации.
$GPGGA,hhmmss.sss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh<CR><LF>
Полями данного предложения являются:
1. hhmmss.sss – время навигационных определений;
2. llll.ll,a – широта, N/S;
3. yyyyy.yy,a – долгота, E/W;
4. x – показатель качества обсервации: 0 = нет данных, 1 = обсервация получена, 2 = обсервация в дифференциальном режиме;
5. xx – число используемых спутников;
6. x.x – величина горизонтального геометрического фактора (HDOP);
7. x.x,M – высота антенны над уровнем моря (геоидом), м;
8. x.x,M – превышение геоида над эллипсоидом WGS84, м;
9. x.x – устаревание дифференциальных поправок, то есть время в
секундах с момента получения последней дифференциальной поправки,
нулевое поле используется в случае выключения дифференциального режима;
10. xxxx – идентификатор дифференциальной станции 0ё1023.
RMC – Рекомендуемый минимальный набор данных по GPS и ГЛОНАСС
Время, дата, координаты и курс счисляемые аппаратурой.
$GPRMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,xxxxxx,x.x,a,a*hh<CR><LF>
Полями данного предложения являются:
1. hhmmss.ss – время;
2. A – статус (A/V);
3. llll.ll,a – широта, N/S;
4. yyyyy.yy,a – долгота, E/W;
5. x.x – скорость в узлах;
6. x.x – курс в градусах;
7. xxxxxx – дата: dd/mm/yy (день/месяц/год);
8. x.x,a – магнитное склонение в градусах, E/W;
9. a – индикатор режима: A = автономная обсервация, D = дифференциальный режим, N = данные недостоверны.
GSA – Фактор ухудшения точности, используемые для навигации спутники
$GPGSA,a,x,xx, ... ,xx,x.x,x.x,x.x*hh<CR><LF>
Полями данного предложения являются:
1. a – режим управления количеством определяемых координат: М = ручное, указан режим, А = автоматическое переключение;
2. x – режим работы: 1 = обсервация невозможна, 2 = определяются две координаты, 3 = определяются три координаты;
3. xx...xx – номера спутников используемых для решения навигационной
задачи, количество полей равно количеству каналов приемника, для GPS
используются номера 1ё32, для WAAS 33ё64, для ГЛОНАСС 65ё96;
4. x.x – общий геометрический фактор ухудшения точности (PDOP);
5. x.x – горизонтальный геометрический фактор ухудшения точности (HDOP);
x.x – вертикальный геометрический фактор ухудшения точности (VDOP).
GSV – Видимые спутники
Число спутников в зоне радиовидимости, номер спутника, угол
возвышения, азимут и отношение сигнал/шум. Одно предложение может
содержать информацию об 1 до 4 спутников, дополнительные данные о
спутниках передаются в следующих предложениях. Номер предложения
указывается в первых двух полях данных. Для спутниковых систем
зарезервированы следующие номера: для GPS 1-32, для WAAS 33-64, для
ГЛОНАСС 65-96.
$GPGSV,x,x,xx,xx,xx,xxx,xx, ... ,xx,xx,xxx,xx*hh<CR><LF>
Полями данного предложения являются:
1. x – общее число сообщений;
2. x – номер сообщения;
3. xx – общее число спутников в зоне радиовидимости;
4. xx – номер спутника;
5. xx – угол возвышения спутника, градусы 00-90;
6. xxx – азимут истинный, градусы 000-360;
7. xx – отношение сигнал/шум 00-99 дБ, если спутник не сопровождается не передается.
Примечание: поля 4, 5, 7 повторяются для 2, 3 и 4 спутников.
Ну вот теперь, имея описание протокола NMEA и драйвер
прямые_руки.sys можешь приступать к построчному разбору пакетов и
созданию мега программулины )))).
|