Zum Inhalt springen
Deutsch

Gyroskop und Beschleunigungssensor

Das Gyroskop liefert die Drehgeschwindigkeit des Roboters um jede Achse in Radiant pro Sekunde. Beim Starter-Roboter heißt es gyro.

getValues() gibt [x, y, z] zurück. Die Y-Achse ist vertikal, also ist getValues()[1] die Drehgeschwindigkeit des Roboters. Sie ist positiv, wenn er sich nach links dreht.

Eine Drehung nach links ergibt einen positiven Wert, eine Drehung nach rechts einen negativen Wert

Addiere die Drehgeschwindigkeit multipliziert mit dem Zeitschritt auf, um den gedrehten Winkel zu erhalten. Das ist zuverlässiger, als die Drehung nach Zeit zu steuern, weil es nicht von der Geschwindigkeit abhängt.

from controller import Robot
import math
robot = Robot()
timestep = int(robot.getBasicTimeStep())
left = robot.getDevice("left wheel motor")
right = robot.getDevice("right wheel motor")
left.setPosition(float("inf"))
right.setPosition(float("inf"))
gyro = robot.getDevice("gyro")
gyro.enable(timestep)
def turnLeft(angle):
turned = 0
left.setVelocity(-2)
right.setVelocity(2)
while abs(turned) < angle and robot.step(timestep) != -1:
turned += gyro.getValues()[1] * timestep / 1000 # Speed multiplied by the time, in seconds
left.setVelocity(0)
right.setVelocity(0)
turnLeft(math.pi / 2)
print("Turned 90 degrees")

In einem Test mit dem Starter-Roboter stimmte der so berechnete Winkel bis auf 0,01 Radiant mit der echten Drehung überein. Kleine Fehler summieren sich im Lauf eines Spiels, also korrigiere die Ausrichtung, wann immer du kannst, zum Beispiel indem du dich an einer Wand ausrichtest.

Der Beschleunigungssensor liefert die Beschleunigung entlang jeder Achse in m/s². Beim Starter-Roboter heißt er accelerometer. In Ruhe liefert getValues()[1] etwa 9,8, also die Schwerkraft.

Der Starter-Roboter hat keinen Inertialsensor (Inertial Unit). Mit dem Robot Customizer kannst du einen hinzufügen, der standardmäßig inertial_unit heißt. Er liefert die Ausrichtung direkt mit getRollPitchYaw(), statt dass du Drehgeschwindigkeiten aufaddieren musst. Siehe die Webots-Referenz.