|
Die Distanzmessung mit einem Ultraschallsensor lässt sich auch im Simulationsmodus ausführen. Dazu musst du die die Koordinaten der Objekte (target) im Grafik-Fenster angegeben. Für die Simulation musst du den Sensor immer am Port 1 anschliessen.
Beispiel 3: Ultraschallsimulation
Der Roboter soll zum Hindernis fahren. Wenn die Distanz kleiner als 30 cm ist, fährt er eine kurze Strecke rückwärts und danach wieder vorwärts.
Für die Simulation verwendest als Hindernis einen horizontalen Balken, den du mit folgendem Context erzeugst:
|
|
|
target = [[200, 10], [-200, 10], [-200, -10], [200, -10]]
RobotContext.useTarget("sprites/bar0.gif", target, 250, 100)
In der ersten Zeile sind die Koordinaten der Eckpunkte des Objekts (ein Rechteck mit dem Mittelpunkt bei (0,0)). Im Grafikfenster wird das Objekt an der Position (250, 100) mit dem Bild bar0.gif dargestellt. Die Bilder sind in der TigerJython-Distribution enthalten (Bilderbibliothek).
from grobot import *
target = [[200, 10], [-200, 10], [-200, -10], [200, -10]]
RobotContext.useTarget("sprites/bar0.gif", target, 250, 100)
forward()
repeat:
d = us1.getDistance()
if d < 30:
backward()
delay(2000)
else:
forward()
delay(100)
► In Zwischenablage kopieren
Der Ultraschallsensor ist beim simulierten EV3 oben auf dem Brick und nicht vorne platziert. Deswegen fährt der Roboter etwas näher zum Balken hin.
Beispiel 4: Ultraschalsimulation (Objekt suchen)
Ein Roboter mit Ultraschallsensor dreht sich langsam am Ort. Wenn er einen Gegenstand detektiert, fährt er hinzu und hält kurz vor ihm an.
Du schreibst eine Funktion searchTarget(), die den Suchvorgang definiert:
Der Roboter dreht in kleinen Schritten nach rechts und misst dabei die Distanz dist. Wenn er ein Objekt detektiert (dist != -1), dreht er ein wenig weiter und unterbricht den Suchvorgang mit break.
|
|
|
Danach fährt er mit Hilfe einer zweiten repeat-Schleife so lange vorwärts, bis die Distanz zum Objekt kleiner als 30 ist. Mit dem Befehl setBeamAreaColor() kannst du den Suchvorgang besser veranschaulichen.
from grobot import *
target = [[50,0], [25,43], [-25,43], [-50,0],[-25,-43], [25,-43]]
RobotContext.useTarget("sprites/redtarget.gif", target, 400, 400)
def searchTarget():
repeat:
right()
delay(50)
dist = us1.getDistance()
if dist != -1: #real != 255
right()
delay(600)
break
setBeamAreaColor(Color.green)
setSpeed(10)
searchTarget()
forward()
repeat:
dist = us1.getDistance()
print(dist)
if dist < 30:
stop()
break
► In Zwischenablage kopieren
Das Objekt ist mit den Koordinaten eines Sechsecks mit dem Mittelpunkt (0, 0) beschrieben und mit dem Bild redtarget.gif an der Position (400, 400) dargestellt wird.
|