Movimento#

Introdução#

O robô de programação VEX AIM utiliza um sistema de transmissão holonómico para se mover para a frente, para trás, para a esquerda, para a direita ou em ângulo, além de poder rodar de forma independente. Os métodos de movimento controlam a forma como o robô se move e gira, a velocidade do seu movimento e como as suas posições x e y são rastreadas.

Mostrador de bússola circular de 0 a 315 graus a rodear um visor cinzento-escuro com ecrã azul-marinho. A parte da frente do robô está virada para 0 graus no mostrador da bússola.

Segue-se uma lista dos métodos disponíveis:

Ações — Mova e rode o robô.

  • move_at — Move o robô num ângulo específico para sempre.

  • move_for — Move o robô num ângulo específico por uma distância específica.

  • move_with_vectors — Move o robô utilizando valores x, y e de rotação baseados em vetores.

  • turn — Vira o robô para a esquerda ou para a direita para sempre.

  • turn_for — Roda o robô para a esquerda ou para a direita de um número específico de graus.

  • turn_to — Vira o robô para enfrentar uma direcção específica.

  • stop_all_movement — Interrompe todo o movimento do robô.

Mutadores — Definem os valores de movimento do robô.

Getters — Devolvem o estado e a posição do robô.

Ações#

move_at#

O comando move_at move_at move o robô indefinidamente num ângulo específico. O ângulo é relativo à posição atual do robô. O robô continuará a mover-se até receber outra ação, como mover-se num ângulo diferente, rodar ou parar.

Utilização:

robot.move_at(angle, velocity, units)

Parâmetros

Descrição

angle

O ângulo, em graus, que o robô se desloca. Pode ser um número inteiro ou decimal de -360 a 360.

velocity

Opcional. A velocidade de movimento, de 0% a 100% quando se utiliza PERCENT, ou de 0 a 200 milímetros por segundo quando se utiliza MMPSPode ser um número inteiro ou decimal (float). Se não for fornecida qualquer velocidade, o robô move-se à velocidade de movimento atual.

units

Opcional. A unidade de velocidade: PERCENT (padrão) ou MMPS (milímetros por segundo).

# Move right, then move forward and stop.
robot.move_at(90)
wait(1,SECONDS)
robot.move_at(0)
wait(1,SECONDS)
robot.stop_all_movement()

# Move right slowly, move in reverse quickly and stop.
robot.move_at(90, 25)
wait(2, SECONDS)
robot.move_at(180, 100, PERCENT)
wait(1, SECONDS)
robot.stop_all_movement()

# Move diagonally to the right and stop.
robot.move_at(45.33)
wait(1,SECONDS)
robot.stop_all_movement()

move_for#

O comando move_for move o robô num ângulo específico por uma distância específica. O ângulo é relativo à posição atual do robô. O projeto aguardará até que o robô termine de se mover antes de executar a próxima linha de código.

Utilização:

robot.move_for(distance, angle, velocity, units, wait)

Parâmetros

Descrição

distance

A distância percorrida pelo robô, em milímetros (mm). Pode ser um número inteiro ou decimal (ponto flutuante).

angle

O ângulo, em graus, que o robô se desloca. Pode ser um número inteiro ou decimal de -360 a 360.

velocity

Opcional. A velocidade de movimento, de 0% a 100% quando se utiliza PERCENT, ou de 0 a 200 milímetros por segundo quando se utiliza MMPSPode ser um número inteiro ou decimal (float). Se não for fornecida qualquer velocidade, o robô move-se à velocidade de movimento atual.

units

Opcional. A unidade de velocidade: PERCENT (padrão) ou MMPS (milímetros por segundo).

wait

Opcional. wait=True (padrão) faz com que o projeto aguarde até que o robô termine de se mover antes de executar a próxima linha de código. wait=False faz com que a próxima linha de código seja executada imediatamente.

# Move right, then move forward.
robot.move_for(50, 90)
robot.move_for(100, 0)

# Move in reverse slowly, then move forward quickly.
robot.move_for(100, 180, 25)
robot.move_for(100, 0, 100, PERCENT)

# Drive forward and blink all LEDs red.
robot.move_for(100, 0, wait=False)
robot.led.on(ALL_LEDS, RED)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, BLACK)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, RED)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, BLACK)

move_with_vectors#

Um vetor é uma forma de descrever a velocidade e a direção do movimento de algo. move_with_vectors move o robô utilizando o movimento baseado em vetores. O robô combina os valores de velocidade para a frente, para a direita e de rotação para criar um movimento suave. O robô continuará a mover-se utilizando este vetor até receber outra ação, como mover-se num ângulo diferente, rodar ou parar.

