Graphisch Robs

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Sitemap
Index
Links
Impressum
Mail
 

Mobile Robots : Graphisch und konventionell

Modell

Basis ist der fischertechnik Robot MR2 des Konstruktionskastens "Mobile Robots". Der Robot MR2 hat zwei durch jeweils einen eigenen Motor angetriebene und gesteuerte Räder und ist mit einem Sensorbügel zur Erkennung von Hindernissen ausgestattet. Der Bügel betätigt, abhängig vom Auftreffen auf ein Hindernis, ein oder zwei richtungsorientierte Taster.

Mobile Robots : mit RCX Mindstorms, Leonardo E-1 und das Original

Mobile Robots : mit RCX Mindstorms, Leonardo E-1 und das Original

Für den Betrieb mit LLWin ist er mit der seriellen (aktiven) fischertechnik Interface ausgerüstet, für den Betrieb mit RoboLab und Robotics Invention mit dem Lego RCX Brick. Da der RCX Brick nur drei Motoren und drei Digitaleingänge betreiben kann, wurde hier die Wegstreckenmessung, die bei dem Original fischertechnik-Modell durch Impulsrädchen an den Radachsen gemacht wird durch eine Zeitmessung ersetzt, wie es auch beim Lego RobInv der Fall ist. Die dritte Alternative bildet der mit einem Leonardo E-1 ausgerüstetet MR2. Der mit jeweils vier (Analog/Digital) Ein- bzw. Ausgängen für den Original MR2-Aufbau ausreichend gerüstet ist.

Die Robots werden am PC programmiert und dann im Download-Modus betrieben. D.h. unabhängi von PC.

Programme

Ablauf : Bei Start des Programms (und freistehendem Robot) fährt der Robot vorwärts, bis er auf eine Hindernis trifft, dann wird zunächst rückwärts gefahren. Wird der linke Taster der Berührungsbügels betätigt, so wird nach rechts gedreht (analog rechter Taster), werden beide Taster betätigt, hat der linke Vorrang.

MR2 Original und LLWin

Mobile Robots : Modell MR2 Original

fischertechnik MR2 der Mobile Robots

fischertechnik MR2 der Mobile Robots

MR2 zeigt den LLWin-typischen Ablaufplan (original LLWin Beispiel-Programm). Die beiden Taster des Berührungsbügels werden in einer Endlosschleife abgefragt. Ist einer betätigt, so wird zunächst rückwärts gefahren und dann links bzw. rechts sonst vorwärts. Die Fahrstrecken für rückwärts, rechts/links werden als Schrittzahl des jeweiligen Impulsrades vorgegeben. Rueckwaerts, vorwaerts, links, rechts sind Unterprogramme, die hier nicht widergegeben sind.

MR2 mit ROBO Pro

Modell MR2 des alten Mobile Robots Kastens mit dem neuen ROBO Interface

ROBO Pro Programm, das weitgehend der LLWin-Lösung entspricht. Hier wurden die Werte für die Anzahl der Rück- bzw. Links- oder Rechts-Impulse direkt im Unterprogramm angegeben. Das erlaubt eine einfache Programmerstellung auf ROBO Pro Level 2. Weitere ROBO Pro Beispiele siehe ROBO Pro-Ecke

MR2 mit RCX Mindstorms

fischertechnik Robot MR2 mit Lego Mindstorm RCX Brick Steuerungsrechner

Mobile Robots : MR2 mit RCX Mindstorms

Robotics Invention System

Lego Rover3 der Robotics Invention

Lego Rover3 der Robotics Invention System 1.5

MR2 :  Robotics Invention System 2.0

RCX-Code (so wird die Programmiersprache des RobInv) bezeichnet bietet Kommandos (commands) zur Steuerung der Ausgänge (Motoren, Lampen) sowie Tonerzeugung und Warten, Ereignisroutinen (Sensor Watcher) zur Überwachung der digitalen Eingänge (Taster, Photowiderstand, Temperatur, Rotationszähler), Verzweigungsbefehle (Stack Controller) : If (Check and Choose), Repeat (times, Forever, While Until) und eigene Unterprogramme (my commands) in einer reinen Drag & Drop Umgebung. Zur Ausführung muß das Programm über eine serielle/Infrarot-Schnittstelle in den RCX-Brick geladen werden. Dort kann es recht bequem bedient werden (On/Off-Knopf, Run-Knopf, Programmauswahl- (es können 5 Programme im RCX-Brick gespeichert werden) und View-Knopf für die Statusanzeige).

