Ключевые слова:garmin, gps, linux, map, graph, image, (найти похожие документы)
From: jetxee <jetxee@gmail.com.>
Date: Mon, 23 Oct 2010 17:02:14 +0000 (UTC)
Subject: Работа с GPS-навигаторами Garmin в Linux
Оригинал: http://sovety.blogspot.com/search/label/gpsGarmin GPSmap 60Cx: подключение и использование в Linux
Вчера стали обладателями вот такого устройства, GPS-навигатора Garmin
GPSmap 60Cx: Устройство позволяет пользоваться загружаемыми векторными
картами и имеет карточку памяти. Впрочем, все возможности ещё только
предстоит научиться использовать. Карты надо научиться делать самим
(те, что в продаже, стоят безумно дорого, но, главное, нормальных
топографических карт нет, всё больше дороги...) -- но это отдельная
тема (кое-какие инструкции (1) уже (2) нашёл (3)). Вчера же
вечером прокатились на велосипедах, чтобы записать тестовый трек, а
после я пытался "подружить" это чудо со своим GNU/Linux. Ниже краткий
конспект.
Подключается GPSmap 60Cx по USB (кабеля для подключения по
последовательному порту в комплекте нет). Причём может подключаться в
двух режимах: USB Mass Storage (ну с этим всё понятно, как флэшка, при
отключении -- устройство перезапускается) и по своему собственному
протоколу (по умолчанию). Дальше я буду писать в основном про второй
режим подключения.
Похоже, что в дистрибутивном ядре Debian (2.6.24-1-686) нужные драйвера
garmin-gps уже включены, потому что сразу после подключения устройства
dmesg выдаёт следующее:
usb 4-1: new full speed USB device using uhci_hcd and address 9
usb 4-1: configuration #1 chosen from 1 choice
garmin_gps 4-1:1.0: Garmin GPS usb/tty converter detected
usb 4-1: Garmin GPS usb/tty converter now attached to ttyUSB0
Из чего следует, что устройство подключается как /dev/ttyUSB0.
Передача точек маршрута (Waypoints) и треков (Tracks)
Вначале пробую программу gpsman. Интерфейс не сверхудобный, куча не
связанных между собой окошек, между которыми приходится переключаться,
кнопки, которые распахиваются в меню, но зато всё это дело работает! :)
Настройки потребовались минимальные: в главном окошке в диалоге Options
указать GPS Model "Garmin" и Serial port "/dev/ttyUSB0". Всё, после
этого в окошке GPS Reciever -- там, где написано offline нажимаем и
выбираем check -- надпись сменится на зелёную online, а кнопки внизу
станут активные. Именно эти кнопки и надо использовать чтобы скачивать
с устройства (Get) или загружать на устройство (Put) разные типы объектов.
Я пробовал скачивать точки маршрута и записанный трек (кнопки WPoint и
Track соответственно). После их нажатия программа получает с устройства
список имеющихся в нём объектов, и уже в другом окошке можно выбрать
нужный и сохранить/экспортировать. Треки можно сразу экспортировать в
формате GPX. Ещё треки можно просматривать и редактировать на "карте"
в gpsman. Слово "карта" написал в кавычках -- потому что вначале это
чистый лист, подложку с картой сделать вроде бы можно, но как -- пока
не разбирался.
Можно загрузить трек и точки маршрута с устройства при помощи программы
gpsbabel, из коммандной строки. Если устройство подключено к
/dev/ttyUSB0, а нужен трек с точками в формате GPX, то получить его
можно так:
$ gpsbabel -t -w -i garmin -f /dev/ttyUSB0 -o gpx -F мойтрек.gpx
Другой способ получить эту информацию -- скопировать с устройства
GPX-файл в режиме USB Mass Storage, а потом уже его
конверировать-преобразовывать... Этот файл с названием вида
ГГГГММДД.gpx появляется на карточке памяти только если включена
соответствующая функция в приборе. В него пишутся копии всех треков за
день, сам прибор никак этой информацией не пользуется. gpsman же
позволяет скачивать треки, находящиеся в памяти прибора. На мой взгляд,
использовать gpsman проще, потому что треки и точки пути будут уже
разделены и называться так же, как и на устройстве.
Лирическое отступление: Как вставить GPX-трек на Google Earth или
Google Maps? Совет нашёл на Geofaq.ru (загрузка данных GPS на
растровую карту). Если кратко, то трек нужно преобразовать в формат
KML, а затем выложить куда-нибудь в веб, а в Google Maps указать URL
этого файла. В Google Earth KML-файл можно открыть непосредственно. В
случае использования свободного софта, преобразовать файл из GPX в KML
может GPSBabel:
$ gpsbabel -i gpx -f 20080611.gpx -o kml -F 20080611.kml
Эта команда говорит: исходный формат GPX (-i gpx), исходные данные
брать из файла 20080611.gpx (-f имяфала), конечный формат KML (-o kml),
писать результат в файл 20060811.kml (-F имяфала). Всё, полученный файл
можно просмотреть в Google Earth или Google Maps.
Загружать точки-треки-маршруты с компьютера на навигатор я ещё не
пробовал, но в целом создалось впечатление, что работать с
точками-треками-маршрутами можно без проблем.
Другие способы: у gpsman есть интерфейс коммандной строки (ещё не
пробовал), есть программа gpstrans, умеющая делать примерно то же
самое, тоже с интерфейсом коммандной строки (тоже ещё не пробовал).
Далее речь пойдёт о загрузке в прибор карт, прежде всего неофициальных
(потому что покрытие официальных гарминовских топографических карт
весьма неудовлетворительное).
Использование официальной MapSource4.0
С устройством поставляется программа MapSource4.0, необходимая для
установки официльных карт, годная и для скачивания-закачивания треков,
маршрутов и точек. Программа без проблем установилась под wine (версия
1.0-rc-1), даже на русском языке.
Народ на форумах подсказал, что нужно сделать вот так:
$ ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com1
и после этого перезапустить MapSource. После этого программа стала
находить подключенный по USB прибор и с ним работать. Проверил передачу
треков и точек пути, загрузку карт на прибор. Вроде всё нормально.
Использование неофициальной QLandkarteQLandkarte -- свободная программка с неплохим интерфейсом
предназначенная заменить собой несвободную MapSource, в том числе
загружать на устройство карты. В данный момент мне удалось с её помощью
просматривать карты в формате IMG, но вот соединяться с устройством
QLandkarte никак не хочет. Выдаёт мистическую "Device link error", а
в настройках прямо сказано, что имя порта для USB-устройств
игнорируется... В общем, надо разбираться, копать список рассылки,
потому что программа похоже стоит того.
Другие способы загружать на устройство карты
Копирование карт в режиме USB Mass Storage. Вот здесь предлагают
такой способ:
Q: I copied the IMG files onto my GPS, but don't see anything.
A: Garmin GPS's have to use the gmapsupp.img file in the Garmin
folder (USB Drive Letter:\Garmin\GMAPSUPP.IMG) and there can only be
one of this file. Either rename the 1 file you want to gmapsupp.img
or use sendmap20 to compile all the img's you want into one
gmapsupp.img file.
Попробовал, создал на карточке устройства папку. Клал туда IMG-файлы.
Устройство не видит. Переименовывал тот или иной файл в GMAPSUPP.IMG.
Не находит. Пробовал называть строчными буквами (хотя там же всё равно
FAT?). Не помогает. То ли карты не те, то ли надо что-то с устройством
вначале сделать.
Есть программка sendmap20. Бесплатная её версия для Linux не
работает: точнее не находит /dev/ttyUSB0. И что с ней можно сделать --
я не придумал. Зато вот на этом польском форуме написали, что если
в wine связать порт com1 c /dev/ttyUSB0 (см. выше про MapSource), то
под wine будет работать бесплатная Windows-версия sendmap20.
И действительно, sendmap20 без проблем работает в wine после привязки
порта, карты на устройство загружаются. Также в wine хорошо работает
GPSMapEdit, которым можно создавать и редактировать карты. Бинарная
бесплатная версия cgpsmapper, который конвертирует файлы из "польской
нотации" в формат IMG, используемый Garmin, -- тоже работает. Так что
уже даже удалось создать и загрузить на устройство самодельную карту.
При использовании sendmap20 нужно каждый раз стирать с устройства все
карты и заливать весь нужный набор заново, это особенность программы.
Резюме: подключение GPS устройства Garmin GPSmap 60Cx в Linux проблем
не вызвало, передача точек пути, треков и маршрутов похоже работает
нормально (как минимум, в MapSource и в gpsman), конвертировать данные
в другие форматы умеет gpsbabel, карты можно загружать на устройство с
помощью sendmap20 или MapSource под wine; сами карты в формате IMG в
Linux можно просмотреть в QLandkarte или официальном MapSource, полный
цикл подготовки карт можно выполнить при помощи бесплатного (но
несвободного) ПО, но замену некоторым программам можно найти. В этом
плане я связываю надежды с QGIS и GRASS, но пока ничего с их помощью не
произвёл.
Как загружать геокэши в навигатор Garmin
В прошлой заметке я написал о том, как подключить Garmin в Linux и
какими программами можно пользоваться. В этот раз более конкретный и
короткий "рецепт".
Есть такая игра: геокэшинг. Суть игры -- по данным координатам находить
тайники. Координаты и описания тайников можно найти на сайте
http://geocaching.com. Конечно, координаты можно ввести в прибор и
вручную, но проще скачивать файлы-описания в специальном формате loc.
Далее о том, как загрузить эти файлы в Garmin.
Это можно сделать в MapSource. Однако проще и быстрее, по-моему,
воспользоваться gpsbabel.
Так, если файл называется geocaching.loc, а устройство подключено к
/dev/ttyUSB0, то сконвертировать и поместить геокэш в память устройства
можно одной командой:
$ gpsbabel -i geo -f geocaching.loc -o garmin -F /dev/ttyUSB0
Понятно, что если геокэшей много, загрузить их все можно вот так:
$ for f in *.loc ; do gpsbabel -i geo -f ${f} -o garmin -F /dev/ttyUSB0 ; done
Как загрузить путевые точки на Garmin с указанием типа иконок
Очень кратко. Чтобы установить тип иконок, загружая данные с помощью
gpsbabel нужно воспользоваться опцией deficon. Так, имея два файла с
разными видами путевых точек, я отправляю их в GPS-навигатор с
указанием разных типов иконок (в данном случае "палатка" (Campground)
для биваков и "домик" (House) для приютов):
$ gpsbabel -i gpx -f Coordinate\ Bivacchi\VdA\(gpx\).gpx -o garmin,deficon=Campground -F /dev/ttyUSB0
$ gpsbabel -i gpx -f Coordinate\ Rifugi\VdA\(gpx\).gpx -o garmin,deficon=House -F /dev/ttyUSB0
Список других иконок Garmin здесь.\
Визуализация профилей высоты и скорости GPS-треков
Помимо нанесения GPS-трека на карту, одним из наиболее интересных
способов его представления является, на мой взгляд, построение графика
изменения высоты или скорости движения как функции пройденного
расстояния или прошедшего времени. Такие графики я называю
"профилями" трека.
Нарисовать такие графики можно, например, воспользовавшись сайтом
gpsvisualizer.com. Однако мне не очень нравится иметь их метку на
картинке (раз) и не иметь свободного ПО, чтобы проделать это же самое
на своём собственном компьютере (два).
Так что предлагаю свой скрипт gpxplot, который строит такие графики
по данному GPX-файлу. Прямая ссылка на скрипт: gpxplot.py.
Собственно, тут всего две важных особенности:
1) GPX-файл может содержать несколько несвязных треков, каждый из
которых может состоять из нескольких "сегментов", поэтому хотелось
сохранить возможность показывать их на графике именно как отдельные
участки трека.
2) Информации о пройденном расстоянии в GPX-файле нет. Скрипт
рассчитывает его в предположении сферической формы земли. Думаю, для
большинства приложений этого достаточно.
Будучи запущен без параметров, скрипт просто печатает таблицу с данными
по всеми точкам трека. Построить какой угодно график по такой таблице
можно в любой программе.
Скрипт может также построить график самостоятельно (с помощью gnuplot).
Для этого используется опция -g:
$ ./gpxplot.py -g -x time -y elevation track.gpx
Если модуль python-gnuplot установлен, то картинка появится на экране.
Если такого модуля нет, то будет напечатан скрипт для gnuplot. В этом
случае запустить gnuplot можно так:
$ ./gpxplot.py -g -x time -y elevation track.gpx | gnuplot -persist -
Как уже, наверное, понятно, -x time указывает откладывать по оси
абсцисс время (-x distance -- пройденный путь), а -y elevation --
откладывать по оси ординат высоту (-y velocity -- скорость).
Чтобы сохранить результат в файл, указываем опцию -o имяфайла:
$ ./gpxplot.py -g -x time -y elevation -o track.png track.gpx
Поддерживаются форматы: SVG, EPS, PNG, JPG.
Указать местную временную зону можно опцией -t имя_зоны:
$ ./gpxplot.py -g -t 'Europe/Moscow' track.gpx
В этом случае необходимо присутствие в системе модуля pytz.
Может быть, в будущем добавлю всякую раскраску и украшательство
графиков. Вероятно, добавлю другие механизмы отрисовки графиков
(matplotlib, например). Было бы интересно сделать отрисовку средствами
Google Charts (тогда уже и до веб-версии недалеко).
Впрочем, главное назначение скрипта -- просто вытянуть из GPX файла
данные нужные для построения профилей. Предварительную обработку и
фильтрацию треков предлагаю делать с помощью gpsbabel.
Карты OpenStreetMap в GPS-навигаторах Garmin
Летом и осенью мной довольно успешно использовался такой
технологической цепочкой: gpsmapedit (редактирование карты в формате
mp) + cgpsmapper (компиляция карт в гарминовский формат img) + sendmap
или MapSetToolKit c MapSource (предварительный просмотр и загрузка
карт в прибор). Впрочем, запускать программы в wine не очень-то удобно,
да и все эти программы, за исключением MapSetToolKit несвободны.
Дополнительные "удовольствия" с использованием sendmap и MapSource в
wine встретились и в свежих выпусках Ubuntu (а именно заблокированный
по-умолчанию и не вполне рабочий драйвер garmin_gps).
Однако жизнь налаживается. Сегодня
захожу в вики OpenStreetMap и вижу такую страницу: Карты OSM на
Garmin (по-английски). И там есть такая табличка. А из таблички
этой следует, что уже есть несколько свободных программ, обслуживающих
весь цикл редактирования и загрузки в GPS-прибор карт.
Итак, первый этап, редактирование карт: JOSM, позволяющий сохранить
карты в формате osm. Можно, конечно, по-прежнему пользоваться
gpsmapedit, сохраняя карты в формате mp, см. дальше.
Второй этап, компилируем карты в формат прибора (img): на выбор
Mkgmap или GroundTruth. Mkgmap вроде может обрабатывать и файлы
mp, и файлы osm. GroundTruth, кажется, только osm. Обе программы умеют
довольно многое. В конкретных отличиях предстоит разобраться, но по
первому взгляду кажется, что Mkgmap компилирует карты сама, в то время
как GroundTruth полагается на несвободный cgpsmapper (или это только
опция?). Есть ещё перловый скрипт osm2mp (предполагает последующее
использование cgpsmapper).
Третий этап, объединение карт. Есть такая аппаратная особенность
приборов Garmin: нужные фрагменты карты должны быть объеденены ещё до
загрузки или во время загрузки в прибор. Объединить файлы img могут
Mkgmap и QLandkarte GT (преемница старой QLandkarte).
Четвёртый этап, загрузка карт в устройство. На выбор: QLandkarte,
GroundTruth или простое сохранение файла с картой (gmapsupp.img) в
папку Garmin/ на карточку памяти устройства.
Пока что эти программы я не попробовал, но был очень рад увидеть, что
теперь они есть. И загружать в GPS-навигаторы самодельные карты (в т.ч.
карты OpenStreetMap) теперь будет проще. О чём и хотел сообщить :-)