Für eine Demo hier klicken

Beschreibung avNav

Raspberry Pi als Bordcomputer / Navigation im Browser

18.03.2016

Thread im Segeln Forum

Source Code auf GitHub

Direkt zur Beschreibung der WebApp hier.

NEU! - Android App

Konvertieren der Karten hier.
(Neu Oktober 2015 - Windows Desktop App/Installer)


Motivation

Nachdem ich schon eine ganze Weile mit Rasterkarten unterwegs navigiere (erst unter Windows mit Seaclear, dann unter Windows, WindowsCE und OSX mit OpenCPN und OziExplorer) hatte ich schon eine ganze Weile nach Möglichkeiten gesucht, das zu erweitern und noch besser tauglich für unterwegs zu machen.

Meine Wunschliste dabei war:

  • Navigation auf kleinen Geräten (Laptop ist immer ein wenig unhandlich) – 7 oder 10 Zoll Tablet wäre Ideal

  • Navigation auch im Cockpit

  • Trackaufzeichnung

  • Verknüpfung mit der „on board“ Navigation (seit einiger Zeit habe ich ein RO4800 als Funke, das auch einen AIS Decoder hat – und ja auch schon GPS Daten bekommt)

  • Nutzung der Rasterkarten (BSB, NV, alles was sich per Download über mobile atlas creator bekommen lässt...)

  • Minimaler Installationsaufwand

  • Klein, wenig Stromverbrauch (sollte möglichst immer laufen können)

  • Wenig „Bastelarbeit“ - also möglichst keine eigenen Schaltungen löten

Irgendwann habe ich mal den raspberry pi entdeckt und nachdem er zu Hause jetzt schon eine Weile als media center arbeitet, dachte ich, dass der eine gute Basis für einen Bordcomputer abgeben könnte.

Allerdings musste ich nach einiger Recherche feststellen, dass es noch keine fertige Software gab, die meinen Anforderungen genügen würde. Insbesondere die Einbettung der seriellen Schnittstellen (typisch seriell-usb-Wandler) macht immer wieder Mühe, da Linux hier immer etwas kreativ ist...

Also habe ich beschlossen mich selbst daran zu machen. Im Folgenden will ich meine Lösung beschreiben, da es ja vielleicht Interessierte gibt, die es Nachnutzen möchten. Die gesamte Software steht zum download unter einer open source Lizenz bereit.



Überblick

avnav-raspi-2016-03
Wie im Bild zu sehen, besteht die gesamte Lösung aus mehreren Teilen:

  • Einem Raspberry Pi mit einer server software (avnav_server.py), die die angeschlossenen Geräte (NMEA über Seriell-USB Wandler – z.B. PL 2303), Bluetooth GPS,... abfragt, die Daten aufbereitet und per WLAN zur Verfügung stellt

  • Einer Software für Windows/OSx/Linux, die zum Vorbereiten und Konvertieren der Karten dient

Über ein WLAN, das der raspberry pi als access point bereitstellt, können verschiedene Geräte auf die Daten zugreifen. Dabei gibt es mehrere Varianten:

  • Auf den Geräten (z.B. Ipad oder Laptop) kann eine Navigationssoftware laufen (getestet: InavX,OpenCPN), diese greifen über TCP auf die NMEA Daten zu. Navigationssoftware und Karten müssen natürlich auf den Geräten installiert sein.

  • Auf den Geräten läuft nur ein Browser, die Navigation erfolgt per Java Script app, die vom raspberry bereitgestellt wird. Dazu muss nur die entsprechende URL aufgerufen werden. In diesem Falle ist auf den Geräten keine Software installiert, nur ein aktueller Browser muss vorhanden sein (getestet: Chrome unter Windows, OSX, Safari, Android ab 4.x – Chrom/Stock/Boat Browser, IOS, Blackberry stockBrowser, WebBrowser mini).

