LBotics.at

Der CyberPi hat eine inertiale Messeinheit (engl. IMU - inertial measurement unit) eingebaut, mit der es möglich ist, die Lage des Roboters im Raum zu bestimmen. Man erhält Informationen über die Ausrichtung des Roboters in Bezug auf die Längsachse, Querachse und Hochachse und kann somit auf Lageänderungen des Roboters reagieren oder diese auch genau steuern.

Die Raumachsen und Rotationsrichtungen

Ein im Raum frei bewegliches Objekt kann sich um die drei Raumachsen drehen. Die Rotation um die Längsachse wird als roll bezeichnet, die Rotation um die Querachse als pitch und die Rotation um die Hochachse als yaw.

Bestimmen des aktuellen pitch-Wertes

Wie stark der Roboter um die Querachse nach oben oder unten geneigt ist, kann mit der Funktion cyberpi.get_pitch() bestimmt werden. Diese Funktion gibt ganzzahlige Werte zurück, die zwischen -90 und +90 liegen können, was dem Neigungswinkel nach oben und unten entspricht.

Bestimmen des aktuellen roll-Wertes

Wird der Roboter um die Längsachse nach links oder rechts gedreht, so kann der Wert der aktuellen Querlage mit der Funktion cyberpi.get_roll() ausgelesen werden. Diese Funktion liefert ganzzahlige Werte zurück, die zwischen -180 und +180 liegen.

Bestimmen des aktuellen yaw-Wertes

Drehungen um die Hochachse des Roboters können mit der Funktion cyberpi.get_yaw() mitverfolgt werden. Diese Funktion liefert ganzzahlige Werte, die zwischen -180 und +180 liegen. Da der CyberPi nicht mit einem Kompass ausgestattet ist, wird der yaw-Wert beim Einschalten des Roboters auf 0 festgesetzt. 0 Grad entspricht also genau der Richtung, in die der Roboter beim Einschalten ausgerichtet war. Die aktuellen Werte, welche die Funktion cyberpi.get_yaw() liefert, sind also relative Drehwinkel in Bezug auf diese Startrichtung - negative Werte bei Drehungen im Uhrzeigersinn und positive Werte bei Drehungen gegen den Uhrzeigersinn.

Zum Zurücksetzen des yaw-Werts bei einer bestimmten Ausrichtung des Roboters auf 0 wird die Funktion cyberpi.reset_yaw() aufgerufen. In der Folge beziehen sich dann alle, mit der Funktion cyberpi.get_yaw() ermittelten Winkel relativ auf diese neu gesetzte Startausrichtung. Es empfiehlt sich, diese Funktion am Beginn jedes Skripts aufzurufen in dem man die yaw-Werte verarbeitet. Die Richtung, in die der Roboter ausgerichtet ist, entspricht dann einem yaw-Wert von 0 Grad.

Variablen in Python

In einer Programmiersprache sind Variablen Speicherplätze, in denen Werte abgelegt werden können. In der Folge können diese Werte ausgelesen werden oder Variablen können auch neue Werte zuwiesen werden. Im Gegensatz zu manchen anderen Programmiersprachen müssen in Python für eine Variable vor der ersten Verwendung weder der Name, noch der Datentyp festgelegt werden. Unter Datentyp versteht man die Art der Werte, die in einer Variable abgelegt werden können, z. B. ganzzahlige Werte, Dezimalzahlen, Zeichenketten, ...

Verwendung von Variablen - das zuweisende Istgleich

Benötigt man in Python eine Variable, so kann der gewünschte Variablenname einfach in den Code geschrieben werden, ohne, dass die Variable zuvor definiert oder ein Datentyp festgelegt wurde. Im Code sieht das wie folgt aus:

i = 6

Nach dieser Codezeile gibt es nun die Variable mit dem Namen i und dieser wurde der Wert 6 zugewiesen. Besonders zu beachten ist, dass die Verwendung eines einfachen Istgleich = eine andere Bedeutung hat, als dies in der Mathematik der Fall ist.

