lehrkraefte:blc:informatik:glf24:robotik:drivebase

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
lehrkraefte:blc:informatik:glf24:robotik:drivebase [2024/11/25 15:17] – created Ivo Blöchligerlehrkraefte:blc:informatik:glf24:robotik:drivebase [2024/12/03 13:45] (current) Ivo Blöchliger
Line 1: Line 1:
 +{{backlinks>.}}
 +====== Roboter steuern mit DriveBase ======
 +
 +<WRAP todo>
 +  * Legen Sie ein neues Projekt unter dem Namen ''drivebasetest'' an.
 +  * In der Datei ''main.py'', fügen Sie folgende Zeilen hinzu:
 +<code python>
 +links = Motor(Port.A)
 +rechts = Motor(Port.B)
 +# Ersetzen Sie folgende Werte durch die Werte in mm, die Sie in der letzten Stunde gemessen/kalibriert haben.
 +fahrwerk = DriveBase(links, rechts, 55, 125)  # Motor links, Motor rechts, Raddurchmesser (in mm), Radabstand (in mm)
 +# Studieren Sie https://pybricks.com/ev3-micropython/robotics.html
 +# und kommentieren Sie die folgenden Befehle
 +
 +fahrwerk.settings(50, 200, 45, 100)
 +# Bewegen
 +fahrwerk.straight(200)  
 +fahrwerk.turn(90)       
 +fahrwerk.straight(-200) 
 +
 +# Etwas mehr
 +fahrwerk.drive(50, 10)
 +wait(3000)
 +fahrwerk.stop()
 +</code>
 +  * Testen Sie das Programm auf dem Roboter und versuchen Sie das Programm ungefähr zu verstehen.
 +  * Studieren Sie https://pybricks.com/ev3-micropython/robotics.html und kommentieren Sie die Art und Masseinheiten aller ''fahrwerk''-Funktionen im obigen Code (eigentlich ''DriveBase''-Methoden genannt).
 +</WRAP>
 +
 +<WRAP round caution>
 +Modifizieren und Ergänzen Sie obigen Code so, dass der Roboter von der 1m Linie um den Stuhl auf der anderen 1m Linie fährt.
 +
 +Score: Zeit in Sekunden - Distanz in cm.
 +</WRAP>
 +
 +<WRAP todo>
 +Die ''drive'' Methode erlaubt es, einen Kreis zu fahren. Die Zeit abzuschätzen und mit ''wait'' zu warten ist ungenau, weil die Geschwindigkeit nicht konstant ist, sondern am Anfang und am Ende beschleunigt bzw. verzögert wird. Genauer ist es, den Winkel oder die Distanz zu messen. 
 +  * Fügen Sie folgende Funktion Ihrem Code hinzu (nachdem das ''fahrwerk'' initialisiert wurde. Die restlichen Bewegungen können Sie löschen.
 +<code python>
 +from math import pi
 +def kreisbogen(geschwindigkeit, radius, winkel, stoppAmSchluss=True):
 +    """Mit dem fahrwerk soll auf einem Kreis mit Radius radius (in mm) ein bestimmter Winkel (in Grad) mit Geschwindigkeit geschwindigkeit (mm/s) gefahren werden.
 +    Ist geschwindigkeit<0, fährt der Roboter rückwärts. Der winkel gibt an, um wieviele Grad sich der Roboter insgesamt um die eigene Achse im Uhrzeigersinn dreht und kann ebenfalls negativ sein."""
 +    if winkel>=0:
 +        richtung=1
 +    else:
 +        richtung=-1
 +    dist = 2*radius*pi*winkel*richtung/360
 +    zeit = dist/abs(geschwindigkeit)
 +    winkelgeschwindigkeit = winkel/zeit
 +    print("v=%f, va=%f" % (geschwindigkeit, winkelgeschwindigkeit))
 +    winkelziel = fahrwerk.angle()+winkel
 +    fahrwerk.drive(geschwindigkeit, winkelgeschwindigkeit)
 +    while fahrwerk.angle()*richtung<winkelziel*richtung:
 +        wait(1)  # 1 ms pausieren
 +    if stoppAmSchluss:
 +        fahrwerk.stop()
 +    
 +# Aufrufen z.B. mit
 +kreisbogen(100, 250, 360)
 +</code>
 +  * Kommentieren Sie die Zeilen der Funktion und beschreiben Sie präzise, was wie und warum berechnet wird.
 +</WRAP>
 +
 +====== Betrunkener Roboter ======
 +  * Programmieren Sie einen Roboter, der eine Schlangenlinie fährt.
 +  * Bonus für ein Programm, das auf einem Kreis mit 1m Durchmesser Schlangenlinien fährt und nach einer Umdrehung zum Stillstand kommt.