Trägheit#

Einführung#

Der VEX AIM Programmierroboter verfügt über einen eingebauten Inertialsensor. Dieser Sensor misst die Bewegungen und Drehungen des Roboters.

Der Inertialsensor nutzt dafür zwei Komponenten. Das Gyroskop misst Drehbewegungen wie Kurs, Rotation, Gierwinkel, Rollwinkel, Nickwinkel und Drehgeschwindigkeit des Roboters. Der Beschleunigungsmesser erfasst Bewegungsänderungen wie Beschleunigung, Verlangsamung oder plötzliches Anhalten bei einem Aufprall.

Die Inertialmethoden können verwendet werden, um Kurven zu verfolgen, Beschleunigungen zu messen, Kollisionen zu erkennen, Kurs- oder Rotationswerte zurückzusetzen und den Sensor zu kalibrieren.

Nachfolgend finden Sie eine Liste aller Methoden:

Orientierung – Ausrichtung, Drehung oder Neigung des Roboters abrufen und zurücksetzen.

  • get_rotation — Gibt zurück, wie weit sich der Roboter gedreht hat.

  • get_heading — Gibt die Richtung zurück, in die der Roboter blickt, von 0 bis 359,99 Grad.

  • get_yaw — Gibt den Gierwinkel des Roboters zurück.

  • get_roll — Gibt den Rollwinkel des Roboters zurück.

  • get_pitch — Gibt den Nickwinkel des Roboters zurück.

  • reset_rotation — Setzt die aktuelle Rotation des Roboters auf 0 Grad zurück.

  • reset_heading — Setzt die aktuelle Richtung des Roboters auf 0 Grad zurück.

  • set_heading — Setzt die aktuelle Richtung des Roboters auf einen neuen Richtungswert.

Unfall – Kollisionen erkennen.

  • crashed — Registriert eine Funktion, die ausgeführt wird, wenn ein Absturz erkannt wird.

  • set_crash_sensitivity — Legt fest, wie empfindlich die Crash-Erkennung auf Stöße reagiert.

Bewegung – Beschleunigung und Drehgeschwindigkeit messen.

  • get_acceleration — Gibt zurück, wie schnell der Roboter auf der ausgewählten Achse beschleunigt oder abbremst.

  • get_turn_rate — Gibt zurück, wie schnell sich der Roboter um die ausgewählte Achse dreht.

Kalibrierung – Sensorkalibrierung verwalten.

  • calibrate — Kalibriert den Inertialsensor.

  • is_calibrating — Gibt zurück, ob der Inertialsensor gerade kalibriert wird.

Orientierung#

get_rotation#

Die Rotation gibt an, um welchen Winkel sich der Roboter gedreht hat, gemessen in Grad. Im Gegensatz zur Ausrichtung kann die Rotation über 359,99 Grad steigen oder unter 0 Grad fallen. Zu Beginn eines Projekts ist der Rotationswert auf 0 Grad gesetzt. Die Funktion get_rotation gibt die aktuelle Rotation des Roboters als Gleitkommazahl zurück.

Eine Rechtsdrehung erhöht die Rotation, eine Linksdrehung verringert sie. Beispielsweise ergibt eine zweifache Rechtsdrehung eine Rotation von 720 Grad. Eine volle Linksdrehung von 0 Grad aus ergibt eine Rotation von -360 Grad.

Usage:
robot.inertial.get_rotation()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Display the robot's rotation as it rotates
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")
    wait(50, MSEC)

get_heading#

Die Richtung, in die der Roboter zeigt, wird in Grad von 0 bis 359,99 gemessen. get_heading gibt die aktuelle Richtung des Roboters als Gleitkommazahl zurück.

Die Ausgangsrichtung beträgt 0 Grad. Wenn der Roboter über 359,99 Grad hinaus dreht, springt die Richtung wieder auf 0 Grad zurück.

Usage:
robot.inertial.get_heading()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Turn right until the heading reaches 90 degrees
robot.turn(RIGHT)
while robot.inertial.get_heading() < 90:
    wait(50, MSEC)
robot.stop_all_movement()

# Display the robot's heading as it is rotated by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(f"Heading: {robot.inertial.get_heading()} degrees")
    wait(50, MSEC)

get_yaw#

