Dokumentation EV3 Robotik mit globalen Funktionen

Autonomer und Simulationsmodus (im Simuationsmodus implementiert: [S])

Modul import: from grobot import *
Roboter mit Fahrwerk (2 synchronisierte Motoren an MotorPort A und B):
Funktion Aktion
forward() [S] versetzt den Roboter in die Vorwärtsbewegung
forward(time) [S] fährt während gegebener Zeit (in ms) vorwärts, blockierende Methode
backward() [S] versetzt den Roboter in die Rückwärtsbewegung
backward(time) [S] fährt während gegebener Zeit (in ms) rückwärts, blockierende Methode
left() [S] versetzt den Roboter in die Linksdrehung
left(time) [S] dreht während gegebener Zeit (in ms) nach links, blockierende Methode
right() [S] versetzt den Roboter in die die Rechtsdrehung
right(time) [S] dreht während gegebener Zeit (in ms) nach rechts, blockierende Methode
leftArc(radius) [S] startet die Linkskurvenbewegung (Radius in m)
leftArc(radius, time) [S] fährt während der gegebener Zeit (ms) auf dem Linksbogen (Radius in m), blockierend
rightArc(radius) [S] startet die Rechtskurvenbewegung (Radius in m)
rightArc(radius, time) [S] fährt während der gegebener Zeit (ms) auf dem Rechtsbogen (Radius in m), blockierend
stop() [S] stoppt die Bewegung
setSpeed(speed) [S] setzt die Geschwindigkeit (0..100). Wird erst beim Aufruf der nächsten Bewegungsfunktion wirksam (Standardgeschwinkigkeit ist 30)
delay(time) [S] hält das Programm während der gegebenen Zeit (in ms) an
sleep(time) [S] dasselbe wie delay(time)
setLED(n) [S] schaltet LEDs: 0: aus, 1: grün, 2: rot, 3: rot hell, 4: grün blinkend, 5: rot blinkend, 6: rot blinkend hell, 7: grün doppelblinkend, 8: rot doppelblinkend, 9: rot doppelblinkend hell
setAlarm(n) [S] schaltet Alarm: 0: aus, 1:ein
playTone(freq, duration) [S] spielt einen Ton mit gegebener Frequenz (in Hertz) und Dauer (in ms)
setVolume(volume) setzt die Lautstärke (0..100). Dieser Wert wird dauerhaft gespeichert
drawString(text, x, y) schreibt einzeiligen Text an Position (x: horizontal, y: vertikal)
clearDisplay() löscht den Bildschirm
getIPAddresses()

gibt eine Liste mit allen aktiven IP Adressen zurück

getRobot() liefert die Instanz des globalen Robot zurück (zur Verwendung der OOP-Klassen)
reset() [nur S] setzt den Roboter an die Startposition/Startrichtung
RobotContext.
enableTrace(True) [nur S]
roboter hinterlässt Spuren
RobotContext.
enableRotCenter(True) [nur S]
zeichnet bei Bewegungen auf einem Kreisbogen das Rotationszentrum


Motoren einzeln steuern:
Instanzen Port
motA , motB, motC, motD Motor am entprechenden MotorPort [Simulation nur motA und motB]
motL = motA, motR = motB Linker und rechter Motor

