Smart Minotaur
 Alle Klassen Dateien Funktionen Variablen Seiten
NXTControl

Beschreibung

Die NXTControl Bibliothek bietet eine C++ Schnittstelle, um mit einem Lego NXT Brick zu kommunizieren. Hierbei wird das Direct Command Interface des Bricks verwendet. Dieses Interface definiert ein Kommunikationsprotokoll, mit dem Befehle "remote" an den Brick übergeben werden können. So können Sensoren und Motoren direkt angesteuert werden oder es kann über das Mailboxsystem der Brickfirmware mit einem laufenden Programm auf dem Brick kommuniziert werden.

Die Code Dokumentation findet sich im namespace nxt.

NXTControl bietet folgende Features:

  • USB-Kommunikation
  • Implementierung aller Direct Commands
  • einfache objektorientierte Nutzung
  • schnelle Laufzeit durch Implementierung in C++
  • Threadsafe implementiert

Folgende Erweiterungsmöglichkeiten wären für die Bibliothek denkbar:

  • Bluetooth-Kommunikation
  • Mehr Klassen für verschiedene Sensoren (momentan nur Motor und Ultraschallsensor)
  • Platformunabhängigkeit

Kompilieren

Um NXTControl zu kompilieren muss ein Compiler verwendet werden, der zumindest den C++0x Standard implementiert hat. Außerdem muss liusb-1.0 dev installiert sein. Nun muss das Verzeichnis NXTControl ausgecheckt werden. In diesem Verzeichnis müssen nun die folgenden Befehle ausgeführt werden:

mkdir build
cd build
cmake ..
make

Nun steht die Bibiliothek im Verzeichnis build zur Verfügung.

Entwicklungshergang

Im Rahmen dieses Projekts war eine Form der Kommunikation mit dem Lego NXT Brick unverzichtbar. In ersten Ansätzen wurde eine Opensource-Pythonbibliothek verwendet (nxt-python). Bei ersten Versuchen auf dem BBB wurde jedoch schnell klar, dass eine Interpretersprache wie Python für ein kleines Board wie das Beagle Bone ungeeignet ist. Die Auslastung war deutlich zu hoch und Abtastintervalle konnten nicht eingehalten werden. Ein Blick auf die Systemauslastung mit dem Befehl top hat diesen Verdacht bestätigt. Der Pythoninterpreter hat das System zu 100% ausgelastet.

Damit wurde die Bibliothek unbrauchbar für dieses Projekt. Es gibt auch C++ Bibliotheken, die die Kommunikation mit dem Brick ermöglichen (nxt++). Doch waren diese nicht so komfortabel und schön objektorientiert zu nutzen wie die Pythonbibliothek. Daher wurde eine eigene kleine Bibliothek implementiert, die in ihrer Struktur der Pythonbibliothek sehr ähnelt. Durch eigene Implementierung in C++ war nun auch die CPU-Auslastung des Systems auf unter 30% gesunken, wodurch alle Abtastintervalle eingehalten werden konnten und noch genügend Ressourcen für größere Aufgaben vorhanden waren.