Aus Linux-Magazin 07/2010

Open-Source-Navigation mit Navit

© Russell Duparcq, 123RF.com

Navit vereint Kartenmaterial von Openstreetmap, D-Bus-Anbindung und eine eigene Augmented-Reality-Integration (AR) zur modernen Navigationsanwendung. Ob und wie sich das eigene mobile Linux-Gerät zum freien Navi eignet und was die Software kann, zeigt dieser Artikel .

Freiheit geht vor: Das moderne Smartphone läuft mit Linux, Android oder Symbian. Natürlich hat der Open-Source-Evangelist auch im Navi längst Openstreetmap-Daten ([1], [2]). Aber fürs Navigieren kommt – vom I-Phone bis zum Milestone – meist proprietäre Software zum Einsatz, etwa Google Maps, Eigenentwicklungen der Hersteller oder Zukäufe wie bei Nokias OVI-Karten.

Damit das nicht so bleibt, entwickelt seit mittlerweile fünf Jahren eine stetig wachsende Community die Open-Source-Navigationssoftware Navit [3]. Das in C/C++ implementierte Projekt gibt es für zahlreiche Plattformen, es unterliegt der GPL und ist dank seines modularen Aufbaus sehr anpassungsfähig. Weil es Vektordaten anstelle von Rasterkarten nutzen kann, lässt es sich auch problemlos ohne Verbindung zu einem Kartenserver verwenden. Anders als die meisten Konkurrenten erzeugt es die angezeigten Maps dynamisch zur Laufzeit aus den Vektordaten. Ein Caching-Mechanismus sorgt dafür, dass Navit während einer Sitzung nicht ständig die gleichen Karten neu generiert.

2D- und 3D-Ansicht

Wie bei teuren Navigationssystemen kann der Nutzer zusätzlich zur typischen 2D-Kartenansicht in der Vogelperspektive auch in eine 3D-Ansicht wechseln. In beiden Varianten zeigt es die so genannten Points of Interest (POI), also Orte von besonderem Interesse, etwa Parkplätze, Sehenswürdigkeiten oder auch Gaststätten an (Abbildung 1). Zumindest in Städten bietet Openstreetmap hier mittlerweile eine fast unüberschaubare Datenfülle an.

Abbildung 1: Die Open-Source-Routingsoftware beherrscht auch die für viele Navigationsgeräte typische 3D-Darstellung, integriert dabei aber auch zahlreiche Points of Interest von Openstreetmap.

Abbildung 1: Die Open-Source-Routingsoftware beherrscht auch die für viele Navigationsgeräte typische 3D-Darstellung, integriert dabei aber auch zahlreiche Points of Interest von Openstreetmap.

Das Navit-GUI (Abbildung 2) ist bewusst schlicht gehalten und bereits für die Bedienung über ein Touchdisplay und auf schmächtigen Embedded-Systemen ausgelegt. Als Grafik-Toolkit kann man unter dem Gimp-Toolkit (GTK++), dem Qt-GUI sowie der SDL-Bibliothek (Simple Direct Media Layer) wählen.

Abbildung 2: Das Hauptmenü von Navit lässt sich sowohl mit der Maus als auch auf einem Touchscreen bedienen. So funktioniert die Software sowohl auf PCs als auch auf modernen Smartphones.

Abbildung 2: Das Hauptmenü von Navit lässt sich sowohl mit der Maus als auch auf einem Touchscreen bedienen. So funktioniert die Software sowohl auf PCs als auch auf modernen Smartphones.

Listing 1:
»navit.xml«

01 <config xmlns:xi="http://www.w3.org/2001/XInclude">
02 [...]
03 <!-- This line defines which location on the map navit will show after startup -->
04 <navit tracking="1" orientation="-1" recent_dest="10" center="5209.5 N 1328.5 E" zoom="128" zoom_max="16384" timeout="3600">
05 <!-- Use one of gtk_drawing_area, qt_qpainter or sdl. -->
06 <graphics type="gtk_drawing_area" delay="3" w="648" h="412" font_size="50"/>
07 <!-- The following line let you select which graphical user interface you'd like to use. -->
08 <gui type="gtk" enabled="no" menubar="1" toolbar="1" statusbar="1"/>
09 [...]
10 </navit>
11 </config>

Qt, GTK oder SDL