Methoden Aktion
motX.rotate(speed) [S] dreht den Motor motX (speed > 0: vorwärts, speed < 0: rückwärts, speed = 0: stop
motX.getMotorCount() [S] gibt den momentanen Stand des Zählers zurück
motX.resetMotorCount() [S] setzt den Zähler auf 0
motX.setSpeed(speed) ändert die Geschwindigkeit des Motors X (nur Realmodus)
motX.forward() bewegt den Motor vorwärts (nur Realmodus)
motX.backward() bewegt den Motor rückwärts (nur Realmodus)
motX.rotateTo(deg) [S] bewegt Motor bis Umdrehungswinkel deg (0-360) und stoppt (blockierend). Setzt Zähler auf 0 (nur motA, motB und motC)
motX.rotateTo(deg, blocking) [S] wie rotateTo(deg). Nicht blockierend, falls blocking = False (nur motA, motB und motC)
motX.continueTo(deg) [S] wie rotateTo(deg), aber Zähler wird nicht auf 0 gesetzt
motX.continueTo(deg, blocking) [S] wie rotateTo(deg), blocking), aber Zähler wird nicht auf 0 gesetzt. Nicht blockierend, falls blocking = False
motX.continueRelativeTo(deg [S] wie continueTo(deg), aber count ist Inkrement
motX.continueRelativeTo(deg, blocking) [S] wie continueTo(deg, blocking), aber count ist Inkrement. Nicht blockierend, falls blocking = False
motX.isMoving() [S] gibt True zurück, falls der Motor motX rotiert
motX.setSpeed(speed) setzt die Geschwindigkeit des Motors (default speed=50)
 
Buttons:
Instanzen Position
button_escape [S] oben links
button_enter [S]

Mitte

button_left [S] Cursor links
button_right [S] Cursor rechts
button_up [S] Cursor aufwärts
button_down [S] Cursor abwärts

Methode Aktion
was_pressed() [S] gibt True zurück, falls der Button seit dem letzten Aufruf gedrückt wurde
isEscapeHit() [S] gibt True zurück, falls der Escape-Button seit dem letzten Aufruf gedrückt wurde
isEnterHit() [S] dasselbe für den Enter-Button
isLeftHit() [S] dasselbe für den Left-Button
isRightHit() [S] dasselbe für den Right-Button
isUpHit() [S] dasselbe für den Up-Button
isDownHit() [S] dasselbe für den Down-Button

 

Lichtsensor (EV3 Colorsensor als Helligkeitssensor):
Instanzen Port
ls1, ls2, ls3, ls4 [S] Lichtsensor am entsprechenden SensorPort

Methode Aktion
getValue() [S] liefert die Lichtintensität (0..1023)
RobotContext.
useBackground("sprite") [S]
Nur Simulationsmodus: fügt ein Hintergrundbild für die Simulation mit Licht- oder Colorsensoren hinzu
RobotContext.
setStartPosition(x, y) [S]
Nur Simulationsmodus: Setzt den simulierten Roboter an die Position (x, y) im Grafikfenster
RobotContext.
setStartDirection(w) [s]]
Nur Simulationsmodus: Bestimmt die Startrichtung (0: osten, 90: norden, 180: westen, 270: süden)

 

Touchsensor
Instanzen Port
ts1, ts2, ts3, ts4 [S] Touchsensor am entsprechenden SensorPort

Methode Aktion
isPressed() [S] liefert True, falls der Touchsensor gedrückt ist
RobotContext.
useObstacle("sprite", x, y)
Nur Simulationsmodus: fügt ein Bild mit Transparrenten Hintergrund an die Position x,y hinzu

 

Distanzsensor (EV3 Ultrasonicsensor):
Instanzen Port

us1, us2, us3, us4 [S]

Sensor am entsprechenden SensorPort


Methoden Aktion
getDistance() [S] liefert Distanz in cm (255, falls keine reflektierendes Objekt gefunden wird, im Simulationsmodus: -1)
RotContext.
setProximityCircleColor(color)
Nur Simulationsmodus: setzt die Farbe des Suchkreises
RobotContext.
setMeshTriangleColor(color)
Nur Simulationsmodus: setzt die Füllfarbe der Maschen
RobotContext.
setBeamAreaColor(color)
Nur Simulationsmodus: setzt die Farbe der Strahlbereichsgrenzen
RobotContexr.
eraseBeamArea()
Nur Simulationsmodus: löscht die Strahlbereichsgrenzen

 

Colorsensor
Instanzen Port
cs1, cs2, cs3, cs4 [S] Colorsensor am entsprechenden SensorPort

