Mojo – Command-Line statt umständlicher Xilinx ISE

Das Mojo-Board mit einem Xilinx-FGPA Spartan 6 ist nicht nur ein preiswertes und ausgezeichnet gemachtes Stück Hardware sondern eignet sich auch hervorragend als Ergänzung für ein mobiles DGPS-System. Es verbraucht extrem wenig Strom und hat ausreichend Rechenpower, um ein eventuell nötiges Preprocessing der GNSS-Daten durchzuführen. Beispielsweise kann ein FPGA für einen Kalmen-Filter (pdf) – oder ein Complementary Filter – verwendet werden. Neben einem GPS-Receiver lässt sich gleichzeitig an den Analog-Ports auch ein Accelerometer anschliessen.

Allerdings ist der Weg zu einem ersten Programm extrem steinig. Die Xilinx-Suite ist nicht unbedingt die beste Wahl für die Entwicklung der Module. Für die meisten Entwicklungen dürfte sich das sperrige und riesige Paket schlecht in den Workflow integrieren lassen.

Nach etlichen Stunden Recherche steht jetzt eine vernünftige Umgebung: Xilinx läuft unter Linux (in unserem Falle in einer VirtualBox) und das Flashen des Boards findet unter MacOSX auf einem anderen Rechner am Arbeitsplatz statt.

Notwendig dafür war eine Anleitung eines FPGA-Experten, wie man die Xilinx-Commandline-Tools verwendet (pdf). Darin ist neben den Tools selbst auch beschrieben, wie man die notwendigen Shell-Variablen setzen muss und wie man in einem Projekt an die jeweilige Syntax kommt. Es zeigt sich jedoch, dass man eine teils erheblich längere Build-Zeit einkalkulieren muss, oder die Scripte anpassen sollte, da sie immer alle Schritte komplett durchführen auch, wenn sich bestimmte Sachen nicht geändert haben.

Die Überspielung des Bitstreams kann statt mit dem vorgegebenen Mojo-Loader (src), der eine aktuelle JVM voraussetzt auch mit einem Python-Programm erfolgen. Im Mojo-Forum war der User mogorman so nett ein Script zu veröffentlichen, das dies sowohl unter Linux als auch unter MacOSX erledigt. Unter letzterem sollte man noch den Parameter -n hinzufügen, da sich das Script andernfalls mit der Meldung “Flash is not same size as local bitstream.” verabschiedet.

Das Mojo selbst wird von OSX als USB-Modem eingehängt und der serielle Port findet sich immer als /dev/tty.usbmodem*. Wobei der Stern eine dreistellige Ziffer ist. Wer schonmal mit einem Arduino unter OSX gearbeitet hat kennt das bereits. Leider ist nicht klar, wie man das System dazu bringt immer den gleichen Device-Namen zu verwenden. Für den Fall, dass man nur ein entsprechendes Gerät an seinem Rechner hat, kann man folgenden Befehl zum Flashen verwenden:

./mojo.py -v -n -d `ls /dev/tty.usb*` mojo_top.bin

Auf der Mojo-Seite findet sich unter anderem ein Beispielprogramm für die serielle Kommunikation über den AVR auf dem Board. Damit liessen sich die berechneten Daten eines GPS-Recievers und eines Accelerometers problemlos an einen Controller (z.B. RaspberryPi) weitergeben. Auf diesem könnte dann die RTKLIB laufen, die die Daten nicht noch selbst bereinigen müsste.

Wem Verilog als Synthesesprache nicht liegt, der kann das Mojo auch mit VHDL benutzen. Ebenfalls im Forum findet sich ein schöner Beispiel-Code von User Xark, das auch gleich noch verdeutlicht, wie die Analogports benutzt werden können.

Ein Beispiel, wie ein FPGA (hier ein etwas älteres Basys 2 von Diligent für ~€50) mit einem GPS-Receiver zusammenspielen kann hat grade All Programmable Planet beschrieben. In nächster Zeit sollen noch weitere Artikel und Beschreibungen zu dem Projekt kommen.

Hohe Ortungsgenauigkeit als Unterstützung für Blinde

Mobiler GNSS mit DGPS-Verarbeitung für eine Genauigkeit von unter einem Meter auch in städtischen Gebieten. (Quelle: alberding.eu)

Mobiler GNSS mit DGPS-Verarbeitung für eine Genauigkeit von unter einem Meter auch in städtischen Gebieten. (Quelle: alberding.eu)

Einer der sinnvollsten Einsatzzwecke für Ortungsgenauigkeit im Dezimeterbereich ist sicher die Navigationsunterstützung für Blinde und Sehbehinderte. Das Projekt Guide4Blind hat sich zum Ziel gesetzt, Blinde neue Möglichkeiten der Bewegung im Tourismus zu eröffnen. Als eines der spannendsten Ergebnisse ist es dem Projekt gelungen, zusammen mit der Firma Alberding aus Schönefeld bei Berlin einen tragbaren GPS-Empfänger mit DGPS-Unterstützung zur Marktreife zu bringen.