Zum Programm Rover3 (Original Lego RobInv, siehe Bild oben - auch in der deutschen Version englische Programmbefehle - ) :

  • links : Bedienoberfläche (es gibt auch eine mit vorgegebenen Projekte (Challenges) mit vorgegebenen Modellen und Beispielprogrammen). Die Kästen entsprechen den Funktionsgruppen und können mit Mausklick geöffnet und geschlossen werden.
  • program Rober3 : das Hauptprogramm, startet nur die Motoren A und C, vorwärts (on AC)
  • touch : Ereignisroutinen zur Überwachung der Taster 1 bzw. 3
    set direction A<C< : beide Fahrmotoren rückwärts
    on AC for 1 : Einschalten Fahrmotoren für eine Sekunde
    on C for 1 : Einschalten des rechten Fahrmotors für eine Sekunde (Linkskurve) bzw. on A for 1 : (Rechtskurve)
    set direction A>C> : Fahrmotoren wieder vorwärts
    on AC : Einschalten Fahrmotoren

touch ist eine Ereignisroutine, die bei jedem Ereignis (Berühren eines Hindernisses) neu gestartet wird. Beim gleichzeitigen betätigen beider Taster (beim aktuellen Modell möglich, bei Lego Rover3 nicht) scheint der erste touch den Vorrang zu erhalten, es wird ohne zu ruckeln nach links gesteuert (wie beim fischertechnik MR2, eine Modifikation des Programm dürfte zu einer Lösung ala MR2 führen).

Version 2.0

Wurde in der Darstellung gestrafft. die (optische) Nebenläufigkeit wurde zugunsten "normaler" Konstrollstrukturen aufgegeben. In roboterspezifischen Bibliotheken werden für den jeweiligen Roboter typische Funktionsbausteine angeboten. In dem Beipiel oben wurde kräftig Gebrauch davon gemacht.

RoboLab

Lego RoboLab MR2

Lego RoboLab MR2

Implementierung der fischertechnik LLWin Lösung mit den Mitteln des RoboLab (LabView) graphischen Systems. Auch hier wurden die Schrittzähler durch Timer ersetzt. RoboLab bietet zwei Programmieroberflächen : den einfacheren Pilot und den anspruchsvollerern Inventor. Beide jeweils in vier Lernebenen mit allmählich steigenden Programmiermöglichkeiten. MR2 wurde mit Inventor Level 4 erstellt. Inventor bietet ein System von Werkzeugfenstern und meist auch noch Subfenstern mit Symbolen für die anschließbaren Geräte, Timer, und Programmkontrollstrukturen (Verzweigung, Schleife bis zu MultiThreads). Viele Symbole können durch Modifier zusätzlich beschrieben werden.

Anmerkungen zu MR2 (Eigenbau) :

  • Das Programm läuft von Ampel grün bis Ampel rot und wird zwischen den roten Pfeilen (Pfeil ab : Sprungziel) endlos wiederholt.

  • Die linken, blauen Symbole verzweigen nach Wert der Taster des Berührungsbügels. Die Zweige laufen in den grünen Symbolen wieder zusammen.

  • Der obere Zweig wird durchlaufen, wenn kein Taster gedrückt ist (Motoren A und C vorwärts)

  • Die beiden unter Zweige schalten die Motoren A und C für eine Sekunde rückwärts und halten dann jeweils einen Motor an, der andere läuft für eine Sekunde (vorwärts) weiter (Links- bzw. Rechtskurve). abschließen wird der zweite Motor wieder (vorwärts) zugeschaltet.

Spirit.OCX

Spirit.OCX ist ein ActiveX-Komponente, die von Robotics Invention genutzt wird und von Lego für das Programmieren unter Visual Basic und Delphi freigegeben wurde. Ein umfangreiches Handbuch dazu (ca. 120 Seiten, Acrobat Reader) kann von www.legomindstorms.com/sdk/index.html geladen werden.

Auch wenns nicht graphisch ist (wie der Titel sagt) hier ein Visual Basic 6 Beispiel, das in etwa dem RoboLab MR2 Programm entspricht (im Beispiel werden die Kurven mit beiden Motoren gefahren) :


Private Sub cmdDownPrgm_Click()

' --- Download MR2 Betriebsprogramm -----------

lblState = "Download gestartet"
ProgNum = 9

RCX.SelectPrgm MR2Location ' --- ProgrammNr auf RCX
RCX.BeginOfTask MR2Main ' TaskNr

RCX.SetPower BeideMotoren, CON, FullSpeed ' --- durchweg FullSpeed
RCX.SetSensorMode LinkerTaster, BOOL_MODE, 0 ' Taster auf 1 und 3, Boolean
RCX.SetSensorType LinkerTaster, SWITCH_TYPE
RCX.SetSensorMode RechterTaster, BOOL_MODE, 0
RCX.SetSensorType RechterTaster, SWITCH_TYPE