Die server software auf dem raspberry ist in python geschrieben und über ein xml file konfigurierbar (was im Normalfall aber nicht notwendig sein sollte). Ich stelle neben dieser Software auch ein fertiges Image für den raspberry zur Verfügung, dass nur noch auf eine SD-Karte installiert werden muss (Empfehlung: mindestens 8GB, mehr ist besser...).

Die Web Applikation bietet eine  Navigation mit Rasterkarten inklusive AIS Darstellung, Wegepunkt Navigation und Routing. Falls die Web-Applikation verwendet werden soll, müssen die Karten dafür auch auf dem raspberry installiert werden. Diese müssen dazu vorher auf dem PC (Windows, Osx, Linux) in das gemf Format konvertiert werden (ab 2015-10-19 kann das auch direkt auf dem Raspberry erfolgen) . Im Wesentlichen können die folgenden Kartenquellen verarbeitet werden:

  • Alle Kartentypen, die die GDAL software lesen kann (also insbesondere BSB Karten)

  • Mit Mobile Atlas Creator heruntergeladene Karten

  • Zur Nutzung von NV digital Karten bitte ich um Kontaktaufnahme, hier ist die Einhaltung der Lizenzbedingungen ein Thema.

In den folgenden Abschnitten gehe ich auf die Funktion der einzelnen Teile ein wenig genauer ein.



Die Server Software (avnav_server.py)

Auf dem raspberry pi ist zunächst ein ganz normales Debian image installiert (ca. 2GB). Dazu kommen einige Zusatzpakete (liste siehe unten) und meine Software.

Der Hauptbestandteil der Sofware auf dem raspberry pi ist ein in python geschriebener Server. Im Folgenden beschreibe ich in groben Zügen, was dieser Server intern tut.




Dieser Server versucht alle am raspberry angeschlossenen seriellen Geräte zu erkennen und deren NMEA Daten zu lesen. Typisch werden die Geräte über seriell-usb Wandler angeschlossen (bei mir z.B. PL2303). Man muss ein wenig aufpassen, dass man einen Wandler hat, der vom Raspberry auch sauber unterstützt wird - siehe z.B. hier. Da das Verwalten der seriellen Schnittstellen unter Linux etwas magisch ist, scant der Server (per Dbus) die angeschlossenen Geräte auf eine entsprechende serielle Klasse und ermittelt deren Schnittstelle (device). Anschliessend versucht er ein auto bauding zwischen 4800 und 34000 Baud und bemüht sich, NMEA Daten zu erkennen. Falls keine Daten empfangen werden, wird die Schnittstelle geschlossen und das Spiel beginnt von vorn. Damit „überlebt“ er auch das Anschliessen/Abstecken von Wandlern im Betrieb oder das An- bzw. Abschalten von Geräten. Bei mir hängt ein RO4800 mit AIS Decoder dran, die GPS Daten werden durchgereicht. Alternativ versucht er auch Kontakt zu seriellen Bluetooth Geräten aufzunehmen, falls er per discovery welche findet und versucht ebenfalls NMEA Daten zu Lesen. Getestet bei mir mit einer Holux GPS Slim236. In diesem Sinne arbeitet er auch als NMEA Multiplexer.

Alle GPS-Daten werden intern in eine Liste eingefügt und per TCP bereitgestellt. Verbundene TCP Empfänger (z.B. OpenCPN) bekommen so jeden empfangenen Datensatz weitergereicht. Per Default "lauscht" der server (intern:SocketWriter) auf Port 34567.

