modRana – flexibilní navigační systém pro mobilní linuxová zařízení

By Martin Kolman - Last updated: Tuesday, June 19, 2012 - Save & Share - Leave a Comment

Začátkem roku 2010 jsem začal pracovat na bakalářské práci na téma “Flexibilní GPS navigace pro mobilní zařízení s OS Linux”. V souladu se zadáním jsem si vybral jeden již existující navigační systém a začal jsem jej vylepšovat. Z tehdy existujících projektů jsem zvolil navigační systém Rana, který byl původně určen pro “otevřený” chytrý telefon Neo FreeRunner. Vzhledem k tomu, že vývoj Rany ustrnul někdy během roku 2008, rozhodl jsem se vytvořit fork, který jsem pojmenoval modRana. Toto jméno jsem zvolil ze dvou důvodů: jednalo se o modifikaci Rany a také proto, že v uživatelském rozhraní se hojně vyskytuje modrá barva.

Komentované rozhraní modRany

Rana se ukázala být dobrou volbou – měla již modulární strukturu, kterou bylo možné snadno rozšiřovat a byla napsaná v Pythonu, takže nebylo potřeba nic kompilovat. Přesto jsem musel udělat značné množství změn a vylepšení (např. vypnout nefunkční vektorovou mapu, opravit načítání dat z GPS, přidat podporu pro ukládání mapových dlaždic do podsložek, aktualizovat URL mapových vrstev atd.), aby aplikaci mohli používat běžní uživatelé.

Na jaře 2010 jsem modRanu vydal pro Maemo 5 běžící na Nokii N900, nejdříve pouze jako archiv, poté jako instalační balíček a nakonec se dostala i do oficiálního repositáře Extras-Devel. ModRana si tak začala získávat první uživatele. Založil jsem také hlavní diskuzní vlákno, které má ke dnešnímu dni již více než 1000 příspěvků.

1. výročí modRany

 

Další větší změna v modRaně byla způsobena vydáním chytrého telefonu Nokia N9 s MeeGo 1.2 Harmattan (AKA “Maemo 6″). Hlavní podporovanou grafickou knihovnou na tomto telefonu je Qt v kombinaci s QML. Knihovna GTK, která byla jedinou grafickou knihovnou do té doby podporovanou v modRaně, na Harmattanu oficiálně k dispozici nebyla. GTK se mi sice nakonec podařilo rozjet, nefungovala však na 100% (problémy byly hlavně s virtuální klávesnicí, která se odmítala ukázat pro vstup znaků). GTK také znamenalo další závislost, kterou by uživatelé museli složitým způsobem ručně instalovat (na Harmattanu dosud chybí ekvivalent repositáře Extras z Maemo 5, který by sloužil pro komunitní porty knihoven). Qt oproti tomu funguje, je předinstalované, jsou k němu k dispozici bindingy (PySide), je rychlé, v QML se “rychle píše” a celkově se poslední dobou na mobilních zařízeních vyskytuje více, než GTK, které je spíš na ústupu.

Rozhodl jsem se tedy vytvořit pro modRanu GUI v QML, avšak vzhledem k tomu, kolik funkcí je v současnosti poskytováno GTK rozhraním, nebylo realistické přepsat vše v jednom kroku do QML (nechci totiž s modRanou zopakovat debakl OpenMoko Linuxu :) ). Rozhodl jsem se tedy pro kompromis – kód zabývající se grafikou jsem přesunul do samostatného grafického modulu tak, aby bylo možné modRanu používat s grafickými moduly podle potřeb aktuální platformy. V současnosti má modRana dva grafické moduly – jeden obsahuje původní GUI založené na GTK, druhý pak nové grafické rozhraní používající QML. V budoucnu pak díky této architektuře nebude problém podle potřeby přidávat další rozhraní, založená např. na SDL, Clutteru nebo jiné zatím neexistující grafické knihovně.

Ukázka QML rozhraní – menu

Ukázka QML rozhraní

 

 

Funkce

Mapa

Hlavní funkcí modRany je zobrazování mapy. Mapa je sestavena z “mapových dílců” – někdy se jim říká dlaždice, což jsou čtvercové obrázky o hraně 256 pixelů ve formátu PNG nebo JPEG. ModRana tyto obrázky sama nevytváří, ale stahuje je z tzv. “tileserverů” (tile je anglicky dlaždice) na Internetu. Díky tomu je pro prvotní zobrazení určitého místa na mapě nutné připojení k Internetu. ModRana samozřejmě všechny stažené dílce ukládá, takže při příštím zobrazení stejné oblasti se už nic dalšího stahovat nemusí. Je také možné vybrat oblast a mapové dílce pro ni dávkově stáhnout (např. před cestou do zahraničí bez datového roamingu).

ModRana podporuje “mapové vrstvy”, mezi kterými lze přepínat. Je možné rovněž zobrazit dvě mapové vrstvy průhledně přes sebe. Hlavním zdrojem mapových vrstev je projekt OpenStreetMap, k dispozic jsou však také vrstvy z dalších projektů, jako OpenCycleMap či Cloudmade.