Das teilt der Benutzer Navit in der zentralen, reichlich dokumentierten Konfigurationsdatei »navit.xml« (Listing 1) mit. Die findet er entweder in »/etc/navit/« oder in »/usr/share/navit/« oder in seinem Homeverzeichnis unter ».navit/«. Letzteres ist zweifellos der beste Ort für Änderungen, denn die beiden anderen überschreibt das Paketmanagement bei Updates in der Regel. Wer mehr Infos über die zahlreichen Konfigurationsparameter braucht, wird im Projekt-Wiki [4] fündig.

Die Einstellungsmöglichkeiten umfassen neben der Konfiguration der Programmbibliotheken auch die Angabe einer Standard-Startposition, den für Entwickler relevanten Debuglevel sowie das zu verwendende Kartenmaterial. Damit dies auch offline vorliegt, gibt es mit der Website von Planet Extractor [5] einen eigenen Generator für Openstreetmap-Navit-Karten.

Routen und Tracken

Auch das Ziel einer neu zu berechnenden Route kann der Anwender am Touchscreen über eine Bildschirmtastatur eingeben, wobei als Startpunkt die eigene Position vorausgewählt ist. Analog zum Zielort lässt sich aber auch ein alternativer Ausgangspunkt über die Suchmaske definieren (Abbildung 4). Auch die verwendete Default-Schriftgröße findet sich in »navit.xml«, bei den unterschiedlichen Displaygrößen eine sicherlich häufiger benötigte Einstellung.

Abbildung 4: Navit unterstützt zahlreiche Plattformen, auch die Suchfunktion mit Onscreen-Tastatur ist für mobile Geräte vorbereitet.

Abbildung 4: Navit unterstützt zahlreiche Plattformen, auch die Suchfunktion mit Onscreen-Tastatur ist für mobile Geräte vorbereitet.

Durch die Aktivierung der Tracking-Option kann Navit eine gefahrene Route aufzeichnen und wahlweise im GPX-, NMEA- oder einem einfachen Textformat speichern. Intern dienen dem Programm für die Einbindung der Routen simple Textdateien.

Streckenbeschreibungen, die es aus anderen Systemen übernehmen soll, muss der Anwender in dieses Navit-TXT-Format umwandeln. Für GPX-Dateien liegt den Ubuntu-Paketen das Programm »gpx2navit_txt« bei.

Mobile Sprachausgabe

Die freie Navigationssoftware läuft auf praktisch jedem Linux-System. Anwenderberichte zeugen von erfolgreichen Tests auf dem Openmoko Freerunner, Nokias Maemo auf dem N800/810/900, I-Phone, Zaurus und auf Geräten mit Googles Android-Betriebssystem.

Navit integriert Module für die Sprachausgabe und stellt dynamisch generierte Textdaten in aktuell dreißig gut gepflegten Sprachmodulen bereit. Die gibt ein Sprachsynthesizer wie Espeak [6] aus und ermöglicht so eine akustische Routenführung, wie das Benutzer moderner Navigationsgeräte erwarten.

Die Angabe der zu verwendenden Maps findet sich in der Konfigurationsdatei unter dem Node »mapset«. Sie kann auf zwei Arten erfolgen: Entweder setzt der Nutzer in »navit.xml« explizit den Pfad zur Binärdatei mit dem Kartenmaterial (Listing 2) oder er verweist über Xinclude-Direktiven (Listing 3) auf weitere Konfigurationsdateien.

Reality View mit
Navit

Mario Kluge ist Mitarbeiter der Universität Potsdam. Als Ansprechpartner des Navit-Reality-View-Projektes beantwortet er die Fragen des Linux-Magazins.

Linux-Magazin: Herr Kluge, was unterscheidet Augmented Reality von virtueller Realität?

Mario Kluge: Augmented Reality (AR) oder erweiterte Realität beschreibt die komplexe Synthese von detailreichen realen Bilddaten mit virtuellen Routen-Informationen. Der Vorteil besteht in der klaren und unmissverständlichen Darstellung der Anweisungen vor der realen Ansicht, sodass AR besonders für Fußgänger geeignet ist.

Virtual oder Augmented?

