Telefon, GPS i Linux
2009-06-19, Piątek 18:14:56 +0200, autor Karol „Zal” Zalewski, licencja LPRCTKC
Wstęp
W obecnych czasach moduł GPS to nie tylko narzędzie ułatwiające nam dotarcie do celu. To również gadżet, z którym coraz to częściej mamy do czynienia kupując telefon komórkowy. Ja sam posiadam zarówno zewnętrzny moduł, jak i wspomniany moduł wbudowany w telefon. Jak sobie z nimi radzę pod Linuksem?
Telefon z wbudowanym GPS-em jako zew. moduł GPS
Jak już wspomniałem, coraz więcej obecnych telefonów zawiera wbudowany moduł GPS. Niestety, ich wykorzystanie jest mocno problematyczne ze względu na możliwości tychże telefonów. Przykładem może być używany przeze mnie Sony Ericsson C702, który zupełnie nie nadaje się do nieco bardziej poważnej pracy. Chciałbym go jednak do niej zmusić. Tylko jak? Idealnym rozwiązaniem byłoby udostępnienie takiego wbudowanego GPS-a na zewnątrz - np. netbookowi, czy też laptopowi. Niestety, funkcjonalność ta nie należy do standardowej funkcjonalności udostępnianej przez telefon. Jak sobie z tym poradzić? Istnieje rozwiązanie pod postacią aplikacji Symarctic ExtGPS przeznaczonej głównie dla telefonów firmy Nokia. Napisana w Javie umożliwia stworzenie usługi Bluetooth udostępniającej na zewnątrz dane generowane przez wewnętrzny moduł. Poniżej znajduje się przepis tego, jak wykorzystać ją do przekazywania danych do systemu Linux. Całość przetestowana na systemie Ubuntu 9.04 oraz telefonie SE C702.
Na początku w telefonie instalujemy aplikację Symarctic ExtGPS, włączamy moduł Bluetooth, a następnie uruchamiamy zainstalowany wcześniej program. Powinny zostać wyświetlone komunikaty z prośbą o zgodę na dostęp do BT oraz modułu GPS. Po akceptacji naszym oczom ukazuje się prosty interfejs zawierający dwa czerwone kółka. Pierwsze od góry oznacza stan sygnału odbieranego z satelitów. Zmieni się na zielony po ustaleniu pierwszej pozycji (w przypadku obsługi A-GPS i otwartej przestrzeni nie trwa to długo). Drugie kółko to stan połączenia z komputerem. Przejdźmy zatem do PC-ta z zainstalowanym Ubuntu. Pierwsze polecenie, które wykonamy pozwoli nam zlokalizować urządzenia BT w okolicy. W tym nasz telefon.
zal@karol:~$ hcitool scan Scanning ... 00:21:9E:6D:D7:1E Pandora
W moim przypadku mowa o Pandorze. Teraz następuje wykonanie kolejnego polecenia umożliwiającego sprawdzenie, gdzie nasłuchuje program ExtGPS.
zal@karol:~$ sdptool search --bdaddr 00:21:9E:6D:D7:1E SP
Searching for SP on 00:21:9E:6D:D7:1E ...
Service Name: Serial Port 1
Service RecHandle: 0x2008002
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 2
Service Name: Symarctic ExtGPS
Service Description: Share phone's built-in GPS module via Bluetooth
Service Provider: Symarctic Solutions
Service RecHandle: 0x200800d
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x00000100-0000-1000-8000-00805f9b34fb)
"RFCOMM" (0x00000003-0000-1000-8000-00805f9b34fb)
Channel: 16
Usług może być znacznie więcej, ale nas interesuje "Symarctic ExtGPS". Ostatnia linia wyjścia wskazuje na to, iż usługa nasłuchuje na kanale 16. Utworzymy teraz urządzenie /dev/rfcomm0, które będzie powiązane z ww. usługą (generując dane NMEA 0183) i udostępni ją demonowi gpsd.
rfcomm connect 0 00:21:9E:6D:D7:1E 16
Jedno z czerwonych kółek, odpowiedzialne za stan połączenia BT, w aplikacji telefonicznej powinno zmienić kolor na zielony. Jeżeli wszystko poszło zgodnie z planem - można to sprawdzić wykonując polecenie cat /dev/rfcomm0 i obserwując wynik - to czas na demona. W kolejnej konsoli wystarczy wykonać poniższe polecenie.
gpsd -b -N -D 2 /dev/rfcomm0
Wykorzystane argumenty -N -D 2 oznaczają, iż zamiast pracować w tle, będzie on funkcjonować w pierwszym planie umożliwiając nam odczyt informacji związanych z jego funkcjonowaniem. Argument -b zapobiega zniszczeniu konfiguracji tańszych odbiorników GPS (np. GPS-009) po której konieczny jest restart urządzenia (np. poprzez całkowite wyładowanie baterii), aby mogło ono funkcjonować. Poprawność działania gpsd można również określić włączając program xgps, lub wykorzystując polecenie telnet localhost 2947, a po połączeniu przesyłając literę "r" oraz naciskając enter.
Teraz już wszystko działa. Wystarczy jedynie odpalić aplikację służącą do odbioru danych z demona i nanoszenia jej na mapę.
Uwaga! W przypadku niektórych modeli telefonów komórkowych ExtGPS nie sprawdza się najlepiej z tego względu, iż przesyła jedynie wiadomości NMEA 0183 typu GSV, co nie jest wystarczające do określenia naszego położenia. Dzieje się tak ze względu na wykorzystanie przez niego następującej metody w Javie getExtraInfo("application/X-jsr179-location-nmea"). Jest to przyczyną dla której moduł GPS z telefonu SE C702 nie zadziała, gdy korzystamy z powyższej instrukcji. Alternatywą dla ExtGPS może być otwarty GPSd napisany w Javie ME (pobierz). Również korzysta on z opisanej powyżej metody, ale ze względu na to, iż jest otwarty można samodzielnie go zmienić. Należy dokonać edycji poniższego pliku (znajdującego się w repozytorium Git).
src/org/barbelo/GPS.java
Modyfikacja metody private String get_nmea(Location location) sprowadza się do umieszczenia uzyskanych informacji o szerokości i długości geograficznej w ciągu znaków zgodnych z formatem NMEA. W wolnej chwili postaram się sam dokonać modyfikacji i umieścić na blogu gotową do instalacji wersję GPSd.
Zewnętrzny moduł GPS z interfejsem Bluetooth
Instrukcja dla zewnętrznych modułów GPS z dostępem poprzez BT jest niemal taka sama, jak powyższa. Jedyna różnica polega jedynie na tym, iż moduł taki wystarczy jedynie włączyć, a hasło BT, które jest wymagane do połączenia, jest zazwyczaj postaci "0000".
Wolne aplikacje związane z GPS-em
Mamy już strumień danych płynący od telefonu do naszego komputera. Jak go teraz wykorzystać? Należałoby skorzystać z aplikacji odbierającej dane od demona gpsd i wyświetlającej je w odpowiedniej formie, najlepiej na mapie. Spore mamy wymagania. Szczególnie, gdy weźmie się pod uwagę koszt komercyjnych rozwiązań i map w nich wykorzystywanych. Nie jesteśmy jednak na straconej pozycji. Oto dwa programy korzystające m.in. z danych dostarczanych przez projekt OpenStreetMaps, o którym opowiem nieco szerzej w dalszej części wpisu.
Pierwszym opisywanym programem jest TangoGPS dostępny m.in. w repozytorium Ubuntu. W głównej mierze korzysta on map tworzonych w ramach projektu OpenStreetMaps, ale istnieje możliwość pobrania zdjęć lotniczych dostarczanych przez projekt OpenAerialMap (opcja "Aerial") oraz topograficznych z projektu maps4free (opcja "Topo"). Nic też nie stoi na przeszkodzie, aby dodawać własne repozytoria z mapami. Całość jest w locie ściągana z Internetu wraz z poruszaniem się po mapie - można też jednorazowo ściągnąć wszystkie dane dot. map. Sam program jest intuicyjny w obsłudze i nie sprawia większych problemów.
GpsDrive to drugi program, również dostępny w repozytorium Ubuntu, korzystający nie tylko z OpenStreetMap (układ ulic), ale również mający możliwość wykorzystania zdjęć satelitarnych dostarczanych za darmo przez NASA Landsat (obraz terenu).
Polecam zapoznać się z jednym i drugim programem. Każdy z nich posiada zalety i wady, a wybór, które będziemy używać, zależy w dużej mierze od naszych potrzeb i preferencji.
Darmowe mapy, czyli...
OpenStreetMap to projekt tworzony w duchu Open Source przez społeczność, a mający na celu wykreowanie map wolnodostępnych map dla każdego z nas. Dlatego też nie tylko można je stamtąd pobierać, ale również tworzyć korzystając z zebranych przez siebie danych GPS bawiąc się tym samym w kartografa.
Co do pokrycia terenu przez takie mapy to niestety, nie dorównują one jeszcze komercyjnym rozwiązaniom i zapewne jeszcze sporo czasu upłynie nim będą. Nawet w większych polskich miastach należy spodziewać się wielu białych plam. Niemniej jednak lepsze takie rozwiązanie, niż jego kompletny brak.
Zakończenie
Szukając informacji w Internecie natknąłem się na wiele pytań dot. możliwości wykorzystania wbudowanego w telefon GPS-a w roli zewnętrznego urządzenia podpinanego do PC-ta. Mam nadzieję, iż mój opis pomoże w głównej mierze tego typu osobom, a mi samemu ułatwi poruszanie się po mieście, którego nie znam, a do którego mam zamiar się udać.
W przypadku uwag, czy też wątpliwości, proszę śmiało komentować. Byleby konstruktywnie.
2009-06-19 o Piątek 22:22:11 +0200
Zamierzasz z laptopem w ręku nawigować po Warszawie(jak się domyślam po poprzednim wpisie)?
2009-06-19 o Piątek 23:30:12 +0200
@jachacy: Coś w ten deseń, tyle tylko, że mam zamiar mieć przy sobie narzędzie, którym posługuję się na co dzień, a które nie zwraca takiej uwagi na siebie - starego palmtopa. Testy przeprowadzam obecnie na laptopie, bo tak jest po prostu łatwiej. Jak już zmuszę komórkę do wysyłania danych NMEA niosących ze sobą informacje o położeniu odbiornika to popracuję nad współpracą z moim iPAQ ;]
2009-06-19 o Piątek 23:33:49 +0200
Może spróbuj gpsmid na komórkę? Nie mam z nim doświadczenia żadnego ale wiem, że pozwala na import z OSM. A do formatu OSM można importować z UMP (ump.waw.pl), chociaż dla Warszawy to chyba nie będzie konieczne.
2009-06-19 o Piątek 23:35:32 +0200
@jachacy: Dziękuję za radę - w ramach testu wypróbuję to, co proponujesz :] Szczególnie, że na komórce mam kartę 2GiB, a na palmtopie jedynie 17MiB flasha plus część z 64MiB RAM-u. A to niewiele na mapy.
2009-06-27 o Sobota 18:46:46 +0200
a czy to prawda, ze niedlugo w gps bedzie mozna instalowac aplikacje,n p mobilne gg?
2009-06-27 o Sobota 21:24:59 +0200
@klika: Zależy, co masz na myśli pisząc "GPS". Sam moduł GPS, czyli odbiornik sygnału generowanego przez satelity wchodzące w skład systemu GPS, nie umożliwia uruchamiania jakichkolwiek aplikacji. Natomiast system, który odbiera od niego dane (np. telefon komórkowy, palmtop, notebook itp.) może taką możliwość udostępniać.
2009-07-02 o Czwartek 09:52:54 +0200
Bardzo fajnie, wszystko działa, tylko te programy do nawigacji jakieś ubogie :/ Wiem, że się dopiero rozwijają ale nie ma tymczasowo jakiegoś lepszego rozwiązania?
2009-07-02 o Czwartek 13:28:01 +0200
@Cim: Darmowego i pod Linuksa? Może być z tym problem. Jak komuś zależy to zawsze może się pokusić o zakupienie komercyjnego rozwiązania dostarczanego wraz z mapami :]
2009-10-23 o Piątek 13:44:10 +0200
Ogolnie Sys GPS jest juz bardzo wiekowy , niedawno "okryli go na lądzie" i wstawiaja odbiorniki gdzie tylko mozna. Nalezy pamietac ze jest to system wojskowy tzn , w kazdym momencie amerykance moga go wylaczyc albo co gorsze zaklocic( mielismy juz takie przypadki , wtedy komplikuje sie troche praca na morzu, bo tam osobiscie uzywam gps'a i z obserwacji nie radze w 100 % polegac na tym co tam na wyliczy odbiornik .) obecnie wszystko bedzie sie skupiac na systemie Gallileo jeszcze nie powstal a juz jest po przesciach i zmianach ...ogolnie to tam bedziemy mieli pole do popisu gdyz bede udostepnione wszystkie kanaly info (w przeciwienstwie do GPS) . Takze nie nie radze inwestowac w gps bo za 2 latka to bedzie juz tylko historia, a z innej beczki to pozycja gps co raz bardziej sie rozmywa, brak inwestycji w sysytem, jezeli USA sie nie sprezy to podziela los Glonasu, ktory juz praktycznie nie istniej chociaz ruscy sie starali hehe