Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:snr:informatik:glf24:robotik:einfache-bewegungen [2024/12/16 13:22] – [Aufgabe 2: Auf-der-Stelle-Drehen] Olaf Schnürer | lehrkraefte:snr:informatik:glf24:robotik:einfache-bewegungen [2025/01/22 19:08] (current) – [Basisbewegungen: Vorwärts, Drehen, Abbiegen] Olaf Schnürer | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ~~NOTOC~~ | ||
| + | |||
| + | ====== Basisbewegungen: | ||
| + | |||
| + | |||
| + | * 2fNP: {{ : | ||
| + | |||
| + | * 2kW: {{ : | ||
| + | |||
| + | <WRAP center round important> | ||
| + | In den folgenden " | ||
| + | |||
| + | Dies hat den Vorteil, dass man eventuelle Messfehler oder unerwünschtes Verhalten des Roboters später durch Änderung eines einzigen Wertes korrigieren kann. | ||
| + | |||
| + | **Nicht erwünscht ist es, die gesuchten Werte per Taschenrechner auszurechnen und dann als Zahlen einzutragen.** | ||
| + | </ | ||
| + | |||
| + | ===== Aufgabe 1: Vorwärts-Fahren ===== | ||
| + | |||
| + | Der Roboter soll eine gewisse Distanz (in Zentimeter) vorwärts fahren. Durch Abmessen des Raddurchmessers berechnest du, um welchen Winkel sich jedes der beiden Räder drehen muss. | ||
| + | |||
| + | <WRAP center round important> | ||
| + | Als Vorbereitung bitte die Aufgaben A1 und A2 auf dem Arbeitsblatt lösen. | ||
| + | </ | ||
| + | |||
| + | |||
| + | <WRAP center round todo> | ||
| + | Erstelle ein neues Projekt (" | ||
| + | Kopiere den folgenden Code-Block ans Ende des dabei entstandenen Programms '' | ||
| + | |||
| + | Lies das Programm Zeile für Zeile und versuche, es möglichst gut zu verstehen. | ||
| + | |||
| + | Ersetze die ''??'' | ||
| + | |||
| + | <code python> | ||
| + | # Bitte sicherstellen, | ||
| + | |||
| + | ############### | ||
| + | # AUFGABE 1 # | ||
| + | ############### | ||
| + | |||
| + | ev3.speaker.say(text=" | ||
| + | |||
| + | links = Motor(Port.A) | ||
| + | rechts = Motor(Port.B) | ||
| + | |||
| + | from math import pi | ||
| + | # Damit ist pi = 3.14152... benutzbar. | ||
| + | |||
| + | raddurchmesser = ?? # Bitte abmessen (per Lineal oder App)! Dies ist die Variable d auf dem Arbeitsblatt. | ||
| + | radumfang = ?? # Formel vom Arbeitsblatt verwenden. | ||
| + | | ||
| + | rad_drehwinkel_pro_cm = ?? # KEINE ZAHL EINTRAGEN, sondern Formel in Abhängigkeit von den obigen Variablen, vgl. Arbeitsblatt. | ||
| + | |||
| + | def vorwaerts(x): | ||
| + | # Der Roboter bewegt sich geradlinig vorwärts. | ||
| + | # Die Variable " | ||
| + | |||
| + | alpha = ?? # Winkel, um den sich jedes der beiden Räder drehen muss. | ||
| + | links.run_angle(120, | ||
| + | rechts.run_angle(120, | ||
| + | |||
| + | links.stop() | ||
| + | rechts.stop() | ||
| + | |||
| + | vorwaerts(100) | ||
| + | |||
| + | # Ersetze diesen Befehl etwa durch ' | ||
| + | |||
| + | # Passe die Mess-Variable " | ||
| + | # dass der Roboter möglichst genau 100 cm bzw. die gewünschte Distanz fährt. | ||
| + | |||
| + | # Wenn du zufrieden bist, kannst du den Aufruf der Funktion | ||
| + | # löschen und die nächste Aufgabe bearbeiten. | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Aufgabe 2: Auf-der-Stelle-Drehen ===== | ||
| + | |||
| + | Der Roboter soll sich auf der Stelle um einen gewissen Winkel drehen (in mathematisch positivem Drehsinn, also dem Gegenuhrzeigersinn). | ||
| + | |||
| + | <WRAP center round important> | ||
| + | Als Vorbereitung Aufgabe A3 auf dem Arbeitsblatt lösen. | ||
| + | </ | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Kopiere den folgenden Code-Block ans Ende deines in Aufgabe 1 erstellten Programms (den dortigen Befehlsaufruf '' | ||
| + | |||
| + | Lies das Programm Zeile für Zeile und ersetze die ''??'' | ||
| + | |||
| + | <code python> | ||
| + | ############################################################################# | ||
| + | |||
| + | ############### | ||
| + | # AUFGABE 2 # | ||
| + | ############### | ||
| + | |||
| + | radabstand = ?? # in cm; bitte abmessen; Abstand zwischen den Reifenmitten | ||
| + | |||
| + | def drehe(drehwinkel_roboter): | ||
| + | # Der Roboter dreht sich AUF DER STELLE um den Winkel " | ||
| + | # Drehzentrum ist die Mitte zwischen den Rädern. | ||
| + | |||
| + | strecke_bei_roboterdrehung_um_ein_grad = ?? # Formel vom Arbeitsblatt | ||
| + | |||
| + | strecke = ?? | ||
| + | |||
| + | drehwinkel_rad = ?? | ||
| + | |||
| + | rechts.run_angle(120, | ||
| + | links.run_angle(120, | ||
| + | |||
| + | links.stop() | ||
| + | rechts.stop() | ||
| + | |||
| + | vorwaerts(20) | ||
| + | drehe(360) | ||
| + | vorwaerts(20) | ||
| + | drehe(180) | ||
| + | vorwaerts(20) | ||
| + | |||
| + | # Ändere die Variable " | ||
| + | # dass der Roboter sich möglichst genau | ||
| + | # um den gewünschten Winkel dreht. | ||
| + | |||
| + | # Wenn du zufrieden bist, kannst du den obigen Befehlsblock " | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Aufgabe 3: Kreisbogen-Fahren ===== | ||
| + | |||
| + | Der Roboter soll nun einen durch Kreisradius und Winkel festgelegten Kreisbogen abfahren. Dabei müssen sich die beiden Räder unterschiedlich schnell drehen. | ||
| + | |||
| + | <WRAP center round important> | ||
| + | Als Vorbereitung Aufgabe A4 auf dem Arbeitsblatt lösen. | ||
| + | </ | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Kopiere den folgenden Code-Block ans Ende deines in Aufgabe 2 erstellten Programms. | ||
| + | |||
| + | Lies das Programm Zeile für Zeile und ersetze die ''??'' | ||
| + | |||
| + | <code python> | ||
| + | ############################################################################# | ||
| + | |||
| + | ############### | ||
| + | # AUFGABE 3 # | ||
| + | ############### | ||
| + | |||
| + | def biege_ab(kreisradius, | ||
| + | # Der Roboter fährt einen durch Radius " | ||
| + | # Der Drehsinn (Links- bzw. Rechtskurve) wird durch den String " | ||
| + | # " | ||
| + | |||
| + | robotermitte_strecke = ?? # Formel vom Arbeitsblatt | ||
| + | |||
| + | robotermitte_rad_drehwinkel = ?? # Formel vom Arbeitsblatt | ||
| + | |||
| + | # Wie lange dreht sich das fiktive Rad? | ||
| + | zeit = ?? # Formel vom Arbeitsblatt | ||
| + | |||
| + | aussenrad_strecke = ?? | ||
| + | aussenrad_drehwinkel = ?? | ||
| + | aussenrad_geschwindigkeit = ?? | ||
| + | |||
| + | innenrad_strecke = ?? | ||
| + | innenrad_drehwinkel = ?? | ||
| + | innenrad_geschwindigkeit = ?? | ||
| + | |||
| + | if drehsinn == " | ||
| + | # Die folgende Zeile sagt dem LINKEN Motor, was er zu tun hat. | ||
| + | links.run_angle(innenrad_geschwindigkeit, | ||
| + | rechts.run_angle(aussenrad_geschwindigkeit, | ||
| + | else: | ||
| + | # In den beiden folgenden Zeilen stimmt noch nicht alles... | ||
| + | links.run_angle(innenrad_geschwindigkeit, | ||
| + | rechts.run_angle(aussenrad_geschwindigkeit, | ||
| + | links.stop() | ||
| + | rechts.stop() | ||
| + | |||
| + | biege_ab(60, | ||
| + | vorwaerts(20) | ||
| + | biege_ab(60, | ||
| + | |||
| + | # Hoffentlich fährt dein Roboter (in etwa) wie gewünscht. | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Aufgabe 4: Challenge ===== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Markiere etwa mit Klebeband einen Route auf dem Boden, die aus geraden Linien, Ecken und Kreisbögen besteht. | ||
| + | |||
| + | Programmiere dann deinen Roboter so, dass er möglichst genau der Klebeband-Route folgt. | ||
| + | Du darfst die Route mit deinem Lineal/ | ||
| + | <!--Lass den Roboter einen Meter entfernt von einem Drehstuhl starten. Der Roboter soll relativ nah an den Drehstuhl heranfahren, | ||
| + | --> | ||
| + | </ | ||
| + | |||
| + | ===== Was man noch machen könnte... ===== | ||
| + | |||
| + | * Beschleunigungs- und Abbremsphase | ||
| + | * evtl. Sachen von https:// | ||
| + | ===== Falls jemand aus Versehen das " | ||
| + | |||
| + | <hidden " | ||
| + | <code python main.py> | ||
| + | # | ||
| + | from pybricks.hubs import EV3Brick | ||
| + | from pybricks.ev3devices import (Motor, TouchSensor, | ||
| + | | ||
| + | from pybricks.parameters import Port, Stop, Direction, Button, Color | ||
| + | from pybricks.tools import wait, StopWatch, DataLog | ||
| + | from pybricks.robotics import DriveBase | ||
| + | from pybricks.media.ev3dev import SoundFile, ImageFile | ||
| + | |||
| + | |||
| + | # This program requires LEGO EV3 MicroPython v2.0 or higher. | ||
| + | # Click "Open user guide" on the EV3 extension tab for more information. | ||
| + | |||
| + | |||
| + | # Create your objects here. | ||
| + | ev3 = EV3Brick() | ||
| + | |||
| + | |||
| + | # Write your program here. | ||
| + | ev3.speaker.beep() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Lösungshinweise ==== | ||
| + | |||
| + | Bzw. was für die Fragezeichen einzutragen ist. | ||
| + | |||
| + | <hidden Vorwärts-Fahren> | ||
| + | <code python> | ||
| + | radumfang = pi * raddurchmesser | ||
| + | |||
| + | # Rad: Drehwinkel und dabei zurückgelegte Strecke | ||
| + | # 360 Grad ≙ radumfang (in cm) | ||
| + | # 360 / radumfang ≙ 1 cm | ||
| + | |||
| + | rad_drehwinkel_pro_cm = 360 / radumfang | ||
| + | # auch korrekt: rad_drehwinkel_pro_cm = 360 / (pi * raddurchmesser) | ||
| + | |||
| + | def vorwaerts(distanz): | ||
| + | alpha = distanz * rad_drehwinkel_pro_cm | ||
| + | </ | ||
| + | </ | ||
| + | |||