In einer Programmiersprache wird mit einem Istgleich eine sogenannte Zuweisung festgelegt, die immer von rechts nach links zu sehen ist. Das, was auf der rechten Seite steht, wird dem zugewiesen, was auf der linken Seite des Istgleich steht. Ein solches = wird in einer Programmiersprache als zuweisendes Istgleich bezeichnet.

Variablennamen

Bei Variablennamen ist in Python Folgendes zu beachten:

  • In Variablennamen dürfen keine Sonderzeiten (ä,ü,ß, ...) und keine Leerzeichen vorkommen.
  • Variablennamen dürfen nicht mit einer Zahl beginnen, können aber nach dem ersten Zeichen Zahlen beinhalten.
  • Das einzig erlaubte Zeichen zur optischen Trennung in Variablennamen ist der Unterstrich _.
  • Reservierte Wörter in der Sprache, sogenannte Schlüsselwörter, wie if, else, True, False, for, while, ... dürfen nicht als Variablennamen verwendet werden.
Variablentypen

Obwohl im Gegensatz zu vielen anderen Programmiersprachen in Python der Datentyp einer Variable nicht explizit festgelegt wird, so sind Variablen dennoch von einem bestimmten Typ, nachdem ihnen ein Wert zugewiesen wurde. Wurde einer Variable a mit a = 24 eine ganze Zahl zugewiesen, so ist diese Variable danach von Typ int. Ist in einer Variable mein_text mit der Zuweisung mein_text = "mBot2" eine Zeichenkette zugewiesen worden, so ist diese Variable mein_text nach dieser Zuweisung von Typ string.

Die drei häufigsten Variablentypen sind:

  • int: ganze Zahlen, z. B. -235
  • float: Dezimalzahlen (bzw. genauer: Gleitkommazahlen, das Dezimaltrennzeichen ist ein Punkt), z. B. 24.2534
  • string: Zeichenketten, z. B. "Hallo, ich bin ein mBot2 Roboter!"
Beispiel - Anzeige der yaw-, pitch- und roll-Werte am Display

Mit dem folgenden Skript werden in einer Endlosschleife laufend die aktuellen yaw-, pitch- und roll-Werte der inertialen Messeinheit des CyberPi abgefragt und am Display angezeigt. Dazu werden die drei Funktionen cyberpi.get_yaw() , cyberpi.get_pitch() und cyberpi.get_roll() hintereinander aufgerufen und deren Rückgabewerte in drei Variablen mit den Namen int_yaw, int_pitch und int_roll abgelegt.

Im Anschluss daran wird ein String zusammengestellt, mit dem die Ausgabe auf dem Display vorbereitet wird. Da es sich bei int_yaw, int_pitch und int_roll um Variablen handelt, die Zahlenwerte beinhalten, müssen diese Zahlen zunächst mit der Funktion str(zahl) in einen Wert vom Typ string konvertiert werden, bevor diese mit anderen Strings zusammengefügt werden können. Das Verbinden von Strings erfolgt in Python mit einem +.

import cyberpi

while True:
int_yaw = cyberpi.get_yaw()
int_pitch = cyberpi.get_pitch()
int_roll = cyberpi.get_roll()
str_ausgabe = "yaw: " + str(int_yaw) + "\npitch: " + str(int_pitch) + "\nroll:" + str(int_roll)
cyberpi.display.show_label(str_ausgabe,16,0,0)
Erklärungen zu diesem Skript

1: import cyberpi

Import des Moduls cyberpi

3: while True:

Mit while True: wird eine Endlosschleife eingeleitet. Alle danach eingerückten Code-Zeilen werden laufend wiederholt ausgeführt, solange das Skript läuft.

4: int_yaw = cyberpi.get_yaw()