RCX.Loop CON, 0 ' --- EndlosSchleife

RCX.If BOOL, LinkerTaster, NE, CON, Wahr ' Linker Taster nicht gedrückt

RCX.If BOOL, RechterTaster, NE, CON, Wahr ' Rechter Taster nicht gedrückt
RCX.SetFwd BeideMotoren ' --- kein Taster : vorwärts
RCX.On BeideMotoren ' Ein
RCX.Else ' --- Rechter Taster gedrückt
RCX.SetRwd BeideMotoren ' Rückwärts
RCX.On BeideMotoren ' Ein
RCX.Wait CON, 50 ' --- 50 hunderstel Sekunden fahren
RCX.SetFwd RechterMotor ' --- vorwärts
RCX.Wait CON, 50 ' --- 50 hSek links drehen
RCX.SetFwd LinkerMotor ' --- wieder beide Motoren vorwärts
RCX.EndIf

RCX.Else ' --- Linker Taster gedrückt
RCX.SetRwd BeideMotoren ' Rückwärts
RCX.On BeideMotoren ' Ein
RCX.Wait CON, 50 ' --- 50 hunderstel Sekunden fahren
RCX.SetFwd LinkerMotor ' --- vorwärts
RCX.Wait CON, 50 ' --- 50 hSek rechts drehen
RCX.SetFwd RechterMotor ' --- wieder beide Motoren vorwärts
RCX.EndIf

RCX.EndLoop
RCX.EndOfTask

Spirit.OCX bietet einen umfassenden Befehlssatz (u.a. auch MultiTasking) von dem hier nur ein Ausschnitt genutzt wurde. Die Befehle gelten (mit Ausnahmen) für den RCX (Mindstorms) und den CyberMaster. Beim RCX werden sie in der Regel (wie hier) erst in den Brick geladen (Infrarot/seriell) und dann autark im Brick ausgeführt. Beim CyberMaster werden sie immer direkt ausgeführt (es besteht Funkkontakt). Bei beden Bricks gibt es Konfigurationsbefehle, die immer direkt ausgeführt werden.

Im widergegebenen Programmausschnitt wird das im RCX-Brick ablaufende Betriebsprogramm beschrieben und es werden zusätzlich die erforderlichen Downloadbefehle angegeben (RCX.SelectProgram, .BeginOfTask, .EndOfTask). Die im Brick ablaufenden Befehle haben den Character einer eigenen Programmiersprache, die auch ein Variablenkonzept und arithmetische Funktionen bietet. Im Beispiel wurden Literals durch symbolische Namen ersetzt (Definitionen in separatem BAS-File. zB. "02" - BeideMotoren, 1 - Wahr).

Die vollständige VB6 Source ist im Päckchen MR2SP.ZIP zusammengefaßt. Das Programm enthält auch noch einige Auskunftsfunktionen zu Version und Status sowie ein Download der erforderlichen Firmware (bei "leerem" Brick) und der Standard-Beispielprogramme.

MR2 mit Leonardo E-1

Mobile Robots : MR2 mit Leonardo E-1

Mobile Robots : MR2 mit Leonardo E-1

MR2 : Technologica v4.1 Programm für Leonardo E-1

Die Technologica bezeichnete Programmierumgebung für den Leonardo E-1 bietet die Möglichkeit Button aus einem Toolbereich in den Programm (Procedure) Bereich zu ziehen. Dabei können einzelne Eigenschaften modifiziert werden. Zusätzlich können von einem Symbol-Bild des Leonardo Elemente (hier die blauen Symbole für die Eingänge (1 - 4) und die für die Ausgänge (A - D)) in den Programmbereich gezogen werden. Die Symbole können auch zur direkten Kommunikation mit dem Leonardo genutzt werden. Es können auch eigene Proceduren im Sinne von Unterprogrammen erstellt werden.

Eine Programmsequenz besteht aus einer Folge von Buttons, deren erster die Ein- bzw. Ausgabe"Adresse" (blaue 1 - 4 bzw. A - D ) angibt. Die weiteren geben die Operationen an. Z.B. in der Procedure L : links (rechts oben im Bild) wird Out A angewählt, der angeschlossene Motor sol linksrum laufen, anschließend wird er dann gestartet. Hinter der blauen 1 (Anwahl von In 1) folgt ein Zurücksetzen des zugeordneten Zählers und anschließend ein Button (?), der auf Erreichen des Counterstandes 5 wartet. Danach wird der aktuelle Motor ausgeschaltet.

