Spionprogramme im Eigenbau

Da ich auf die Standardprogramme der LEGO-CD nicht zurückgreifen konnte, intensivierte ich meine geheimen Ermittlungen und wurde schließlich unter [3] fündig. Mit dem Tool NQC ("Not Quite C") lässt sich der Spybot ab Version 2.5r1 unter Linux individuell programmieren. Laden Sie die Sourcen entweder von der Website des Programms (z. B. mit wget http://www.baumfamily.org/nqc/release/nqc-2.5.r1.tgz) herunter oder kopieren Sie die Datei nqc-2.5.r1.tgz von der Heft-CD aus dem Verzeichnis LinuxUser/lego/ nach /usr/local/. Mit dem Befehl

tar -zxvf nqc-2.5.r1.tgz

entpacken Sie das Archiv. Im neu entstandenen Verzeichnis nqc-2.5.r1 ausgeführt sorgen

make

und

make install

für die Installation von NQC. Voraussetzung für einen reibungslosen Ablauf ist die vorherige Installation des Programms bison, welches nicht unbedingt zu einer Standard-Linux-Installation gehört.

NQC

NQC-Programme sind in ihrer Syntax C-Programmen sehr ähnlich. Anweisungen werden durch ein Semikolon abgeschlossen, und Blöcke stehen in geschweiften Klammern { }. Kommentare lassen sich durch /* und */ einfassen oder stehen ab // bis zum Zeilenende. Die Kontrollstrukturen if, while und for entsprechen denen in C. Zusätzlich bietet NQC repeat und until an (Kasten 1). Ähnlich wie bei C muss in NQC ein Hauptprogramm existieren, der Task definiert durch task main() (siehe Listing 1). In diesem (und jedem anderen) Task können die Anweisungen an den Roboter kodiert werden. Eine einfache Anweisung ist beispielsweise OnFwd(OUT_A+OUT_B). Hier steckt eine Menge drin: Zwei Ausgänge, OUT_A und OUT_B (durch ein + verbunden), werden als Parameter übergeben. Die Funktion OnFwd() ist bereits eine Kombination aus On() und Fwd() und damit direkt Richtungsangabe- und Einschaltbefehl zusammen.

Listing 1 zeigt weiterhin die Funktion Wait(). Ihr wird als Parameter die Anzahl Hundertstelsekunden, die der Roboter einfach das weitermachen soll, was er gerade tut, übergeben. OnRev(OUT_A+OUT_B) schaltet die Motoren in den Rückwärtsgang, und mit Off(OUT_A+OUT_B) werden sie gestoppt. Um den Spybot einem ersten Programmiertest zu unterziehen, wollte ich ihn drei Sekunden vorwärts, dann drei Sekunden rückwärts fahren lassen und schließlich anhalten. Den Quelltext des Programms (Listing 1, vor_u_zurueck.nqc) finden Sie auf der Heft-CD im Verzeichnis LinuxUser/lego/. Der Aufruf

user@host:~$ nqc -TSpy -d vor_u_zurueck.nqc

wandelt das Programm um und lädt es direkt in den Roboter hinein. NQCs Fehlermeldungen, sollte beim Kompilieren etwas schiefgehen, sind so informativ, dass sich Probleme im Quellcode schnell finden lassen. Die Option -TSpy muss für jedes Spybotics-Programm erfolgen; -d sorgt dafür, dass das umgewandelte Programm direkt in den Roboter hineingeladen wird. Dazu muss natürlich die Kabelverbindung stehen und der Spybot eingeschaltet sein. Standardmäßig wird der erste serielle Port angesprochen; mit dem Parameter -S lässt sich aber auch jeder andere Port setzen, z. B. -S/dev/ttyS1.

Kasten 1: NQC-Kontrollstrukturen

if(bedingung)
{konsequenzanweisungen}
else
{alternativanweisungen}
while(bedingung){anweisungen}
do{anweisungen}
while(bedingung)
for(initialanweisung;bedingung;folgeanweisung)
{wiederholungsanweisungen}
repeat(anzahlausdruck)
{anweisungen}
switch(ausdruck)
{
  case konstanter_ausdruck_1:
  {anweisungen_1} break;
  …
  case konstanter_ausdruck_n:
  {anweisungen_n} break;
  default:
  {anweisungen} break;
}
until(bedingung)
{anweisungen}

Agenten-

: vor, zurück und stop mit <I>vor_u_zurueck.nqc<I>

#include "spy.nqh"     // muss jedes Spybot-Programm haben
task main()
{
  OnFwd(OUT_A+OUT_B);  // beide Motoren vorwärts
  Wait(300);           // 3 Sekunden fahren
  OnRev(OUT_A+OUT_B);  // beide Motoren rückwärts
  Wait(300);           // 3 Sekunden fahren
  Off(OUT_A+OUT_B);    // anhalten
}

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Robotertraum
    Füttern Sie Ihren Mindstorms-Robot per Bluetooth mit Programmen und schicken Sie ihn auf Ballsuche durchs Labyrinth.
  • Wine erhöht auf Version 1.1.33
    Wie das "Wine-Hauptquartier" bekannt gibt, repariert die neue Version des Nicht-Emulators einige Fehler und verbessert die Zusammenarbeit mit diversen Windows-Programmen und Spielen.
  • LM-Sensors spürt Feuchtigkeit

    LM-Sensors, ein freies Softwarepaket zum Überwachen von Hardwaredaten unter Linux, ist in Version 3.3.0 mit neuen Features erhältlich.
  • Klang-Lego
    Digital Audio Workstations – das waren früher kaum zu bezahlende Hardware-Lösungen. Heute ersetzen ein simpler PC, Midi und Software wie Tracktion 7 die teure Hardware, auch unter Linux.
  • LM-Sensors-Bibliothek wechselt zur LGPL

    LM-Sensors, ein Paket zur Hardwareüberwachung unter Linux, ist in Version 3.2.0 erhältlich. Ab dieser Release steht die enthaltene Bibliothek Libsensors unter LGPLv2.1.
Kommentare

Infos zur Publikation

LU 05/2017: Linux unterwegs

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Aktuelle Fragen

Knoppix-Live-CD (8.0 LU-Edition) im Uefiboot?
Thomas Weiss, 26.04.2017 20:38, 0 Antworten
Hallo, Da mein Rechner unter Windows 8.1/64Bit ein Soundproblem hat und ich abklären wollte, o...
Grub2 reparieren
Brain Stuff, 26.04.2017 02:04, 5 Antworten
Ein Windows Update hat mir Grub zerschossen ... der Computer startet nicht mehr mit Grub, sondern...
Linux open suse 2,8
Wolfgang Gerhard Zeidler, 18.04.2017 09:17, 2 Antworten
Hallo.bitte um Hilfe bei. Code fuer den Rescue-login open suse2.8 Mfg Yvo
grep und sed , gleicher Regulärer Ausdruck , sed mit falschem Ergebnis.
Josef Federl, 15.04.2017 00:23, 1 Antworten
Daten: dlfkjgkldgjldfgl55.55klsdjfl jfjfjfj8.22fdgddfg {"id":"1","name":"Phase L1","unit":"A",...
IP Cams aufzeichnen?
Bibliothek der Technischen Hochschule Mittelhessen / Giessen, 07.04.2017 09:25, 7 Antworten
Hallo, da nun des öfteren bei uns in der Nachbarschaft eingebrochen wird, würde ich gern mein...