GPS entschlüsselt

Für einen GPS-Receiver braucht es nicht viel: eine RF-Einheit mit Antenne und ~1,5 GHz, einen Wandler und einen Prozessor. Und dann muss man nur noch wissen, wie man aus den Daten auch die Informationen rausfiltert, die man sucht.

Den Softwarepart hat sich der @field_hamster vorgenommen. In seinem neuen Blog GPS DEMYSTIFIED beschreibt er den Prozess, wie die empfangenen Daten decodiert werden können. In seinen ersten Posts erklärt er, was ein Gold Code ist (Identifier zur Erkennung der Satelliten und dem korrekten Datenempfang) und wie man aus dem Datenstream mit Hilfe eines simplen XOR-Tricks die GPS-Daten filtern kann, ohne einen Megaflop-Prozessor bemühen zu müssen.

Die Hardwarebasis ist das Kickstarter-Projekt KiwiSDR, das einen Xilinx Artix 7 FPGA auf einem Beagle Cape anbietet. Allerdings sollten sich die Ausführungen auch leicht auf andere Hardware transportieren lassen. So sind sie eine hervorragende Ergänzung zu dem Homemade GPS Receiver von Andrew Holme. Dieses Hardware Project basiert auf einem sehr preiswerten Spartan 3.

Michael Field (@field_hamster) hat darüber hinaus auch noch weitere Projekte auf Github, wie einen FPGA WebServer und FPGA GigabitTx. Eigentlich schon alle grundlegenden Module, die man für OpenDGPS bräuchte.

Vermisste Einführung in die RTKLIB

Sieht man sich den Code der RTKLIB auf github an kann man zwei Dinge feststellen: ein ausgesprochen sauberer und effizienter Code und leider nur sehr spärliche Code-Documentation. Zwar gibt es auf der Homepage (rtklib.com) Handbücher. Diese beschreiben aber nur die GUI und Commandline-Benutzung. Der C-Code selbst ist weder selbst- noch fremderklärend.

Seit Anfang des Jahres gibt es jedoch das Blog-Projekt rtklibexplorer. Dort wird in vielen Posts sowohl die Lib selbst beschrieben als auch die Verwendung von verschiedenen Receivern dargestellt.

