Привет! 

Ты наверное сейчас занят решением проблемы взлома очередного мега-супер-гипер сервака, но знаешь ли ты, что такое 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 можешь приступать к построчному разбору пакетов и созданию мега программулины )))).

Оставить мнение

Check Also

FAQ: 10 простых и полезных трюков для командной строки UNIX и Linux

В современных *nix-системах есть масса команд, утилит и возможностей, о которых иногда не …