Anschliessend werden die NMEA Daten an den Decoder weitergereicht. Auf dem raspberry benutze ich dazu gpsd. Leider liess der sich nicht verwenden, um direkt die seriellen Schnittstellen zu lesen, daher macht der avnnav_server einen Socket auf, an den sich der gpsd connected und von dem er die Daten liest. Das Starten des gpsd übernimmt ebenfalls der anav server. Am „anderen Ende“ werden über die gpsd python Schnittstelle die dekodierten Daten ausgelesen (gps Daten und AIS Daten) und im Server abgelegt ("NMEA decoded data") für den Zugriff per HTTP aus der WebApp. Der gpsd wird überwacht und bei Fehlern neu gestartet. Zusätzlich werden die dekodierten Daten auch benutzt um Track Dateien zu schreiben.

Über den integrierten WebServer kann der Zugriff auf diese dekodierten Daten erfolgen (per HTTP GET, Antwort als json).

Neu ab Versionen 2015-01-23:

Der Route-Handler wertet eingestellte Routen (bzw. Wegepunkte) aus und berechnet daraus die Daten für eine Autopilot-Steuerung. Diese werden als RMB NMEA Datensätze wieder in die NMEA Daten eingespeist und stehen so an allen Schnittstellen zur Verfügung.

Es gibt dazu einen Seriell Writer, der die Daten über USB-Seriell Wandler ausgeben kann.

Falls gültige GPS Zeitinformationen empfangen werden, wird die Systemzeit des raspberry entsprechend eingestellt.

Auf dem raspberry gibt es noch einen service, der den avnav_server beim Systemstart automatisch startet und es auch ermöglicht, ihn geordnet zu beenden.

Da der gesamte server in python geschrieben ist, kann er auch (vor allem zu Testzwecken) unter Windows oder Osx (Mac), Linux laufen. Dazu muss python ab 2.6 installiert sein, falls reale serielle Daten gelesen werden sollen noch pyserial. In diesem Falle steht gpsd als Dekoder ja nicht zur Verfügung, es wird dann ein interner Dekoder genutzt, der die wichtigsten NMEA Sequenzen dekodiert und ein AIS Dekoder in python, der ebenfalls durch das gpsd Projekt bereitgestellt wird.

Der Server kann in weiten Grenzen durch ein xml File konfiguriert werden, für die verschiedenen Nutzungsfälle liefere ich dokumentierte Beispiele mit.

In der Auslieferung für den pi ist die Software so konfiguriert, dass sie alle per USB angebundenen seriellen Schnittstellen öffnet, dort versucht NMEA Daten zu erkennen (per auto-bauding von 4800 B/s bis 38400 B/s) und diese dann verarbeitet.

Ausserdem wird (falls ein Bluetooth adapter erkannt wurde) versucht, mit allen seriellen Bluetooth Geräten Verbindung aufzunehmen und auch von dort NMEA Daten zu empfangen. Damit sollte im Normalfall keine weitere Konfiguration nötig sein und NMEA Daten sofort erkannt werden (kann man im Status display prüfen - s.u.).

Die ausgelieferte avnav_server.xml Datei enthält Kommentare, so das Anpassungen an die eigenen Bedürfnisse einfach möglich sein sollten.

Die Software ist auf github verfügbar - downloads auf wellenvogel.de.

Software auf dem raspberry

Auf dem raspberry ist die Software in der folgenden Verzeichnisstruktur installiert:

Verzeichnis

Inhalt

/data/

Eine separate data partition. Diese wird automatisch beim ersten Hochfahren angelegt und umfasst die gesamte Speicherkarte (- ca. 2GB für die boot partition und die root partition). Das Filesystem ist so angelegt, dass es gut mit sehr vielen kleinen Dateien umgehen kann (für die Karten).

/data/avnav/charts

Verzeichnis für die Kartendateien. Jeder verwendete Kartensatz muss in einem separaten Unterverzeichnis liegen. Dort hinein müssen jeweils die avnav.xml und die erzeugten Kartenverzeichnisse kopiert werden (siehe Karten konvertieren).

/dava/avnav/log

logfiles

/data/avnav/tracks

Die trackfiles. Sie werden in einem File pro Tag gespeichert. Momentan ist das ein simples csv Format, eine Konvertierung nach gpx steht schon auf der todo Liste.

