Die Turtle

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

 

Computing Experimental : Die Schildkröte

Computing Experimental : Die Schildkröte

Eine Mail brachte mich wieder auf die Turtle(Schildkröte) des Kastens Computing Experimental von 1987. Hier ein aktueller Nachbau (ein Scan der Original Bauanleitung ist in Turtle.ZIP enthalten). In Abweichung vom Original wurde hier ein ca. 2 m langes 10er Flachbandkabel verwendet, da die Turtle am Intelligent Interface betrieben wird. Das Kabel ist deutlich frexibler als das Original 20er Flachband, also auch eine Lösung für das parallele Interface. Hier wurden die Original MiniMotoren des Kasten verwendet, die aktuellen erfordern eine Modifikation des Aufbaus, sonst kann man die Turtle problemlos mit modernen Teilen nachbauen, hier wurde nur ein Touchsensor (Taster) vorn eingebaut (daher die nur 10 Adern des Kabels). Das Turtle-Tempo ist recht gemächlich.

Verkabelung :
- Linker Motor an M1, Impulstaster an E2
- Rechter Motor an M2, Impulstaster an E4
- TouchSensor(Taster vorn) an E5

Für die ersten Gehversuche mit der Turtle wurde die aktuelle FishFa30.DLL (vbFish30Setup.EXE) in Verbindung mit VBScript genutzt (eine Delphi-Version ist hinten) :

Option Explicit
Dim ft
Const ftiLinks = 1, ftiRechts = 2
Const ftiFull = 15, ftiTime = 1

Set ft = CreateObject("FishFa30.FishFace")
ft.OpenInterface("COM1")
MsgBox "Turtle gestartet (Ende ESC)"

Do
  GeheRechts 33
  If GeheVor(266) Then
    GeheRechts 33
    GeheVor 266
    GeheLinks 33
    GeheZuruck 66
    GeheLinks 33
  End IF
  GeheZuruck 66
Loop Until ft.Finish(0)

ft.CloseInterface
MsgBox "Turtle beendet"

Sub GeheRechts(Impulse)
  ft.SetMotor 1, ftiLinks, ftiFull, Impulse
  ft.SetMotor 2, ftiRechts, ftiFull, Impulse
  ft.WaitForMotors 0, 1, 2
End Sub

Sub GeheLinks(Impulse)
  ft.SetMotor 1, ftiRechts, ftiFull, Impulse
  ft.SetMotor 2, ftiLinks, ftiFull, Impulse
  ft.WaitForMotors 0, 1, 2
End Sub

Function GeheVor(Impulse)
  GeheVor = True
  ft.SetMotor 1, ftiLinks, ftiFull, Impulse
  ft.SetMotor 2, ftiLinks, ftiFull, Impulse
  Do
    If ft.GetInput(5) Then
      ft.ClearMotors
      GeheVor = False
    End If
  Loop while _
           ft.WaitForMotors (40, 1, 2) = ftiTime
End Function

Sub GeheZuruck(Impulse)
  ft.SetMotor 1, ftiRechts, ftiFull, Impulse
  ft.SetMotor 2, ftiRechts, ftiFull, Impulse
  ft.WaitForMotors 0, 1, 2
End Sub

Das ist schon das komplette Programm. Als "Entwicklungsumgebung" habe ich den NotePad (Editor) genutzt. Dazu die Source und das PDF-File des Handbuchs auf dem Desktop plaziert und Strg+S im Editor und Klick auf das Icon : es läuft (oder auch nicht dazu siehe : VBScript-Ecke). Und noch ein paar Anmerkungen zum Programm :

  • Die Source beginnt mit dem Hauptprogramm. In der Do - Loop Schleife stehen eine Reihe von Fahrbefehlen; die Schleife wird durch Drücken der ESC-Taste beendet. Wenn bei GeheVor ein Hindernis entdeckt wird (Taster : TouchSensor) wird der Befehl beendet, im ersten Fall werden dann die weiteren Befehle übersprungen.
    Die Zusammenstellung der Befehle ist mehr oder weniger unsinnig, mal sollte sich kurz darüber ärgern und sie dann nach eigenem Gusto gestalten.
  • Die Methode ft.SetMotor in den Gehe-Befehlen ist eine Errungeschaft von FishFa30, hier läuft der Motor nur solange bis die vorgegebene Anzahl Impulse erreicht wurde. Mit ft.WaitForMotors wird darauf gewartet.
  • Bei GeheVor ist es ein wenig aufwendiger. Hier wird in einer Do - Loop Schleife gewartet, immer 40 MilliSekunden, und dann wird wieder nach dem TouchSensor gefragt und ggf. abgebrochen.

Damit Delphi nicht zu kurz kommt hier eine Konsol-Version für Delphi-Beginner mit Turbo-Pascal Vergangenheit :

 