Methoden Aktion
getColor() [S] liefert die Grundfarben RED, BLUE, YELLOW, GREEN, BLACK, WHITE
getColorRGB() liefert die rgb-Farbkomponenten als Liste [r, g, b], nur Realmodus
calibrateColor(colors, previous) kalibriert Farben, die nicht richtig erkannt wurden. colors ist eine Liste der Farben, die kalibriert werden sollen. Bei previous = True, wird neu kalibriert, False verwerdet die Ergebnisse der letzten Kalibrierung.
cs3.calibrateColor(["RED", "BLUE", "GREEN"], True) kalibriert neu die Farben rot,blau und grün
cs3.calibrateColor(["RED", "BLUE", "GREEN"], False) verwendet die gespeicherten Werte der letzten Kalibrierung für die Farben rot, blau und grün

Bemerkung:
Sind die Sensoren am Port 1 angeschlossen, kann man die globale Funktionen (z.B. getValue()) vewenden.

 

GyroRateSensor
Instanzen Port
grs1, grs2, grs3, grs4 erzeugt einen GyroRateSensor am entsprechenden SensorPort

Methoden Aktion
getValue() gibt die Winkelgeschwindigkeit zurück (Grad pro Sekunde, positiv im Gegenuhrzeigersinn)

 

GyroAngleSensor
Instanzen Port
gas1, gas2, gas3, gas4 erzeugt einen GyroAngelSensor am entsprechenden SensorPort

Methoden Aktion
getValue() gibt die Orientierung des Sensors bezüglich seiner Startposition zurück (Grad im Gegenuhrzeigersinn)
reset() setzt die Startposition

 

Temperatursensor (NXT Temperatursensor):
Instanzen Port
tmp1, tmp2, tmp3, tmp4 Sensor am entsprechenden SensorPort


Methode Aktion
getTemperature() liefert die Temperatur in Grad Celsius

Bemerkung:
Diese Methode (mit SensorPort.S1) gibt es auch als globale Funktion (Kompatibilität zu mbrobot)

Temperatur- Feuchtigkeitssensor (Sensirion SHT31 über I2C):
Instanzen Port
sht1, sht2, sht3, sht4 Sensor am entsprechenden SensorPort

Methode Aktion
getValues() liefert ein Float-Tupel mit Temperatur (Grad C) und Luftfeuchtigkeit (%).


Umweltsensor (Temperatur, Luftfeuchtigkeit, Luftdruck) (Bosch BME280 über I2C):
Instanzen Port
bme1, bme2, bme3, bme4 Sensor am entsprechenden SensorPort

Methode Aktion
getValues() liefert ein Float-Tupel mit Temperatur (Grad C) , Luftfeuchtigkeit (%) und Luftdruck (hPa)

 

3-Achsen Beschleunigungssensor (ADXL345 über I2C):
Instanzen Port
adxl1, adxl2, adxl3, adxl4 Sensor am entsprechenden SensorPort

Methode Aktion
getValues() liefert ein Float-Tupel mit den Beschleunigungen in x-, y- und z-Richtung (m/s^2 im Bereich -2g .. 2g)


Infrarotsensor (EV3 Infrarotsensor mit Fernsteuermodul) am SensorPort S1:
Instanzen Port
irs Infrarotsensor an SensorPort S1

Methode Aktion
getCommand()

gibt die aktuelle Kommando-ID für die gedrückten Tasten zurück:

0: nichts gedrückt
1: oben-links
2: unten-links
3: oben-rechts
4: unten-rechts
5: oben-links+oben-rechts
6: oben-links+unten-rechts
7: unten-links+oben-rechts
8: unten-links+unten-rechts
9: Zentrum
10: unten-links+oben-links
11: oben-rechts+unten-rechts

Der rote Schiebeschalter muss ganz oben stehen (für SensorPort S1)

 

Internet (EV3 über WLAN-Adapter mit Accesspoint verbunden):
Funktion Aktion
httpGet(url) führt einen HTTP GET Request durch und liefert den Response zurück. url in der Form "http://<server>?key=value&key=value&..." oder für SSL "https://..."
httpPost(url, content) führt einen HTTP POST Request durch und liefert den Response zurück. url in der Form "http://<server>". content im Format "key=value&key=value&..." oder für SSL "https://..."
httpDelete(url) führt einen HTTP DELETE Request mit der gegebenen Ressource aus
startHTTPServer(handler)

