Inercial#

Introducción#

El robot de codificación VEX AIM cuenta con un sensor inercial integrado. Este sensor mide cómo se mueve y gira el robot.

El sensor inercial utiliza dos componentes para lograr esto. El giroscopio mide los giros, como la dirección, la rotación, la guiñada, el balanceo, la inclinación y la velocidad de giro del robot. El acelerómetro mide los cambios en el movimiento, como acelerar, desacelerar o detenerse repentinamente durante una colisión.

Los métodos inerciales pueden utilizarse para rastrear giros, medir la aceleración, detectar colisiones, restablecer los valores de rumbo o rotación y calibrar el sensor.

A continuación se muestra una lista de todos los métodos:

Orientación: Obtenga y restablezca la orientación, el giro o la inclinación del robot.

  • get_rotation — Returns how far the robot has turned.

  • get_heading — Returns the direction the robot is facing, from 0 to 359.99 degrees.

  • get_yaw — Returns the robot’s yaw angle.

  • get_roll — Returns the robot’s roll angle.

  • get_pitch — Returns the robot’s pitch angle.

  • reset_rotation — Resets the robot’s current rotation to 0 degrees.

  • reset_heading — Resets the robot’s current heading to 0 degrees.

  • set_heading — Sets the robot’s current heading to a new heading value.

Choque: Detectar colisiones.

  • crashed — Registers a function to run when a crash is detected.

  • set_crash_sensitivity — Sets how sensitive crash detection is to impacts.

Movimiento: Medir la aceleración y la velocidad de giro.

  • get_acceleration — Returns how quickly the robot is speeding up or slowing down on the selected axis.

  • get_turn_rate — Returns how fast the robot is rotating on the selected axis.

Calibración: Gestionar la calibración del sensor.

  • calibrate — Calibrates the Inertial Sensor.

  • is_calibrating — Returns whether the Inertial Sensor is currently calibrating.

Orientación#

get_rotation#

Rotation is how much the robot has turned, measured in degrees. Unlike heading, rotation can increase past 359.99 degrees or decrease below 0 degrees. At the beginning of a project, the rotation value is set to 0 degrees. get_rotation returns the robot’s current rotation as a float.

Girar a la derecha aumenta la rotación, y girar a la izquierda la disminuye. Por ejemplo, dos giros completos a la derecha producen una rotación de 720 grados. Un giro completo a la izquierda desde 0 grados produce una rotación de -360 grados.

Usage:
robot.inertial.get_rotation()

Parámetros

Descripción

Este método no tiene parámetros.

# 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#

A heading is the direction the robot is facing, measured in degrees from 0 to 359.99. get_heading returns the robot’s current heading as a float.

La orientación inicial es de 0 grados. Si el robot gira más allá de los 359,99 grados, la orientación vuelve a 0 grados.

Usage:
robot.inertial.get_heading()

Parámetros

Descripción

Este método no tiene parámetros.

# 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#

Yaw describes the robot turning left or right around its vertical axis. get_yaw returns the robot’s yaw angle in the range -180.00 to 180.00 degrees as a float.

La imagen a continuación utiliza flechas para mostrar la dirección de rotación positiva para guiñada.

Un robot de codificación VEX AIM con una flecha azul que apunta hacia abajo desde el centro del robot. Alrededor de la flecha azul, una flecha curva negra apunta en el sentido de las agujas del reloj, indicando la dirección positiva del giro.

Usage:
robot.inertial.get_yaw()

Parámetros

Descripción

Este método no tiene parámetros.

# 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 describes the robot tilting side to side. get_roll returns the robot’s roll angle in the range -180.00 to 180.00 degrees as a float.

La imagen a continuación utiliza flechas para mostrar la dirección de rotación positiva del rollo.

Un robot de codificación VEX AIM con una flecha verde que se extiende hacia el frente del robot, en el centro del sensor de visión de IA. Alrededor de la flecha verde, una flecha negra se curva en sentido contrario a las agujas del reloj, indicando la dirección positiva para el balanceo.

Usage:
robot.inertial.get_roll()

Parámetros

Descripción

Este método no tiene parámetros.

# 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 describes the robot tilting forward or backward. get_pitch returns the robot’s pitch angle in the range -90.00 to 90.00 degrees as a float.

La imagen a continuación utiliza flechas para mostrar la dirección de rotación positiva del paso.

Un robot de codificación VEX AIM con una flecha roja que sobresale del lateral, debajo del logotipo de VEX. Alrededor de la flecha roja, una flecha negra se curva en sentido contrario a las agujas del reloj, indicando la dirección positiva para el cabeceo.

Usage:
robot.inertial.get_pitch()

Parámetros

Descripción

Este método no tiene parámetros.

# 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 resets the robot’s current rotation to 0 degrees.

Una vez utilizado este método, el robot realiza el seguimiento de los giros futuros a partir del nuevo valor de rotación de 0 grados.

Usage:
robot.inertial.reset_rotation()

Parámetros

Descripción

Este método no tiene parámetros.

# 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 resets the robot’s current heading to 0 degrees.

Tras utilizar este método, la dirección actual del robot se convierte en la nueva dirección de 0 grados.

Usage:
robot.inertial.reset_heading()

Parámetros

Descripción

Este método no tiene parámetros.

# 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#

A heading is the direction the robot is facing, measured in degrees from 0 to 359.99. set_heading changes the robot’s current heading to a new heading value.

