5
HOBBY &SPIEL 47 5/2000 Elektor Robotic Invention System Alternative Programmierung Von Hans Steeman Der RCX-Block des Lego Robotics Invention System wird für den avancier- ten Anwender so richtig erst mit alternativen Programmiersprachen wie Visual Basic oder NQC interessant. Zweifellos ist die originale grafische Software zur Programmierung des RCX-Blocks des Lego Invention System äußerst anwenderfreund- lich, so dass er auch von Kindern ab etwa zehn Jahren problemlos programmiert werden kann. Die einfache Bedienbarkeit wird aber mit einer gewissen Unflexibilität erkauft, wenn es um Implementierung modifizierter oder selbstentworfener Hard- oder Software- Aufgaben für den RCX geht. Glücklicherweise gehört zum Lieferumfang des Robotics Inven- tion System ein AktiveX-Softwaremodul mit der Bezeichnung Spirit.OCX, das automatisch mit der RIS-Software installiert wird. Dieses Modul stellt die eigentliche Software-Schnitt- stelle des PCs zum RCX-Block dar. Zur Pro- grammierung der OCX-Schnittstelle wird gewöhnlich die im letzten Teil beschriebene Mindstorms-Programmiersprache eingesetzt. Prinzipiell bietet das OCX-Modul aber die Möglichkeit, andere Sprachen zum Betrieb des RCX-Roboters einzusetzen, die eine ActiveX- Schnittstelle auch unterstützen. Dies ist bei nahezu allen modernen, universell einsetzba- ren Umgebungen wie VisualBasic (ab 4.0), VisualC++ oder Delphi der Fall. Es gibt aber auch spezifische Umgebungen wie das Lab- View-Derivat Robolab, eine grafische Pro- grammiersprache für das RCX-Modul, die für den Schulunterricht entworfen wurde. OCX im Detail Auf der Mindstorms-Homepage ist ein Ver- weis zum Software Development Kit (SDK) zu finden, eigentlich kein echtes Programmier- kit, sondern lediglich eine ausführliche

Robotic Invention System - Higher Intellectcdn.preterhuman.net/texts/science_and_technology/ROBOTS/Robotic... · Der RCX-Block des Lego Robotics Invention System wird für den avancier-

  • Upload
    hamien

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Robotic Invention System - Higher Intellectcdn.preterhuman.net/texts/science_and_technology/ROBOTS/Robotic... · Der RCX-Block des Lego Robotics Invention System wird für den avancier-

HOBBY&SPIEL

475/2000 Elektor

RoboticInvention SystemAlternative ProgrammierungVon Hans Steeman

Der RCX-Block des Lego Robotics Invention System wird für den avancier-ten Anwender so richtig erst mit alternativen Programmiersprachen wie VisualBasic oder NQC interessant.

Zweifellos ist die originale grafische Softwarezur Programmierung des RCX-Blocks des LegoInvention System äußerst anwenderfreund-lich, so dass er auch von Kindern ab etwazehn Jahren problemlos programmiert werdenkann. Die einfache Bedienbarkeit wird abermit einer gewissen Unflexibilität erkauft,wenn es um Implementierung modifizierteroder selbstentworfener Hard- oder Software-Aufgaben für den RCX geht. Glücklicherweisegehört zum Lieferumfang des Robotics Inven-tion System ein AktiveX-Softwaremodul mitder Bezeichnung Spirit.OCX, das automatischmit der RIS-Software installiert wird. DiesesModul stellt die eigentliche Software-Schnitt-stelle des PCs zum RCX-Block dar. Zur Pro-grammierung der OCX-Schnittstelle wirdgewöhnlich die im letzten Teil beschriebeneMindstorms-Programmiersprache eingesetzt.Prinzipiell bietet das OCX-Modul aber dieMöglichkeit, andere Sprachen zum Betrieb desRCX-Roboters einzusetzen, die eine ActiveX-Schnittstelle auch unterstützen. Dies ist beinahezu allen modernen, universell einsetzba-ren Umgebungen wie VisualBasic (ab 4.0),VisualC++ oder Delphi der Fall. Es gibt aberauch spezifische Umgebungen wie das Lab-View-Derivat Robolab, eine grafische Pro-grammiersprache für das RCX-Modul, die fürden Schulunterricht entworfen wurde.

OCX im Detail

Auf der Mindstorms-Homepage ist ein Ver-weis zum Software Development Kit (SDK) zufinden, eigentlich kein echtes Programmier-kit, sondern lediglich eine ausführliche