/data/avnav/routes die aktuelle route default.gpx und das aktuelle Segment currentLeg.json
/data/avnav/import ab 2015-10-19: Hier abgelegte Karten werden konvertiert in das gemf Format, so das die WebApp sie verarbeiten kann

/home/pi/avnav/data

Links zu /data/avnav/charts, /data/avnav/tracks, /data/avnav/log. Ausserdem die config Datei avnav_server.xml. Beim ersten Start wird sie dorthin kopiert, danach aber nicht wieder überschrieben. Etwaige Anpassungen also hier.

/home/pi/avnav/setup.sh

Kann als root aufgerufen werden, um ein update der Software zu machen (bei Internet-Verbindung):
setup.sh update <url>

/home/pi/avnav/program

Das Program-Verzeichnis.

/home/pi/avnav/program/server

Der eigentliche server: avnav_server.py,
Der ais Dekoder (aus dem gpsd Projekt): ais.py,
Konvertierung von MOBAC atlas files zu avnav.xml: create_overview.py

/home/pi/avnav/program/raspberry

Raspberry spezifische software Anteile (u.a. der service zum Starten von avnav_server)

/home/pi/avnav/program/libraries

Die verwendeten JS libraries für die WebApp.
Das sind u.a.:
* OpenLayers
* jQuery
* less
* movable-type (java script functions von movable type)

/home/pi/avnav/program/viewer

Die WebApp.

/etc/init.d/

Die services, die zum Starten benutzt werden (links zu /home/pi/avnav/program/raspberry):
* avnav – der server
* check_parts – service, der prüft, ob die data partition schon da ist und sie im Zweifel anlegt
* check_wlan – prüft, ob das interface wlan0 eine IP adresse hat und macht im Zweifel ein ifdown/ifup – damit funktioniert das Wlan deutlich stabiler

 

Bis auf die init scripte läuft die gesamte Software unter dem Nutzer pi. Die Installation muss allerdings als root erfolgen.

Standardmässig wird die SD Karte für den pi mit 2 Partitionen versehen:

  • eine FAT32 formatierte boot Partition (ca. 60MB), gemounted nach /boot

  • eine root partition, ca. 2GB

Bei meinem Image kommt dazu noch eine separate /data partition mit dem Rest der SD-Karte (wird beim ersten Start automatisch erzeugt).

Die Installation der Software hängt stark davon ab, ob mein Image verwendet wird, oder ob von einem „stock“ Image ausgegangen wird. Beide Varianten beschreibe ich kurz.

Installation mit avnav image

Für diese Variante einfach unter Windows/Linux/OSx das image von wellenvogel.de herunterladen und wie unter http://www.raspberrypi.org/downloads (raw images) beschrieben auf eine SD Karte spielen. Danach muss man sich einmal auf dem pi einloggen und ggf. ein paar Anpassungen vornehmen. Am einfachsten geht das, wenn man den pi im LAN anschließt und einen router/dhcp-server (z.B. Fritz Box) aktiv hat. Dann holt er sich per DHCP eine IP Adresse. Diese kann man auf dem Router sehen bzw. unter Linux z.B. per ping -b <brodcast-address> herausfinden. Alternativ kann man auch Tastatur + Bildschirm an den Pi direkt anschliessen.

Die Paßworte sind auf Standardwerte gesetzt – also login pi, Paßwort raspberry. Per sudo -i wechselt man in eine root shell. Man sollte kontrollieren, ob die /data partition existiert und gemounted ist (df -h, mount). Anschliessend sollte man noch das Paßwort für den user pi ändern (passwd). Per sudo raspi-config (siehe u.a. hier) sollte ein Übertakten auf 1GHz eingestellt werden.

