TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
DU LERNST HIER... |
wie du ein einen Touchsensor dafür einsetzen kannst, Hindernisse zu erkennen und entsprechend zu reagieren. |
MUSTERBEISPIEL |
from simrobot import * # from ev3robot import * RobotContext.useObstacle("sprites/field1.gif", 250, 250) robot = LegoRobot() gear = Gear() robot.addPart(gear) ts = TouchSensor(SensorPort.S3) robot.addPart(ts) gear.forward() while not robot.isEscapeHit(): if ts.isPressed(): gear.backward(1500) gear.left(550) gear.forward() robot.exit() |
MERKE DIR... |
Der Touchsensor kann nur zwei Werte abgeben, und zwar die die Wahrheitswerte (boolean) True oder False. Dein Programm "bemerkt" den gedrückten Zustand nur, wennsich der Roboter vorwärtsbewegt.. Ist das Programm in den Funktionen backward(1500) oder left(550) blockiert, kannst du den Knopf so oft drücken wie du willst und es geschieht rein gar nichts. |
ZUM SELBST LÖSEN |
|
Da der Tastenzustand nur genau dann vom Programm erfasst wird, wenn die Sensorfunktion isPressed() aufgerufen wird, verliert man oft "schnelle" Tastenbetätigungen, also Tastenklicks. Um dies zu vermeiden, muss die Taste sehr oft hintereinander abgefragt werden (dies nennt man "Pollen").
Um jedes Tastenereignis zu erfassen, müsste man eine Prozess starten, der ausschliesslich mit Pollen der Taste mit einer Wiederholzeit von ungefähr 10 ms beauftragt wird. Dies erreicht man mit einem "Tastenhandler", der in einem eigenen Thread läuft. Tastenereignisse werden dann wie folgt mit dem Eventmodell behandelt:
from simrobot import * #from ev3robot import * RobotContext.useObstacle("sprites/field1.gif", 250, 250); # Callback returns immediately def onPressed(port): global hit print "hit" hit = True robot = LegoRobot() gear = Gear() robot.addPart(gear) ts = TouchSensor(SensorPort.S3, pressed = onPressed) robot.addPart(ts) gear.forward() hit = False while not robot.isEscapeHit(): if hit: hit = False gear.backward(1500) gear.left(240) gear.forward() robot.exit()
Man kann nun die Taste von Hand sehr schnell drücken und es wird immer "hit" ausgeschrieben.
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. |