startet einen HTTP Server (Webserver auf Port 80), der auf HTTP GET Requests hört. Bei einem GET Request wird der benutzerdefinierte Callback handler(clientIP, filename, params) aufgerufen:

clientIP: gepunktete IP-Adresse des Clients
filename: Dateiname der URL mit vorgestelltem "/". Fehlt der Dateiname: "/"
params: Dictionary mit den GET Request Parametern {key: value}.

Beispiel http://192.168.0.101/on?a=ok&b=3

clientIP = "192.168.0.101"
filename = "/on"
params = {"a" : "ok", "b" : "3"}

Die Rückgabe besteht aus kommagetrennten Werten, die in die %s-Formatangaben der gespeicherten HTML-Datei eingebaut werden, bevor sie dem Browser zurückgesendet wird. (Die Anzahl und Reihenfolge muss übereinstimmen.) Fehlt der Rückgabewert, so wird die HTML-Datei unverändert zurückgesendet

(Der Aufruf ist nicht blockierend, da der Server in einem eigenen Thread läuft.)

saveHTML(text) speichert den Text als HTML-Datei, die dem Browser bei einem GET Request zurück gesendet wird. Sie kann %-Formatangaben enthalten, die mit den Rückgabewerten des Callbacks handler(clientIP, filename, params) ersetzt werden

 

Wetterdaten

Funktion Aktion
getWeather(city, key)

macht einen Wetterdaten-Request auf http://openweathermap.org für die gewählte Stadt. Dabei wird der gegebene Authorisierungsschlüssel verwendet. Diesen kann man man kostenfrei auf diesem Host beziehen. (Wird der Parameter weggelassen, so wird ein Standardschlüssel verwendet, der maximal 60 Anfragen / min für alle Nutzer erlaubt.)

Rückgabewert: Dictionary mit den Feldern:

"status" "OK" oder Fehlerstring, der den Fehler beschreibt, z.B. "City not found" (string)
"temp" Temperatur in °C (float)
"pressure" Luftdruck in hPa (mbar) (float)
"humidity" Luftfeuchtigkeit in % (int)
"temp_min" Tagesminimum der Temperatur in °C (float)
"temp_max" Tagesmaximum der Temperatur in °C (float)
"description" Wetterlage in WPorten (deutsch) (string)
"sunrise" Sonnenaufgang in Universal Time (UTC) (string)
"sunset" Sonnenuntergang in Universal Time (UTC) (string)
"datetime" Datum - Uhrzeit (UTC) der Wettererfassung (string)

 


Lokales Datum/Zeit
für gegebene Stadt

Funktion Aktion
getHTTPDateTime(city, timezone, key)

macht einen Zeit/Datum-Request auf https://api.timezonedb.com für die gewählte Stadt.. Dabei wird der gegebene Authorisierungsschlüssel verwendet. Diesen kann man man kostenfrei auf diesem Host beziehen. (Wird der Parameter weggelassen, so wird ein Standardschlüssel verwendet, der maximal 1 Anfrage/sec für alle Nutzer erlaubt.) timezone ist entweder der Country Code oder der Landesname (englisch).

Rückgabewert: String im Format: ww yyyy-nn-dd hh:mm:ss
ww: Wochentag, yyyy: Jahr, nn: Monat, dd: Tag, hh: Stunden, mm: Minuten, ss: Sekunden
Beispiel: Mo 2018-09-10 20:27:33

Falls ein Fehler auftritt, wird None zurückgegeben

getHTTPTime(city, timezone, key) dasselbe, aber es wird nur der Zeitteil im Format hh:mm:ss zurückgegeben
getCountryCode(country) gibt den Country Code (2 Buchstaben) zum gegebenen Land (Englisch geschrieben) zurück
getCountry(countryCode) gibt das Land zum gegebenen Country Code zurück
countryCodes Dictionary mit code:country


Modul time
Modulimport:
import time

Funktion Aktion
time.time()

Gibt die aktuelle Zeit in Sekunden an