Am schwierigsten kann sich das Aufsetzen des WLAN gestalten. Das hängt vom verwendeten Adapter ab. Ich habe einen rtl8192cu verwendet (TP-Link TL-WN725N). Dazu musste ich den hostapd (/usr/sbin/hostapd) austauschen gegen den von http://itwelt.org/downloads/hostapd. Der originale ist noch als hostapd.ori vorhanden – also ggf. wieder umbennen. Anpassungen zur Konfiguration muss man in /etc/hostapd/hostapd.conf vornehmen. In jedem Falle sollte hier der WPA-Key getauscht werden (standard: SSID avnav, pw: avnav-secret). Ggf. muss man den driver ändern. Danach service hostapd restart und die WLAN-Verbindung testen. Eine gute Anleitung findet sich unter http://elinux.org/RPI-Wireless-Hotspot. Als WLAN für den access point wird das erste gefundene WLAN (wlan0) verwendet (siehe auch Installationshinweise unten).

Mit dem image ab 2015-01-28 sollte eine Erkennung der rtl18x WLAN Adapter erfolgen. Dazu liegen unter /usr/sbin 2 hostapd (.ori/.edimax). Die werden durch ein script (/etc/init.d/check_wlan) enstprechend auf den hostapd gelinkt. Gleichzeitig wird die Datei /etc/hostapd/hostapd.conf angepaßt - daher bitte die beiden driver Zeilen so lassen wie sie im image sind. Wenn die automatische Umstellung nicht gewollt ist, in /etc/default/check_wlan (Datei ggf. anlegen) NO_HOSTAPD_SWITCH=1
setzen.

Das WLAN hat den Adressbereich 192.168.20.0/24. Der pi selbst ist auf 192.168.20.10 erreichbar (ggf. als url im Browser benutzen, wenn die Namensauflösung nicht funktioniert). Auf dem pi läuft ein DHCP server und ein DNS server (dnsmasqd). Die Konfiguration kann angepasst werden in /etc/dnsmasqd.conf. Wenn der pi im LAN angeschlossen ist, versucht er per DHCP eine Adresse zu bekommen, das WLAN wird per NAT an das LAN interface weitergereicht (damit kann man den pi ins Internet bringen - z.B. zum Installieren von Software- und auch per Wlan verbundene Geräte haben dann Internet-Zugriff).

Für die Auslieferung einiger Karten ist der lighthttpd installiert. Dieser kann gff. Auch für weitere Funktionen genutzt werden. Er ist jedoch per default auf port 81 aufgesetzt. Port 80 ist direkt zum Web server von avnav weitergeleitet (dieser lauscht auf port 8080).

Wenn alles richtig aufgesetzt ist, sollte sich unter der url http://avnav.avnav.de die Einstiegsseite der WebApp öffnen.

Ab dem Image 2016-03-18 ist der Anschluß eines 2. WLAN Adapters vorbereitet, über den dann eine Verbindung zu einem WLAN (z.B. im Hafen) hergestellt werden kann. Da es potentiell nicht so einfach ist, festzulegen welches WLAN den hotspot bereitstellt und welches für eine Verbindung "nach draußen" genutzt wird, habe ich einfach einen festen USB Steckplatz vorgesehen.

Ein Wlan Adapter der in die obere linke USB Buchse gesteckt wird (siehe Bild) wird die Verbindung "nach draußen" machen, der erste andere (enteder der interne oder ein in eine andere USB Buchse gesteckte) den hotspot. Intern heißt das interface dann wlan-av1. Für Details siehe unten.



In der App gibt es eine Seite, um sich mit einem WLAN zu verbinden (Status-Seite->WLAN) - siehe Beschreibung der App.

Die Verbindung zu einem externen WLAN wird an die angeschlossenen Geräte "durchgereicht".

Mit sudo service avnav status kann man den Status des servers prüfen, mit sudo service avnav start bzw. sudo service avnav stop kann man ihn starten und stoppen.

Installation mit „stock image“