Page 2: Robotic Invention System - Higher Intellectcdn.preterhuman.net/texts/science_and_technology/ROBOTS/Robotic... · Der RCX-Block des Lego Robotics Invention System wird für den avancier-

HOBBY&SPIEL

48 Elektor 5/2000

Beschreibung der OCX-Befehle. Die kompri-mierte PDF-Datei PBrick behandelt auf über100 Seiten alle Befehle, die die OCX verstehtund ausführen kann. Dabei handelt es sichum Steuerbefehle für den RCX-Block sowieum “interne” OCX-Befehle, die nicht die zumRCX-Block herunter geladen werden. EineÜbersicht der Befehle finden Sie in derTabelle am Artikelende.Neben der Beschreibung der OCX enthält dasSDK das Beispielprogramm GetStarted inVisualBASIC 5.0. Im folgenden wird gezeigt,wie man mit dem RCX-Roboters in einerobjektorientierten Sprache umgeht. Dies sollauch hier beispielhaft anhand von VisualBa-sic 6.0 geschehen. Die Vorgehensweise unteranderen objektorientierten Sprachen wieVisualC oder Delphi ist ähnlich bis identisch.

OCX-Einbindung in VB

Es ist kaum verwunderlich, dass eine objekt-orientierte Sprache den RCX-Block als Objektansieht. Zunächst wird das OCX-Modulinstalliert und unter VB angemeldet. Dazu

Robolab -Mindstorms in der SchuleDer RCX-Mikroconmputer ist das Kernele-ment des Robolab-Sets für den Unterrichtvon Schülern im Alter 8...16 Jahren zumEinstieg in die Steuer- und Regeltechnik.Das Herzstück, die Robolab-Software,unterscheidet sich völlig von der RIS-Vari-ante. Robolab wurde von Lego Dacta inZusammenarbeit mit der Tufts University(Massachusetts) entwickelt und basiert aufder leistungsfähigen Meß/Analyse-SoftwareLabView von National Instruments. InDeutschland und Österreich wird Robolabexklusiv von Technik-LPE (Eberbach) vertrie-ben.Wie RIS ist auch Robolab eine symbolischbasierte Programmiersoftware. Die Soft-ware hilft nicht nur den Lehrern im Unter-richt, sondern erlaubt den Schülern eigeneExperimente.Die PROGRAMMER-Software bietet fünfverschiedene Lernstufen für Einsteigerund für Fortgeschrittene. Die Software-Programme werden in Gruppen geteilt,die bestimmten “Hardware”-Anleitungen(sprich: vorgeschlagene Roboter-Baupro-jekte) oder edukativen Kategorien (Mathe-matik, Physik, ...) entsprechen. Ein einzi-ger Klick auf ein Level oder ein Thema inBild A führt in den PILOT, der eine Ein-führung in die Programmierung von Robo-lab (in vier aufeinander aufbauendenSchwierigkeitsstufen) gibt (Bild B). Sowird man mit der Programmierweise ver-

traut, bevor man zum nächsten Schritt,dem INVENTOR gelangt. Hier folgtnun endlich die Programmierung. Dazuwerden bestimmte Symbole aus derPalette (Bild C) in das Hauptfenstergezogen und miteinander verbunden.Die vier Levels des Inventors erlaubeneine nahezu unendliche Zahl von Kom-binationen der Symbole und damit dieProgrammierung individueller Verhal-tensmuster des Roboters. Die Einarbeitungszeit in Robolab istsehr kurz, ein dicker Pluspunkt für eineSoftware, die in der Schule genutztwerden soll. Die Arbeit mit Robolabwird durch ausführliche Hilfefenster, einAnleitungsvideo auf CD sowie auf derLego-Dacta-Homepage online unter-stützt. Die Software läuft auf PC undMac mit und ohne Netzwerk. Zum Robolab-Klassenset zählen mehrals 1600 Bauelemente mit unter ande-rem Motoren, Sensoren, Schalter, Kabelund Bauanleitungen für vier Grundmo-delle (in jeweils fünf Modifikationen).Die Anzahl und Beschaffenheit der Bau-teile ermöglicht eine Unteilung derKlasse in vier kleine Gruppen.

Informationen über das Robolab-Setsind im Internet unterwww.Technik-LPE.comundwww.LEGO.com/dacta/robolaberhältlich.

A

B

C

Bild 1. Einbindung des OCX-Moduls in Visual Basic 6.0.

Page 3: Robotic Invention System - Higher Intellectcdn.preterhuman.net/texts/science_and_technology/ROBOTS/Robotic... · Der RCX-Block des Lego Robotics Invention System wird für den avancier-

HOBBY&SPIEL

495/2000 Elektor

