LBotics.at

Der mbot2 Roboter ist mit zwei sehr starken Encoder Motoren ausgestattet, die sich sehr genau steuern lassen. Ein Encoder misst dabei laufend die aktuelle Drehgeschwindigkeit eines Motors. Die Steuereinheit für die Motoren verwendet diese Informationen, um die Drehgeschwindigkeit konstant zu halten und auch, um die beiden Motoren hinsichlich ihrer Umdrehungszahl immer synchron laufen zu lassen. Durch diese zusätzliche Funktion wird erreicht, dass der mBot2 auch längere Strecken gerade aus fahren kann, ohne in eine Richtung abzudriften.

Ergänzend zu den Fahrfunktionen gibt es im mBot2 Modul die Funktion EM_set_speed(speed, port), mit der die Drehgewschindigkeit eines Motors individuell gesteuert werden kann. Damit können komplexere Bewegungsmuster programmiert oder auch direkte Reaktionen auf Signale von Sensoren in die Steuerung jedes einzelnen Motors miteinbezogen werden.

Mit dieser Funktion lässt sich allerdings nur die Umdrehungsgeschwindigkeit eines Motors einstellen. Die Dauer, wie lange sich Motoren drehen und ein Roboter fährt, muss auf andere Weise festgelegt werden. Im folgenden Beispiel wird die Funktion sleep() aus dem Standard Python Modul time verwendet. Dabei ist zu beachten, dass die Ausführung eines Skripts beim Aufruf dieser Funktion angehalten und kein anderer Code in der Zwischenzeit ausgeführt wird, bis die vorgegebene Zeit verstrichen ist.

Beispiel - Bewegungsmuster mit individueller Motorsteuerung

In diesem Beispiel soll der Roboter folgenden Bewegungsablauf ausführen:

  • 3 Sekunden vorwärts mit Geschwindigkeit 10
  • 2 Sekunden stehenbleiben
  • 2 Sekunden am Stand mit Geschwindigkeit 30 drehen
  • 3 Sekunden rückwärts mit Geschwindigkeit 20

Bei der Verwendung der Funktion EM_set_speed(speed, port) ist darauf zu achten, dass man damit das Drehen eines Motors festlegt. Bei positiven Werten dreht sich dieser gegen den Uhrzeigersinn, bei negativen Werten im Uhrzeigersinn. Da die beiden Motoren gegengleich montiert sind, ist zu berücksichtigen, dass sich der eine Motor im Uhrzeigersinn und der andere Motor entgegengesetzt gegen den Uhrzeigersinn drehen muss, damit der Roboter letztendlich in eine Richtung fährt.

Nachdem die Drehrichtungen und Geschwindigkeiten der Motoren gesetzt sind, wird die weitere Ausführung des Skripts mit der Funktion sleep(time) angehalten. Die Motoren drehen sich und der Roboter bewegt sich in dieser Zeit wie gewünscht.

import cyberpi, mbot2, time

mbot2.EM_set_speed(10, 1)
mbot2.EM_set_speed(-10, 2)
time.sleep(3)
mbot2.EM_stop()
time.sleep(2)
mbot2.EM_set_speed(30, 1)
mbot2.EM_set_speed(30, 2)
time.sleep(2)
mbot2.EM_set_speed(-20, 1)
mbot2.EM_set_speed(20, 2)
time.sleep(3)
mbot2.EM_stop()
Erklärungen zu diesem Skript

1: import cyberpi,mbot2

Mit import werden Python-Module eingebunden, hier die beiden Module cyberpi und mbot2, in denen Funktionen zum Ansprechen dieser beiden Hardware-Komponenten zur Verfügung gestellt werden.

3: mbot2.EM_set_speed(10, 1)
4. mbot2.EM_set_speed(-10, 2)

Mit der Funktion EM_set_speed(speed, port) werden die Drehgeschwindigkeit und die Drehrichtung eines Motors festgelegt. Bei positiven Werten für speed dreht sich der jeweilige Motor gegen den Uhrzeigersinn, bei negativen Werten dreht sich der Roboter im Uhrzeigersinn. Mit dem zweiten Wert wird festgelegt, für welchen Motor der speed-Wert gesetzt werden soll. Für den linken Motor wird dieser Funktion eine 1 übergeben und für den rechten Motor eine 2.

Will man erreichen, dass der Roboter in eine Richtung fährt, müssen für die beiden Motoren speed-Werte mit unterschiedlichen Vorzeichen gesetzt werden.

speed: -200, ..., 0, ..., 200 (Dezimalwerte von -200 bis 200, positive Werte: Drehung gegen den Uhrzeigersinn, negative Werte: Drehung im Uhrzeigersinn)

port: 1, 2 (1: linker Motor, 2: rechter Motor)

5: time.sleep(3)

Das Modul time, das zu Beginn des Skripts importiert wurde, stellt die Funktion sleep(time) zur Verfügung. Mit dieser Funktion wird die Ausführung des Skripts für die angegebene Zeitspanne in Sekunden genau an der Stelle angehalten, an der diese Funktion aufgerufen wird.

time: 0, 1, ... (Zeit in Sekunden, positive Dezimalzahlen von 0 beginnend)

6: mbot2.EM_stop()

Mit der Funktion EM_stop() können beide Motoren gestoppt werden um den Roboter anzuhalten.

Zusammenfassung - Was wurde in diesem Abschnitt gelernt?
mBot2
  • Ein Encoder misst bei einem Motor die aktuelle Drehgeschwindigkeit. Diese Informationen können verwendet werden, um eine konstante Umdrehungszahl eines Motors auch bei unterschiedlichen Belastungen zu gewährleisten.
  • Die Drehgeschwindigkeit und -richtung eines Motors kann mit der Funktion mbot2.EM_set_speed(speed, port) festgelegt werden. Damit sich der Roboter in eine Richtung bewegt, müssen sich die Motoren in entgegengesetzter Richtung drehen.
  • Nach dem Aufruf der Funktion mbot2.EM_set_speed(speed, port) dreht sich ein Motor solange mit dem übergebenen speed-Wert, bis dieser durch Aufruf einer anderen Motorfunktion geändert wird.
  • Mit der Funktion mbot2.EM_stop() können beide Motoren angehalten werden.
Python
  • Die Funktion time.sleep(time) des Moduls time dient zum Anhalten der Ausführung eines Skripts. Diese Funktion darf nicht bei zeitkritischen Aufgabenstellungen verwendet werden, da die weitere Ausführung des Codes erst nach Ablauf der angegebenen Zeitspanne fortgesetzt wird.