lehrkraefte:snr:informatik:glf24:robotik:einfache-bewegungen

Basisbewegungen: Vorwärts, Drehen, Abbiegen

In den folgenden “Lückenprogrammen” sind die Fragezeichen korrekt zu ersetzen. Meist ist nur einmal ein Messwert als konkrete Zahl einzutragen, die anderen Fragezeichen sind dann in Python aus den vorherigen Variablen zu berechnen.

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.

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.

Als Vorbereitung bitte die Aufgaben A1 und A2 auf dem Arbeitsblatt lösen.

Erstelle ein neues Projekt (“Create a new project”). Kopiere den folgenden Code-Block ans Ende des dabei entstandenen Programms main.py.

Lies das Programm Zeile für Zeile und versuche, es möglichst gut zu verstehen.

Ersetze die ?? sinnvoll gemäss deiner Tabelle in Aufgabe A2 auf dem Arbeitsblatt. Nur für das erste ?? ist eine konkrete Zahl einzutragen, der Rest ergibt sich daraus.

# Bitte sicherstellen, dass dein Computer im tech-lab-Netz ist und nicht in Schule SG o.ä..
 
###############
#  AUFGABE 1  #
###############
 
ev3.speaker.say(text="Hello I am Robby the robot")
 
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 "x" gibt an, um wie viele cm er sich bewegt.
 
    alpha = ??   # Winkel, um den sich jedes der beiden Räder drehen muss.
    links.run_angle(120, alpha, wait=False)   
    rechts.run_angle(120, alpha, wait=True)   
 
    links.stop()
    rechts.stop()
 
vorwaerts(100)
 
# Ersetze diesen Befehl etwa durch 'vorwaerts(50)'. Fährt der Roboter nun ca. 50 cm?
 
# Passe die Mess-Variable "raddurchmesser" so an, 
# 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  "vorwaerts" 
# löschen und die nächste Aufgabe bearbeiten.

Der Roboter soll sich auf der Stelle um einen gewissen Winkel drehen (in mathematisch positivem Drehsinn, also dem Gegenuhrzeigersinn).

Als Vorbereitung Aufgabe A3 auf dem Arbeitsblatt lösen.

Kopiere den folgenden Code-Block ans Ende deines in Aufgabe 1 erstellten Programms (den dortigen Befehlsaufruf vorwaerts(100) kannst du nun auskommentieren).

Lies das Programm Zeile für Zeile und ersetze die ?? sinnvoll gemäss deiner Lösungen auf dem Arbeitsblatt. Nur für das erste ?? ist eine konkrete Zahl einzutragen.

#############################################################################
 
###############
#  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 "drehwinkel_roboter".
    # Drehzentrum ist die Mitte zwischen den Rädern.
 
    strecke_bei_roboterdrehung_um_ein_grad = ??    # Formel vom Arbeitsblatt
 
    strecke = ??
 
    drehwinkel_rad = ??
 
    rechts.run_angle(120, ??, wait=False)   
    links.run_angle(120, ??, wait=True)   
 
    links.stop()
    rechts.stop()    
 
vorwaerts(20)
drehe(360)
vorwaerts(20)
drehe(180)
vorwaerts(20)
 
# Ändere die Variable "radabstand" so, 
# dass der Roboter sich möglichst genau
# um den gewünschten Winkel dreht.
 
# Wenn du zufrieden bist, kannst du den obigen Befehlsblock "vorwaerts(20); drehe(360); ... " löschen und die nächste Aufgabe bearbeiten.

Der Roboter soll nun einen durch Kreisradius und Winkel festgelegten Kreisbogen abfahren. Dabei müssen sich die beiden Räder unterschiedlich schnell drehen.

Als Vorbereitung Aufgabe A4 auf dem Arbeitsblatt lösen.

Kopiere den folgenden Code-Block ans Ende deines in Aufgabe 2 erstellten Programms.

Lies das Programm Zeile für Zeile und ersetze die ?? durch deine Lösungen auf dem Arbeitsblatt.

#############################################################################
 
###############()
#  AUFGABE 3  #
###############
 
def biege_ab(kreisradius, winkel_kreiszentrum, drehsinn):
    # Der Roboter fährt einen durch Radius "kreisradius" und Innenwinkel "winkel_kreiszentrum" gegebenen Kreisbogen.
    # Der Drehsinn (Links- bzw. Rechtskurve) wird durch den String "drehsinn" angegeben, der entweder den Wert 
    # "links" oder den Wert "rechts" haben darf.
 
    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 == "links":
        # Die folgende Zeile sagt dem LINKEN Motor, was er zu tun hat.
        links.run_angle(innenrad_geschwindigkeit, innenrad_drehwinkel, wait=False)   
        rechts.run_angle(aussenrad_geschwindigkeit, aussenrad_drehwinkel, wait=True)   
    else:
        # In den beiden folgenden Zeilen stimmt noch nicht alles...
        links.run_angle(innenrad_geschwindigkeit, innenrad_drehwinkel, wait=False)   
        rechts.run_angle(aussenrad_geschwindigkeit, aussenrad_drehwinkel, wait=True)   
    links.stop()
    rechts.stop()    
 
biege_ab(60, 90, "links")
vorwaerts(20)
biege_ab(60, 90, "rechts")
 
# Hoffentlich fährt dein Roboter (in etwa) wie gewünscht.

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/Klappmeter vermessen.

“main.py”

“main.py”

main.py
#!/usr/bin/env pybricks-micropython
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor,
                                 InfraredSensor, UltrasonicSensor, GyroSensor)
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()

Bzw. was für die Fragezeichen einzutragen ist.

Vorwärts-Fahren

Vorwärts-Fahren

radumfang = pi * raddurchmesser            # Formel in Abhängigkeit vom Raddurchmesser. KEINE ZAHL EINTRAGEN!
 
# Rad: Drehwinkel und dabei zurückgelegte Strecke  
# 360 Grad        ≙ radumfang (in cm)
# 360 / radumfang ≙ 1 cm
 
rad_drehwinkel_pro_cm = 360 / radumfang      # KEINE ZAHL EINTRAGEN, sondern eine Formel in Abhängigkeit von den obigen Variablen.
                                             # auch korrekt: rad_drehwinkel_pro_cm = 360 / (pi * raddurchmesser)
 
def vorwaerts(distanz):    
    alpha = distanz * rad_drehwinkel_pro_cm      # Winkel, um den sich jedes der beiden Räder drehen muss.
  • lehrkraefte/snr/informatik/glf24/robotik/einfache-bewegungen.txt
  • Last modified: 2025/01/22 19:08
  • by Olaf Schnürer