Aktuální pozice je na mapě indikována “kolečkem”, které při dostatečné rychlosti pohybu v terénu (>2-3 m/s) obsahuje ukazatel směru pohybu. Dá se také zapnout “centrování”, což v podstatě znamená, že modRana bude automaticky posouvat mapu a udržovat aktuální pozici uprostřed mapy. Např. pro jízdu autem pak lze zapnout rotaci mapy ve směru pohybu a také posunutí aktuální pozice ke kraji obrazovky. Ve výsledku je pak vidět větší část mapy před námi, než za námi, což se může hodit. :)

Překrývání mapových vrstev

Navigace

ModRana podporuje navigaci “krok za krokem” s hlasovými pokyny. Jako start a cíl pro navigaci lze využít aktuální pozici, adresu, libovolný bod na mapě, výsledek z vyhledávání či uložený POI (zkratka je vysvětlena níže). Jakmile je cesta nalezena (hledání cesty v současnosti vyžaduje připojení k Internetu), nakreslí modRana nalezenou trasu na mapu a přepne se do navigačního režimu. Navigační režim spočívá v zobrazení průhledného boxu s navigačními informacemi a aktivaci hlasových pokynů. ModRana v současné době pro hlasový výstup používá Espeak, který vás bezpečně provede celou cestou (volitelně i v několika jazycích) hlasem Stephena Hawkinga. :)

Při aktivaci hlasového upozornění bere modRana v úvahu aktuální rychlost tak, aby měl uživatel vždy dostatek času na korektní odbočení. Při vyšší rychlosti jízdy upozorní modRana na odbočení v delší vzdálenosti od odbočovacího bodu, než při nižší rychlosti. Pokud je z nějakého důvodu nutné jet jinou trasou, stačí kliknout na informační box a modRana vyhledá trasu novou.

Navigace

Hledání

ModRana nabízí vyhledávání adres, článků z Wikipedie, služeb a zajímavých míst. Pokud je nalezen jen jeden výsledek, je rovnou zobrazen na mapě, pokud je nalezeno více výskytů, zobrazí modRana jejich seznam. Každý výsledek lze na mapě “rozkliknout” a přečíst si další informace, jako jsou souřadnice, či shrnutí u článků z Wikipedie. Každý výsledek lze také uložit do lokální databáze POI či použít jej jako cíl pro nalezení cesty z aktuální pozice.

POI

POI, Point of Interest, “místo zájmu” (někdy se používá název „bod zájmu“) je možné v modRaně uložit do databáze. Nová místa zájmu lze vytvořit výběrem bodu na mapě, uložením výsledku vyhledávání nebo přímým zadáním souřadnic. Ve výchozím nastavení nejsou místa zájmu viditelná, je nutné je nejdříve jednotlivě či hromadně na mapě zobrazit, stejně tak je lze zase “schovat”. ModRana si pamatuje, která másta byla naposledy nastavena jako viditelná a při dalším startu je obnoví. V neposlední řadě je také možné místa zájmu exportovat ve formátu CSV.

Tracklogy

Pojem “tracklog” označuje seznam souřadnic popisujících nějakou cestu či trasu. ModRana podporuje práci s tracklogy ve formátu GPX (v současnosti je to pravděpodobně nejrozšířenější formát pro ukládání tracklogů). ModRana dokáže nejen efektivně zobrazit externě vytvořené tracklogy na mapě, ale umí rovněž vytvořit nové tracklogy záznamem aktuální pozice v reálném čase. Pokud tracklog obsahuje data o nadmořské výšce, je k němu zobrazen výškový graf s indikátorem aktuální pozice. Pokud tracklog výšková data neobsahuje, je možné je doplnit pomocí online služby.

Výškový profil

Uživatelé

Za dva roky existence si modRana získala celou řadu uživatelů. Jako u každého open source projektu, je velmi těžké odhadnou jejich celkový počet. Avšak podle stále se objevujících “nových tváří” na hlavním diskuzním vlákně a podle nových mailů s dotazy nebude uživatelů modRany právě málo. S jistotou však lze konstatovat, že modRana je používána celosvětově. Po diskuzi s uživatelem, který jel do Taipei na Computex, se mi podařilo v rekordním čase přidat podporu pro současné zobrazení více míst zájmu naráz. Další uživatel, který použil modRanu na více než tisícikilometrové cestě po amerických dálnicích, se se mnou podělil o zkušenosti s hlasovou navigací. Jachtař – uživatel modRany z nového Zélandu – navrhl několik vylepšení pro využití modRany na lodi. Od motorkáře – uživatele modRany z Nizozemí – jsem obdržel fotku modRany na jeho motocyklu. Při nedávné diskuzi a implementaci alarmů se uživatel-pilot dotazoval na podporu 3D souřadnic pro body (místa) s alarmem.

ModRana na motorce

ModRana na motorce detail

ModRana na motorce detail

ModRana na motorce bližší detail

 

 

 

Dostupnost

