lehrkraefte:blc:informatik:glf22:robotik-mit-svcode:drivebase

Roboter steuern mit DriveBase

  • Legen Sie ein neues Projekt unter dem Namen drivebasetest an.
  • In der Datei main.py, fügen Sie folgende Zeilen hinzu:
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)
 
# Parameter setzen
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()
  • 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).

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.
def kreisbogen(fahrwerk, geschwindigkeit, radius, winkel):
    """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
    fahrwerk.stop()
 
# Aufrufen z.B. mit
kreisbogen(fahrwerk, 100, 250, 360)
  • Kommentieren Sie die Zeilen der Funktion und beschreiben Sie präzise, was wie und warum berechnet wird.
  • Der Roboter startet mit dem Lichtsensor am Rande eines «1m Klebestreifens».
  • Ein Stuhl steht mittig auf dem gegenüberliegenden «1m Klebestreifen».
  • Der Roboter soll den Stuhl umrunden und möglichst genau wieder auf dem Ausgangs-Punkt stehen bleiben.
  • Gemessen wird die Zeit in Sekunden. Dazu wird $\frac{1}{10}$ des Quadrats der Distanz in cm vom Startpunkt addiert. Die Gruppe mit dem kleinsten Score gewinnt.
  • Es dürfen beliebig viele Versuche gemacht werden.
  • lehrkraefte/blc/informatik/glf22/robotik-mit-svcode/drivebase.txt
  • Last modified: 2023/02/14 09:59
  • by Ivo Blöchliger