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.