Liniensensoren


Die Linienensoren IR_LINE_LEFT und IR_LINE_RIGHT sind unten bei der Rollkugel angebracht. Sie können die Helligkeit der Unterlage registrieren. Die Funktion getValue() gibt 0 zurück, wenn sich der Roboter auf einer dunklen und 1, wenn sich der Roboter auf einer weissen Unterlage befindet. In einem Programm werden die Sensorwerte in einer endlosen while-Schleife ständig abgefragt (pollen).
 


Beispiel 1: Schwarze Abgrenzung registrieren

Der Roboter darf sich nur im weissen Feld bewegen. Wenn er schwarz "sieht", fährt er einen kurzen Weg zurück, dreht um 90° nach links und fährt wieder vorwärts. Im realen Modus ist es besser, die Geschwindigkeit mit setSpeed(30) zu reduzieren.

# IRLineSensor1.py

from raspisim import *
#from raspibrick import *

RobotContext.useBackground("sprites/circle.gif")

robot = Robot()
gear = Gear()
#gear.setSpeed(30)
ir_left = InfraredSensor(IR_LINE_LEFT)
ir_right = InfraredSensor(IR_LINE_RIGHT)
gear.forward()

while not isEscapeHit():
    v1 = ir_left.getValue()
    v2 = ir_right.getValue()
    if v1 == 0 or v2 == 0:
        gear.backward(1200) 
        gear.left(550)
        gear.forward()   
robot.exit()
Programmcode markieren (Ctrl+C kopieren)
 

Erklärungen zum Programmcode:

if v1 == 0 or v2 == 0: Wenn einer der beiden Sensorwerte 0 ist, befindet sich der Roboter auf einer schwarze Unterlage

 

Beispiel 2: Kante nachfahren

Der Roboter soll längs einer rechtsseitig liegenden schwarzen Kante fahren. Er erkennt mit seinem Sensor IR_LINE_RIGHT die Helligkeit der Unterlage und korrigiert mit leftArc() bzw. rightArc() die Fahrtrichtung. Der linke Sensor ist braucht man in diesem Beispiel nicht. Die Roboterbewegung ist stark von Bogenradius abhängig. Ist der Radius zu gross (z.B. 0.6), so macht Roboter grosse Umwege. Bei zu kleinem Radius (z.B. 0.05) reagiert der Roboter zu nervös.

# IRLineSensor2.py

from raspisim import *
#from raspibrick import *

RobotContext.useBackground("sprites/border.gif")
RobotContext.setStartPosition(250, 490)

robot = Robot()
gear = Gear()
gear.setSpeed(30)
ir_left = InfraredSensor(IR_LINE_LEFT)
ir_right = InfraredSensor(IR_LINE_RIGHT)
gear.forward()

while not isEscapeHit():
    v1 = ir_left.getValue()
    v2 = ir_right.getValue()
    if v1 == 1 and v2 == 0:
        gear.forward()
    elif v1 == 1 and v2 == 1:   
        gear.rightArc(0.1)
    elif v1 == 0 and v2 == 0:
        gear.leftArc(0.1)    
robot.exit()
Programmcode markieren (Ctrl+C kopieren)
 

Erklärungen zum Programmcode:

gear.leftArc(0.1): die Richtung wird durch einen Kreisbogen mit dem Radius 0.1 korrigiert

 

Beispiel 3: Pfad folgen

Es handelt sich um eine wohlbekannte klassische Aufgabe. Der Roboter soll einem dunklen Pfad auf einer hellen Unterlage folgen.

Dabei wird folgender Algorithmus verwendet: Jeder der beiden Liniensensoren gibt die Werte 0 oder 1 zurück. Falls die beiden Werte 0 sind, ist der Roboter auf dem Pfad und fährt geradeaus. Ist der rechte Wert 1 und der linke 0, muss er mit leftArc() die Fahrrichtung korrigieren. Analog, wenn er auf der linken Seite den Wert 1 meldet.

# IRLineSensor3.py

from raspisim import *
#from raspibrick import *

RobotContext.useBackground("sprites/track.gif")

robot = Robot()
gear = Gear()
gear.setSpeed(20)
ir_left = InfraredSensor(IR_LINE_LEFT)
ir_right = InfraredSensor(IR_LINE_RIGHT)
gear.forward()

while not isEscapeHit():
    v1 = ir_left.getValue()
    v2 = ir_right.getValue()
    if v1 == 0 and v2 == 0:
        gear.forward()
    elif v1 == 1 and v2 == 0:   
        gear.rightArc(0.06)
    elif v1 == 0 and v2 == 1:
        gear.leftArc(0.06)               
robot.exit()
Programmcode markieren (Ctrl+C kopieren)
 

Erklärungen zum Programmcode:

if v1 == 0 and v2 == 0: Wenn beide Sensorwerte 0 sind, ist der Roboter auf dem Pfad und fährt geradeaus

 


Aufgaben Serie 6:

 

1)

Erstelle eine beliebige Bahn und optimiere den Programmcode im Beispiel 3 so, dass der Roboter möglichst genau deinem Pfad folgen kann.

Für die Simulation kannst du das Hintergrundbild roundpath.gif verwenden.

 


2a)


2b)

Der Roboter fährt über 7 schwarze Streifen. Wenn er beim 5. Streifen angekommen ist, muss er anhalten.

Die Nummer des Streifens, bei dem der Roboter anhalten muss soll zufällig bestimmt werden. Zu Beginn wird eine Zufallszahl zwischen 1 und 7 bestimmt. Genau bei diesem Streifen soll der Roboter anhalten.

Löse die Aufgabe im Remote-Modus, dann kannst du die Streifenzahl mit print im Ausgabefenster ausschreiben.



3)

Der Roboter soll möglichst schnell und möglichst genau der schwarzen Kante nachfahren.

Für die Simulation kannst du das Hintergrundbild oval.gif verwenden.