Hlavní cílovou platformou modRany je OS Maemo na chytrých telefonech Nokia N900 a N9. Na N900 je modRana v oficiálním repositáři Extras-Devel, pro N9 je zatím potřeba balíček stáhnout z vývojového repositáře modRany. Až bude QML GUI, které je výchozím rozhraním na N9, obsahovat dostatek funkcí, mám v plánu modRanu pro tuto platformu zveřejnit v Nokia Store (donedávna Ovi Store).

ModRana v kombinaci s GTK GUI stále podporuje distribuci SHR na Neo FreeRunneru. Také je možné modRanu spustit s GTK rozhraním na většině linuxových PC. Po doinstalování závislostí lze na PC rozjet i QML rozhraní. Možnost spuštění na PC se hodí zejména při vývoji – mnoho změn jde otestovat bez nutnosti spuštění na mobilním zařízení.

Existuje také komunitní port modRany na herní handheld Open Pandora. ModRanu se podařilo rozjet i v chrootu na zařízeních s Androidem.

Zdrojové kódy, stránky projektu, atd.

ModRana je pod licencí GPLv3, zdrojové kódy jsou k dispozici na Githubu:

https://github.com/M4rtinK/modrana

Stránky projektu a projektová wiki se nacházejí na adrese www.modrana.org, hlavní diskuze s uživateli pak probíhá v diskuzním vlákně modRany na talk.maemo.org.

Plány do budoucna

Je jich tolik, že se na toto malé místo nevejdou. :) Přesto mohu poukázat na několik hlavních směrů vývoje.

Vylepšené QML rozhraní

QML rozhraní v současnosti obsahuje pouze zlomek funkcionality GTK rozhraní. Bylo by tedy vhodné minimálně dosáhnout funkční parity s GTK rozhraním. Celkově by to vzhledem k rychlejší rychlosti vývoje v QML snad neměl být problém. :)

Offline routování

ModRana v současnosti používá pro hledání cesty pouze online služby. Pokud tedy nemá k dispozici internetové připojení, nelze hledání cesty použít. Naštěstí již existuje několik projektů, které nabízejí offline routování na vektorových datech z projektu OpenStreetMap. Jako nejnadějnější z nich se v současnosti jeví Monav, který by měl nabízet velmi rychlé vyhledávání cesty na dlouhé vzdálenosti. Bylo by tedy vhodné zabudovat podporu Monavu do modRany.

Seznamy alarmů

Z diskuze s uživateli nedávno vyplynula další zajímavá funkce pro modRanu, a to seznamy alarmů. Princip je jednoduchý: uživatel zvolí body (místa) a ke každému bodu vzdálenost. Pokud se pak zařízení přiblíží k bodu blíž, než je daná vzdálenost, zazní alarm. Toto lze využít např. pro upozornění na blízkost nebezpečné mělčiny nebo na blížící se úsek s nevyhovujícím stavem vozovky apod.

Z brainstormingu s uživateli o tom, jak body s alarmy ukládat, vyšel nejlépe jednoduchý CSV seznam. Uživatelé tak budou moci snadno generovat a upravovat vlastní seznamy alarmů buď ručně, nebo např. shellovým skriptem. Kromě jiných se objevil také nápad spouštět z cronu skript, který každý den aktualizuje seznam alarmů pro benzínky s nejlevnějším benzínem.

Podpora dalších platforem

Jak bylo výše zmíněno, modRana v současnosti již běží na mnoha mobilních linuxových platformách, zatím však neběží na všech. S tím by bylo dobré něco udělat. :)

Portování na nové platformy je samozřejmě dáno hlavně dostupností knihoven potřebných pro běh portované aplikace. Tzv. “tvrdým” předpokladem pro běh modRany je Python. Prostředí pro běh Pythonu je naštěstí dostupné v podstatě na všech současných mobilních platformách. A díky tomu že je Python napsaný v “čistém C”, není v případě nouze takový problém jej pro danou platformu zkompilovat. Dále modRana potřebuje některou z podporovaných grafických knihoven (GTK, Qt + QML), aby mohla vůbec něco zobrazit, a tzv. “bindingy”, aby mohla z Pythonu tuto knihovnu použít. Jak jsou na tom tedy některé mobilní platformy ?

Z toho vyplývá, že realitě bude zřejmě nejblíž port pro Android, následuje port pro BB 10. Port pro WebOS bude pravděpodobně nejpracnější.

Chcete se podílet na vývoji modRany?

Jak sami vidíte, je pro modRanu naplánováno mnoho zajímavých funkcí, na kterých však v současnosti pracuji pouze já sám s občasným patchem z uživatelské komunity. Chcete, aby se modRana vyvíjela rychleji? Zapojte se! ModRana je svobodný projekt, všechen kód je na Githubu, je tedy velmi jednoduché posílat opravy a vylepšení. Nemusí jít jen o kód, hezčí ikony, pomoc při balíčkování… Velmi bych také ocenil pomoc při portování na nové platformy či dobré nápady. Těším se na budoucí spolupráci! :)

 

Sdílejte:

Share this:

Posted in Aplikace • • Top Of Page

Write a comment


Yandex Mail.ru Google LiveJournal myOpenId Flickr claimId Blogger Wordpress OpenID Yahoo Technorati Vidoop Verisign AOL