Das Alberding A07 (Produktbeschreibung und Vertrieb) basiert auf dem NV08C und kann mit NTRIP-Daten über eingebautem GPRS umgehen und kommt so auch in bebautem Gebiet auf eine Genauigkeit von unter einem Meter. Über Bluetooth kann es die Positionsdaten an ein iPhone oder Android-Handy schicken. Es unterstützt neben GPS und Glonass auch Galileo.

Sensordaten eines Accelerometers mit Kalman-Filter bereinigen

Das MMA7341L-Modul von Freescale

Das MMA7341L-Modul von Freescale

OpenDGPS hat grade eine kleine Sachspende bekommen: ein 3-Achsen-Accelerometer vom Typ MMA7341L (Technische Daten). Solche Sensoren werden nicht nur in der Robotik eingesetzt sondern sind prinzipiell auch als Eingänge für die RTKLIB geeignet. Allerdings müssen die Sensordaten im Allgemeinen vorher vom Rauschen befreit werden. Etabliert hat sich dafür ein Kalman-Filter. Im Gegensatz zu einem Lowpass-Filter werden nicht einfach nur bestimmte Signalteile abgeschnitten oder gedämpft sondern die Dynamik wird an das jeweilige Messsystem angepasst.

Eine ausführliche Einführung mit Code-Sampels ist auf der Site Interactive Matter Lab zu finden. Beschrieben wird der Einsatz mit einem Accelerometer zwar von einem anderen Hersteller aber ebenfalls mit einem binären Output zwischen 0 und 128 für jede Achse.

Bauanleitung für ein Akkupack

Als Messionar im Ausseneinsatz braucht man Geräte, die eine eigene Stromversorgung mitbringen. Handys und Laptops bringen diese von Haus aus mit. Für eine mobile Messstation auf der Basis eines Raspberry Pis oder vergleichbaren Geräten muss jedoch eine separate Stromversorgung her.

@Faldrian von jenseitsderfenster.de hat eine Bauanleitung für ein externes Akkupack geschrieben und seine Lernklurve beschrieben. In der dritten Iteration scheinen jetzt auch frühere Temperaturprobleme gelöst.

Die Leistung dürfte ein Raspberry Pi mit angeschlossenem GPS-Receiver ausreichende Zeit betreiben können, selbst wenn die Rohdaten nicht nur für die Offline-Berechnung gespeichert werden sondern die Daten direkt bearbeitet werden. Damit eignet sich ein solches Pack als Stromquelle für die Erzeugung eines temporären Diffentialsignals für die Eichung einer neuen Feststation in der Nähe mit Hilfe eines Messpunktes.

FPGA-Board bei kickstarter

In der Größe zwischen Raspberry Pi und typischen Arduinos und mit ähnlich vielen In und Outs.

In der Größe zwischen Raspberry Pi und typischen Arduinos und mit ähnlich vielen In und Outs.

Unter dem Namen Mojo läuft grade bei kickstarter eine Sammelaktion für ein FPGA-Board mit einem Xilinx Startan-6 Prozessor. Für $65 bekommt man ein sehr gut mit Ein-/Ausgängen (analog und digital) ausgestattetes Board.

Wirklich interessant wäre es, wenn sich jemand finden würde, der eine RTKLIB-Implementierung für FPGAs anfasst. Zusammen mit einem Software-Defined-Radio könnte man damit dann einen DGPS-Receiver bauen, der in Echtzeit sehr hohe Genauigkeiten liefern würde. Insbesondere da die RTKLIB Daten von Bewegungssensoren einberechnen kann.

40€-Modul – Rohdaten mit GPS, GLONASS und GALILEO

Obwohl gestern das Device “Null” (RaspberryPi + Navilock NL 507TTL) seinen ersten Test erfolgreich bestanden hat, soll nicht verheimlicht werden, dass es durchaus leistungsfähige Alternativen zu dem mit ~20€ sehr preiswerten Modul gibt. Zumal das Navilock nur noch in Restbeständen verfügbar ist.

Sébastien Carcanague hat uns aus Toulouse kontaktiert und auf die NV08C-Serie hingewiesen. Sébastien ist angehender PhD und schreibt grade seine Thesis an der dortigen Universität. Interessant für OpenDGPS ist er vor allem, weil er eine viel beachtete und von dem Institut of Navigation – ion (eine rührige Organisation, die leider nicht genug Abstand zum Militär hält) ausgezeichnete Arbeit mit dem Titel “Real-Time Geometry- Based Cycle Slip Resolution Technique for Single-Frequency PPP and RTK” veröffentlichte.

Ein NV08C-Modul mit seriellem Anschluss für etwas über 40€. (Quelle: Farnell Deutschland, mehr nach dem Klick …)

