infrarotsensor

5. HINDERNISDETEKTOREN

 

 

DU LERNST HIER...

 

wie du die drei oberen Infrarotsensoren dafür einsetzen kannst, Hindernisse zu erkennen und entsprechend zu reagieren.

 

 

MUSTERBEISPIEL

 

Mit den oberen Infrarotsensoren kann der Pi2Go erkennen, wenn sich in seiner Nähe ein Hindernis befindet. In der Pi2Go-Bibliothek werden diese Sensoren mit IR_CENTER, IR_LEFT und IR_RIGHT bezeichnet.

In diesem Beispiel soll sich der Roboter in einer quadratischen oder rechteckigen Kiste so bewegen, dass er ungefähr rechtwinklig zueinander stehende Bahnen abfährt.

 


Um den Zustand des Sensors zu erfassen, rufst du in einer while-Schleife die Funktion getValue() auf. Diese liefert 1, falls sich das Hindernis in der Nähe befindet, sonst liefert sie 0. Für die Simulation musst du noch in der virtuellen Welt mit RobotContext.useObstacle() eine Kiste erstellen.

 

from raspisim import *
#from raspibrick import *

RobotContext.useObstacle("sprites/field1.gif", 250, 250)

robot = Robot()
gear = Gear()
ir = InfraredSensor(IR_CENTER)
gear.forward()

while not robot.isEscapeHit():
    if ir.getValue() == 1:
        gear.backward(500)
        gear.left(550)
        gear.forward()        
robot.exit()
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

 

MERKE DIR...

 

Dein Programm "bemerkt" das Hindernis nur, falls es getValue() aufruft. Ist es in den Funktionen backward(500) oder left(550) blockiert, kannst du mit der Hand ein Hindernis vortäuschen und es geschieht rein gar nichts.

 

 

ZUM SELBST LÖSEN

 

 


1.


Der Roboter bewegt sich in einer Kiste mit einem Ausgang. Du lässt ihn in der Mitte der Kiste starten und er soll möglichst rasch den Ausgang finden. Dabei darfst du aber nicht davon ausgehen, dass der Roboter von sich aus schon "weiss", wo sich der Ausgang befindet.

Für die Simulation benötigst du folgenden Context:

 
 
RobotContext.useObstacle("sprites/trap.gif", 250, 250)


2.

Ein Kanalroboter soll sich in einem rechtwinklig gebogenen Röhrensystem selbständig, also ohne Fernsteuerung, zurechtfinden.

Wie bei vielen Aufgaben ist es sinnvoll, das Problem zuerst im  Simulationsmodus zu lösen. Verwende dazu die Infrarotsensoren IR_LEFT und IR_RIGHT. Wenn du Lust hast, so kannst du aber auch einen echten Parcours bauen.

Für die Simulation lautet der Context:

 
RobotContext.useBackground("sprites/racetrack.gif", 250, 250)
RobotContext.setStartPosition(420, 460)

 

 

   

 

   

 

5-1
Fachliche Hinweise:

Da der Sensorzustand genau dann vom Programm erfasst wird, wenn die Sensorfunktion getValue() aufgerufen wird, verliert man oft schnelle Wechsel. Um dies zu vermeiden, muss der Sensor sehr oft hintereinander abgefragt werden (dies nennt man "Pollen").
Elegant ist es, einen eigenen internen Prozess damit zu beauftragen, den Sensor schnell hintereinander zu pollen. Dieser läuft in einem eigenen Thread und löst den Aufruf einer Callbackfunktion aus. Das Programm lautet mit dem Eventmodell wie folgt:

from raspisim import *
#from raspibrick import *

RobotContext.useObstacle("sprites/field1.gif", 250, 250)

def onActivated(id):
    global hit
    hit = True

robot = Robot()
gear = Gear()
ir = InfraredSensor(IR_CENTER, activated =  onActivated)
gear.forward()
hit = False
while not robot.isEscapeHit():
    if hit:
        hit = False
        gear.backward(500)
        gear.left(550)
        gear.forward()
robot.exit()

 

5-2
Kanalroboter
 

Abwasserkanäle halten unsere Städte sauber und helfen, Überflutungen bei starken Regenfällen zu verhindern. Rund 80% der Abwasserkanäle sind nicht begehbar. Kanalroboter werden eingesetzt, um die Kanalnetze zu kontrolliert und Leckstellen aufzuspüren.

Der Roboter navigiert autonom mit Hilfe seiner Touchsensoren in Kanälen mit 30 - 60 cm Durchmesser und kann mit dem eingebauten Laser-Kamerasystem die beschädigten Stellen entdecken.

 

5-3
Fachliche Hinweise:

  Ein Infrarotsensor besteht aus einer Leuchtdiode (LED), die Lichtstrahlen im Infrarotbereich aussendet und einer Fotodiode, welche die Intensität des reflektierten Lichtes messen kann. Durch diese Konstruktion können Infrarotsensoren die Änderungen im näheren Sichtfeld registrieren und werden in der Praxis häufig zur Erkennung von naheliegende Gegenständen eingesetzt.