(Danke an Christian für ein paar Hilfestellungen) Hierbei zunächst das debian wheezy image von http://www.raspberrypi.org/downloads installieren (Anleitung siehe dort). Danach muss man eine Reihe weiterer Pakete installieren, die Konfigurationen vornehmen und zum Schluss die avnav software installieren. Nach dem ersten reboot Übertakten auf 1GHz einstellen.
Hier eine kurze Dokumentation der Schritte (ohne ganz detaillierte Beschreibung):


1.basic raspberry installation: http://www.raspberrypi.org/downloads win32 discimager http://sourceforge.net/projects/win32diskimager/ 2. download raspbian jessie lite https://downloads.raspberrypi.org/raspbian_lite_latest login as root, raspi-config - extend root fs parted /dev/mmcblk0 resizepart 2 2GB quit 3. reboot apt-get install gpsd gpsd-clients python-gps bluetooth python-bluez python-pyudev hostapd dnsmasq python-serial lighttpd apt-get install python-gdal python-imaging apt-get install bc copy tar from download page to /home/pi unpack as pi run as root avnav/setup.sh edit /etc/default/gpsd, START_DAEMON="false", systemctl disable gpsd
4. set up ntp sync see http://catb.org/gpsd/gpsd.html -- does not work out of the box as gpsd is running non root, we have to enable other SHM segments! * /etc/ntp.conf: server 127.127.28.0 fudge 127.127.28.0 time1 0.420 refid GPS server 127.127.28.1 prefer fudge 127.127.28.1 refid GPS1 server 127.127.28.2 fudge 127.127.28.2 time1 0.420 refid GPS2 server 127.127.28.3 prefer fudge 127.127.28.3 refid GPS3 ntpq -p gives: remote refid st t when poll reach delay offset jitter ============================================================================== SHM(0) .GPS. 0 l - 64 0 0.000 0.000 0.000 SHM(1) .GPS1. 0 l - 64 0 0.000 0.000 0.000 -SHM(2) .GPS2. 0 l 29 64 3 0.000 1.740 20.409 SHM(3) .GPS3. 0 l - 64 0 0.000 0.000 0.000 +batman.till-wie 129.69.1.153 2 u 22 64 3 321.884 142.512 36.881 +mail.ziegenberg 131.188.3.220 2 u 24 64 3 338.131 147.767 39.671 *mail.buh.bz 160.45.10.8 2 u 21 64 3 324.912 141.625 49.656 +TAMARA.HZ.DE.AR 143.93.117.16 2 u 21 64 3 338.490 148.679 54.099

 edit /etc/ntp.conf, remove all servers, insert settings from above, remove dhcp stuff edit /etc/dhcpcd.conf , disable ntp ?? 5. #set up /etc/network/interfaces auto lo iface lo inet loopback iface eth0 inet dhcp allow-hotplug wlan0 iface wlan0 inet static address 192.168.20.10 netmask 255.255.255.0 up iptables-restore < /etc/iptables.ipv4.nat iface eth0:1 inet static address 192.168.20.11 netmask 255.255.255.0 ##### edit /etc/hosts: 192.168.20.10 avnav 192.168.20.10 avnav.avnav 192.168.20.10 avnav.avnav.de 6. apt-get install avahi-autoipd - should fall back to link local address 7. #set up /etc/hostapd/hostapd.conf
