Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:glf20:robotik:mgr:start [2021/03/25 21:33] – michael.greminger | lehrkraefte:blc:informatik:glf20:robotik:mgr:start [2021/03/26 11:09] (current) – michael.greminger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Robotik ====== | ||
| + | {{lehrkraefte: | ||
| + | |||
| + | ===== Begriffe, Definitionen ===== | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | ===== Roboter bewegen ===== | ||
| + | |||
| + | ==== Wichtigste Gear-Funktionen ==== | ||
| + | * Voraussetzung ist, dass die Variable '' | ||
| + | * Nicht-blockierend heisst, das Programm läuft sofort weiter. Die Einstellung der Motoren bleibt dann so, bis eine Änderung vorgenommen wird. | ||
| + | * Blockierend heisst, das Programm wartet an dieser Stelle die gegebene Anzahl Millisekunden und kann während dieser Zeit nicht auf Sensoreingaben reagieren. | ||
| + | |||
| + | ^ nicht-blockierend ^ blockierend ^ Beschreibung ^ | ||
| + | | gear.backward() | gear.backward(ms) | fährt rückwärts | | ||
| + | | gear.forward() | ||
| + | | gear.left() | gear.left(ms) | dreht links | | ||
| + | | gear.right() | gear.right(ms) | dreht rechts | ||
| + | | gear.leftArc(radius) | gear.leftArc(radius , ms) | fährt auf einem Linksbogen | | ||
| + | | gear.rightArc(radius) | gear.rightArc(radius , ms) | Rechtsbogen | | ||
| + | | gear.setSpeed(speed) | | setzt die Geschwindigkeit (Werte zwischen 0 und ungefähr 70 sind überhaupt sinnvoll.) | | ||
| + | | gear.stop() | | stoppt das Fahrwerk | | ||
| + | |||
| + | Vollständige Dokumentation der Funktionen: http:// | ||
| + | |||
| + | ==== Aufgaben ==== | ||
| + | === Aufgabe 1 === | ||
| + | Verwenden Sie for- oder while-Schleife, | ||
| + | {{: | ||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python> | ||
| + | from simrobot import * | ||
| + | RobotContext.enableTrace(True) | ||
| + | robot = LegoRobot() | ||
| + | gear = Gear(); | ||
| + | robot.addPart(gear); | ||
| + | |||
| + | gear.forward() | ||
| + | for i in range(3): | ||
| + | gear.rightArc(0.15) | ||
| + | Tools.delay(4000) | ||
| + | gear.right(1100) | ||
| + | robot.exit() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | === Aufgabe 2 === | ||
| + | Der Roboter soll sich auf einer Spiralbahn bewegen. Verwenden Sie eine while-Schleife und Vergrössern Sie nach jedem Schleifendurchlauf den Radius im Befehl rightArc(radius). Das Programm soll mit der <ESC> Taste abgebrochen werden. Beginnen Sie mit radius 0.05. | ||
| + | {{: | ||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python> | ||
| + | from simrobot import * | ||
| + | RobotContext.enableTrace(True) | ||
| + | robot = LegoRobot() | ||
| + | gear = Gear(); | ||
| + | robot.addPart(gear); | ||
| + | |||
| + | radius = 0.05 | ||
| + | gear.forward() | ||
| + | while not robot.isEscapeHit(): | ||
| + | gear.rightArc(radius) | ||
| + | Tools.delay(2000) | ||
| + | radius = radius * 1.1 | ||
| + | robot.exit() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Lichtsensor ===== | ||
| + | Es ist auch möglich, im Simulator einen Lichtsensor zu verwenden. Der Lichtsensor misst die Helligkeit, die Werte liegen zwischen 0 und 1023 (je grösser der Wert, umso heller). Der Lichtsensor muss auch zum Roboter hinzugefügt werden und zwar mit folgenden Zeilen | ||
| + | <code python> | ||
| + | ls = LightSensor(SensorPort.S3) | ||
| + | robot.addPart(ls) | ||
| + | ls.activate(True) | ||
| + | </ | ||
| + | Ausgelesen wird der Sensor mit | ||
| + | <code python> | ||
| + | v = ls.getValue() | ||
| + | </ | ||
| + | ==== Aufgaben ==== | ||
| + | === Aufgabe 3 === | ||
| + | Wir wollen den Roboter fahren lassen, bis er auf eine helle Stelle kommt oder die <ESC> Taste gedrückt wird. Fügen Sie bitte dazu als erste Zeilen in Ihrer Lösung folgende Zeilen ein | ||
| + | <code python > | ||
| + | from simrobot import * | ||
| + | from random import randrange | ||
| + | RobotContext.useBackground(" | ||
| + | RobotContext.setStartPosition(350 + randrange(50), | ||
| + | RobotContext.setStartDirection(135+randrange(90)) | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python> | ||
| + | from simrobot import * | ||
| + | from random import randrange | ||
| + | RobotContext.useBackground(" | ||
| + | RobotContext.setStartPosition(350 + randrange(50), | ||
| + | RobotContext.setStartDirection(135+randrange(90)) | ||
| + | | ||
| + | robot = LegoRobot() | ||
| + | gear = Gear() | ||
| + | robot.addPart(gear) | ||
| + | ls = LightSensor(SensorPort.S3) | ||
| + | robot.addPart(ls) | ||
| + | ls.activate(True) | ||
| + | gear.forward() | ||
| + | |||
| + | while not robot.isEscapeHit(): | ||
| + | v = ls.getValue() | ||
| + | if v > 500: | ||
| + | break | ||
| + | | ||
| + | robot.exit() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | === Aufgabe 4 === | ||
| + | Wir wollen nun versuchen, dass der Roboter entlang der Wellenlinie fährt. Auch hier soll das Programm wieder mit der <ESC> Taste beendet werden können. Fügen Sie bitte dazu als erste Zeilen in Ihrer Lösung folgende Zeilen ein | ||
| + | <code python > | ||
| + | from simrobot import * | ||
| + | RobotContext.useBackground(" | ||
| + | RobotContext.setStartPosition(250, | ||
| + | </ | ||
| + | Hinweis: Wenn der Roboter auf einer dunklen Fläche liegt, dann kann er einen Kreis nach links fahren, wenn er auf einer hellen Fläche ist, dann... | ||
| + | Wenn Ihr Roboter der Linie folgt von unten nach oben, dann versuche mit den verschiedenen Werten zu spielen. | ||
| + | Mit welchen Werten ist der Roboter am schnellsten am Ziel? | ||
| + | Mit welchen Werten folgt der Roboter möglichst exakt der Linie? | ||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python> | ||
| + | kommt bald... | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Ultraschallsensor ===== | ||
| + | Mit dem Ultraschallsensor ist es möglich, die Entfernung von Hindernissen zu messen. Der Sensor muss auch zum Roboter hinzugefügt werden und zwar mit folgenden Zeilen | ||
| + | <code python> | ||
| + | us = UltrasonicSensor(SensorPort.S1) | ||
| + | robot.addPart(us) | ||
| + | </ | ||
| + | Ausgelesen wird der Sensor mit | ||
| + | <code python> | ||
| + | distance = us.getDistance() | ||
| + | </ | ||
| + | ==== Aufgaben ==== | ||
| + | === Aufgabe 5 === | ||
| + | Wir wollen die Aufgabe 4 so erweitern, dass wir ein Hindernis einbauen. Der Roboter soll wieder so lange der Linie folgen, bis der Benutzer <ESC> drückt oder die Distanz zum Hindernis kleiner als 30 ist. Wir simulieren das Hindernis mit folgenden Zeilen | ||
| + | <code python > | ||
| + | mesh_hbar = [[200, 10], [-200, 10], [-200, -10], [200, -10]] | ||
| + | RobotContext.useTarget(" | ||
| + | </ | ||
| + | Somit beginnt unser Lösung mit folgenden Zeilen | ||
| + | <code python > | ||
| + | from simrobot import * | ||
| + | RobotContext.useBackground(" | ||
| + | RobotContext.setStartPosition(250, | ||
| + | mesh_hbar = [[200, 10], [-200, 10], [-200, -10], [200, -10]] | ||
| + | RobotContext.useTarget(" | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python> | ||
| + | kommt bald... | ||
| + | </ | ||
| + | </ | ||