If- und Schleifen-Befehle werten stets den aktuellen Eingang aus. Die Art des Einganges kann auf dem Symbol-Bild von Leonardo festgelegt werden. Sie wirken immer nur auf den unmittelbarfolgenden Button. In Loop sind das Abfragen der Berührungssensoren rechts und links des MR2. Je nach Ergebnis wird in die zugeordnete Procedure verzweigt. Da immer nur ein Button vom If beachtet wird, mußten die Hilfs-Proceduren RL und RR erstellt werden.

Ein Problem stellt bei Technologica die Programmierung von Endlosschleifen dar. Es gibt nur einen Button für einen bestimmte Anzahl Schleifendurchläufe (max. 99) das führt zu einem sehr schnellen Ende des Programms. Hier wurde deswegen als Notlösung ein Wartebefehl in V platziert, der immer zu min. 1 sec. Vorwärts-Fahren führt. Damit läuft das Programm dann deutlich länger, die Reaktionszeit am Hindernis vergrößert sich dann aber von praktisch 0 auf 1 Sekunde, das ist kaum akzeptabel. Man sieht hier also deutlich die Grenzen der Programmiermöglichkeiten des Technologica Konzepts.

LeonardoX

Mit dem Programm Technologica wird auch ein ActiveX.OCX  (LeonardoXControl.OCX) ausgeliefert. Es ist z.B. unter VB6 einsetzbar und umfaßt einen Befehlsumfang, der dem von Technologiga weitgehend entspricht. Für den Download-Betrieb ist aber die Bildung von Proceduren, wie sie bei Technologica zu finden sind, nicht möglich. Dafür Kennen die If- Schleifen-Befehle eine Beginn- End-Klammer, die so eine Reihe von Befehlen zusammenfassen kann. Mit dem Befehlspaar LabelPlace und LabelGoto findet sich sogar eine Realisierungsmöglichkeit für eine Endlosschleife.

lx.DownloadBegin
    lx.SetSensorsTypes stPressCounter, stPressCounter, _
                       stBoolean,      stBoolean
    lx.LabelPlace 1
      lx.ListentoPort 3
      lx.IfDo opBiggerOrEqual, 1
'       ZR : zurück
        lx.TalktoPort "A"
        lx.SetDirectionRight
        lx.OutOn
        lx.TalktoPort "B"
        lx.SetDirectionRight
        lx.OutOn
        lx.ListentoPort 1
        lx.ZeroInput
        lx.WhileDo opBiggerOrEqual, 8
        lx.WhileEnd
        lx.OutOff
        lx.TalktoPort "A"
        lx.OutOff
'       L : links
        lx.TalktoPort "A"
        lx.SetDirectionLeft
        lx.OutOn
        lx.TalktoPort "B"
        lx.SetDirectionRight
        lx.OutOn
        lx.ListentoPort 1
        lx.ZeroInput
        lx.WhileDo opBiggerOrEqual, 5
        lx.WhileEnd
        lx.OutOff
        lx.TalktoPort "A"
        lx.OutOff
      lx.IfEnd
      lx.ListentoPort 4
      lx.IfDo opBiggerOrEqual, 1
'       ZR : zurück
        lx.TalktoPort "A"
        lx.SetDirectionRight
        lx.OutOn
        lx.TalktoPort "B"
        lx.SetDirectionRight
        lx.OutOn
        lx.ListentoPort 1
        lx.ZeroInput
        lx.WhileDo opBiggerOrEqual, 8
        lx.WhileEnd
        lx.OutOff
        lx.TalktoPort "A"
        lx.OutOff
'       R : rechts
        lx.TalktoPort "A"
        lx.SetDirectionRight
        lx.OutOn
        lx.TalktoPort "B"
        lx.SetDirectionLeft
        lx.OutOn
        lx.ListentoPort 1
        lx.ZeroInput
        lx.WhileDo opBiggerOrEqual, 5
        lx.WhileEnd
        lx.OutOff
        lx.TalktoPort "A"
        lx.OutOff
      lx.IfEnd
'     V : vorwärts
      lx.TalktoPort "A"
      lx.SetDirectionLeft
      lx.OutOn
      lx.TalktoPort "B"
      lx.SetDirectionLeft
      lx.OutOn
    lx.LabelGoto 1
  lx.DownloadEnd
 

Das Programm entspricht (mit Ausnahme der Endlos-Schleife) der Technologica-Lösung. Die Proceduren wurden in z.B. IfDo --- IfEnd Klammern untergebracht. So stellt das gesamte Programm nur einen Block dar. Es läuft, im Gegensatz zur Technologica Lösung voll befriedigend, da der Wartebefehl im V:vorwärts-Block entfallen konnte.

Stand : 22.09.2009