Der grundlegende Unterschied zwischen Virtual Reality und Augmented Reality besteht in dem Umstand, dass AR die Umwelt mit weitreichenden Informationen ergänzt, anstatt diese virtuell zu ersetzen. Dazu erfassen verschiedene Sensoren die Position und Lage des Nutzers sehr genau, die Software integriert die virtuellen Informationen, zum Beispiel Routing-Anweisungen, lagerichtig in die Kameraszene. Das Konzept der Reality View erweitert das eingeschränkte reale Sichtfeld des Benutzers durch weitsichtige Routen-Informationen und gibt beides als kombinierte erweiterte Realität wieder.

Der Vorteil für den Nutzer liegt ganz klar in der intuitiven Navigation. Anders als in Fahrzeug-Navigationssystemen erzeugt AR keine virtuellen Welten, sondern verwendet in Echtzeit gewonnene Bilddaten. Für den Nutzer bedeutet das: Die Assoziation der dargestellten Szene zur Umwelt ist leichter, seine Aufmerksamkeit ist auf das Wesentliche – die Navigationsanweisung – gelenkt.

Linux-Magazin: Wie ist die Navit Reality View aufgebaut? Welche Komponenten müssen zusammenspielen?

Mario Kluge: RV besteht im Wesentlichen aus drei Bestandteilen:

  • Trackingsystem
  • Navigationssystem
  • Visualisierungssystem

Die Positionierung und Orientierung der Reality View erfolgt im Trackingsystem über einen GPS-fähigen Satellitenempfänger kombiniert mit einem 3-Achsen-Kompass-System und einem Beschleunigungssensor.

Diese erfassen alle Bewegungen des Nutzers sensorisch und geben sie zur Berechnung der Überlagerung mit den virtuellen Informationen weiter. Auf Grundlage der freien Geodatenbestände des Openstreetmap-Projekts berechnet Navit die optimale Route zum Zielpunkt. Anhand der sensorisch erfassten Daten des Trackingsystems lässt sich die Route perspektivisch und lagegetreu ausrichten und an das Visualisierungssystem übergeben. Das Kameramodul erfasst in Echtzeit die realen Objekte der Umgebung. Dessen Bilder erzeugen gemeinsam mit der ausgerichteten virtuellen Routendarstellung die erweiterte Realität.

Abbildung 3: Optimiert für Fußgänger: Augmented-Reality-Navigation mit Navit und freien Daten von Openstreetmap auf einem Open-Source-Handy.

Abbildung 3: Optimiert für Fußgänger: Augmented-Reality-Navigation mit Navit und freien Daten von Openstreetmap auf einem Open-Source-Handy.

Aktuell und detailliert

Im Ergebnis stellt die Reality View eine nahezu deckungsgleiche Mischung realer und virtueller Bilddaten dar, die Aktualität und Präzision verbinden. Somit ist es möglich, die Entscheidungspunkte während der Navigation, etwa Ampelkreuzungen oder Hauseingänge, direkt und frontal zu betrachten.

Linux-Magazin: Welche Anforderungen stellt die Darstellung als Echtzeit-Overlay?

Mario Kluge: Die mit der Kamera abgefilmte Umgebung beinhaltet ja als dritte Dimension die Höhe von Objekten, also etwaige Sichteinschränkungen. Die Software passt die 2D-Geodaten an die dreidimensionale reale Abbildung an. Wie gewohnt verschwinden dann Straßen hinter Gebäuden und erscheinen erst an deren Ende wieder. Um beim Betrachter nicht den Eindruck zu erwecken, die Route verliefe durch ein Gebäude, muss unser Projekt die Gesamtroute daher in einzelne Teilstücke zerlegen.

Um Häuser herum

Diese in Echtzeit ablaufende Berechnung der Sichteinschränkung verlangt präzise Positionsangaben der Hindernisse, wofür wir bisher die Hindernisgeometrien von Gebäuden verwendet haben. Ausgehend von der aktuellen Position verschneidet die AR den maximalen Sichtbereich des Kamerawinkels mit allen in ihm befindlichen Gebäuden. Sobald sich die berechnete Route an einer dieser Schnittkanten kreuzt, schneidet Navit diese für die Länge der Unterbrechung ab und blendet sie aus. So entsteht der real wirkende Eindruck, ohne dabei die Orientierung oder das Ziel zu verlieren.

Linux-Magazin: Wo können interessierte Nutzer die aktuellen Versionen ausprobieren?