Nota: Este método define directamente os valores de velocidade de movimento e de rotação, pelo que não utiliza set_move_velocity ou set_turn_velocity.

Utilização:

robot.move_with_vectors(forward, rightward, rotation)

Parâmetros

Descrição

forward

A velocidade do robô ao longo do eixo y, de -100% a 100%. Os valores negativos movem o robô para trás e os valores positivos movem-no para a frente.

rightward

A velocidade do robô ao longo do eixo x, de -100% a 100%. Os valores negativos movem o robô para a esquerda e os valores positivos movem-no para a direita.

rotation

A velocidade de rotação do robô, de -100% a 100%. Valores negativos fazem o robô rodar no sentido anti-horário e valores positivos fazem-no rodar no sentido horário.

# Move at 15°
robot.move_with_vectors(48.3, 12.95, 0)
wait(2, SECONDS)
robot.stop_all_movement()

# Move at 45° while turning counterclockwise.
robot.move_with_vectors(50, 50, -30)
wait(2, SECONDS)
robot.stop_all_movement()

# Scaling movement using the controller joystick
while True:
    # Move forward (and backwards) slower than axis1 input
    forward   = controller.axis1.position() * 0.7
    
    # Move right (and left) faster than axis2 input
    rightward = controller.axis2.position() * 1.5    

    robot.move_with_vectors(forward, rightward, 0)

    wait(5, MSEC)

turn#

O comando turn ou para a direita indefinidamente. O robô continuará a rodar até receber outra ação, como mover-se ou parar.

Utilização:

robot.turn(direction, velocity, units)

Parâmetros

Descrição

direction

Direção para a qual o robô vira: LEFT ou RIGHT.

velocity

Opcional. A velocidade de rotação, de 0% a 100% quando se utiliza PERCENT, ou de 0 a 150 graus por segundo quando se utiliza DPSPode ser um número inteiro ou decimal (float). Se não for fornecida qualquer velocidade, o robô gira à velocidade de rotação atual.

units

Opcional. A unidade de velocidade: DPS (graus por segundo, padrão) ou PERCENT.

# Turn left, then stop.
robot.turn(LEFT)
wait(1, SECONDS)
robot.stop_all_movement()

# Turn left quickly, turn right slowly, then stop.
robot.turn(LEFT, 80)
wait(2, SECONDS)
robot.turn(RIGHT, 20, PERCENT)
wait(3, SECONDS)
robot.stop_all_movement()

turn_for#

O comando turn_for roda o robô para a esquerda ou para a direita num número específico de graus. A rotação é relativa à direção atual para a qual o robô está virado. O projeto aguardará até que o robô termine de rodar antes de executar a próxima linha de código.

Utilização:

robot.turn_for(direction, angle, velocity, units, wait)

Parâmetros

Descrição

direction

Direção para a qual o robô vira: LEFT ou RIGHT.

angle

O número de graus que o robô gira, variando entre -360 a 360 graus. Pode ser um número inteiro ou decimal (ponto flutuante).

velocity

Opcional. A velocidade de rotação, de 0% a 100% quando se utiliza PERCENT, ou de 0 a 150 graus por segundo quando se utiliza DPSPode ser um número inteiro ou decimal (float). Se não for fornecida qualquer velocidade, o robô gira à velocidade de rotação atual.

units

Opcional. A unidade de velocidade: DPS (graus por segundo, padrão) ou PERCENT.

wait

Opcional. wait=True (padrão) faz com que o projeto aguarde até que o robô termine de rodar antes de executar a próxima linha de código. wait=False faz com que a próxima linha de código seja executada imediatamente.

# Turn left, then turn around to the right.
robot.turn_for(LEFT, 90)
robot.turn_for(RIGHT, 180)

# Turn left quickly, then turn right slowly.
robot.turn_for(LEFT, 90, 100)
robot.turn_for(RIGHT, 180, 15, PERCENT)

# Turn right and blink all LEDs blue.
robot.turn_for(RIGHT, 180, wait=False)
robot.led.on(ALL_LEDS, BLUE)
wait(0.5, SECONDS)
robot.led.off(ALL_LEDS)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, BLUE)
wait(0.5, SECONDS)
robot.led.off(ALL_LEDS)

turn_to#

A direção é a direção para a qual o robô está virado, medida em graus. O comando turn_to faz com que o robô gire para uma direcção específica. O robô seguirá o caminho mais curto para alcançar a direção desejada.