In dieser Zeile erfolgt mit dem einfachen Istgleich = eine Zuweisung, die immer von rechts nach links zu betrachten ist. Zunächst wird auf der rechten Seite die Funktion cyberpi.get_yaw() aufgerufen, um den aktuellen yaw-Wert des Robotes zu ermitteln. Dieser wird von der Funktion als ganze Zahl - ein Wert vom Typ int - zurückgegeben und dann der Variable int_yaw zugewiesen. Die Variable int_yaw steht in dieser Zeile erstmalig im Code und kann in der Folge verwendet werden, um ihren Wert auszulesen oder ihr neue Werte zuzuweisen.

7: str_ausgabe = "yaw: " + str(int_yaw) + "\npitch: " + str(int_pitch) + "\nroll:" + str(int_roll)

Hier wird ein String zusammengestellt, der zur Ausgabe der drei Werte yaw, pitch und roll dienen soll. Dabei werden einzelne Strings mit dem Verknüpfungsoperator + miteineander verbunden. Da es sich bei int_yaw, ... um Zahlenwerte vom Typ int handelt, müssen diese zuvor mit der Funktion str(zahl) in einen String konvertiert werden, bevor diese mit den anderen Strings verknüpft werden können.

Die gewünschten Zeilenumbrüche werden in diesem String mit \n platziert.

Nach dem Verbinden aller einzelnen Strings zu einem Gesamtstring wird dieser mit einem zuweisenden Istgleich der Variable str_ausgabe zugewiesen.

8: cyberpi.display.show_label(str_ausgabe, 16, 0, 0)

Mit dem Aufruf der Funktion cyberpi.display.show_label(text, size, x, y) erfolgt die Ausgabe des zusammengestellten Strings mit Schriftgröße 16, beginnend an Position 0, 0 auf dem Display.

Zusammenfassung - Was wurde in diesem Abschnitt gelernt?
mBot2
  • Die Ausrichtung eines Objekts im Raum wird durch seine Drehung um seine Raumachsen, die Längsachse, die Querachse und die Hochachse beschrieben. Die Drehwinkel um die jeweilige Achse werden als yaw (Hochachse), pitch (Querachse) und roll (Längsachse) bezeichnet.
  • Die jweilige Ausrichtung ausgehend von der Normallage kann in Form von Winkelwerten mit den Funktionen cyberpi.get_yaw(), cyberpi.get_pitch(), cyberpi.get_roll() ermittelt werden.
  • Um die aktuelle Richtung mit dem yaw-Wert 0 festzulegen, wird die Funktion cyberpi.reset_yaw() aufgerufen.
Python
  • Variablen werden in Python verwendet, indem man deren Namen in den Code schreibt. Bei Variablen muss in Python zuvor weder der Name noch der Datentyp einer Variable festgelegt werden.
  • Bei der Vergabe von Variablennamen ist zu beachten:
    1. keine Sonderzeichen, keine Leerzeichen
    2. einziges erlaubtes Zeichen zur optischen Trennung: _
    3. Variablennamen dürfen nicht mit einer Zahl beginnen
    4. Schlüsselwörter wie if, else, while, True, ... können nicht als Variablennamen verwendet werden
  • Um einer Variable einen Wert zuzuweisen, wird das zuweisende Istgleich verwendet, das in Python mit einem einfachen Istgleich = geschrieben wird.
  • Die häufigsten Datentypen sind:
    1. int: ganze Zahlen, z. B. -235
    2. float: Dezimalzahlen (bzw. genauer: Gleitkommazahlen, das Dezimaltrennzeichen ist ein Punkt), z. B. 24.2534
    3. string: Zeichenketten, z. B. "Hallo, ich bin ein mBot2 Roboter!"
  • Der Verknüpfungsoperator für Stings ist in Python ein + (z. B. str_name = str_vorname + " " + str_nachname)
  • Mit der Funktion str(zahl) werden Zahlenwerte in Strings konvertiert. Dies muss geschehen, bevor man Zahlenwerte mit Strings verknüpfen kann, wenn man diese zum Beispiel ausgeben möchte.