Por ejemplo, si el robot ha girado para mirar hacia la derecha, al establecer la orientación a 0 grados, esa posición mirando hacia la derecha se convierte en la nueva dirección de 0 grados. A partir de ahí, el robot puede seguir otras direcciones basándose en esa nueva orientación.

Usage:
robot.inertial.set_heading(heading)

Parámetros

Descripción

heading

El valor de rumbo, en grados, que se debe configurar para el robot. Este valor puede estar entre 0 y 359,99.

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

Chocar#

crashed#

crashed registers a function to be called when the robot detects a sudden impact or collision.

Uso:

robot.inertial.crashed(callback, arg)

Parámetros

Descripción

callback

Una función que se define previamente para ejecutarse cuando se detecta una colisión.

arg

Opcional. Una tupla que contiene los argumentos que se pasarán a la función de devolución de llamada. Consulte Uso de funciones con parámetros para obtener más información.

# 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 adjusts how much sudden acceleration is needed for the robot to detect a crash.

Usage:
robot.inertial.set_crash_sensitivity(sensitivity)

Parámetros

Descripción

sensitivity

The crash sensitivity:

  • HIGH — Most sensitive; detects smaller impacts and triggers at 1G.
  • NORMAL — Default sensitivity; detects moderate impacts and triggers at 1.5G.
  • LOW — Least sensitive; detects stronger impacts and triggers at 2G.

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)

Movimiento#

get_acceleration#

Acceleration is how quickly the robot is speeding up or slowing down. get_acceleration returns the robot’s acceleration on the selected axis, from -4.00 G to 4.00 G, as a float.

A G is a unit used to measure acceleration. 1 G is about the acceleration you feel from gravity while sitting still.

The value can be positive or negative depending on the direction of acceleration on the selected axis. On AIM, the axis options are named for directions on the robot: FORWARD, RIGHTWARD, and DOWNWARD.

Un robot de codificación VEX AIM con flechas direccionales que se extienden desde el centro del robot. Una flecha verde etiquetada como "adelante" se extiende desde la parte frontal del robot, una flecha azul etiquetada como "abajo" se extiende desde la parte inferior del robot y una flecha roja etiquetada como "a la derecha" se extiende desde el lateral del robot debajo del logotipo de VEX.

Uso:

robot.inertial.get_acceleration(type)

Parámetros

Descripción

type

The axis to measure acceleration on:

  • DOWNWARD — Measures acceleration along the robot’s vertical direction.
  • FORWARD — Measures acceleration along the robot’s front-to-back direction.
  • RIGHTWARD — Measures acceleration along the robot’s side-to-side direction.

# 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#

Turn rate is how fast the robot is rotating. get_turn_rate returns the robot’s turning rate in degrees per second \(dps\) as a float, from -1000.00 to 1000.00 dps.

El valor puede ser positivo o negativo según la dirección de rotación del robot en el eje seleccionado. La imagen a continuación utiliza flechas para mostrar la dirección de rotación positiva para el balanceo, el cabeceo y la guiñada.

Un robot de codificación VEX AIM con flechas direccionales que se extienden desde el centro del robot. Una flecha verde etiquetada como "roll" se extiende desde la parte frontal del robot con una flecha curva negra que apunta en sentido contrario a las agujas del reloj a su alrededor. Una flecha azul etiquetada como "Yaw" se extiende desde la parte inferior del robot con una flecha curva negra que apunta en el sentido de las agujas del reloj a su alrededor. Y una flecha roja etiquetada como "Pitch" se extiende desde el lateral del robot debajo del logotipo de VEX, con una flecha curva negra que apunta en sentido contrario a las agujas del reloj a su alrededor.

Usage:
robot.inertial.get_turn_rate(axis)

Parámetros

Descripción

axis

Which orientation to return:

  • 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)

Calibración#

La calibración ayuda al sensor inercial a medir los giros correctamente, compensando el ruido y la deriva del sensor durante un período de 2 segundos. Durante este tiempo, el robot debe permanecer completamente inmóvil sobre una superficie estable. El movimiento durante la calibración puede producir resultados inexactos.

Los robots VEX intentan calibrarse automáticamente al iniciarse, esperando hasta que no detecten movimiento. Sin embargo, si el robot se transporta o se mueve durante el inicio, el sensor podría no calibrarse correctamente o generar una calibración incorrecta.

If your project relies heavily on having an accurate heading, or if you need consistent and repeatable turns, calling calibrate at the beginning of your code can help. It’s good practice to display a message like “Calibrating…” on the robot’s screen during calibration, then update it to “Calibration complete.” afterward to remind you (and anyone else using the robot) that the robot must remain motionless during this period.

calibrate#

calibrate calibrates the gyro. Calibration helps the Inertial Sensor measure turns correctly by measuring and compensating for sensor noise and drift over a 2-second period. During this time, the robot must remain completely still on a stable surface. Movement during calibration can produce inaccurate results.

Los robots VEX intentan calibrarse automáticamente al iniciarse, esperando hasta que no detecten movimiento. Sin embargo, si el robot se transporta o se mueve durante el inicio, el sensor podría no calibrarse correctamente o generar una calibración incorrecta.

Usage:
robot.inertial.calibrate()

Parámetros

Descripción

Este método no tiene parámetros.

# 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 returns a Boolean indicating whether the Inertial Sensor is calibrating.

  • True — The Inertial Sensor is calibrating.

  • False — The Inertial Sensor is not calibrating.

Usage:
robot.inertial.is_calibrating()

Parámetros

Descripción

Este método no tiene parámetros.

# 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)