Inercial#

Introducción#

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

El sensor inercial utiliza dos partes para hacer esto. El giroscopio mide el giro, como el rumbo, la rotación, la guiñada, el balanceo, el cabeceo y la velocidad de giro del robot. El acelerómetro mide los cambios en el movimiento, como acelerar, desacelerar o detenerse repentinamente durante un choque.

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

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

Orientación: obtén y restablece la orientación, el giro o la inclinación del robot.

  • get_rotation — Devuelve hasta dónde ha girado el robot.

  • get_heading — Devuelve la dirección hacia la que se dirige el robot, de 0 a 359,99 grados.

  • get_yaw — Devuelve el ángulo de guiñada del robot.

  • get_roll — Devuelve el ángulo de balanceo del robot.

  • get_pitch — Devuelve el ángulo de cabeceo del robot.

  • reset_rotation — Restablece la rotación actual del robot a 0 grados.

  • reset_heading — Restablece el rumbo actual del robot a 0 grados.

  • set_heading — Establece el encabezado actual del robot en un nuevo valor de encabezado.

Accidente: detecta colisiones.

  • crashed — Registra una función para que se ejecute cuando se detecta un bloqueo.

  • set_crash_sensitivity: establece la sensibilidad de la detección de accidentes a los impactos.

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

  • get_acceleration — Devuelve la rapidez con la que el robot está acelerando o desacelerando en el eje seleccionado.

  • get_turn_rate — Devuelve qué tan rápido está girando el robot en el eje seleccionado.

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

  • calibrate — Calibra el sensor inercial.

  • is_calibrating — Devuelve si el sensor inercial se está calibrando actualmente.

Orientación#

get_rotation#

La rotación es cuánto ha girado el robot, medida en grados. A diferencia del rumbo, la rotación puede aumentar más de 359,99 grados o disminuir por debajo de 0 grados. Al comienzo de un proyecto, el valor de rotación se establece en 0 grados. get_rotation devuelve la rotación actual del robot como un flotador.

Girar a la derecha aumenta la rotación y girar a la izquierda disminuye la rotación. Por ejemplo, hacer dos giros completos a la derecha devolverá una rotación de 720 grados. Girar una vuelta completa a la izquierda desde 0 grados devolverá 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#

Un rumbo es la dirección hacia la que se dirige el robot, medida en grados de 0 a get_heading devuelve el rumbo actual del robot como un flotador.

El rumbo inicial es 0 grados. Si el robot gira más de 359,99 grados, el rumbo 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#

La guiñada describe el robot girando a la izquierda o a la derecha alrededor de su eje vertical. get_yaw devuelve el ángulo de guiñada del robot en el rango de -180.00 a 180.00 grados como un flotador.

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

Un robot codificador 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 de guiñada positiva.

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 describe la inclinación del robot de lado a lado. get_roll devuelve el ángulo de balanceo del robot en el rango de -180.00 a 180.00 grados como un flotador.

La siguiente imagen usa flechas para mostrar la dirección de rotación positiva para el rollo.

Un robot codificador VEX AIM con una flecha verde que se extiende por la parte frontal del robot, en el centro del sensor AI Vision. Alrededor de la flecha verde, una flecha negra se curva en sentido contrario a las agujas del reloj, indicando la dirección positiva para rodar.

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#

El cabeceo describe la inclinación del robot hacia adelante o hacia atrás. get_pitch devuelve el ángulo de cabeceo del robot en el rango de -90.00 a 90.00 grados como un flotador.

La siguiente imagen utiliza flechas para mostrar la dirección de rotación positiva para el cabeceo.

Un robot codificador VEX AIM con una flecha roja que se extiende por el costado del robot 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 del 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 restablece la rotación actual del robot a 0 grados.

Después de utilizar este método, el robot realiza un 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 restablece el rumbo actual del robot a 0 grados.

Después de utilizar este método, la dirección actual del robot se convierte en el nuevo rumbo 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#

Un rumbo es la dirección hacia la que mira el robot, medida en grados de 0 a 359.99. set_heading cambia el rumbo actual del robot a un nuevo valor de rumbo.

Por ejemplo, si el robot ha girado hacia la derecha, establecer el rumbo en 0 grados hace que esa posición orientada hacia la derecha sea la nueva de 0 grados. Luego, el robot puede rastrear otros encabezados en función de esa nueva dirección.

Usage:
robot.inertial.set_heading(heading)