Der Gierwinkel beschreibt die Drehung des Roboters um seine vertikale Achse nach links oder rechts. get_yaw gibt den Gierwinkel des Roboters im Bereich von -180,00 bis 180,00 Grad als Gleitkommazahl zurück.

Die Abbildung unten verwendet Pfeile, um die Richtung der positiven Drehung um die Gierachse anzuzeigen.

Ein VEX AIM Programmierroboter mit einem blauen Pfeil, der von der Mitte des Roboters nach unten zeigt. Um den blauen Pfeil herum verläuft ein schwarzer, gebogener Pfeil im Uhrzeigersinn und zeigt die positive Gierrichtung an.

Usage:
robot.inertial.get_yaw()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Display the robot's yaw angle as it is rotated by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_yaw())
    wait(50, MSEC)

get_roll#

Roll beschreibt die seitliche Neigung des Roboters. get_roll -180,00 bis 180,00 Grad als Gleitkommazahl zurück.

Die Abbildung unten verwendet Pfeile, um die Richtung der positiven Drehung bei der Rollbewegung anzuzeigen.

Ein VEX AIM-Codierungsroboter mit einem grünen Pfeil, der aus der Vorderseite des Roboters in der Mitte des KI-Vision-Sensors herausragt. Um den grünen Pfeil verläuft ein schwarzer Pfeil entgegen dem Uhrzeigersinn und zeigt die positive Rollrichtung an.

Usage:
robot.inertial.get_roll()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Display the robot's roll angle as it is tilted by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_roll())
    wait(50, MSEC)

get_pitch#

Pitch beschreibt die Vorwärts- oder Rückwärtsneigung des Roboters. get_pitch gibt den Neigungswinkel des Roboters im Bereich von -90,00 bis 90,00 Grad als Gleitkommazahl zurück.

Die Abbildung unten verwendet Pfeile, um die Richtung der positiven Drehung bei Nickbewegungen anzuzeigen.

Ein VEX AIM Programmierroboter mit einem roten Pfeil, der seitlich unterhalb des VEX-Logos aus dem Roboter herausragt. Um den roten Pfeil verläuft ein schwarzer Pfeil entgegen dem Uhrzeigersinn und zeigt die positive Richtung für die Neigung an.

Usage:
robot.inertial.get_pitch()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Display the robot's pitch angle as it is tilted by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_pitch())
    wait(50, MSEC)

reset_rotation#

reset_rotation setzt die aktuelle Rotation des Roboters auf 0 Grad zurück.

Nach Anwendung dieser Methode verfolgt der Roboter zukünftige Drehungen vom neuen Rotationswert von 0 Grad aus.

Usage:
robot.inertial.reset_rotation()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Reset the robot's rotation if it exceeds 180 degrees
while True:
    if robot.inertial.get_rotation() >= 180:
        robot.inertial.reset_rotation()

    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")

    wait(50, MSEC)

reset_heading#

reset_heading setzt die aktuelle Ausrichtung des Roboters auf 0 Grad zurück.

Nach Anwendung dieser Methode entspricht die aktuelle Richtung des Roboters der neuen 0-Grad-Richtung.

Usage:
robot.inertial.reset_heading()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Turn the robot around using a new 90 degree heading
robot.turn_to(90)
wait(1, SECONDS)
robot.inertial.reset_heading()
robot.turn_to(90)

set_heading#

Die Richtung, in die der Roboter zeigt, wird in Grad von 0 bis 359,99 gemessen. set_heading wird die aktuelle Richtung des Roboters auf einen neuen Richtungswert geändert.

Wenn sich der Roboter beispielsweise nach rechts gedreht hat, wird durch Einstellen der Ausrichtung auf 0 Grad diese Position nach rechts zum neuen 0-Grad-Wert. Anschließend kann der Roboter basierend auf dieser neuen Richtung weitere Ausrichtungen verfolgen.

Usage:
robot.inertial.set_heading(heading)

Parameter

Beschreibung

heading

Der für den Roboter einzustellende Kurswert in Grad. Dieser Wert kann zwischen 0 und 359,99 liegen.

# Turn the robot to 90 degrees using its new heading
robot.inertial.set_heading(45)
robot.turn_to(90)

Absturz#

crashed#