Ein Modul mit einem NV08C-Design ist beispielsweise bei Farnell Deutschland für 43€ in ausreichender Stückzahl verfügbar. Auf dem Modul kommt ein MAX2769 zum Einsatz, der die beiden Frequenzen für GPS/GALILEO (1575.42 MHz) und für GLONASS (1602.0 MHz) bearbeiten kann. Er unterstützt SBAS und kann 32 Kanäle erfassen.

Einen ausführlichen Einsatzbericht mit vielen Hintergrund-Links hat vor kurzem Hagen.Felix im kowoma GPS-Forum veröffentlicht. Leider wird dort wieder nur der Einsatz unter Microsoft Windows beschrieben und es ist wohl an uns, den Einsatz mit OSS zu dokumentieren.

System Integration Manual: Antaris u-blox LEA-4

Eigentlich ist OpenDGPS Device- und Herstellerunabhängig. Allerdings entwickeln wir die Referenzplattform auf der Basis des Navilock NL-507TTL. Es ist das einzige verfügbare Modul, das für einen Preis von derzeit ca. 20€ den Zugriff auf die Rohdaten gestattet. Und für das Projekt ist es besonders wichtig, die Einstiegshürden so gering wie möglich zu halten. Auf dem TTL-Board ist der u-blox LEA4 verbaut, der entgegen der Spezifikation mit einem einfachen Steuerbefehl (siehe links:) die reinen Satellitendaten liefert.

Für jeden GPS-Interessierten lohnt sich jedoch auch dann ein Blick in das System Integration Manual für den Antaris u-blox LEA-4 wenn man nicht damit arbeiten will. Es zeichnet sich durch umfangreiche Beschreibungen aller zum Einsatz kommender Techniken. Von A-GPS über Differential GPS und SBAS bis zu dem geeigneten Antennendesign wird alles notwendige beschrieben. Das Dokument kann man sich auf datasheetarchive.com kostenlos runterladen.

GPS-Logger mit dem Navilock NL-504ETTL

Der GPS-Receiver Navilock NL-504ETTL empfiehlt sich ja wegen seiner versteckten RAW-Data-Funktion für OpenDGPS. Obwohl das Modul schon älter ist, ist es ausreichend schnell und mit etwas über 20€ vor allem extrem billig. Solange es noch kein funktionierendes Differential-Netz gibt kann man das Modul aber zum Beispiel zu einem einfachen GPS-Logger verbauen. Arne Friedrichs hat das vor zwei Jahren gemacht und ausführlich beschrieben.

Eine etwas teurere aber auch wesentlich leistungsfähige Alternative für die Erfassung der Rohdaten ist der seit knapp einem Jahr verfügbare Copernicus II von Trimble. Für $75 ist ein DIP-Modul bei sparkfun verfügbar. In Deutschland war es noch nicht zu finden. Insofern sollten Leute mit nervösen Mausfingern den Stress mit dem Zoll nicht vergessen.

Homebrew GPS-Receiver mit FPGA

Neben der Möglichkeit, DVB-T-Receiver zu okkupieren und zu GPS-Empfängern umzurüsten, kann man auch gleich einen GPS-Empfänger komplett selbst bauen. Andrew Holme hat dies getan und eine ausführliche Beschreibung veröffentlicht. Interessant ist das Projekt für alle, die sich mit dem Thema intensiver beschäftigen wollen besonders dadurch, dass der Autor die grundlegenden Algorithmen beschreibt, die vom Signal bis zu der tatsächlichen Position führen.

Die erreichbare Genauigkeit liegt ohne Differntial-Signale im zweistelligen Meterbereich. Für ein Selbstbauprojekt mit günstigen Komponenten ein hervorragendes Ergebnis.

Parallel-Computer für alle

Das Entwicklungsboard ist noch etwas größer als es das finale Produkt sein soll. Es haben sich bereits über 2000 Leute an dem Projekt beteiligt. Und obwohl die Summe mit $750.000 relativ hoch ist, konnte bereits die Hälfte eingeworben werden. (Mehr nach dem Klick …)

Das Kickstarter-Projekt Parallella: A Supercomputer For Everyone verspricht massiv parallele Systeme für wesentlich geringere Preise als sie heute noch zu zahlen sind. Für $100 kann man bereits ein Board mit einem Epiphany-III-Chip bekommen mit 16 Kernen bekommen. Als Steuerungs-CPU kommt ein Dual-Core ARM 9 zum Einsatz. Das Board soll mit Ubuntu 11 betrieben werden und braucht zwischen 0,1 und 2 W. Es sollte etwa im Bereich von 25 GFLOPs (bei einfacher Genauigkeit). Ein solches System würde sich zum Beispiel hervorragend für die Echtzeitberechnung von Differentialsignalen mehrerer Receiver auf einem Rover eignen um dessen exakte Lage im Raum eignen.

[Update] Das Projekt wurde erfolgreich abgeschlossen. Bei dem hohen Betrag war das nicht unbedingt wahrscheinlich. Also Gratulation! Und wir sind wirklich gespannt auf das Board und werden berichten, was sich so tut. Derzeit wird gesagt, dass im Mai geliefert werden soll. [/Update]