5. GPS Tracking

ANCELIN Julien edited this page Jan 4, 2016 · 8 revisions

Le Module GPS tracking permet de rendre le Raspberry pi autonome en prise de mesure géographique (point) toute les minutes.

Pour le moment c'est une installation manuelle mais un container Docker est en cours de fabrication.

L'antenne GPS retenue est une BU-353-S4:

Le BU-353-S4 est un récepteur GPS USB hautement sensible, avec un jeu de puces très peu gourmand en énergie, dans un format ultra-compact. Le BU-353-S4 est alimenté par un jeu de puce SiRF Star IV offrant d'excellentes performances même sous de denses feuillages. Grâce à la technologie SiRF CGEE (Client Generated Extended Ephemeris), il est capable de prévoire la positions des satellites jusqu'à trois jours d'avance afin de réduire le temps de démarrage à froid de moins de 15 secondes sans nécéssiter d'assistance réseau.

Le mode MicroPower du BU-353-S4 permet au récepteur de toujours se trouver en conditions de démarrage à chaud tout en consommant très peu d'énérgie.

1. Installation de GPSD

gpsd est un démon de service qui surveille un ou plusieurs GPS ou récepteurs AIS connecté à un ordinateur hôte via les ports série ou USB, ce qui rend toutes les données sur l'emplacement / course / vitesse des capteurs disponibles pour être interrogé sur le port TCP 2947 de l'ordinateur hôte .

http://www.catb.org/gpsd/

sudo apt-get update

sudo apt-get install gpsd gpsd-clients python-gps

Modifier le fichier gpsd.hotplug pour que ça hotplug

nano /lib/udev/gpsd.hotplug

Ajouter

chmod a+rw $DEVNAME

dessus de la ligne qui dit

gpsdctl $ACTION $DEVNAME

Presse CTRL and O together to save

Presse CTRL and X together to exit the file

Redémarrer les services et tester si ça marche

/etc/init.d/gpsd restart

gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock

cgps -s

Cette dernière commande ouvre le visualiseur.

note pour raspbian jessie:

sudo nano /etc/default/gpsd

START_DAEMON="true" GPSD_OPTIONS="n" DEVICES="/dev/ttyUSB0" USBAUTO="false" GPSD_SOCET="/var/run/gpsd.sock"

save it, then

sudo /etc/init.d/gpsd restart

2. Installation GPSBABEL

GPSBabel est un logiciel permettant de:

Récupérer/envoyer les points de passages (waypoints), les traces (tracks) et routes vers un appareil GPS.

Les convertir entre les différents formats GPS et logiciels de cartographie.

Le paramétrage ci-dessous de GPSBabel correspond à mon besoin, c'est à dire, récupérer un point GPS toute les minutes sauf si il est à moins de 5 mètres du dernier point.

sudo apt-get install gpsbabel

Récupèrer les 10 premières ligne nmea du gps (suffisant si l'on veux récupérer un seul point)

gpspipe -d -r -n10 -o /home/pi/test3.nmea

créer un fichier de style pour la conversion vers csv

nano /home/pi/style.style

Et Rajouter

#gpsbabel XCSV style file
#Format: Tab delimited useful for OpenOffice, Ploticus etc.
DESCRIPTION     Tab delimited fields useful for OpenOffice, Ploticus etc.
# FILE LAYOUT DEFINITIONS:
FIELD_DELIMITER     ;
RECORD_DELIMITER    NEWLINE
BADCHARS        ;
# HEADER STUFF:
PROLOGUE    lati;longi;alt;dist;speed;timing
# INDIVIDUAL DATA FIELDS:
IFIELD  LAT_DECIMAL, "", "%f"
IFIELD  LON_DECIMAL, "", "%f"
IFIELD  ALT_METERS, "", "%f"
IFIELD  PATH_DISTANCE_KM, "", "%f"
IFIELD  PATH_SPEED, "", "%f"
IFIELD  GMT_TIME,"","%Y-%m-%d %I:%M:%S %p"

Lance la conversion nmea vers csv personalisé

gpsbabel -i nmea -f /home/pi/test3.nmea -x position,distance=5m -o xcsv,style="/home/pi/style.style" -F /home/postgres/main/test3.csv

3. Créer une table postgresql

CREATE TABLE tracking
(
  id serial NOT NULL,
  lati numeric,
  longi numeric,
  alt numeric,
  dist numeric,
  speed numeric,
  timing timestamp without time zone,
  CONSTRAINT pk_tracking PRIMARY KEY (id),
  CONSTRAINT uniq_latlong UNIQUE (lati, longi)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE tracking
  OWNER TO docker;

Créer fichier /home/postgres/main/copy.sh pour automatiser de transfert vers postgresql

#!/bin/sh
dbname="track"
psql $dbname  << EOF
COPY tracking (lati,longi,alt,dist,speed,timing) FROM '/var/lib/postgresql/9.4/main/test3.csv' WITH DELIMITER ';' CSV ;
EOF

La commande ci dessous, permettra d'exécuter la copy directement dans le container postgis. docker exec postgis_slony sh /var/lib/postgresql/9.4/main/copy.sh

4. Créer script crontab

Créer un fichier /home/pi/cron_track.sh

#!/bin/sh
gpspipe -d -r -n10 -o /home/pi/test3.nmea
sleep 1s
gpsbabel -i nmea -f /home/pi/test3.nmea -x position,distance=5m -o xcsv,style="/home/pi/style.style"  -F /home/postgres/main/test3.csv
sleep 1s
docker exec postgis_slony sh /var/lib/postgresql/9.4/main/copy.sh

Et le rendre exécutable

chmod +x /home/pi/cron_track.sh

Ajouter un crontab

sudo crontab -e

Et rajouter la ligne

*/1 * * * * /home/pi/cron_track.sh

lister les crontab pour voir si la modif est ok

sudo crontab -l

5. C'est parti...

Maintenant dès que vous démarrez le raspberry pi avec l'antenne (ou que vous branchez l'antenne en cours d'utilistion du RPI) un point gps sera enregistré toute les minutes.

La visualisation de vos données est disponible en direct sur le lizmap de votre raspberry:

10.10.0.25/websig/lizmap/www


Voici un exemple de tracking avec un cycliste:

http://sig.complement-terre.fr/tracking3d.html