program poorTurtle;

uses FishFa30;

var ft: TFishFace;

procedure GeheRechts(Impulse: Cardinal);
begin
  ft.SetMotor(ftiM1, ftiLinks, ftiFull, Impulse);
  ft.SetMotor(ftiM2, ftiRechts, ftiFull, Impulse);
  ft.WaitForMotors(0, ftiM1, ftiM2);
end;

procedure GeheLinks(Impulse: Cardinal);
begin
  ft.SetMotor(ftiM1, ftiRechts, ftiFull, Impulse);
  ft.SetMotor(ftiM2, ftiLinks, ftiFull, Impulse);
  ft.WaitForMotors(0, ftiM1, ftiM2);
end;

function GeheVor(Impulse: Cardinal): Boolean;
begin
  Result := true;
  ft.SetMotor(ftiM1, ftiLinks, ftiFull, Impulse);
  ft.SetMotor(ftiM2, ftiLinks, ftiFull, Impulse);
  repeat
    if ft.GetInput(ftiE5) then begin
      ft.ClearMotors;
      Result := false;
    end;
  until ft.WaitForMotors(40, ftiM1, ftiM2) <> ftiTime;
end;

procedure GeheZuruck(Impulse: Cardinal);
begin
  ft.SetMotor(ftiM1, ftiRechts, ftiFull, Impulse);
  ft.SetMotor(ftiM2, ftiRechts, ftiFull, Impulse);
  ft.WaitForMotors(0, ftiM1, ftiM2);
end;

begin
  ft := TFishFace.Create(false, // --- ohne AnalogScan
                         false); // kein Slave
  try
    ft.OpenInterface('COM1');
  except
    on e: EFishFace do begin
    WriteLn('poorFish : InterfaceProblem'); ReadLn; exit;
    end;
  end;
  WriteLn('poorTurtle gestartet');
  repeat
    GeheRechts(33);
    if GeheVor(226) then begin
      GeheRechts(33);
      GeheVor(66);
      GeheLinks(33);
      GeheZuruck(66);
      GeheLinks(33);
      end;
    GeheZuruck(66);
  until ft.Finish(0); // --- Programmende : Escape-Taste
  ft.CloseInterface;
  ft.Free;
  WriteLn('poorTurtle beendet'); ReadLn;

end.

Genutzt wird die neue FishFa30.DCU auf Basis von umFish30.DLL. Die DCU entspricht in ihrer Funktion genau der FishFa30.DLL in VB6.
ACHTUNG : gleich nach dem ersten Projektstart im Menü Projekt | Optionen | Linker die Option Textbildschirm-Anwendung markieren (sonst laufen die WriteLn nicht).

Das Programm besteht nur aus dieser Source :

  • uses FishFa30; 
    Verweis auf die benötigte Unit FishFa30.DCU
  • var ft: TFishFace;
    Deklaration der genutzten Klasse von FishFa30
  • Und dann in schönster Pascal Manier erstmal alle genutzten Routinen und ganz am Schluß gehts dann mit begin und einer repeat until Schleife los. Die Befehlsfolge ist ein wenig curious, man sollte sie gleich nach eigenem Gusto ändern.
  • Die Methode ft.SetMotor in den Gehe-Befehlen ist eine Errungeschaft von FishFa30, hier läuft der Motor nur solange bis die vorgegebene Anzahl Impulse erreicht wurde. 
  • Bei GeheVor ists ein wenig aufwendiger. Hier wird in einer repeat until Schleife gewartet, immer 40 MilliSekunden, und dann wird wieder nach dem TouchSensor gefragt und ggf. abgebrochen.

Die Sources zu den Programmen, eine zusätzliche VB6-Version, eine Delphi Windows Version, die FishFa.DCU und die Original Bauanleitung befinden sich in Turtle.ZIP, zusätzlich ist vbFish30Setup.EXE erforderlich(auch für Delphi : Vorab das VB6 Handbuch und umFish30.DLL-Installation. Das enthält auch ein ausführliches Handbuch zu FishFa30.

 


Wenn man dann noch mehr tun möchte, die Turtel "aufrüsten"  und sie gar in ein Labyrinth schicken möchte (wie im Original Handbuch angedeutet) kann man im Internet einige Anregungen finden :

 

Bei einer www.google.de Suche mit dem Suchbegriff -   Roboter Labyrinth   --- habe ich eine ganze Reihe interessanter Seiten gefunden :
 
http://www.smallrobots.de/ws2000/labyrinth/hardware.html
 
http://www.ifi.unibas.ch/ifi/repository/sjf2002m/roboter/roboter.ppt
 
http://user.cs.tu-berlin.de/~magus/labyrinth/