Quantcast
Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Rasperry PI als Navigationsgerät mit Touchscreen verwenden

Alex

Administrator
Teammitglied
Registriert
10. Januar 2012
Beiträge
21.394
Lösungen
9
Reaktionspunkte
30.293
Punkte
1.113
Ort
Paradise City
Als Basis für dieses HowTo, geh' ich von einem Raspberry Pi mit Raspbian als OS aus.
Als Bildschirm hab ich diesen hier verwendet:
und diesen GPS-Stick: Link ist nicht mehr aktiv.

1. Grundlagen:

Zunächst bringen wir ein mal das OS auf den aktuellen Stand:
Code:
sudo apt-get update && sudo apt-get upgrade

Danach installieren wir die benötigten Pakete um Navit zu kompilieren:
Code:
sudo apt-get install subversion espeak cmake freeglut3-dev imagemagick libdbus-1-dev libdbus-glib-1-dev libdevil-dev libfontconfig1-dev libfreetype6-dev libfribidi-dev libgarmin-dev libglc-dev libgps-dev libgtk2.0-dev libimlib2-dev libpq-dev libqt4-dev libqtwebkit-dev librsvg2-bin libsdl-image1.2-dev libspeechd-dev libxml2-dev ttf-liberation

Für die Unterstützung des GPS-Sticks, brauchen wir noch folgende Pakete:
Code:
sudo apt-get install gpsd gpsd-clients python-gps

Damit der Bildschirm komplett ausgefüllt wird, muss noch /boot/config.txt angepasst werden:
Code:
sudo nano /boot/config.txt

Hier die vorhandenen Werte mit denen überschreiben:
Code:
overscan_left=-4
overscan_right=-2
overscan_top=-14
overscan_bottom=-18

Nun muss ermittelt werden, ob der GPS-Stick korrekt erkannt wurde und über welche Schnittstelle er erreichbar ist:
Code:
dmesg | grep ttyUSB
[    7.930852] usb 1-1.2: pl2303 converter now attached to ttyUSB0

Der Stick sitzt also an ttyUSB0, also starten wir den GPS-Deamon testweise wie folgt:
Code:
gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock

Mit cgps-s kann man testen, ob das Ganze arbeitet:
Code:
┌───────────────────────────────────────────┐┌─────────────────────────────────┐
│    Time:       2013-08-18T15:05:10.0Z     ││PRN:   Elev:  Azim:  SNR:  Used: │
│    Latitude:    51.231848 N               ││  14    43    249    40      Y   │
│    Longitude:    0.514014 E               ││  25    75    283    37      Y   │
│    Altitude:   132.3 m                    ││   2    26    085    31      Y   │
│    Speed:      0.0 kph                    ││  12    56    070    18      Y   │
│    Heading:    0.0 deg (true)             ││   9    19    133    22      Y   │
│    Climb:      0.0 m/min                  ││  27    09    133    17      Y   │
│    Status:     3D FIX (1 secs)            ││   4    17    045    31      Y   │
│    GPS Type:                              ││  32    05    321    20      Y   │
│    Longitude Err:   +/- 8 m               ││  29    41    192    18      Y   │
│    Latitude Err:    +/- 9 m               ││  31    28    304    42      Y   │
│    Altitude Err:    +/- 27 m              ││                                 │
│    Course Err:      n/a                   ││                                 │
│    Speed Err:       +/- 68 kph            ││                                 │
│                                           ││                                 │
│                                           ││                                 │
│                                           ││                                 │
│                                           ││                                 │
│                                           ││                                 │
└───────────────────────────────────────────┘└─────────────────────────────────┘

GPSD startet bei jedem Systemstart, funktioniert aber nicht. Selbst nach dem Befehl sudo update-rc.d gpsd remove wird es noch von irgendwo her gestartet.
Hierfür habe ich nur eine dreckige Lösung, die aber wenigstens funktioniert:
Zuerst hab ich den Daemon für GPSD entfernt:
Code:
sudo rm /etc/init.d/gpsd
Dann neuen Daemon mit dem Namen gpsdrestart angelegt:
Code:
sudo nano /etc/init.d/gpsdrestart
Dort kam dann folendes rein:
Code:
#! /bin/sh
# /etc/init.d/gpsdrestart

touch /var/lock/gpsdrestart

case "$1" in
start)
echo "Töte gpsd... "
killall gpsd
echo "Starte gpsd neu... "
gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock
;;
*)
echo "Usage: /etc/init.d/navit {start}"
exit 1
;;
esac
exit 0

Die Rechte anpassen:
Code:
sudo chmod 755 /etc/init.d/gpsdrestart

Nun noch den Autostart aktivieren:
Code:
sudo update-rc.d gpsdrestart defaults

Es besteht auch noch die Möglichkeit, via GPS die Systemzeit zu aktualisieren:
Hierzu muss NTP installiert werden:
Code:
sudo apt-get install ntp