Mindstorms im InternetZu LEGO Mindstorms gibt es natürlich nicht nur die ”offiziellen” Internet-Pages, sondern auch eine Vielzahl von privaten Homepages, vondenen wir einige kurz kommentieren wollen.

http://www.lugnet.comLUGNET LEGO User Group NETwork, eine inoffizelle, von LEGO unabhängige Newsgroup im Internet (sehr umfangreich und informa-tiv!!)

http://graphics.stanford.edu/~kekoa/rcx/index.htmlAlle Interna des RCX sind auf dieser Seite zu finden. Kekoa Proudfoot hat den RCX vollständig zerlegt, Fotos aller Innereien angefertigtund beschrieben. Er hat die Firmware aus dem RCX ausgelesen und mit Hilfe zahlreicher Mitstreiter analysiert. Das Dokument bietet eineBeschreibung der Hardware, des seriellen Protokolls und aller Opcodes sowie einer Reihe von nützlichen Tools. Damit ist es gelungen,alle verfügbaren internen Befehle zu erfahren, um sie in eigener Software verwenden zu können. LEGO hatte beim Erscheinen des RCXkeinerlei Informationen herausgegeben (sehr lohnend!!).

http://www.enteract.com/~dbaum/lego/Dave’s LEGO Site. Dave Baum ist Buchautor von “Definitive Guide to LEGO Mindstorms” (inzwischen auch auf deutsch erschienen).Dave hat die Programmiersprache NQC (Not Quite C) entwickelt, mit der man in einer C ähnlichen Sprachsyntax Programme für LEGOMindstorms schreiben kann.

http://www.cs.uu.nl/people/markov/lego/rcxcc/(RCX Command Center) RcxCC, das RCX Command Center, ist eine Zusatzsoftware für Windows 95/98/NT, die von Mark Overmarsam Department of Computer Science der Utrecht University in den Niederlanden entwickelt worden ist. Die Beschreibung zu RcxCC istenglisch, aber inzwischen auch auf deutsch vorhanden. Zusätzlich gibt es umfangreiche Anleitungen zu LEGO-Robotern.

ftp://ftp.eecs.umich.edu/people/johannb/pos96rep.pdfSensoren, nicht nur für LEGO Roboter.

http://www.plazaearth.com/usr/gasperi/lego.htmSelbstgebaute LEGO-Sensoren: Michael Gasperi liefert auf seiner Internetseite zahlreiche Bauanleitungen und Hilfestellungen dazu.

http://www.oreilly.com/catalog/lmstorms/(Unofficial Guide to LEGO Mindstorms Robots) Jonathan Knudsen hat ebenfalls ein Buch geschrieben, “The Unofficial Guide to LEGOMindstorms Robots.” Auf dieser Seite gibt es Zusatzinformationen zum Buch, Fehlerkorrekturen und eine Linkliste.

http://www.cce.fht-esslingen.de/cce-german/deutsch/Sponsoren/Diplomarbeiten/JoergKE/index.htm(CCE Computer Clubhouse Esslingen) Das CCE - Computer Clubhouse Esslingen - hat vom MIT die Möglichkeit erhalten, eigene Versu-che mit den ansonsten nicht öffentlichen Crickets zu machen. In einer Diplomarbeit beschreibt der Autor, wie man Erweiterungen bauenkann.

http://www.bvandam.netBert van Dam beschreibt dieEntwicklung und Programmierung intelligenter LEGO Robotern mit Visual Basic.

Mikrocontroller

http://home.t-online.de/home/b.kainka/Kainka: Elektronik- und Mikrocontroller-Buchautor (unter anderem bei Elektor) und Entwickler von Computer-Interfaces zum Messen-Steuern-Regeln.

http://www.modul-bus.de/Modul-Bus: Interfaces und Sensoren für Computer.

http://www.ulrich-mueller.de/index.htmFischertechnik Computing. Keine LEGO Roboter, aber für den deutschen Markt sicherlich interessant ist die Seite von Ulrich Müller zurProgrammierung von Fischertechnik-Robotern. Hierum ist es in den letzten Jahren ziemlich still geworden, aber es gibt sie noch. In man-chen Gebieten haben sie sogar mehr zu bieten, als das LEGO kann, z.B. mit dem Pneumatik-Programm und den Industriemodellen.

http://www.microchip.com/10/lit/picmicroMicrochip PIC16CXX programmierbare Bausteine für Roboter und andere Messaufgaben.

Bitte beachten Sie, dass vor allem private Links oftmals “spontan” brechen. Wir können deshalb nicht für die Richtigkeit aller hier angegebener Internet-Adressen garantieren.