A direção inicial do robô é de 0 graus.

O projeto aguardará até que o robô termine de rodar antes de executar a próxima linha de código.

Utilização:

robot.turn_to(heading, velocity, units, wait)

Parâmetros

Descrição

heading

A direção para a qual o robô deve estar virado, de -360 a 360 graus.

velocity

Opcional. A velocidade de rotação, de 0% a 100% quando se utiliza PERCENT, ou de 0 a 150 graus por segundo quando se utiliza DPSPode ser um número inteiro ou decimal (float). Se não for fornecida qualquer velocidade, o robô gira à velocidade de rotação atual.

units

Opcional. A unidade de velocidade: DPS (graus por segundo, padrão) ou PERCENT.

wait

Opcional. wait=True (padrão) faz com que o projeto aguarde até que o robô termine de rodar antes de executar a próxima linha de código. wait=False faz com que a próxima linha de código seja executada imediatamente.

# Turn to face each cardinal directions.
robot.turn_to(90)
wait(2, SECONDS)
robot.turn_to(180)
wait(2, SECONDS)
robot.turn_to(270)
wait(2, SECONDS)
robot.turn_to(0)

# Turn to face backward slowly, then face forward quickly.
robot.turn_to(180, 25)
wait(1, SECONDS)
robot.turn_to(0, 90, PERCENT)

# Turn around quickly and blink all LEDs green.
robot.turn_to(180, 100, wait=False)
robot.led.on(ALL_LEDS, GREEN)
wait(0.5, SECONDS)
robot.led.off(ALL_LEDS)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, GREEN)
wait(0.5, SECONDS)
robot.led.off(ALL_LEDS)

stop_all_movement#

stop_all_movement pára todo o movimento do robô.

Utilização:

robot.stop_all_movement()

Parâmetros

Descrição

Este método não tem parâmetros.

# Turn right, then stop moving
robot.turn(RIGHT)
wait(1, SECONDS)
robot.stop_all_movement()

Mutantes#

set_move_velocity#

O parâmetro set_move_velocity set_move_velocity define a velocidade de movimento do robô. Uma percentagem mais elevada faz com que o robô se mova mais rapidamente, enquanto uma percentagem mais baixa o faz mover-se mais lentamente.

Todos os projetos começam com o robô a mover-se a 50% da velocidade por defeito.

Uma velocidade de movimento de 100% é equivalente a 200 milímetros por segundo.

Utilização:

robot.set_move_velocity(velocity, units)

Parâmetros

Descrição

velocity

A velocidade de movimento de 0% a 100% quando se utiliza PERCENT, ou de 0 a 200 milímetros por segundo quando se utiliza MMPSPode ser um número inteiro ou decimal (float).

units

Opcional. A unidade de velocidade: PERCENT (padrão) ou MMPS (milímetros por segundo).

# Move forward at the default velocity,
robot.set_move_velocity(50)
robot.move_for(100, 0)
wait(1, SECONDS)
# Move slower than the default velocity
robot.set_move_velocity(20)
robot.move_for(100, 0)
wait(1, SECONDS)
# Move faster than the default velocity
robot.set_move_velocity(100)
robot.move_for(100, 0)

set_turn_velocity#

O parâmetro set_turn_velocity define a velocidade de rotação do robô. Uma percentagem mais elevada faz com que o robô gire mais rápido, enquanto uma percentagem mais baixa o faz girar mais devagar.

Todos os projetos começam com o robô a rodar a 50% da velocidade (75 graus por segundo) por defeito.

Utilização:

robot.set_turn_velocity(velocity, units)

Parâmetros

Descrição

velocity

A velocidade de rotação de 0% a 100% quando se utiliza PERCENT, ou de 0 a 150 graus por segundo quando se utiliza DPSPode ser um número inteiro ou decimal (float).

units

Opcional. A unidade de velocidade: DPS (graus por segundo, padrão) ou PERCENT.

# Turn around at default velocity
robot.set_turn_velocity(50)
robot.turn_for(RIGHT, 180)
wait(1, SECONDS)
# Turn around slower than the default velocity
robot.set_turn_velocity(20)
robot.turn_for(RIGHT, 180)
wait(1, SECONDS)
# Turn around faster than the default velocity
robot.set_turn_velocity(100)
robot.turn_for(RIGHT, 180)

set_xy_position#

O comando set_xy_position altera a posição actual do robô nos eixos x e y para novos valores.