interface=wlan0
#use this driver for 8192/8188 #needs hostapd.edimax - rename this to hostapd (sbin) #driver=rtl871xdrv #setting for normal hostapd driver=nl80211 ssid=avnav hw_mode=g channel=6 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=avnav-secret wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP 8.#set the config for the daemon in /etc/default/hostapd 9. systemctl enable check_parts 10. #when creating the image, remove /etc/default/check_parts 11. #--------- re-enable check-wlan ------------------ cd /usr/sbin mv hostapd hostapd.ori ln -s hostapd.ori hostapd wget -O hostapd.edimax http://itwelt.org/downloads/hostapd chown root:root hostapd.edimax chmod 755 hostapd.edimax 12. #disable wlan power mgtmt for 8192cu #see https://www.datenreise.de/raspberry-pi-wlan-einrichten-edimax/ #/etc/modprobe.d/8192cu.conf options 8192cu rtw_power_mgnt=0 rtw_enusbss=0
13. prevent pi from interacting on boot due to corrupted FS see http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&t=15870 sudo vi /etc/default/rcS change #FSCKFIX=no to FSCKFIX=yes 14. copy demo charts from .../homepage/software/avnav/viewer to .../home/pi/avnav/data/charts

15. update firmware
#rapsi 3 still has a lot of issues with the build in WLAN adapter #an update to the newest firmware slightly improves this apt-get update apt-get upgrade apt-get install rpi-update BRANCH=next rpi-update reboot
 

2. WLAN Adapter

Um einen 2. WLAN adapter zur Verbindung mit z.B. einem hotspot einzurichten, müssen 3 Dinge getan werden:

  1. Festelegen welcher WLAN Adapater was machen soll
  2. Konfigurieren der Weiterleitung von access point in das WLAN nach draußen
  3. Konfigurieren des Zugangs
Zu 1. hatte ich oben bereits beschrieben, das der Adapter auf einem festen Port dazu genutzt wird (oben links) - wlan-av1.
2. Erfolgt durch iptables (NAT)
3. es wird vorkonfiguriert, das wpa_supplicant für wlan-av1 gestartet wird. Die eigentliche Konfiguration erfolgt über die App.

#prepare for a second WLAN adapter - upper left socket (as wlan-av1) when looking at the sockets
#it is important to identify the WLAN adapter that should be used as client (i.e. to connect to an access point)
#as the linux has some own ideas how to assign names, we use a fixed relation between the USB socket to use and the wlan name
#with providing an udev rule file, we force a WLAN adapter that is put into the upper left socket to be named as wlan-av1
#this wlan will be set up to connect to an access point
#all other wlans (either connected to other USB ports) or the build in from the raspi 3 will be named by the system
#the first one will be wlan0 - this is configured for the access point

#the udev rules file (works for raspi 2 and raspi 3)
/etc/udev/rules.d/010-avnav-net.rules:
KERNELS=="1-1.2:1.0",SUBSYSTEM=="net",NAME="wlan-av1"

#wpa configuration
/etc/wpa_supplicant/wpa_supplicant.conf:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

#add wlan-av1
/etc/network/interfaces :
allow-hotplug wlan-av1
iface wlan-av1 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

#iptables - set up NAT for data that flows from wlan0 to wlan-av1
#the routing will be automatically handled by the DHCP client
iptables -t nat -A POSTROUTING -o wlan-av1 -j MASQUERADE
iptables -A FORWARD -i wlan-av1 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o wlan-av1 -j ACCEPT
iptables-save > /etc/iptables.ipv4.nat

Die Web App

Zur Navigation mit den auf dem Raspberry Pi vorhandenen Karten gibt es eine Web App.
Die App kommuniziert mit dem webserver des avnav_server.py auf dem pi. Die Einstiegsseite ist unter der url http://avnav/viewer/avnav_viewer.html erreichbar. Es is eine sogenannte „single page app“, d.h. Die weitere Kommunikation mit dem server geschieht per Ajax durch den JavaScript Anteil. Vom Layout ist sie optimiert für die Darstellung auf einem 7 Zoll (oder größer) Tablet (bei mir momentan im Einsatz: Nexus 7 am Navitisch, Blackberry Playbook draussen), sie läuft aber natürlich auch auf größeren Tablets (Ipad) oder auf einem Laptop/Desktop. Eine sinnvolle Nutzung ist ab etwa 900x540 Pixel möglich.

Zur Beschreibung der WebApp hier.