|
ROBO Explorer von 2007 : UltraSonic mit AutopilotDas Modell entspricht dem ROBO Explorer aus dem gleichnamigen Kasten. Das Betriebsprogramm gibt es in einer C# 2005 Version : Das Programm entspricht der Summe der mitgelieferten ROBO Pro Programme Explorer 3 (es versteckt sich hinter dem AutoPiloten) und dem Explorer 4 zur manuellen Steuerung über Buttons. Bei Markierung von "Autopilot" übernimmt der Explorer3-Nachbau die Kontrolle über den Explorer und steuert ihn über den ebenfalls mitgelieferten Parcour. Die aktuellen Werte seiner Sensoren werden laufend angezeigt. ProgrammdetailsDer Explorer4-Teil ist recht einfach, er besteht aus einer Reihe von Button-Routinen (MouseDown, MouseUp, Click), die die einzelnen Komponenten steuern. Die Sensor-Werte werden in der Routine Action in einer do-Schleife ständig ausgelesen und angezeigt. Wesentlich komplexer ist der Explorer3-Teil (automatische Spursuche ...). Die
Teilkomponenten wurden in eigenen Threads untergebracht(Thread(Routine) :
AutoPilot(AutoLoop), Licht(LichtLoop), Temperatur(TempLoop) und
Farberkennung(FarbLoop). Sie sind global deklariert und werden auf die
AutoPilot-CheckBox initialisiert und gestartet. Da die Thread-Routinen einen
Loop einsetzen, muß eine Ende-Bedingung vorhanden sein, die auf Ende
AutoPilot und den HALT-Button eingeht : Das Gesamt-Programm wird im wesentlichen durch die Buttons ACTION und HALT/ENDE gesteuert. Der AutoPilot durch die zur CheckBox gehörende Routine für CheckedChanged. Hier wird eine Menge gesperrt und freigegeben. z.B. werden die Buttons hier Enabled. Bei C# 2005 gibt es zwei funktionsgleiche Lösungen : Alles in der MainForm (thick client) und Funktionalität des Explorers selber ausgelagert in eine Klasse (thin client). Eine interessante Lösung für das FTS MouseExplorer : Steuern des Explorers durch Mausbewegungen
Das hier gezeigte rote Feld steht für RechtsVor. Maus am oberen Rand mittig im Feld steht für Rechtskurve. Linkes Rad fährt voll, rechtes halb. Programmausschnitt mit der Steuerung : Private Docanvas.Clear(Color.White) If mouseY < mitteOben And mouseX < mitteLinks Then ft.SetMotor(Out.M1, Dir.Left, Speed(mouseX)) ft.SetMotor(Out.M2, Dir.Left, Speed(mouseY)) canvas.FillRectangle(Farbe, 0, 0, mitteLinks, mitteOben) ElseIf mouseY < mitteOben And mouseX < mitteRechts Then ft.SetMotor(Out.M1, Dir.Left, Speed(mouseY)) ft.SetMotor(Out.M2, Dir.Left, Speed(mouseY)) canvas.FillRectangle(Farbe, mitteLinks, 0, mitte, mitteOben) ElseIf mouseY < mitteOben Then ft.SetMotor(Out.M1, Dir.Left, Speed(mouseY)) ft.SetMotor(Out.M2, Dir.Left, Speed(mouseX)) canvas.FillRectangle(Farbe, mitteRechts, 0, mitteLinks, mitteOben) ElseIf mouseY < MitteUnten And mouseX < mitteLinks Then ft.SetMotor(Out.M1, Dir.Left, Speed(mouseX)) ft.SetMotor(Out.M2, Dir.Right, Speed(mouseX)) canvas.FillRectangle(Farbe, 0, mitteLinks, mitteLinks, mitte) ElseIf mouseY < MitteUnten And mouseX < mitteRechts Then ft.SetMotor(Out.M1, Dir.Off) ft.SetMotor(Out.M2, Dir.Off) ElseIf mouseY < MitteUnten Then ft.SetMotor(Out.M1, Dir.Right, Speed(mouseX)) ft.SetMotor(Out.M2, Dir.Left, Speed(mouseX)) canvas.FillRectangle(Farbe, mitteRechts, mitteOben, mitteLinks, mitte) ElseIf mouseX < mitteLinks Then ft.SetMotor(Out.M1, Dir.Right, Speed(mouseX)) ft.SetMotor(Out.M2, Dir.Right, Speed(mouseY)) canvas.FillRectangle(Farbe, 0, MitteUnten, mitteLinks, mitteOben) ElseIf mouseX < mitteRechts Then ft.SetMotor(Out.M1, Dir.Right, Speed(mouseY)) ft.SetMotor(Out.M2, Dir.Right, Speed(mouseY)) canvas.FillRectangle(Farbe, mitteLinks, MitteUnten, mitte, mitteOben) Else ft.SetMotor(Out.M1, Dir.Right, Speed(mouseY)) ft.SetMotor(Out.M2, Dir.Right, Speed(mouseX)) canvas.FillRectangle(Farbe, mitteRechts, MitteUnten, mitteLinks, mitteOben) End Sub Das Programm ist mit VB2005 / FishFace2005.DLL für das Robo Interface geschrieben. Nur Action : Der Explorer gesteuert über den WiimoteSteuern des Explorers über den Wii Remote mit VB2008 (Standard-Template FishWindowsVB), FishFace2005.DLL/umFish40.DLL und WiimoteLib.DLL. Das Modell wird über ein Robo Interface und eine Robo RF Datalink betrieben und über ein Wii Remote über Bluetooth gesteuert. Der Explorer hat hier (wie üblich) zwei Motoren (mit Ketten oder Raupen) an M1 und M2 und eine gelbe Lampe an M4 (Gelbblinker) : Imports FishFace40Imports WiimoteLib Public Class WiiExplorerDim ft As New FishFace() Dim wii As New Wiimote() Dim gelbOn As Boolean = False Instanzieren von FishFace (über RF Datalink) und der WiimoteLib für den Zugriff auf Wiimote über Bluetooth sowie einer Statusvariablen für den Gelbblinker. Private Sub Action()Do If wii.WiimoteState.ButtonState.Up Then ft.SetMotor(Out.M1, Dir.Left) ft.SetMotor(Out.M2, Dir.Left) ElseIf wii.WiimoteState.ButtonState.Down Then ft.SetMotor(Out.M1, Dir.Right) ft.SetMotor(Out.M2, Dir.Right) ElseIf wii.WiimoteState.ButtonState.Left Then ft.SetMotor(Out.M1, Dir.Left) ft.SetMotor(Out.M2, Dir.Right, Speed.Half) ElseIf wii.WiimoteState.ButtonState.Right Then ft.SetMotor(Out.M1, Dir.Right) ft.SetMotor(Out.M2, Dir.Left, Speed.Half) ElseIf wii.WiimoteState.ButtonState.Plus Then tmrGelb.Enabled = True ElseIf wii.WiimoteState.ButtonState.Minus Then tmrGelb.Enabled = False ft.SetMotor(Out.O4, Dir.Off) Else ft.SetMotor(Out.M1, Dir.Off) ft.SetMotor(Out.M2, Dir.Off) End If ft.Pause(333) Loop Until ft.Finish() ft.SetMotor(Out.O4, Dir.Off) End Sub Das eigentliche Programm liegt in Sub Action() und ist rechtübersichtlich : In einer Schleife werden die interessierenden Tasten (Kreuz, +/-) des Wiimote auf gedrückt abgefragt. Im True-Fall werden die Motoren entsprechend gesteuert. Bei Plus/Minus wird die TimerTick Routine für den Gelbblinker (de)aktiviert. "---
ProgramControl ---" Standard ProgrammControl mit zusätzlich Befehlen für das Wiimote. Private
Sub tmrGelb_Tick(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) _ Der TimerTick schaltet die glebe Lampe ein/aus (Interval 333) Hinweis : Die Ansteuerung des Wiimote zickt bei mir etwas, Vorgehen : Vor Einschalten des Wiimote das Gerät in der Bluetooth-Liste löschen, Wiimote einschalten und wieder installieren. Das hält solange es eingeschaltet bleibt. Mitwirkende : Marcel (ein Mann so alt wie das Jahrtausend)
hat die praktische Erprobung besorgt DownloadDie Programme MouseExplorer (VB2005), Eplorer Super (C# 2005 und VB2005) sowie WiiExplorer (VB2008) in ExAuto.ZIP enthalten. _ReadMe.TXT konsultieren. Die Lösung mit der neuen Programmiersprache : Processing Stand : 10.10.2010 |