Por exemplo, se o robô se afastou do ponto inicial, definir x como 0 e y como 0 faz com que a localização atual do robô seja a nova posição 0, 0. Assim, o robô pode rastrear posições futuras com base neste novo valor.

Utilização:

robot.set_xy_position(x, y)

Parâmetros

Descrição

x

O valor da posição x a definir para o robô, em mm. Pode ser um número inteiro ou decimal (ponto flutuante).

y

O valor da posição y a definir para o robô, em mm. Pode ser um número inteiro ou decimal (ponto flutuante).

# Set the robot's current position
# Move forward and print the new coordinate
robot.set_xy_position(100, 50)
robot.move_for(150, 0)
robot.screen.print("X:", robot.get_x_position())
robot.screen.next_row()
robot.screen.print("Y:", robot.get_y_position())

Getters#

get_x_position#

get_x_position devolve a coordenada x atual do robô em milímetros.

No início de um projeto, a posição x do robô é definida como 0. A posição x muda à medida que o robô se move para a esquerda ou para a direita e pode ser definida através do método set_xy_position.

Utilização:

robot.get_x_position()

Parâmetros

Descrição

Este método não tem parâmetros.

# Print the start and end x-value 
# of the robot's position after moving
robot.screen.print("Start X:", robot.get_x_position())
robot.move_for(200, 90)
robot.screen.next_row()
robot.screen.print("End X:", robot.get_x_position())

get_y_position#

get_y_position devolve a coordenada y atual do robô em milímetros.

No início de um projeto, a posição y do robô é definida como 0. A posição y muda à medida que o robô se move para a frente ou para trás e pode ser definida através do método set_xy_position.

Utilização:

robot.get_y_position()

Parâmetros

Descrição

Este método não tem parâmetros.

# Print the start and end y-value 
# of the robot's position after moving
robot.screen.print("Start Y:", robot.get_y_position())
robot.move_for(200, 0)
robot.screen.next_row()
robot.screen.print("End Y:", robot.get_y_position())

is_move_active#

is_move_active is_move_active devolve um valor booleano indicando se o robô está em movimento. Isto pode ser utilizado para controlar o tempo de outras ações com base no movimento do robô.

  • True — O robô está em movimento.

  • False — O robô não se está a mover.

Este método funciona em conjunto com métodos de movimento que têm o parâmetro wait , como por exemplo move_for.

Utilização:

robot.is_move_active()

Parâmetros

Descrição

Este método não tem parâmetros.

# Blink all the LEDs when the robot is moving.
robot.move_for(200, 0, wait=False)

while robot.is_move_active():
    robot.led.on(ALL_LEDS, ORANGE)
    wait(0.5, SECONDS)
    robot.led.on(ALL_LEDS, CYAN)
    wait(0.5, SECONDS)

robot.led.off(ALL_LEDS)

is_turn_active#

is_turn_active is_turn_active devolve um valor booleano indicando se o robô está a rodar. Isto pode ser utilizado para controlar o tempo de outros comportamentos com base no movimento do robô.

  • True — O robô está a rodar.

  • False — O robô não está a rodar.

Este método funciona em conjunto com métodos de movimento que têm o parâmetro wait , como por exemplo turn_for e turn_to.

Utilização:

robot.is_turn_active()

Parâmetros

Descrição

Este método não tem parâmetros.

# Blink all the LEDs while the robot is turning
robot.turn_for(RIGHT, 180, wait=False) 

while robot.is_turn_active():
    robot.led.on(ALL_LEDS, GREEN)
    wait(0.5, SECONDS)
    robot.led.on(ALL_LEDS, CYAN)
    wait(0.5, SECONDS)

robot.led.off(ALL_LEDS)

is_stopped#

is_stopped devolve um valor booleano indicando se o robô não se está a mover nem a rodar. Isto pode ser utilizado para controlar o tempo de outros comportamentos com base no movimento do robô.

  • True — O robô não se está a mover nem a rodar.

  • False — O robô está em movimento ou a rodar.

Utilização:

robot.is_stopped()

Parâmetros

Descrição

Este método não tem parâmetros.

# Blink all the LEDs while the robot is moving or turning

def light_show():
    # Flash LEDs while the robot is moving or turning
    while not robot.is_stopped():
        robot.led.on(ALL_LEDS, GREEN)
        wait(.5, SECONDS)
        robot.led.on(ALL_LEDS, PURPLE)
        wait(.5, SECONDS)

    robot.led.off(ALL_LEDS)

robot.move_for(200, 0, wait=False)
light_show()

robot.turn_for(RIGHT, 180, wait=False)
light_show()