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 22:31] michael.greminger |
lehrkraefte:blc:informatik:glf20:robotik:mgr:start [2021/03/26 12:09] (current) michael.greminger |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Robotik ====== | ====== Robotik ====== | ||
- | {{lehrkraefte: | + | {{lehrkraefte: |
===== Begriffe, Definitionen ===== | ===== Begriffe, Definitionen ===== | ||
Line 7: | Line 7: | ||
* https:// | * https:// | ||
* https:// | * https:// | ||
+ | |||
+ | ===== Roboter bewegen ===== | ||
==== Wichtigste Gear-Funktionen ==== | ==== Wichtigste Gear-Funktionen ==== | ||
Line 25: | Line 27: | ||
Vollständige Dokumentation der Funktionen: http:// | Vollständige Dokumentation der Funktionen: http:// | ||
+ | ==== Aufgaben ==== | ||
=== Aufgabe 1 === | === Aufgabe 1 === | ||
Verwenden Sie for- oder while-Schleife, | Verwenden Sie for- oder while-Schleife, | ||
Line 30: | Line 33: | ||
<hidden Lösungsvorschlag> | <hidden Lösungsvorschlag> | ||
<code python> | <code python> | ||
- | kommt bald... | + | 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() | ||
</ | </ | ||
</ | </ | ||
Line 36: | Line 50: | ||
=== Aufgabe 2 === | === 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. | 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> | <hidden Lösungsvorschlag> | ||
<code python> | <code python> | ||
Line 43: | Line 134: | ||
</ | </ | ||
+ | ===== 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... | ||
+ | </ | ||
+ | </ |