Parámetros

Descripción

heading

El valor de rumbo, en grados, a establecer para el robot. Este puede ser un valor de 0 a 359,99.

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

Accidente#

crashed#

crashed registra una función que se llamará cuando el robot detecte un impacto o colisión repentina.

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 argumentos para pasar 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 ajusta cuánta aceleración repentina se necesita para que el robot detecte un choque.

Usage:
robot.inertial.set_crash_sensitivity(sensitivity)

Parámetros

Descripción

sensitivity

La sensibilidad al choque:

  • HIGH — Más sensible; detecta impactos más pequeños y se dispara a 1G.
  • NORMAL — Sensibilidad predeterminada; detecta impactos moderados y se dispara a 1,5 G.
  • LOW — Menos sensible; detecta impactos y disparos más fuertes en 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#

La aceleración es la rapidez con la que el robot está acelerando o desacelerando. get_acceleration devuelve la aceleración del robot en el eje seleccionado, de -4.00 G a 4.00 G, como un flotador.

Una G es una unidad utilizada para medir la aceleración. 1 G se refiere a la aceleración que sientes por la gravedad mientras estás sentado quieto.

El valor puede ser positivo o negativo dependiendo de la dirección de la aceleración en el eje seleccionado. En AIM, las opciones de eje se nombran según las direcciones del robot: FORWARD, RIGHTWARDy DOWNWARD.

Un robot codificador VEX AIM con flechas direccionales que se extienden desde el centro del robot. Una flecha verde etiquetada hacia adelante se extiende desde la parte frontal del robot, una flecha azul etiquetada hacia abajo se extiende desde la parte inferior del robot y una flecha roja etiquetada hacia la derecha se extiende desde el lado del robot debajo del logotipo de VEX.

Uso:

robot.inertial.get_acceleration(type)

Parámetros

Descripción

type

El eje para medir la aceleración en:

  • DOWNWARD — Mide la aceleración a lo largo de la dirección vertical del robot.
  • FORWARD — Mide la aceleración a lo largo de la dirección de adelante hacia atrás del robot.
  • RIGHTWARD — Mide la aceleración a lo largo de la dirección de lado a lado del robot.

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

La velocidad de giro es la velocidad de rotación del robot. get_turn_rate devuelve la velocidad de giro del robot en grados por segundo \(dps\) como un flotador, de -1000.00 a 1000.00 dps.

El valor puede ser positivo o negativo dependiendo de la dirección en la que gire el robot sobre el eje seleccionado. La siguiente imagen usa flechas para mostrar la dirección de rotación positiva para balanceo, cabeceo y guiñada.

Un robot codificador VEX AIM con flechas direccionales que se extienden desde el centro del robot. Una flecha verde etiquetada como rollo 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 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 lado del robot debajo del logotipo de VEX, con una flecha curva negra apuntando en sentido contrario a las agujas del reloj a su alrededor.

Usage:
robot.inertial.get_turn_rate(axis)

Parámetros

Descripción

axis

Qué orientación volver:

  • 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 midiendo y compensando el ruido del sensor y la deriva durante un período de 2 segundos. Durante este tiempo, el robot debe permanecer completamente inmóvil en una superficie estable. El movimiento durante la calibración puede producir resultados inexactos.

Los robots VEX intentan calibrarse automáticamente al arrancar, esperando hasta que no detecten ningún movimiento. Sin embargo, si el robot se transporta o se mueve durante el arranque, el sensor puede no calibrarse correctamente o producir una calibración incorrecta.

Si su proyecto depende en gran medida de tener un encabezado preciso, o si necesita turnos consistentes y repetibles, llamar calibrate a Calibrate al comienzo de su código puede ayudar. Es una buena práctica mostrar un mensaje como “Calibración…” en la pantalla del robot durante la calibración y luego actualizarlo a “Calibración completa” para recordarle a usted (y a cualquier otra persona que use el robot) que el robot debe permanecer inmóvil durante este período.

calibrate#

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

Los robots VEX intentan calibrarse automáticamente al arrancar, esperando hasta que no detecten ningún movimiento. Sin embargo, si el robot se transporta o se mueve durante el arranque, el sensor puede no calibrarse correctamente o producir 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 devuelve un booleano que indica si el sensor inercial está calibrando.

  • True : el sensor inercial se está calibrando.

  • False — El sensor inercial no se está calibrando.

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)