Bewegung#
Einführung#
Motors control how parts of a robot move. Motors can be used to raise an arm, turn a claw, spin a wheel, or move another part of a build. Two motors can work together as a drivetrain to move and turn the whole robot.
Jeder Motor wird im Gerätefenster konfiguriert. Je nach Build können die Motornamen variieren. Beispielsweise hat der Build „Competition Advanced 2.0“ einen Motor mit dem Namen arm_motor. Ein benutzerdefinierter Roboter kann andere Motornamen verwenden.
Standardmäßig dreht sich ein Motor bei der Einstellung FORWARD gegen den Uhrzeigersinn und REVERSE im Uhrzeigersinn. Wenn im Gerätefenster die Drehrichtung eines Motors umgekehrt eingestellt ist, werden diese Richtungen vertauscht.
Es gibt viele Möglichkeiten, Motoren zu programmieren. Nachfolgend finden Sie eine Liste aller Bewegungsmethoden:
Aktionen – Motoren anhalten und drehen.
spin— Lässt einen Motor unendlich lange vorwärts oder rückwärts laufen.spin_for— Lässt einen Motor eine bestimmte Strecke drehen.spin_to_position— Dreht einen Motor in eine bestimmte Position.stop— Stoppt den Motor.
Mutatoren – Motoreinstellungen anpassen.
set_velocity— Gibt dem Motor die Drehzahl vor.set_max_torque— Legt fest, wie stark ein Motor beim Drehen drücken darf.set_position— Ändert die aktuelle Position des Motors auf einen neuen Wert.set_stopping— Legt fest, wie ein Motor zum Stillstand kommt: durch Bremsen, Auslaufen oder Halten.set_timeout— Legt fest, wie lange ein Motor versucht, eine Bewegung abzuschließen.
Getters – Motorstatus prüfen.
get_position— Gibt die aktuelle Position des Motors zurück.get_velocity— Gibt die Drehzahl des Motors als Prozentsatz von -100% bis 100% zurück.get_current— Gibt zurück, wie viel Leistung der Motor von der Batterie bezieht, als Prozentsatz von 0% bis 100%.is_stopped— Gibt als booleschen Wert zurück, ob der Motor seine Bewegung beendet hat.is_moving— Gibt als booleschen Wert zurück, ob sich der Motor dreht.
Aktionen#
spin#
spin lässt ihn endlos vorwärts oder rückwärts laufen. Der Motor dreht sich so lange, bis er eine andere Aktion erhält, z. B. die Drehrichtung ändert oder anhält.
Usage:
arm_motor.spin(direction)
Parameter |
Beschreibung |
|---|---|
|
Die Drehrichtung des Motors: |
# Build Used: Competition Advanced 2.0
def main():
# Raise the ArmMotor, then stop
arm_motor.spin(REVERSE)
wait(1, SECONDS)
arm_motor.stop()
# Start threads — Do not delete
start_thread(main)
spin_for#
Der Befehl spin_for lässt einen Motor eine bestimmte Strecke drehen. Die Drehung bezieht sich auf die aktuelle Position des Motors. Das Projekt wartet, bis der Motor seine Drehung beendet hat, bevor die nächste Codezeile ausgeführt wird.
Usage:
arm_motor.spin_for(direction, angle, units, wait)
Parameter |
Beschreibung |
|---|---|
|
Die Drehrichtung des Motors: |
|
Die Strecke, die der Motor zurücklegt. |
|
Optional. Die Entfernungseinheit: |
|
Optional. |
# Build Used: Competition Advanced 2.0
def main():
# Raise and lower the ArmMotor
arm_motor.spin_for(REVERSE, 180, DEGREES)
wait(1, SECONDS)
arm_motor.spin_for(FORWARD, 180, DEGREES)
# Start threads — Do not delete
start_thread(main)
spin_to_position#
spin_to_position dreht einen Motor in eine bestimmte Position.
Die Position eines Motors gibt an, wie weit er sich gedreht hat, gemessen in DEGREES oder TURNS. Eine Umdrehung entspricht 360 Grad. Zu Beginn eines Projekts wird die Motorposition auf 0 Grad eingestellt. Die Motorposition kann auch mit der Methode set_position festgelegt werden.
Positionswerte sind absolut. Das bedeutet, dass die Drehrichtung von der aktuellen Position des Motors abhängt.
Wenn der Motor beispielsweise bei 0 Grad startet und sich bis zu einer Position von 720 Grad dreht, dreht er sich zwei Umdrehungen vorwärts. Dreht er sich anschließend bis zu einer Position von 360 Grad, dreht er sich eine Umdrehung rückwärts, da 360 kleiner als 720 ist.
Usage:
arm_motor.spin_to_position(angle, units, wait)
Parameter |
Beschreibung |
|---|---|
|
Der Positionswert, bis zu dem sich der Motor dreht. |
|
Optional. Die Positionseinheit: |
|
Optional. |
# Build Used: Competition Advanced 2.0
def main():
# Return ArmMotor to 0 degrees after raising
arm_motor.spin_for(REVERSE, 180, DEGREES)
wait(1, SECONDS)
arm_motor.spin_to_position(0, DEGREES)
# Start threads — Do not delete
start_thread(main)
stop#
stop stoppt den Motor.
Usage:
arm_motor.stop()
Parameter |
Beschreibung |
|---|---|
Diese Methode hat keine Parameter. |
# Build Used: Competition Advanced 2.0
def main():
# Raise the ArmMotor
arm_motor.spin(REVERSE)
wait(1, SECONDS)
arm_motor.stop()
# Start threads — Do not delete
start_thread(main)
Mutatoren#
set_velocity#
Der Wert set_velocity gibt die Drehzahl des Motors an. Ein höherer Prozentwert beschleunigt die Drehung, ein niedrigerer Prozentwert verlangsamt sie.
Jedes Projekt beginnt standardmäßig damit, dass jeder Motor mit 50 % Drehzahl läuft.
Hinweis: Eine höhere Drehzahl lässt den Motor schneller drehen, kann aber die Präzision verringern. Eine niedrigere Drehzahl lässt den Motor langsamer drehen, kann aber die Präzision erhöhen.
Usage:
arm_motor.set_velocity(velocity)
Parameter |
Beschreibung |
|---|---|
|
Die Drehzahl, mit der die Rotation erfolgen soll, von 0 % bis 100 %. Dies kann eine ganze Zahl |
# Build Used: Competition Advanced 2.0
def main():
# Move the ArmMotor at different velocities
arm_motor.spin_for(REVERSE, 180, DEGREES)
wait(1, SECONDS)
# Move slow
arm_motor.set_velocity(20)
arm_motor.spin_for(FORWARD, 180, DEGREES)
wait(1, SECONDS)
# Move fast
arm_motor.set_velocity(100)
arm_motor.spin_for(REVERSE, 180, DEGREES)
# Start threads — Do not delete
start_thread(main)
set_max_torque#
Das Drehmoment ist eine Drehkraft. Es zeigt an, wie stark ein Motor beim Drehen drücken oder ziehen kann.
set_max_torque legt das maximale Drehmoment fest, das ein Motor verwenden darf.
Ein höherer Prozentsatz ermöglicht es dem Motor, stärker zu drücken, beispielsweise beim Anheben eines schweren Gegenstands. Ein niedrigerer Prozentsatz begrenzt die maximale Schubkraft. Dies kann den Roboter schützen, falls der Motor blockiert oder seinen maximalen Bewegungsradius erreicht.
Jedes Projekt beginnt standardmäßig mit einem Drehmoment von 50 % für jeden Motor.
Usage:
arm_motor.set_max_torque(value)
Parameter |
Beschreibung |
|---|---|
|
Das maximale Drehmoment, das der Motor von 0 % bis 100 % nutzen kann. Dies kann eine ganze Zahl |
# Build Used: Competition Advanced 2.0
def main():
# Move the ArmMotor at different torques
arm_motor.spin_for(REVERSE, 180, DEGREES)
wait(1, SECONDS)
# Move with less torque
arm_motor.set_max_torque(20)
arm_motor.spin_for(FORWARD, 180, DEGREES)
wait(1, SECONDS)
# Move with maximum torque
arm_motor.set_max_torque(100)
arm_motor.spin_for(REVERSE, 180, DEGREES)
# Start threads — Do not delete
start_thread(main)
set_position#
Die Position eines Motors entspricht seiner Drehung, gemessen in DEGREES oder TURNS. Eine Umdrehung entspricht 360 Grad. set_position wird die aktuelle Position des Motors auf einen neuen Wert geändert.
Hat sich ein Motor beispielsweise um 180 Grad gedreht, wird durch Einstellen der Position auf 0 Grad diese Position von 180 auf 0 Grad zurückgesetzt. Anschließend kann sich der Motor basierend auf diesem neuen Wert in verschiedene Positionen drehen.
Usage:
arm_motor.set_position(position, units)
Parameter |
Beschreibung |
|---|---|
|
Der für den Motor einzustellende Positionswert. |
|
Optional. Die Positionseinheit: |
# Build Used: Competition Advanced 2.0
def main():
# Return ArmMotor to 0 degrees after raising
arm_motor.set_position(0, DEGREES)
arm_motor.spin_for(REVERSE, 180, DEGREES)
wait(1, SECONDS)
arm_motor.spin_to_position(0, DEGREES)
# Start threads — Do not delete
start_thread(main)
set_stopping#
set_stopping legt fest, wie ein Motor zum Stillstand kommt: durch Bremsen, Auslaufen oder Halten.
Usage:
arm_motor.set_stopping(mode)
Parameter |
Beschreibung |
|---|---|
|
So stoppt der Motor:
|
Wird beispielsweise ein Competition Advanced 2.0-Build verwendet und der Parameter arm_motor auf HOLDgesetzt, hält der Motor den Arm in seiner aktuellen Position, bis eine weitere Armbewegung erfolgt. Das bedeutet, dass der Motor entgegen der Schwerkraft arbeitet, um den Arm in der Luft zu halten, falls er bei angehobenem Arm gestoppt wurde.
Wird diese Methode nicht angewendet, verwendet der Motor beim Anhalten die Bremse BRAKE.
# Build Used: Competition Advanced 2.0
def main():
# Move the ArmMotor, then coast to a stop
arm_motor.set_velocity(20)
arm_motor.set_stopping(COAST)
arm_motor.spin(REVERSE)
wait(1, SECONDS)
arm_motor.stop()
# Start threads — Do not delete
start_thread(main)
set_timeout#
set_timeout wird festgelegt, wie lange ein Motor versucht, eine Bewegung abzuschließen. Schafft er es nicht, die Bewegung innerhalb dieser Zeit zu beenden, bricht er den Versuch ab und fährt mit der nächsten Codezeile fort. Dadurch wird verhindert, dass der Motor bei einer Bewegung hängen bleibt.
Usage:
arm_motor.set_timeout(value, units)
Parameter |
Beschreibung |
|---|---|
|
Die Zeitspanne, in der der Motor versuchen kann, eine Bewegung abzuschließen. Dies kann eine positive ganze Zahl |
|
Optional. Die Zeiteinheit: |
# Build Used: Competition Advanced 2.0
def main():
# Move ArmMotor as far as possible for 1 second before resetting
arm_motor.set_position(0, DEGREES)
arm_motor.set_timeout(1, SECONDS)
arm_motor.spin_for(REVERSE, 180, DEGREES)
arm_motor.spin_to_position(0, DEGREES)
# Start threads — Do not delete
start_thread(main)
Getter#
get_position#
Die Position eines Motors entspricht seiner Drehung, gemessen in DEGREES oder TURNS. Eine Umdrehung entspricht 360 Grad. get_position get_position` gibt die aktuelle Position des Motors zurück.
Zu Beginn eines Projekts wird die Motorposition auf 0 Grad eingestellt. Dreht sich der Motor eine Umdrehung vorwärts, beträgt die Position 360 Grad bzw. eine Umdrehung. Dreht sich der Motor in die andere Richtung, ist die Position negativ.
Usage:
arm_motor.get_position(units)
Parameter |
Beschreibung |
|---|---|
|
Optional. Die Einheit soll die Motorposition in folgender Reihenfolge wiederherstellen: |
# Build Used: Competition Advanced 2.0
def main():
# Display how far the ArmMotor moves after one second
arm_motor.set_position(0, DEGREES)
console.print("Start: ")
console.print(arm_motor.get_position(DEGREES))
console.new_line()
arm_motor.spin(REVERSE)
wait(1, SECONDS)
arm_motor.stop()
console.print("After: ")
console.print(arm_motor.get_position(DEGREES))
# Start threads — Do not delete
start_thread(main)
get_velocity#
get_velocity gibt die Drehzahl des Motors als Prozentsatz von -100% bis 100% zurück.
Ein positiver Wert bedeutet, dass sich der Motor vorwärts dreht. Ein negativer Wert bedeutet, dass sich der Motor rückwärts dreht.
Usage:
arm_motor.get_velocity()
Parameter |
Beschreibung |
|---|---|
Diese Methode hat keine Parameter. |
# Build Used: Competition Advanced 2.0
def main():
# Display the ArmMotor's velocity when it moves
console.print("Resting: ")
console.print(arm_motor.get_velocity())
console.new_line()
arm_motor.spin(REVERSE)
wait(1, SECONDS)
console.print("Moving: ")
console.print(arm_motor.get_velocity())
arm_motor.stop()
# Start threads — Do not delete
start_thread(main)
get_current#
get_current gibt an, wie viel Leistung der Motor von der Batterie bezieht, als Prozentsatz von 0% bis 100%.
Ein höherer Stromwert bedeutet, dass der Motor mehr Energie verbraucht. Dies kann vorkommen, wenn der Motor etwas Schweres anhebt, gegen ein Hindernis drückt oder versucht, sich aus einer Blockade zu bewegen.
Usage:
arm_motor.get_current()
Parameter |
Beschreibung |
|---|---|
Diese Methode hat keine Parameter. |
# Build Used: Competition Advanced 2.0
def main():
# Display the motor's current when it moves
console.print("Resting: ")
console.print(arm_motor.get_current())
console.new_line()
arm_motor.spin(REVERSE)
wait(1, SECONDS)
console.print("Moving: ")
console.print(arm_motor.get_current())
arm_motor.stop()
# Start threads — Do not delete
start_thread(main)
is_stopped#
Die Funktion is_stopped gibt als booleschen Wert zurück, ob der Motor seine Bewegung beendet hat is_stopped . Dieser Wert kann verwendet werden, um den Zeitpunkt anderer Aktionen basierend auf der Motorbewegung zu steuern.
True— Der Motor hat seine Bewegung beendet.False— Der Motor dreht sich noch.
Diese Methode funktioniert zusammen mit den folgenden Bewegungsmethoden, die den Parameter wait haben: spin_for und spin_to_position.
Usage:
arm_motor.is_stopped()
Parameter |
Beschreibung |
|---|---|
Diese Methode hat keine Parameter. |
# Build Used: Competition Advanced 2.0
def main():
# Turn the Eye Sensor's light on while ArmMotor is moving
arm_motor.spin_for(REVERSE, 180, DEGREES, wait=False)
wait(0.1, SECONDS)
while True:
if arm_motor.is_stopped():
eye.set_light(OFF)
else:
eye.set_light(ON)
# Start threads — Do not delete
start_thread(main)
is_moving#
is_moving is_moving gibt als booleschen Wert zurück, ob sich der Motor dreht. Dieser Wert kann verwendet werden, um den Zeitpunkt anderer Aktionen basierend auf der Motorbewegung zu steuern.
True— Der Motor dreht sich.False— Der Motor dreht sich nicht.
Diese Methode funktioniert zusammen mit den folgenden Bewegungsmethoden, die den Parameter wait haben: spin_for und spin_to_position.
Usage:
arm_motor.is_moving()
Parameter |
Beschreibung |
|---|---|
Diese Methode hat keine Parameter. |
# Build Used: Competition Advanced 2.0
def main():
# Turn the Eye Sensor's light on while ArmMotor is moving
arm_motor.spin_for(REVERSE, 180, DEGREES, wait=False)
wait(0.1, SECONDS)
while True:
if arm_motor.is_moving():
eye.set_light(ON)
else:
eye.set_light(OFF)
# Start threads — Do not delete
start_thread(main)