1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

HowTo Rasperry PI als Navigationsgerät mit Touchscreen verwenden

Dieses Thema im Forum "Raspberry Pi" wurde erstellt von al-x83, 19. August 2013.

  1. al-x83
    Offline

    al-x83 Super-Moderator Digital Eliteboard Team

    Registriert:
    10. Januar 2012
    Beiträge:
    13.435
    Zustimmungen:
    12.699
    Punkte für Erfolge:
    113
    Geschlecht:
    männlich
    Beruf:
    SysAdmin
    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:

    Dieser Link ist nur für Mitglieder!!! Jetzt kostenlos Registrieren ?


    und diesen GPS-Stick:

    Dieser Link ist nur für Mitglieder!!! Jetzt kostenlos Registrieren ?



    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:

    Dieser Link ist nur für Mitglieder!!! Jetzt kostenlos Registrieren ?


    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:
    [​IMG]

    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:
    [​IMG]

    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:

    Dieser Link ist nur für Mitglieder!!! Jetzt kostenlos Registrieren ?


    Dieser Link ist nur für Mitglieder!!! Jetzt kostenlos Registrieren ?


    Dieser Link ist nur für Mitglieder!!! Jetzt kostenlos Registrieren ?



    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: 28. August 2014
    #1
  2. phantom

    Nervigen User Advertisement

  3. al-x83
    Offline

    al-x83 Super-Moderator Digital Eliteboard Team

    Registriert:
    10. Januar 2012
    Beiträge:
    13.435
    Zustimmungen:
    12.699
    Punkte für Erfolge:
    113
    Geschlecht:
    männlich
    Beruf:
    SysAdmin
    Ort:
    Paradise City
    AW: Rasperry PI als Navigationsgerät mit Touchscreen verwenden

    Hier geht's zum

    Dieser Link ist nur für Mitglieder!!! Jetzt kostenlos Registrieren ?


    Ich möchte den HowTo Thread übersichtlich halten.
     
    #2
    Pilot gefällt das.

Diese Seite empfehlen