Page 4: Robotic Invention System - Higher Intellectcdn.preterhuman.net/texts/science_and_technology/ROBOTS/Robotic... · Der RCX-Block des Lego Robotics Invention System wird für den avancier-

wählt man im Fenster Neues Projekt das Pro-jekt Standard.EXE, klickt auf Öffnen undselektiert im Menü Projekt die Option Kom-ponenten. Im nun geöffneten Fenster markiertman LEGO PBRICKControl, OLE ControlModule und gibt sein OK (Bild 1). Ist dieAnmeldung korrekt verlaufen, erscheint inder Toolbox neben den Standard-Komponen-ten von VB auch ein rotes Lego-Logo.Das OCX-Modul ist jetzt an Form1 gekoppelt.Nun müssen nur noch einige Eigenschafteneingestellt werden (Objektnamen, COM-Schnittstelle und so weiter), bis man dieersten Programmzeilen erstellen kann. Legoempfiehlt, das Objekt im kleinen FensterEigenschaften auf der rechten BildschirmseitePbrickCtrl zu taufen, da alle Beispielpro-gramme von Lego diesen Namen verwenden.Im zweiten Schritt, um VB auf die Program-mierung des RCX-Roboters vorzubereiten, öff-net man wiederum das Projekt-Menü, wähltunter Modul hinzufügen das Blatt Vorhandenund selektiert die Datei RCXdata.bas, die sichim Getstarted-Paket befindet. Auf der VB-Oberfläche erscheint das Programm im Fen-sterchen Projekt1-Modul (Bild 2).Mit dem OCX-Modul ist es sehr einfach, denRCX-Block direkt von VB aus (über die IR-Ver-bindung) anzusteuern. Die “Intelligenz” sitztdann im PC und nicht im RCX-Block, der danneigentlich nicht mehr als ein (wenn auch auf-wendiges) Kommunikationsmittel zwischenden Sensoren/Motoren des Roboters und demPC darstellt. Auf diese Weise kann man zwarErfahrung im Umgang mit dem Robotergewinnen, fährt dieser aber aus dem Trans-missionsbereich des IR-Links heraus, so ver-hält er sich steuerlos.Das GetStarted-Programm liefert ein gutes

HOBBY&SPIEL

50 Elektor 5/2000

Bild 2. Das erste Projekt stammt von GetStarted.

Bild 4. Auf einen Doppelklick eines Knopfes hin erscheint derProgrammteil, der diese Aktion ausführt.

Bild 3. Das fertige Formular zur Steuerung des RCX.

Beispiel für diese Betriebsart. DieKommunikation mit dem RCX-Blockerfolgt durch Klicken auf Buttons aufdem Bildschirm des PC (sieht maneinmal von Download Program ab).Die zweite Variante ähnelt demBetrieb mit der “richtigen” RIS-Soft-ware: Der Roboter wird einmal pro-grammiert und arbeitet danach völ-lig autonom. Lädt (nicht: startet) mandas Projekt, bietet ein Doppelklickauf den Knopf Download Programinteressante Einblicke in die Intelli-genz der Roboters, den Quellkode.

Die dritte Betriebsvariante ist eineKombination der beiden anderen. Sokann zum Beispiel der Roboter auto-nom die Temperaturen an verschie-denen Stellen im Raum messen, dieDaten sammeln, zum PC zurückkeh-ren und die Datensätze dem PC über-geben. Etwas für Fortgeschrittene ...Am sinnvollsten ist es, mit der zwei-ten Variante zu starten. Man suchtdas Projekt getstarted.vbp und star-tet es. Es erscheint nun das ersteFormular (Form1) zur Robotersteue-rung. Gleichzeitig ist in einem ande-

Page 5: Robotic Invention System - Higher Intellectcdn.preterhuman.net/texts/science_and_technology/ROBOTS/Robotic... · Der RCX-Block des Lego Robotics Invention System wird für den avancier-

wurde. Das speziell für den RCX entwickelteNQC, dessen Syntax natürlich stark an C erin-nert, läuft unter Windows 95/98 und NT undbesitzt ein grafisches Benutzerinterface, umüber das RCX-Command-Center den RCX-Block zu programmieren. Die Programierum-gebung samt Handbuch steht im Internetzum kostenlosen Download bereit. Die ent-sprechenden Adressen finden Sie im Kasten.Auch wenn man NQC nicht zur Programmie-rung gebrauchen möchte, empfiehlt sich dieLektüre des Handbuchs, da es einen gutenEinblick in die Art und Weise gibt, wie einealternative Programmierumgebung mit derOCX zusammenarbeitet.