Jetzt muss noch folgendes in die /etc/ntp.conf unter die existierenden Server hinzugefügt werden:
Code:
# gps ntp
server 127.127.28.0 minpoll 4
fudge  127.127.28.0 time1 0.183 refid NMEA
server 127.127.28.1 minpoll 4 prefer
fudge  127.127.28.1 refid PPS

Zum Schluss noch NTP neustarten:
Code:
sudo service ntp restart

Mit ntpq -p kann nun geprüft werden, ob es funktioniert:
Code:
pi@raspberrypi:~$ ntpq -p
remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ns1.luns.net.uk 33.117.170.50    2 u   54   64    7   65.454    2.666   5.800
+resntp-b-vip.lo 127.151.91.34    3 u   45   64   17   55.704   -5.169   8.482
+bart.nexellent. 194.242.34.149   2 u   17   64   17   76.585   -4.271  57.595
+v01.s01.be.it2g 193.190.230.65   2 u   20   64   37   86.464   -2.374 228.460
xSHM(0)          .NMEA.           0 l   11   16  377    0.000  144.714   3.026
SHM(1)          .PPS.            0 l    -   16    0    0.000    0.000   0.000

2. Austauschen des Kernels gegen Kernel mit Touch-Modul:

Den passenden Kernel gibt's hier zum Download:
Code:
wget http://andrei-development.googlecode.com/files/kernel_3_6_11_eGalax_feb_2013.tar.gz

Danach entpacken:
Code:
cd ~
tar -xzf kernel_3_6_11_eGalax_feb_2013.tar.gz

Die kernel.img Datei ersetzen:
Code:
sudo cp ~/kernel_3_6_11_eGalax_feb_2013/kernel.img /boot/kernel.img

/lib ersetzen:
Code:
sudo cp -r kernel_3_6_11_eGalax_feb_2013/modules/lib /lib

Im Anschluss neustarten

3. Kalibrieren des Touchscreens:

Herunterladen des Kalibrators:
Code:
cd ~
wget http://github.com/downloads/tias/xinput_calibrator/xinput_calibrator-0.7.5.tar.gz

Entpacken:
Code:
tar -xf xinput_calibrator-0.7.5.tar.gz

Kompilieren:
Code:
cd xinput_calibrator-0.7.5
./configure
sudo make
sudo make install

Über folgenden Befehl kann der Kalibrator aus der Konsole gestartet werden:
Code:
xinput_calibrator

Der Kalibrator gibt am Ende dann die Werte aus. Da die Einstellungen einen Neustart nicht überleben, müssen sie noch gesichert werden:
Code:
sudo nano /usr/share/X11/xorg.conf.d/01-input.conf

Der Inhalt sieht bei mir so aus:
Code:
Section "InputClass"
Identifier "calibration"
MatchProduct "eGalax Inc. USB TouchController"
Option "Calibration" "56 1980 1876 111"
EndSection

4. Kompilieren von Navit:

Jetzt wird die aktuelle Version von Navit mit folgenden Befehlen ausgecheckt:
Code:
cd ~
svn co svn://svn.code.sf.net/p/navit/code/trunk/navit/ navit

Nun erstellen wir ein Verzeichnis und kompilieren Navit:
Code:
mkdir navit-build
cd navit-build
cmake ~/navit
make

Dies dauert auf dem Raspberry leider etwas.

Um zukünftig navit mal up zu daten, muss geht man wie folgt vor:
Code:
cd /home/pi/navit
svn update

Danach, wie oben beschrieben, neu kompilieren.

Als nächstes brauchen wir noch eine Karte.
Diese kann hier heruntergeladen werden:

5. Anpassen der navit.xml:

Nun muss noch der Speicherort der Karte, sowie ihr Namen in der navit.xml angepasst werden.
Diese findet sich hier und wird wie folgt angepasst:

Code:
cd ~/navit-build/navit
nano navit.xml

Ich habe die Karte dann europa.bin genannt und auf einen USB-Stick kopiert, der Pi-Car heißt und die navit.xml wie folgt bearbeitet:
Einmal die die Beispielkarte deaktiviert:
Code:
<mapset enabled="no">
<xi:include href="$NAVIT_SHAREDIR/maps/*.xml"/>
</mapset>

dann noch die eigene OpenStreetMap aktiviert:
Code:
<!-- Mapset template for openstreetmaps -->
<mapset enabled="yes">
<map type="binfile" enabled="yes" data="/media/Pi-Car/map/europa.bin"/>
</mapset>

Damit sich die Karte mit der Fahrtrichtung dreht, muss noch folgendes geändert werden:
<navit center="4808 N 1134 E" zoom="256" tracking="1" orientation="-1" recent_dest="10" autozoom_active="1">

Mein Navit sieht so aus:
Du musst angemeldet sein, um Bilder zu sehen.

