Карты для gps своими руками

Всё, что вы хотели знать о GPS, но боялись спросить. Часть 3: Сделай карту для навигатора сам!

Итак, в предыдущих двух статьях («Часть 1: что такое GPS и с чем его едят» и «Часть 2: GPS-навигаторы и карты») стало понятно, что основная сложность, связанная со спутниковой навигацией, заключается в поиске нужных карт. В этой статье я предложу свой путь – вместо покупки недешёвых карт и жесткой привязки к производителю воспользоваться ресурсами сети Интернет, некоторыми бесплатными приложениями и своими руками.

Неплохая вещь — сказал сам себе Джузеппе, — можно

смастерить из него что-нибудь вроде ножки для стола.

(Алексей Толстой — Золотой ключик, или приключения Буратино)

Хотя кое-что всё-таки придётся купить – абсолютно бесплатные решения не дадут таких возможностей как OziExplorer CE (программа доступна на сайте http://www.oziexplorer.com/, здесь же есть и ознакомительная, урезанная по функциональности, версия). Это приложение очень популярно среди владельцев GPS -навигаторов от Garmin , Lowrance , Eagle , Magellan , MLR , Silva , Brunton , Tripmate , Earthmate и коммуникаторов на базе Windows Mobile . Стоимость программы на сегодняшний день составляет 30 евро, что сравнимо со стоимостью хорошей карты для GPS -навигатора, однако, заплатив эту цену, пользователь получает огромные возможности при работе с растровыми картами самых разных форматов, которые представляют собой изображения (BMP, TIFF, JPG, PNG, GIF, CAP, KAP, OZI) с файлом привязки, где указываются координаты ключевых точек на карте и местности. Собственно, задача создания своей карты и состоит в получении точного картографического изображения, которое может быть привязано к местности при помощи ключевых точек.

Среди возможностей программы необходимо отметить поддержку путевых точек, треков, маршрутов и множество режимов работы, каждый их которых отображается на отдельном экране, коих 18 – любой пользователь сможет подобрать подходящий. Стоит, однако, учесть, что карты, используемые приложением, не являются векторными, посему маршруты придётся составлять вручную – проставляя путевые точки и прокладывая с их помощью предполагаемую траекторию движения. Хотя можно опереться на кратчайший путь – как показывает практика, этот режим неплохо работает и довольно точно предсказывает предполагаемое время прибытия. Зато карт у Вас появится великое множество, причём самых разнообразных, что выгодно отличает приложение от любой другой программы. Для навигации можно использовать карты высот, физические, аэрофотоснимки, спутниковые карты от Google , схематические карты и т.п. – любое (отсканированное, к примеру) изображение может стать картой — даже если это схема размещения пиратского клада.

Таким образом, возникает вопрос – а где взять эти самые изображения?

Во-первых, их много на специализированных форумах пользователей OziExplorer. Причём эти карты бесплатны и абсолютно легальны – они созданы энтузиастами.

Во-вторых, карты близлежащего леса, ущелья, глухой деревни, горнолыжного курорта или любимого города может не оказаться в сети, поэтому можно сделать карту самостоятельно, воспользовавшись одним из картографических сервисов. Среди подобных самыми известными являются Google Earth и Google Maps . Однако кроме них существует и много других, например Digital Globe , Kosmosnimki . ru , Vitrual Earth , Yahoo ! Maps , eAtlas , NASA , Яндекс.Карты, WikiMapia…

Но один из сервисов, пока не получивший мировой известности, всё же заслуживает особого внимания – сервис OpenStreetMap (http://www.openstreetmap.org). Этот свободный проект представляет собой создаваемый мировым сообществом картографический сервис на основе данных, вносимых вручную пользователями или загружаемых с GPS-приёмников. Всего пять лет назад проект стартовал в Великобритании, но уже сегодня он содержит подробнейшие карты многих (причём не самых крупных) городов мира, точность, детальность и актуальность которых порой превосходит платные карты от крупнейших мировых поставщиков GPS -навигаторов.

Данные об основных дорогах обычно получаются из «трека» (следа) терминалов систем спутниковой навигации. Такие треки создаются добровольцами и выполняются в результате путешествий по исследуемому району пешком, на велосипеде или на машине. Для записи трека используется GPS-устройство, связанное с КПК, мобильным телефоном или ноутбуком. Спутниковые снимки земной поверхности позволяют рисовать, не имея треков, карты крупных городов (для которых имеются снимки высокого разрешения). В качестве источников используются правительственные сервисы, такие как Landsat, Prototype Global Shorelines (PGS) и TIGER, а также картографический сервис Yahoo!.

Читайте также:  Краски для фестиваля красок своими руками

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

Однако, даже имея в запасе обилие картографических сервисов, получить из них карту с привязкой весьма затруднительно без соответствующего программного обеспечения. И такое нашлось, причём, что очень приятно, бесплатное и довольно качественное — SAS.Планета.

Эта программа (свободно доступна со страницы http://sasgis.ru/sasplaneta) предназначена для просмотра и загрузки спутниковых снимков высокого разрешения и обычных карт с сервисов Google Maps, DigitalGlobe, Космоснимки, Яндекс.карты, Yahoo! Maps, VirtualEarth, Gurtam, OpenStreetMap, eAtlas, iPhone maps. Карты скачиваются в кэш на компьютере и могут быть просмотрены в режиме Офф-лайн. Причём поддерживается совмещение различных карт и экспорт их в некоторые популярные форматы, часть из которых, как Вы уже догадались, поддерживается и OziExplorer CE . Кроме того, программа создаёт и файл привязки, что полностью избавляет пользователей от необходимости посещать ключевые точки и определять их точные координаты. Достаточно лишь скачать нужную область планеты с необходимым масштабом, сформировать карту и загрузить её в портативное устройство.

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

Общая последовательность действий такова:

Запускаем программу SAS. Планета, выбираем нужную карту и находим необходимую местность, выбираем нужный уровень детализации при помощи зума слева и запоминаем уровень увеличения (в примере 18х):

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

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

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

В открывшемся окне выбираем вкладку Склеить, где устанавливаем нужный тип карты, детализацию и обязательно галочку рядом с файлом привязки типа . map , нажимаем Начать и сохраняем в формат ECW .

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

На некоторых типах устройств OziExplorerCE может не понимать формат ECW . Выход есть – утилита Img2Ozf, позволяющая конвертировать множество форматов в гарантированно понятный «родной» формат ozfx3. Утилита бесплатная и доступна с сайта http :// www . oziexplorer . com /, однако для её работы требуется установленная «взрослая» версия OziExplorer – программы для Windows -ПК, превосходящей по функциональности «карманную» версию.

Img2Ozf полезна ещё и тем, что при конвертации в формат ozfx3 способна в разы уменьшить размер итогового файла, ускорив также работу OziExplorerCE с созданной картой.

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

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

В последнее время рынок мобильных GPS -систем динамично развивается – конкуренция растёт, компании появляются и исчезают (как, к примеру, случилось с некогда популярной Magellan, продавшейся Mitac Mio), известные бренды выходят на рынок GPS (Digma, Nexx Digital) или уходят с него (Harman/Kardon, Sony, частично Panasonic). Мобильные телефоны со встроенным GPS -ресивером постепенно вытесняют отдельные GPS -навигаторы и эта тенденция обещает усиливаться. Доля телефонов со встроенным GPS -приёмником неуклонно растёт с каждым кварталом, большинство новых моделей смартфонов и коммуникаторов уже выпускаются готовыми к GPS -навигации. Каждый месяц выходят новые портативные GPS -приемники, становясь компактнее и симпатичнее. GPS стремительно перестаёт быть уделом избранных и перемещается на массовый рынок. Дело за малым – Вашим желанием принять участие.

Читайте также:  Конденсатор вместо аккумулятора своими руками

Источник

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

Читайте также:  Прически своими руками пошагово для 1 сентября

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

Источник

Оцените статью
Своими руками