(000040-2)rg

ren Fenster der Quellkode des Pro-jekts GetStarted zu sehen. Das For-mular enthält diverse Knöpfe, umuntere anderem den RCX direkt zusteuern, aber auch ein Programmhinunterzuladen (Bild 3).Eine Programmierbeschreibungwürde natürlich den Rahmen diesesArtikels sprengen. Wer nicht fit ist inVisual Basic, kann viel durch Dop-pelklicks auf die Knöpfe des Formu-lars lernen: Danach erscheint näm-lich der vom Druck des Knopfesangesprochene Programmteil. In Bild4 schließlich ist zu sehen, was dasBasic-Programm unternimmt, wennman den Knopf Alive doppelklickt.

Z.B.: Not Quite C

So wie unter Visual BASIC läßt sichdie ActiveX-Komponente auch inanderen universellen objektorien-tierten Programmiersprachen behan-deln. Es gibt aber auch die Möglich-keit, die OCX durch eine exklusiv fürMindStorms entwickelte Software zuprogrammieren. Ein Beispiel dafür istdie Programmiersprache Not Quite C(NQC), die von Dave Baum ent-wickelt und von Mark Overmars(nicht von Arsenal, sondern von derAbteilung Computer Science derUniversität Utrecht) mit einem aus-führlichen Handbuch kommentiert

HOBBY&SPIEL

515/2000 Elektor

Kommunikationssteuerung(interne OCX-Befehle):InitComm( )CloseComm( )GetShortTermRetransStatistics( )GetLongTermRetransmitStatistics( )SetRetransmitRetries(immidiateRetries,

downloadRetries)IgnDLerrUntilGoodAnswer( )

Firmware-Steuerung:UnlockPBrick( )UnlockFirmware( UnlockString )Bool DownloadFirmware( FileName

Diagnosebefehle(interne OCX-Befehle):PBAliveOrNot()TowerAndCableConnected()TowerAlive()

PBrick-Systembefehle:SelectDisplay( Source, Number )SetWatch( Hours, Min )PBPowerDownTime(Time)PBTurnOff( )PBTxPower( Number )PlayTone(Frequency, Time)PlaySystemSound(Number)ClearTimer( Number )SendPBMessage( Source, Number )ClearPBMessage( )

PBrick-Ausgangssteuerung:On( MotorList )Off( MotorList )Float( MotorList )SetFwd( MotorList )

SetRwd( MotorList )AlterDir( MotorList )SetPower( MotorList, Source, Number )Wait(Source, Number)

PBrick-Eingangssteuerung:SetSensorType( Number, Type )SetSensorMode( Number, Mode, Slope)ClearSensorValue( Number )

PBrick Programmsteuerung:SelectPrgm( Number )DeleteTask( Number )DeleteAllTasks( )DeleteSub( Number )DeleteAllSubs( )

PBrick-Programm-Ausführung:StartTask( Number )StopTask( Number )StopAllTasks( )GoSub( Number )

PBrick_Flußsteuerung:Loop( Source, Number )EndLoop( )While(Src1, No1, RelOp, Src2, No2)EndWhile( )If(Src1, No1, RelOp, Src2, No2)Else( )EndIf( )

Flußsteuerung (interne OCX-Befehle):BeginOfTask( Number )EndOfTask( )EndOfTaskNoDownload( )BeginOfSub( Number )EndOfSub( )

EndOfSubNoDownload( )

PBrick-Arithmetik/Logik-Befehle:SetVar(VarNo, Source, Number)SumVar( VarNo, Source, Number )SubVar( VarNr, Source, Number )DivVar( VarNr, Source, Number ) MulVar( VarNr, Source, Number )SgnVar( VarNr, Source, Number )AbsVar( VarNr, Source, Number )AndVar( VarNr, Source, Number )OrVar( VarNr, Source, Number )

PBrick-Nachfragebefehle:SetEvent(Source, Number, Time )ClearEvent(Source, Number)Poll( Source, Number )PBBattery( )MemMap( )

PBrick Datenakquisition:SetDatalog( Size )DatalogNext( Source, Number )Variant UploadDatalog( From, Size )

ActiveX Steuerung und Ereignisbeförderung (Interne OCX-Befehle):SetThreadPriority(threadNo, threadClass,

ThreadPriority)GetThreadPriority(threadNo, threadClass,

ThreadPriority)Change( Number, Value )DownloadDone( ErrorCode, TaskNo )DownloadStatus( timeInMS,

sizeInBytes, taskNo )AsyncronBrickError( Number,Description )

*kursiv: Downloadbare Befehle

OCX-Befehle im Überblick