crashed Registrierung einer Funktion, die aufgerufen werden soll, wenn der Roboter einen plötzlichen Aufprall oder eine Kollision erkennt.

Verwendung:

robot.inertial.crashed(callback, arg)

Parameter

Beschreibung

callback

Eine Funktion, die zuvor definiert wurde und ausgeführt wird, wenn eine Kollision erkannt wird.

arg

Optional. Ein Tupel mit Argumenten, die an die Callback-Funktion übergeben werden sollen. Weitere Informationen finden Sie unter Verwendung von Funktionen mit Parametern.

# Define what happens when a crash occurs
def crash_detected():
    # Stop all movement and indicate a crash occurred
    robot.screen.print("Crash detected")
    robot.stop_all_movement()

robot.inertial.crashed(crash_detected)

# Drive forward until crash
robot.move_at(0, 100)

set_crash_sensitivity#

set_crash_sensitivity passt an, wie viel plötzliche Beschleunigung erforderlich ist, damit der Roboter einen Zusammenstoß erkennt.

Usage:
robot.inertial.set_crash_sensitivity(sensitivity)

Parameter

Beschreibung

sensitivity

Die Crash-Empfindlichkeit:

  • HIGH – Höchste Empfindlichkeit; erkennt kleinere Stöße und löst bei 1G aus.
  • NORMAL – Standardempfindlichkeit; erkennt mittlere Stöße und löst bei 1,5G aus.
  • LOW – Geringste Empfindlichkeit; erkennt stärkere Stöße und löst bei 2G aus.

def crashed_callback():
    robot.stop_all_movement()
    robot.sound.play(CRASH)

# system event handlers
robot.inertial.crashed(crashed_callback)
# add 15ms delay to make sure events are registered correctly.
wait(15, MSEC)

# Detect a crash at a slow velocity.
robot.set_move_velocity(35, PERCENT)
robot.inertial.set_crash_sensitivity(HIGH)
robot.move_at(0)

Bewegung#

get_acceleration#

Die Beschleunigung gibt an, wie schnell der Roboter beschleunigt oder abbremst. get_acceleration gibt die Beschleunigung des Roboters auf der ausgewählten Achse als Gleitkommazahl zurück, von -4,00 G bis 4,00 G.

G die man im Ruhezustand durch die Schwerkraft spürt.

Der Wert kann positiv oder negativ sein, abhängig von der Beschleunigungsrichtung auf der ausgewählten Achse. In AIM sind die Achsenoptionen nach den Richtungen des Roboters benannt: FORWARD, RIGHTWARDund DOWNWARD.

Ein VEX AIM Programmierroboter mit Richtungspfeilen, die von der Mitte des Roboters ausgehen. Ein grüner Pfeil mit der Aufschrift „Vorwärts“ zeigt von der Vorderseite des Roboters, ein blauer Pfeil mit der Aufschrift „Abwärts“ von der Unterseite des Roboters und ein roter Pfeil mit der Aufschrift „Rechts“ von der Seite des Roboters unterhalb des VEX-Logos.

Verwendung:

robot.inertial.get_acceleration(type)

Parameter

Beschreibung

type

Die Achsen zur Beschleunigungsmessung:

  • DOWNWARD – Misst die Beschleunigung in vertikaler Richtung des Roboters.
  • FORWARD – Misst die Beschleunigung in Längsrichtung des Roboters.
  • RIGHTWARD – Misst die Beschleunigung in Seitwärtsrichtung des Roboters.

# Display the acceleration as the robot begins to move
robot.screen.set_cursor(4,1)
sitting_accel = robot.inertial.get_acceleration(RIGHTWARD)
robot.screen.print(f"Resting: {sitting_accel:.2f}")
wait(0.5, SECONDS)
robot.screen.next_row()

robot.move_at(90, 100)
wait(0.1, SECONDS)

robot.screen.print(f"Startup: {robot.inertial.get_acceleration(RIGHTWARD):.2f}")

get_turn_rate#

Die Drehgeschwindigkeit gibt an, wie schnell sich der Roboter dreht. get_turn_rate gibt die Drehgeschwindigkeit des Roboters in Grad pro Sekunde \(dps\) als Gleitkommazahl im Bereich von -1000,00 bis 1000,00 dps zurück.