Mario Kluge: Den immer aktuellen Stand der Reality View finden Ihre Leser samt Evaluierungsmöglichkeiten für eine Android-App auf den Projektseiten unter [11] oder [12]. Wir erhoffen uns vor allem Aussagen über die Akzeptanz der Nutzer, besonders bezogen auf die Navigation und die Qualität der Usability. Die Ergebnisse fließen nach der Auswertung in die Weiterentwicklung und Verbesserung der Reality View ein.

Dynamische Karten

Der Vorteil der zweiten Variante ist, dass Navit sämtliche XML-Dateien im Zielordner nach Angaben für einzubindendes Kartenmaterial durchsucht. Neue Karten lassen sich leicht hinzufügen, indem der User im angegebenen Zielordner die Binärdateien ablegt und jeweils eine XML-Include-Datei (Listing 4) erzeugt. Über die Attribute »active« und »route_active« kann er für die Routenerstellung quasi im Hintergrund sogar eine andere Karte verwenden als für die Anzeige.

Listing 2:
»navit.xml« – Pfad zur Map

01 <!-- Mapset template for openstreetmaps germany -->
02 <mapset enabled="yes">
03 <map type="binfile" enabled="yes" data="/usr/share/navit/maps/germany_osm.bin"/>
04 </mapset>

Somit ließen sich beispielsweise die fürs Routing verwendeten Straßen limitieren, um eine Vorgabe für bevorzugte Routen umzusetzen. Recht neu ist die Option »search_active«, die explizit angibt, welches Kartenmaterial Navit für die Suchfunktion verwendet.

Listing 3:
»navit.xml« – Verweis mittels
Xinclude

01 <!-- multiple mapsets via xml -->
02 <mapset enabled="yes">
03 <xi:include href="$Navit_SHAREDIR/maps/*.xml"/>
04 </mapset>

Der Routing-Test (Abbildung 5) auf Basis der Openstreetmap-Daten zeigt aber immer wieder, dass diese noch Lücken bei den Hausnummern aufweisen. Um dem zu begegnen, kann Navit neuerdings eine Straße als Ziel akzeptieren, wobei es einen Mittelwert berechnet, der die Mitte der als Ziel ausgewählten Straße identifiziert.

Listing 4:
»Navit-Xinclude.xml«

01 <map type="binfile" active="1" route_active="1" search_active="1" data="$Navit_SHAREDIR/maps/osm_deutschland.bin"/>
Abbildung 5: Die Software erstellt Routen für Auto- und Fahrradfahrer sowie Fußgänger und gibt Navigationsanweisungen.

Abbildung 5: Die Software erstellt Routen für Auto- und Fahrradfahrer sowie Fußgänger und gibt Navigationsanweisungen.

Navit und D-Bus

Ein eigens für die Interprozess-Kommunikation entwickeltes D-Bus-Plugin [7] erweitert Navit über eine reine Standalone-Desktopapplikation oder einen einfachen GPS-Sensor hinaus. Andere Anwendungen können auf diese Weise über die D-Bus-Verbindung Referenzen auf die entfernten Navit-Objekte erzeugen und deren Eigenschaften zur Laufzeit anpassen. Wie flexibel sich das einsetzen lässt, zeigt Listing 5, mit dem eine Java-Anwendung über D-Bus detaillierte Daten aus Navit abfragt.

Indem es einen von anderen Anwendungen zugewiesenen Anzeigebereich akzeptiert, lernt Navit auch ohne eigenes Fenster zu starten. Das ist möglich, weil sich das Attribut für die Window-ID des Grafikobjekts in Navit dynamisch per D-Bus (»graphics.set_attr()«) setzen lässt:

embeddedHandle = retrieveEmbeddedHandle(navitCanvas);
graphics.set_attr("windowid", UembeddedHandle);

Analog können Programme die Start- und Zielposition für das Routing an das Route-Objekt übergeben und ebenfalls dynamisch die Datenquelle für die GPS-Daten austauschen. Möglich ist auch die Verarbeitung von GPS-Daten direkt über den NMAE-Sensor, per Gpsd [8], Gpsd über D-Bus, Androids GPS [9] oder mobile Tools wie Maemos Mapper [10].

Listing 5: D-Bus und
Java