Ein Beispiel für das Trackprocessing aus dem rtklibexplorer. [Quelle: https://rtklibexplorer.wordpress.com/2016/05/25/new-data-moving-rover-fixed-base/]

FPGAs und SDR auf dem #30c3

Spannende Vorträge über vier Tage 30C3. Oft auch gleichzeitig.

Spannende Vorträge über vier Tage 30C3. Oft auch gleichzeitig.

Morgen startet der 30C3 mit einigen spannenden Talks. In diesem Jahr liegt der Focus der Veranstalter natürlich noch mehr als sonst auf der permanten Überwachung. Kritisch wird hier selbstverständlich auch die Funktion aller mobilen Geräte die Position permanent zu tracken. Am Samstag findet dazu um 12:45 der Talk “lecture: Glass Hacks” statt in dem Stephen Balaban über Google Glass spricht. Am gleichen Tag um 16:00 beschreibt Felix “tmbinc” Domke in “Script your car” wie man die Firmware seines Autos aufmacht und so auch an die GPS-Daten kommt oder diese modiziert. Einen Tag später um 11:30 berichtet Maria Xynou über die Überwachung in Indien.

Aus technischer Sicht sind mehrere Vorträge über FPGAs interessant: An Tag 2 gibt es um 12:45 einen Talk mit dem Titel “Extracting keys from FPGAs, OTP Tokens and Door Locks” von David Oswald von der Ruhr-Uni Bochum und um 17:15 dann “FPGA 101 – Making awesome stuff with FPGAs” von Karsten Becker (von den Parttimescientists). Am gleichen Tag zu späterer Stunde um 21:45 wird dann ebenfalls von Karsten Becker noch PSHDL vorgestellt, das den Anspruch erfüllen soll, die Programmierung von FPGAs so einfach zu machen, wie die des Arduino.

 

Handgestrickter GPS-Receiver in einem FPGA

Die Bereitschaft der GNSS-Receiver-Hersteller, die Rohdaten zur Verfügung zu stellen scheint sich in letzter Zeit nicht signifikant zu verbessern. Dies muss inzwischen aber niemanden mehr ärgern oder allzu tief in die Tasche greifen lassen. Inzwischen gibt es gute Referenzimplementierungen für selbst gemachte GNSS-Receiver. Den Anfang machte Andrew Holme mit einem Spartan-3-FPGA in Zusammenarbeit mit einem Raspberry Pi.

Die Besonderheit bei diesem Projekt ist die Programmierung des FPGA mit Forth. Sicher keine Allerweltssprache aber für den Zweck hervorragend geeignet. Der Sprachcore passt ohne Probleme in den inzwischen recht kleinen Spartan 3 mit unter 10k Logic Cells. Das Projekt ist ein hervorragender Ausgangspunkt für eigene Entwicklungen.

Basierend darauf hat John Seamons vor kurzem eine eigene Implementierung mit einem Spartan 6 und einem Beaglebone Black gemacht. Der FPGA wäre tatsächlich in der Lage, die Rohdaten aufzubereiten und der Prozessor auf dem Beaglebone hätte genug Power, die Differenzsignale zu berechnen. Die Kosten für eine solche Kombination sind allerdings derzeit noch mit knapp 150€ zu hoch. Spannender könnten dann Systeme sein, die über einen Zynq-Prozessor von Xilinx verfügen. Dieser hat zwei vollwertige ARM-Kerne und einen groß bemessenen FPGA gleich mit drin. Für $15 pro Zynq liessen sich wesentlich kostengünstigere und stromsparende GNSS-Reciever bauen.

 

Piksi: 1cm Genauigkeit mit DGPS bei Kickstarter

Piksi Modul (Quelle: swift-nav.com)

Piksi Modul (Quelle: swift-nav.com)

Bei Kickstarter ist vor wenigen Tagen ein Crowdfunding Projekt gestartet, dass sich ideal für OpenDGPS eignen würde. Wenn es nicht viel zu teuer wäre. Mit $900 für zwei Piksi-Module verlangen die Macher fast das zehnfache der Materialkosten. Der Preis scheint aber gerechtfertigt, da schon jetzt die angestrebte Summe von $14.000 weit überschritten ist.

Ein Piksi-Modul besteht aus Antenne, einem Analog-Digital-Wandler, einem Startan-6 (jenem FPGA-Chip auf dem Mojo) und einem ARM Cortex-M4 (STM32F4, über diese günstige CPU hatten wir uns letzte Woche einen Vortrag auf der Makers Faire in Hannover angehört). D.h. Piksi verfügt selbst nicht über einen eigenständigen GNSS-Receiver und stellt damit eine neue Kategorie dar, die man in Zukunft häufiger antreffen dürfte. Zumal das Design mit einem Stromverbrauch von 500mA sehr sparsam ist.

Die Macher von Swift Navigation aus Kalifornien versprechen eine Genauigkeit von bis hinunter zu 1cm. Dabei muss man aber berücksichtigen, dass dazu das Differenzsignal von einer geeichten Feststation kommen muss. Andernfalls gilt diese Genauigkeit nur in Bezug zur Referenzstation. Insofern dürfte es bei einigen Käufern ein böses Erwachen geben. Denn immerhin sind DGPS-Signale noch nicht frei verfügbar.

Interessant ist das Projekt auch, weil sowohl Hardware als auch Software Open Source ist. Damit ist es auch anderen möglich, das Modul nachzubauen und dann bei wesentlich geringeren Kosten zu landen.

[Update] Mit Sicherheit wäre ein Zynq 7010 oder 7020 für das Projekt wesentlich besser geeignet als die Kombination aus Spartan-6 und Cortex-M4. Denn erstens ist darin ein wesentlich leistungsfähigerer ARM-Prozessor drin und zweitens hat der FPGA-Teil bis zu 10 mal mehr Logicelemente. Bei einer Abnahme von x000 Stück kostet eine solche CPU lediglich $15. [Update]

GPS-related Community Projekte

Es gibt verschiedenste Projekte, die sich Aufgaben gestellt haben und mit Themen beschäftigen die direkt oder indirekt mit OpenDGPS zu tun haben. Hier eine kurze, unvollständige Liste:

goGPS

Aus Forschungsarbeiten an den Universitäten von Osaka und Mailand hat Eugenio Realini ein OSS-Paket gestartet, dass die Ortung auf der Basis von DGPS-Informationen in Echtzeit berechnet. Ursprünglich wurde es 2009 für Mathlab entwickelt und ist inzwischen auf Java portiert worden. Der Initiator hat in seiner langfristigen Planung ebenfalls den Betrieb eigener Referenzstationen vorgesehen.

Die Genauigkeit, die mit goGPS erreichbar sind, liegt je nach Qualität der Referenzdaten bei unter einem Meter.

OSGeo

Als Metaorganisation und Inkubator hat sich OSGeo zum Ziel gesetzt, freie Projekte die sich mit dem Thema Locationservice und GPS-Software beschäftigen zu unterstützen und zu koordinieren. Mit an Board sind beispielsweise GeoServer, ein OSS Tilemap Server und GeoMOOSE ein JavaScript-Framework für verteilte Kartendaten.

OpenLayers

Als JavaScript-Bibliothek bietet OpenLayers jeder WebSite die Möglichkeit, Kartenmaterial wie die von OpenStreetMaps zu verwenden.

ZOO Project

Bei ZOO handelt es sich um ein Projekt, das als Web Processing Service fungiert. Dabei werden öffentlich zur Verfügung stehende georeferenzierte Daten als Basis für Berechnungen und Ansichten verwendet. Den ZOO Kernel gibt es für alle Betriebssysteme so, dass einem Einsatz im heimischen Environment nichts entgegenspricht.

GPSTk

Von der Uni Austin kommt diese Sammlung verschiedenster Tools gebündelt als Bibliothek. Das Ganze ist in C++ geschrieben und lässt sich Unixen und unter Windows kompilieren und in eigenen Programmen verwenden. Neben Objektstrukturen für Geo-Daten enthält es zum Beispiel auch eine Bibliothek für die mathematischen Grundlagen und sogar ein atmosphärisches Modell um Laufzeitveränderungen berechnen zu können. Die Sammlung ist unter LGPL lizensiert.