Der Wert kann positiv oder negativ sein, je nachdem, in welche Richtung sich der Roboter um die gewählte Achse dreht. Die Abbildung unten zeigt mithilfe von Pfeilen die Richtung der positiven Drehung für Rollen, Nicken und Gieren.

Ein VEX AIM Programmierroboter mit Richtungspfeilen, die von der Mitte des Roboters ausgehen. Ein grüner Pfeil mit der Bezeichnung „Roll“ geht von der Vorderseite des Roboters aus, um den sich ein schwarzer, gebogener Pfeil gegen den Uhrzeigersinn dreht. Ein blauer Pfeil mit der Bezeichnung „Gieren“ geht von der Unterseite des Roboters aus, um den sich ein schwarzer, gebogener Pfeil im Uhrzeigersinn dreht. Und ein roter Pfeil mit der Bezeichnung „Neigen“ geht von der Seite des Roboters unterhalb des VEX-Logos aus, um den sich ein schwarzer, gebogener Pfeil gegen den Uhrzeigersinn dreht.

Usage:
robot.inertial.get_turn_rate(axis)

Parameter

Beschreibung

axis

Welche Ausrichtung soll zurückkehren:

  • YAW
  • ROLL
  • PITCH
# Display the gyro rate as the robot is rotated by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_turn_rate(YAW))
    wait(50, MSEC)

Kalibrierung#

Die Kalibrierung hilft dem Inertialsensor, Drehungen korrekt zu messen, indem sie Sensorauschen und -drift über einen Zeitraum von zwei Sekunden misst und kompensiert. Während dieser Zeit muss der Roboter absolut still auf einer stabilen Oberfläche stehen. Bewegungen während der Kalibrierung können zu ungenauen Ergebnissen führen.

VEX-Roboter versuchen, sich beim Start automatisch zu kalibrieren, indem sie warten, bis sie keine Bewegung mehr erkennen. Wird der Roboter jedoch während des Startvorgangs getragen oder bewegt, kann es vorkommen, dass der Sensor nicht ordnungsgemäß kalibriert oder falsche Kalibrierungsergebnisse liefert.

Wenn Ihr Projekt stark von einer präzisen Kursbestimmung abhängt oder Sie konsistente und wiederholbare Drehungen benötigen, kann der Aufruf von calibrate am Anfang Ihres Codes hilfreich sein. Es empfiehlt sich, während der Kalibrierung eine Meldung wie „Kalibrierung…“ auf dem Bildschirm des Roboters anzuzeigen und diese anschließend auf „Kalibrierung abgeschlossen.“ zu aktualisieren, um sich (und alle anderen Benutzer des Roboters) daran zu erinnern, dass der Roboter während dieser Zeit stillstehen muss.

calibrate#

calibrate kalibriert das Gyroskop. Die Kalibrierung hilft dem Inertialsensor, Drehungen korrekt zu messen, indem sie Sensorauschen und -drift über einen Zeitraum von 2 Sekunden misst und kompensiert. Während dieser Zeit muss der Roboter auf einer stabilen Oberfläche absolut stillstehen. Bewegungen während der Kalibrierung können zu ungenauen Ergebnissen führen.

VEX-Roboter versuchen, sich beim Start automatisch zu kalibrieren, indem sie warten, bis sie keine Bewegung mehr erkennen. Wird der Roboter jedoch während des Startvorgangs getragen oder bewegt, kann es vorkommen, dass der Sensor nicht ordnungsgemäß kalibriert oder falsche Kalibrierungsergebnisse liefert.

Usage:
robot.inertial.calibrate()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Calibrate the gyro before moving
robot.inertial.calibrate()
robot.screen.show_emoji(THINKING)
wait(2, SECONDS)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)

is_calibrating#

is_calibrating gibt einen booleschen Wert zurück, der angibt, ob der Inertialsensor kalibriert wird.

  • True — Der Inertialsensor kalibriert.

  • False — Der Inertialsensor kalibriert nicht.

Usage:
robot.inertial.is_calibrating()

Parameter

Beschreibung

Diese Methode hat keine Parameter.

# Move after the calibration is completed
robot.inertial.calibrate()
while robot.inertial.is_calibrating():
    robot.screen.show_emoji(THINKING)
    wait(50, MSEC)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)