01 private void setupLowlevel() throws D-BusException, D-BusExecutionException {
02  bus = D-BusConnection.getConnection(D-BusConnection.SESSION);
03  bus.addSigHandler(Navit.Signal.class, signalHandler);
04  bus.addSigHandler(Navit.Startup.class, this);
05  navit = bus.getRemoteObject(SERVICE_NAME, Navit_NODE_NAME, Navit.class);
06  gui = bus.getRemoteObject(SERVICE_NAME, GUI_NODE_NAME, Gui.class);
07  graphics = bus.getRemoteObject(SERVICE_NAME, GRAPHICS_NODE_NAME,Graphics.class);
08  vehicle = bus.getRemoteObject(SERVICE_NAME, VEHICLE_NODE_NAME,Vehicle.class);
09  route = bus.getRemoteObject(SERVICE_NAME, ROUTE_NODE_NAME, Route.class);
10 }

POIs filtern

Neben Features wie dem Umschalten zwischen Tag- und Nacht-Modus beherrscht Navit auch das Filtern von POIs. Beim Anklicken eines Point of Interest sendet Navit ein D-Bus-Signal mit einer Liste der POI-IDs im Fangbereich. Dieses Vorgehen ist notwendig, da es durchaus vorkommt, dass mehrere POIs eng beieinander liegen und somit keine klare Zuordnung möglich ist. Mit Hilfe der Liste kann die Drittanwendung dem Anwender die POIs in einer eigenen Darstellung zur Auswahl anbieten. So sind wesentliche Konfigurationselemente der Datei »navit.xml« über D-Bus erreichbar und per Abfragefunktion (Introspection) detailliert ermittelbar.

Die implementierten Funktionen erlauben es, Navit weitgehend unabhängig vom ursprünglichen Benutzerinterface zu steuern und es in Drittanwendungen einzubetten. Mit Vorsicht zu genießen ist bei der Interprozess-Kommunikation jedoch, dass eine Anwendung, die Navit integriert, bei unbedachter Implementierung Gefahr läuft, von einem abstürzendem Navit mit in den Tiefschlaf gerissen zu werden. Ein entsprechender Funktionsaufruf durch die Rahmenanwendung würde auf eine Antwort warten und einfrieren.

Eine Lösung wäre es, Threads zur Überwachung der Kommunikation in der Rahmenanwendung zu implementieren. Im Zweifelsfall können diese aktiv den Funktionsaufruf abbrechen, den aktuellen Zustand speichern, Navit automatisch neu starten und die D-Bus-Kommunikation dann wieder neu aufsetzen.

Augmented Reality

Die Flexibilität von Navit hat in den letzten Jahren einige Folgeprojekte angeregt. An der Universität Potsdam beschäftigen sich Geografen wie Mario Kluge (Kasten “Reality View mit Navit”) damit, die Liveview der Handykamera mit Informationen aus Kartendiensten, etwa für interaktives Routing, zu ergänzen.

An einem anderen Weg entwickeln derzeit Firmen, die Navit als mobile Komponente in Fahrzeugflotten verwenden. Hier soll branchenspezifische Software in der Zentrale mit den Fahrzeugen kommunizieren und diese automatisch zum nächsten Ziel leiten. Wer Navit testen will, kann dies mit der allerdings recht jungen Mandriva Navigation Edition [13] probieren.

Infos

[1] Christoph Wagner, “Alle Wege Offen”: Linux-Magazin, 06/2010, S. 40

[2] Christoph Eckert, “Gute Führung”: Linux-Magazin, 12/2009, S. 40

[3] Navit-Projekt: [http://www.navit-project.org]

[4] Navit-Wiki: [http://wiki.navit-project.org]

[5] Openstreetmap-Karten für Navit:[http://maps.navit-project.org/download]

[6] Espeak: [http://espeak.sourceforge.net]

[7] D-Bus: [http://freedesktop.org/wiki/Software/dbus]

[8] Gpsd: [http://gpsd.berlios.de]

[9] Android: [http://www.android.com]

[10] Maemo: [http://maemo.org]

[11] Navit Reality View: [http://wiki.navit-project.org/index.php/Navit_with_Augmented_Reality]

[12] Fußgängernavigation an der Uni Potsdam: [http://www.geographie.uni-potsdam.de/fussgaengernavigation]

[13] Mandriva Navigation Edition: [http://www.mandrivauser.de/wordpress/?+p+522]

Der Autor

Thomas Haase hat mehrere Jahre als Software-Entwickler gearbeitet und betreut bei der Tarent GmbH verschiedene OSS-Projekte als Projektmanager.

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben