Movimiento#

Introducción#

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.

Cada motor se configura en la ventana Dispositivos. Según la compilación, los nombres de los motores pueden variar. Por ejemplo, la compilación Competition Advanced 2.0 tiene un motor llamado arm_motorUn robot personalizado puede usar nombres de motor diferentes.

Por defecto, FORWARD hace girar un motor en sentido antihorario, y REVERSE lo hace girar en sentido horario. Si un motor está configurado para girar en sentido inverso en la ventana Dispositivos, se invertirán esas direcciones.

Un motor VEX GO que muestra la dirección de avance indicada por un signo más y una flecha que indica que está girando hacia la izquierda, o en sentido contrario a las agujas del reloj. Un motor VEX GO que muestra la dirección inversa indicada por un signo menos y una flecha que indica que está girando hacia la derecha, o en el sentido de las agujas del reloj.

Existen muchas maneras de programar motores. A continuación se muestra una lista de todos los métodos de movimiento:

Acciones: Detener y hacer girar los motores.

  • spin — Hace girar un motor hacia adelante o hacia atrás indefinidamente.

  • spin_for — Hace girar un motor durante una distancia específica.

  • spin_to_position — Hace girar un motor a una posición específica.

  • stop — Detiene el giro de un motor.

Motadores: Ajuste la configuración del motor.

  • set_velocity — Indica a un motor a qué velocidad debe girar.

  • set_max_torque — Establece la fuerza con la que un motor puede empujar mientras gira.

  • set_position — Cambia la posición actual del motor a un nuevo valor.

  • set_stopping — Establece cómo un motor dejará de moverse: frenando, rodando por inercia o manteniéndose en reposo.

  • set_timeout — Establece cuánto tiempo intentará un motor terminar un movimiento.

Obtenedores: compruebe el estado del motor.

  • get_position — Devuelve la posición actual del motor.

  • get_velocity — Devuelve la velocidad de giro del motor, como un porcentaje de -100% a 100%.

  • get_current — Devuelve cuánta energía está usando el motor de la batería, como un porcentaje del 0% al 100%.

  • is_stopped — Devuelve si el motor ha terminado de moverse, como un valor booleano.

  • is_moving — Devuelve si el motor está girando, como un valor booleano.

Comportamiento#

spin#

spin spins a motor forward or reverse forever. The motor will continue to spin until it is given another action, like spinning in a different direction or stopping.

Usage:
arm_motor.spin(direction)

Parámetros

Descripción

direction

La dirección en la que gira el motor: FORWARD o REVERSE.

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

spin_for hace girar un motor una distancia específica. El giro es relativo a la posición actual del motor. El proyecto esperará a que el motor termine de girar antes de ejecutar la siguiente línea de código.

Usage:
arm_motor.spin_for(direction, angle, units, wait)

Parámetros

Descripción

direction

La dirección en la que gira el motor: FORWARD o REVERSE.

angle

La distancia que gira el motor. DEGREES usar números enteros. TURNS puede usar números enteros o decimales.

units

Opcional. La unidad de distancia: DEGREES (predeterminado) o TURNS.

wait

Opcional. wait=True (predeterminado) hace que el proyecto espere hasta que el motor termine de girar antes de ejecutar la siguiente línea de código. wait=False hace que la siguiente línea de código se ejecute inmediatamente.

# 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 hace girar un motor a una posición específica.

La posición de un motor es cuánto ha girado, medido en DEGREES o TURNSUna vuelta equivale a 360 grados. Al inicio de un proyecto, la posición del motor se establece en 0 grados. La posición del motor también se puede establecer utilizando el método set_position.

Los valores de posición son absolutos. Esto significa que la dirección de giro depende de la posición actual del motor.

Por ejemplo, si el motor parte de 0 grados y gira hasta una posición de 720 grados, girará dos vueltas hacia adelante. Si luego gira hasta una posición de 360 ​​grados, girará una vuelta hacia atrás, ya que 360 ​​es menor que 720.

Usage:
arm_motor.spin_to_position(angle, units, wait)

Parámetros

Descripción

angle

El valor de posición al que girará el motor. DEGREES usar enteros. TURNS puede usar enteros o decimales.

units

Opcional. La unidad de posición: DEGREES (predeterminado) o TURNS.

wait

Opcional. wait=True (predeterminado) hace que el proyecto espere hasta que el motor termine de girar antes de ejecutar la siguiente línea de código. wait=False hace que la siguiente línea de código se ejecute inmediatamente.

# 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 detiene el giro de un motor.

Usage:
arm_motor.stop()

Parámetros

Descripción

Este método no tiene parámetros.

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

Mutadores#

set_velocity#

El valor set_velocity indica a un motor qué tan rápido debe girar. Un porcentaje mayor hace que el motor gire más rápido y un porcentaje menor hace que gire más lento.

Cada proyecto comienza con cada motor girando al 50% de su velocidad máxima por defecto.

Nota: Una mayor velocidad hace que el motor gire más rápido, pero puede ser menos preciso. Una menor velocidad hace que el motor gire más lento, pero puede ser más preciso.

Usage:
arm_motor.set_velocity(velocity)

Parámetros

Descripción

velocity

La velocidad de giro va del 0% al 100%. Puede ser un entero integer decimal (float).

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

El par motor es una fuerza de giro. Indica la fuerza con la que un motor puede empujar o tirar al girar.

set_max_torque establece el par máximo que un motor puede utilizar.

Un porcentaje mayor permite que el motor empuje con más fuerza, como al levantar un objeto pesado. Un porcentaje menor limita la fuerza que puede ejercer el motor. Esto puede ayudar a proteger al robot si el motor se atasca o llega al límite de su recorrido.

Cada proyecto comienza con el par motor de cada motor al 50% por defecto.

Usage:
arm_motor.set_max_torque(value)

Parámetros

Descripción

value

El par máximo que el motor puede usar del 0% al 100%. Esto puede ser un entero integer o decimal (float).

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

La posición de un motor es cuánto ha girado, medido en DEGREES o TURNSUna vuelta es igual a 360 grados. set_position cambia la posición actual del motor a un nuevo valor.

Por ejemplo, si un motor ha girado 180 grados, al ajustar la posición a 0 grados, dicha posición volverá a su estado original. A partir de ahí, el motor podrá girar a posiciones que dependan de ese nuevo valor.

Usage:
arm_motor.set_position(position, units)

Parámetros

Descripción

position

El valor de posición que se debe establecer para el motor. DEGREES usar números enteros. TURNS puede usar números enteros o decimales.

units

Opcional. La unidad de posición: DEGREES (predeterminado) o TURNS.

# 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 establece cómo se detendrá un motor: frenando, rodando por inercia o manteniéndose en reposo.

Usage:
arm_motor.set_stopping(mode)

Parámetros

Descripción

mode

Cómo se detendrá el motor:

  • BRAKE — Se detiene inmediatamente.
  • COAST — Disminuye la velocidad hasta detenerse.
  • HOLD — Se detiene inmediatamente y mantiene la posición del motor.

Por ejemplo, si se utiliza una compilación Competition Advanced 2.0 y se configura arm_motor en HOLD, el motor mantendrá el brazo en su posición actual hasta que se produzca otro movimiento. Esto significa que el motor trabajará contra la gravedad para mantener el brazo en el aire si se detuvo con el brazo elevado.

Si no se utiliza este método, el motor utilizará BRAKE al detenerse.

# 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 establece cuánto tiempo intentará un motor completar un movimiento. Si el motor no puede terminar en ese tiempo, dejará de intentarlo y pasará a la siguiente línea de código. Esto evita que el motor se quede atascado en un movimiento.

Usage:
arm_motor.set_timeout(value, units)

Parámetros

Descripción

value

La cantidad de tiempo que el motor puede intentar para completar un movimiento. Esto puede ser un entero positivo integer ) o un decimal (float).

units

Opcional. La unidad de tiempo: SECONDS (predeterminado) o MSEC (milisegundos).

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

Captadores#

get_position#

La posición de un motor es cuánto ha girado, medido en DEGREES o TURNSUna vuelta es igual a 360 grados. get_position devuelve la posición actual del motor.

Al inicio del proyecto, la posición del motor se establece en 0 grados. Si el motor gira una vuelta hacia adelante, la posición será de 360 ​​grados o 1 vuelta. Si el motor gira en la dirección opuesta, la posición será negativa.

Usage:
arm_motor.get_position(units)

Parámetros

Descripción

units

Opcional. La unidad para devolver la posición del motor en: DEGREES (predeterminado) o TURNS.

# 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 devuelve la velocidad de giro del motor, como un porcentaje de -100% a 100%.

Un valor positivo significa que el motor gira hacia adelante. Un valor negativo significa que el motor gira hacia atrás.

Usage:
arm_motor.get_velocity()

Parámetros

Descripción

Este método no tiene parámetros.

# 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 devuelve cuánta energía está usando el motor de la batería, como un porcentaje del 0% al 100%.

Un valor de corriente más alto significa que el motor está consumiendo más energía. Esto puede ocurrir cuando el motor levanta algo pesado, empuja contra un objeto o intenta moverse cuando está atascado.

Usage:
arm_motor.get_current()

Parámetros

Descripción

Este método no tiene parámetros.

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

is_stopped devuelve un valor booleano que indica si el motor ha terminado de moverse. Esto se puede usar para controlar la sincronización de otros comportamientos en función del movimiento del motor.

  • True — El motor ha terminado de moverse.

  • False — El motor sigue en movimiento.

Este método funciona junto con los siguientes métodos de movimiento que tienen el parámetro wait : spin_for y spin_to_position.

Usage:
arm_motor.is_stopped()

Parámetros

Descripción

Este método no tiene parámetros.

# 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 devuelve un valor booleano que indica si el motor está girando. Esto se puede usar para controlar la sincronización de otros comportamientos en función del movimiento del motor.

  • True — El motor está girando.

  • False — El motor no está girando.

Este método funciona junto con los siguientes métodos de movimiento que tienen el parámetro wait : spin_for y spin_to_position.

Usage:
arm_motor.is_moving()

Parámetros

Descripción

Este método no tiene parámetros.

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