Zum Inhalt springen
Deutsch

Bewegung

Der Roboter hat zwei Räder, jedes mit eigenem Motor: left wheel motor und right wheel motor beim Starter-Roboter. Du steuerst ihn, indem du die Geschwindigkeit jedes Rads einstellst:

Linkes Rad Rechtes Rad Der Roboter …
Vorwärts Vorwärts fährt vorwärts
Rückwärts Rückwärts fährt rückwärts
Rückwärts Vorwärts dreht sich auf der Stelle nach links
Vorwärts Rückwärts dreht sich auf der Stelle nach rechts
Schnell Langsam fährt eine Rechtskurve

Der Roboter fährt vorwärts, fährt rückwärts, dreht sich auf der Stelle nach links und nach rechts und fährt eine Rechtskurve, mit einem Pfeil für die Geschwindigkeit jedes Rads

Geschwindigkeiten werden in Radiant pro Sekunde angegeben, bis zu 6,28 (eine Radumdrehung pro Sekunde). Negative Geschwindigkeiten drehen das Rad rückwärts.

  1. Hol jeden Motor über seinen Namen.
  2. Setze seine Position auf unendlich, damit er sich ohne Begrenzung dreht.
  3. Stelle seine Geschwindigkeit ein.

Die Motoren behalten die zuletzt eingestellte Geschwindigkeit, also fährt der Roboter weiter, während dein Programm andere Dinge erledigt. Dieses Programm fährt jeweils eine Sekunde lang vorwärts, rückwärts und dreht sich nach links:

from controller import Robot
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
maxSpeed = 6.28 # The maximum speed of the wheels, in radians per second
leftWheel = robot.getDevice("left wheel motor")
rightWheel = robot.getDevice("right wheel motor")
leftWheel.setPosition(float("inf"))
rightWheel.setPosition(float("inf"))
def drive(left, right, seconds):
# Set the speed of each wheel, and keep it for some time
leftWheel.setVelocity(left)
rightWheel.setVelocity(right)
start = robot.getTime()
while robot.step(timeStep) != -1:
if robot.getTime() - start >= seconds:
break
drive(maxSpeed, maxSpeed, 1.0) # Forward
drive(-maxSpeed, -maxSpeed, 1.0) # Backward
drive(-2.0, 2.0, 1.0) # Spin to the left
drive(0, 0, 0.1) # Stop
print("Done")

Jeder Motor hat einen Positionssensor, auch Encoder genannt, der zählt, wie weit sich das Rad gedreht hat, in Radiant. Das ist nützlich, um eine feste Strecke zu fahren. Dreht sich das Rad rückwärts, wird der Wert kleiner.

from controller import Robot
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
leftWheel = robot.getDevice("left wheel motor")
rightWheel = robot.getDevice("right wheel motor")
leftWheel.setPosition(float("inf"))
rightWheel.setPosition(float("inf"))
# Each wheel has a position sensor, which counts how far it has turned
leftEncoder = leftWheel.getPositionSensor()
rightEncoder = rightWheel.getPositionSensor()
leftEncoder.enable(timeStep)
rightEncoder.enable(timeStep)
robot.step(timeStep) # Step once, so that the sensors have a value
start = leftEncoder.getValue()
leftWheel.setVelocity(5.0)
rightWheel.setVelocity(5.0)
while robot.step(timeStep) != -1:
turned = leftEncoder.getValue() - start
if turned > 10.0: # Stop after 10 radians
break
leftWheel.setVelocity(0)
rightWheel.setVelocity(0)
print("Left wheel:", round(leftEncoder.getValue() - start, 2), "rad")

Eine Bewegung nach Zeit zu steuern ist einfach, aber das Ergebnis ändert sich mit der Geschwindigkeit. Encoder messen die Bewegung selbst und sind daher zuverlässiger. Für präzise Drehungen ist das Gyroskop noch besser.

Als Nächstes lernst du, die Sensoren auszulesen.