Um dies zu erreichen, hab ich am Ende der Datei noch folgendes eingefügt:
Code:
        <!-- Anzeige-Einstellungen -->

        <!-- Zoom-Buttons -->
        <osd enabled="yes" type="button" x="10" y="-116" command="zoom_in()" src="zoom_in.png"/>
        <osd enabled="yes" type="button" x="10" y="-55" command="zoom_out()" src="zoom_out.png"/> 
        <!-- aktuelle Geschwindigkeit -->
        <osd enabled="yes" type="text" label="${vehicle.position_speed}" x="10" y="60" font_size="800" w="205" h="55" align="4" background_color="#c63030cc"/>
        <!-- Anzeige der Fahrtrichtungsänderung -->
        <osd enabled="yes" type="navigation_next_turn" font_size="350" x="10" y="130" w="100" h="100"  background_color="#c63030cc" icon_src="$NAVIT_SHAREDIR/xpm/%s_wh_48_48.png" />
        <!-- Entfernung zur nächsten Fahrtrichtungsänderung -->
        <osd enabled="yes" type="text" label="${navigation.item[1].length[named]}" font_size="350" x="10" y="240" w="100" background_color="#c63030cc" />
        <!-- Name der Straße, auf der man sich gerade befindet -->
        <osd enabled="yes" type="text"label="Aktuelle Straße: ${navigation.item.street_name_systematic}" x="-805" y="10" align="0" background_color="#c63030cc" font_size="550" w="795" h="40"/> 
        <!-- per GPS errechnete Höhe über Meer (dies ist zwar recht ungenau, aber dennoch oftmals von Interesse) -->
        <osd enabled="yes" type="text" label="${vehicle.position_height} m" x="-80" y="55" w="70" h="40" background_color="#c63030cc"/>
        <!-- GPS-Status -->
        <osd enabled="yes" type="gps_status" x="-60" y="100" w="50" h="40" background_color="#c63030cc"/>
        <osd enabled="yes" type="text" label="${vehicle.position_sats_used}/${vehicle.position_qual}" x="-60" y="140" w="50" h="25" background_color="#c63030cc"/>
        <!-- voraussichtliche Ankunftszeit -->
        <osd enabled="yes" type="text" label="Ankunftszeit ${navigation.item.destination_time[arrival]}" x="70" y="-30" w="200" h="30" background_color="#c63030cc"/>
        <!-- Restdistanz -->
        <osd enabled="yes" type="text" label="Restdistanz ${navigation.item.destination_length[named]}" x="270" y="-30" w="200" h="30" background_color="#c63030cc"/>
        <!-- Restzeit - Wie lange die Fahrt noch dauert -->
        <osd enabled="yes" type="text" label="Restzeit ${navigation.item.destination_time[remaining]}" x="470" y="-30" w="200" h="30" background_color="#c63030cc"/>

Falls jemand die ganze Navit.xml will bitte ne PN schreiben, sie ist zu groß für dieses HowTo

6. Navit in LXDE integrieren:

Wenn man sich Navit selbst kompiliert, fehlt leider noch die Integration als Symbol im Menü.
Und Autostart wäre ja auch nicht schlecht. Hierzu sind wieder einige Schritte notwendig:

Ein Bash-Datei zum Starten anlegen:
Code:
sudo nano /usr/bin/navit.sh

Diese soll folgenden Inhalt haben:
Code:
#!/bin/bash
cd /home/pi/navit-build/navit
./navit

Dannn noch die passende Rechte:
Code:
sudo chmod 755 /usr/bin/navit.sh

Jetzt wird die Datei für den Startmenü-Eintrag angelegt und befüllt:
Code:
sudo nano /usr/share/applications/Navit.desktop
Inhalt:
Code:
[Desktop Entry]
Version=1.0
Name=Navit
Name[de]=Navit
Name[fr]=Navit
Comment=The open source vector based navigation program with routing engine
Comment[de]=Ein vektorbasiertes Navigationsprogramm
Comment[fr]=Le logiciel opensource de navigation vectorielle
Exec=/usr/bin/navit.sh
Icon=/usr/share/icons/hicolor/128x128/apps/navit.png
StartupNotify=true
Terminal=false
Type=Application
Categories=GTK;Utility;Geography;
GenericName=Navit
GenericName[de]=Navit

Um Navit direkt beim Hochfahren starten zu lassen, die Datei noch nach /$HOME/.config/autostart kopieren:
Code:
cp /usr/share/applications/Navit.desktop /$HOME/.config/autostart/
Falls die Verzeichnisse nicht vorhanden sind, ggf. mit mkdir /$HOME/.config/autostart anlegen

Damit das Ganze auch noch schön ausschaut, das Bild unten noch nach /usr/share/icons/hicolor/128x128/apps/navit.png kopieren:
Du musst angemeldet sein, um Bilder zu sehen.


Damit nicht der Bildschirmschoner nach kurzer Zeit einsetzt, muss noch folgendes gemacht werden:
Code:
sudo nano /etc/xdg/lxsession/LXDE/autostart
dort die Zeile mit xscreensaver löschen

Quellen:




Dieses HowTo ist mit Sicherheit noch nicht vollständig. Es fehlt zum Beispiel noch die Sprachausgabe, diese werde ich bei Gelegenheit nachreichen.
Es soll später auch noch ein HowTo für XBMC werden. Hier gibt's aber noch Probleme mit dem Touchscreen.
 
Zuletzt bearbeitet:
Zurück
Oben