Movimento#

Introdução#

O drone VEX AIR possui quatro hélices, permitindo-lhe mover-se em qualquer direção e rodar independentemente. O sistema de controlo por movimento oferece métodos para movimentação, rotação, ajuste de velocidade e seguimento de posição.

Mostrador de bússola circular de 0 a 360 graus em redor de um drone com 4 hélices. A frente do drone está virada para 0 graus no mostrador da bússola.

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

Ações

  • take_off – Eleva o drone a uma altura especificada.

  • land – Pousa o drone.

  • hover - Mantém o drone na sua posição.

  • climb – Move o drone numa direção vertical especificada.

  • climb_for – Move o drone numa direção vertical especificada por uma distância específica.

  • climb_to – Desloca o drone para uma altitude especificada.

  • move_at – Move o drone numa direção e velocidade especificadas.

  • move_for – Move o drone numa direção especificada por uma distância especificada.

  • move_to – Move o drone para uma posição especificada, mantendo o mesmo rumo.

  • turn – Vira o drone para a esquerda ou para a direita.

  • turn_for – Roda o drone um número definido de graus.

  • turn_to – Roda o drone para apontar para uma direção específica.

  • move_with_vectors – Move o drone utilizando valores x, y, z e de rotação baseados em vetores.

Mutadores

Obteve

Ações#

take_off#

O comando take_off aciona as hélices e eleva o drone no ar. Este método deve ser utilizado antes que outros movimentos possam ser feitos.

Utilização:

drone.take_off(climb_to, units, wait)

Parâmetros

Descrição

climb_to

A posição z (altura) para onde o drone irá voar.

units

Unidades a utilizar:

  • CM - Centímetros
  • MM - Milímetros
  • INCHES

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.

# Fly for 1 second
drone.take_off(climb_to=500)
wait(1, SECONDS)
drone.land()

land#

O comando land baixa o drone até ao solo. As hélices continuarão a funcionar até que o projeto seja interrompido.

Utilização:

drone.land(wait)

Parâmetros

Descrição

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.

# Land after 1 second
drone.take_off(climb_to=500)
wait(1, SECONDS)
drone.land()

hover#

hover impede que o drone se mova em qualquer direção e mantém a sua posição atual no ar.

Usage:
drone.hover()

Parâmetros

Descrição

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

# Hold current position for 3 seconds after moving forward
drone.take_off(climb_to=500)
drone.move_at(direction=0, velocity=50)
wait(1, SECONDS)
drone.hover()
wait(3, SECONDS)
drone.land()

climb#

climb move o drone numa direção vertical específica.

Usage: drone.climb(direction, velocity)

Parâmetros

Descrição

direction

A direção em que o drone irá voar: UP ou DOWN.

velocity

A velocidade de subida do drone, expressa em percentagem.

# Climb upwards for 2 seconds
drone.take_off(climb_to=500)
wait(2, SECONDS)
drone.climb(direction=UP)
wait(2, SECONDS)
drone.land()

climb_for#

O comando climb_for move o drone numa direção vertical específica por uma distância específica.

Utilização:

drone.climb_for(direction, distance, units, velocity, wait)

Parâmetros

Descrição

direction

A direção em que o drone irá voar: UP ou DOWN.

distance

A distância que o drone irá percorrer.

units

Opcional. A unidade que representa a distância:

  • CM – Centímetros
  • MM (padrão) – Milímetros
  • INCHES

velocity

Opcional. A velocidade de subida do drone, em percentagem. Se a velocidade não for especificada, o valor predefinido é 50%.

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.

# Lower drone before landing
drone.take_off(climb_to=700)
wait(2, SECONDS)
drone.climb_for(direction=DOWN, distance=300)
wait(2, SECONDS)
drone.land()

climb_to#

O comando climb_to move o drone para uma posição z específica.

Utilização:

drone.climb_to(z, units, velocity, wait)

Parâmetros

Descrição

z

A posição z, em número inteiro ou decimal, para onde o drone irá subir.

units

Opcional. A unidade que representa a distância:

  • CM – Centímetros
  • MM (padrão) – Milímetros
  • INCHES

velocity

Opcional. A velocidade de subida do drone, em percentagem.

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.

# Reach 500 mm after takeoff
drone.take_off(climb_to=300)
wait(1, SECONDS)
drone.climb_to(z=500)
wait(1, SECONDS)
drone.land()

move_at#

move_at move o drone num ângulo e velocidade especificados.

Utilização:

drone.move_at(angle, velocity)

Parâmetros

Descrição

angle

O ângulo, em número inteiro ou decimal, em que o drone se move, variando de 0 a 359 graus.

velocity

A velocidade com que o drone se deslocará, expressa em percentagem.

# Move left for 2 seconds
drone.take_off(climb_to=500)
drone.move_at(angle=270)
wait(2, SECONDS)
drone.land()

move_for#

move_for move o drone numa direção específica por uma distância específica utilizando a velocidade de movimento atual set_move_velocity.

Utilização:

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

Parâmetros

Descrição

angle

O ângulo, como um número inteiro ou decimal (float), no qual o drone se move, variando de 0 a 359 graus.

distance

A distância, em número inteiro ou decimal, que o drone vai percorrer.

units

Opcional. A unidade que representa a distância:

  • CM – Centímetros
  • MM (padrão) – Milímetros
  • INCHES

velocity

Opcional. A velocidade com que o drone se deslocará, expressa em percentagem.

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 forward for 200 mm
drone.take_off(climb_to=500)
wait(1, SECONDS)
drone.move_for(direction=0, distance=200, velocity=50, units=MM)
wait(1, SECONDS)
drone.land()

move_to#

move_to move o drone para uma posição específica no ar, mantendo a mesma direção.

Utilização:

drone.move_to(x, y, z, units, move_velocity, climb_velocity, wait)

Parâmetros

Descrição

x

A coordenada x para a qual o drone se vai deslocar.

y

A coordenada y para a qual o drone se vai deslocar.

z

A coordenada z para a qual o drone se vai deslocar.

units

Opcional. A unidade que representa a distância:

  • CM – Centímetros
  • MM (padrão) – Milímetros
  • INCHES

move_velocity

Opcional. A velocidade com que o drone se deslocará, expressa em percentagem.

climb_velocity

Opcional. A velocidade de subida do drone, em percentagem.

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 diagonally to (300, 300, 800)
drone.take_off(climb_to=300)
wait(2, SECONDS)
drone.move_to(x=300, y=300, z=800)
wait(2, SECONDS)
drone.land()

turn#

turn roda o drone numa direção específica utilizando a atual set_turn_velocity.

Utilização:

drone.turn(direction, velocity)

Parâmetros

Descrição

direction

Direção para a qual o drone irá virar: LEFT ou RIGHT.

velocity

Opcional. A velocidade de rotação do drone, expressa em percentagem.

# Turn to the right for 2 seconds
drone.take_off(climb_to=500)
wait(1, SECONDS)
drone.turn(RIGHT, 50)
wait(2, SECONDS)
drone.land()

turn_for#

turn_for roda o drone numa direção especificada por uma distância definida em relação à sua direção atual utilizando a set_turn_velocity.

Utilização:

drone.turn_for(direction, angle, velocity, wait)

Parâmetros

Descrição

direction

Direção para a qual o drone irá virar: LEFT ou RIGHT.

angle

O ângulo, como um número inteiro ou decimal (float), no qual o drone gira, variando de 0 a 359 graus.

velocity

Opcional. A velocidade de rotação do drone, expressa em percentagem.

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.

# Turn around, then land
drone.take_off(climb_to=500)
wait(1, SECONDS)
drone.turn_for(RIGHT, 180)
wait(1, SECONDS)
drone.land()

turn_to#

turn_to vira o drone para enfrentar uma direção específica utilizando a velocidade de rotação atual set_turn_velocity.

Utilização:

drone.turn_to(heading, velocity, wait)

Parâmetros

Descrição

heading

A direção para a qual o drone irá rodar, de 0 a 360 graus.

velocity

Opcional. A velocidade de rotação do drone, expressa em percentagem.

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.

# Turn to face each of the cardinal headings
drone.take_off(climb_to=500)
drone.turn_to(heading=90, velocity=50)
wait(3, SECONDS)
drone.turn_to(heading=180, velocity=50)
wait(3, SECONDS)
drone.turn_to(heading=270, velocity=50)
wait(3, SECONDS)
drone.turn_to(heading=0, velocity=50)
wait(3, SECONDS)
drone.land()

move_with_vectors#

move_with_vectors move o drone utilizando o movimento baseado em vetores, combinando o movimento ao longo do eixo x (horizontal) e do eixo y (vertical), ao mesmo tempo que roda o drone.

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:

drone.move_with_vectors(forward, rightward, upward, rotation)

Parâmetros

Descrição

forward

A velocidade do drone ao longo do eixo Y (movimento para a frente e para trás). Aceita um valor de -100 a 100 em percentagem, em que os valores negativos representam o movimento para trás e os valores positivos representam o movimento para a frente.

rightward

A velocidade do drone ao longo do eixo X (movimento lateral). Aceita um valor de -100 a 100 em percentagem, em que valores negativos movem o drone para a esquerda e valores positivos movem para a direita.

upward

A velocidade do drone ao longo do eixo Z (movimento para cima e para baixo). Aceita um valor de -100 a 100 em percentagem, em que os valores negativos representam o movimento descendente e os valores positivos ascendentes.

rotation

A velocidade de rotação do drone. Aceita um valor de -100 a 100 em percentagem, em que valores negativos indicam rotação no sentido anti-horário e valores positivos indicam rotação no sentido horário.

# Move with controller
drone.take_off(climb_to=500)
while True:
    drone.move_with_vectors(
        forward=controller.axis4.position(),
        rightward=controller.axis3.position(),
        upward=controller.axis1.position(),
        rotation=controller.axis2.position()
    )
    wait(5, MSEC)

Mutantes#

set_steering_mode#

set_steering_mode define o ponto de vista utilizado ao controlar o drone.

Utilização:

drone.set_steering_mode(style)

Parâmetros

Descrição

style

Define o ponto de vista (POV) utilizado para controlar o drone. HEADLESS significa que o drone se move em relação à direção para a qual estava virado no início do projeto. STANDARD é utilizado por defeito e faz com que o drone se mova em relação à direção para a qual está virado.

# Steer based on the drone's starting orientation
# until button 7 is pressed
drone.take_off(climb_to=500)
drone.set_steering_mode(HEADLESS)
while not controller.button7.pressing():
    drone.move_with_vectors(
        forward=controller.axis4.position(),
        rightward=controller.axis3.position(),
        upward=controller.axis1.position(),
        rotation=controller.axis2.position()
    )
    wait(5, MSEC)
drone.land()

set_movement_mode#

set_movement_mode define o estilo de movimento do drone.

Este estilo de movimento é utilizado ao pilotar o drone com um controlo remoto.

Utilização:

drone.set_movement_mode(style)

Parâmetros

Descrição

style

Define a velocidade utilizada para controlar o drone.

  • BALANCED – O drone move-se a uma velocidade base média.
  • PERFORMANCE – O drone desloca-se a uma velocidade base mais elevada.
  • PRECISION (padrão) – O drone move-se a uma velocidade base mais baixa.

# Control the drone with the balanced movement style
drone.take_off(climb_to=500)
drone.set_movement_mode(BALANCED)
while not controller.button5.pressing():
    drone.move_with_vectors(
        forward=controller.axis4.position(),
        rightward=controller.axis3.position(),
        upward=controller.axis1.position(),
        rotation=controller.axis2.position()
    )
    wait(5, MSEC)
drone.land()

set_climb_velocity#

set_climb_velocity define a velocidade de escalada predefinida como uma percentagem. Isto afetará todos os métodos subsequentes relacionados com a escalada. A velocidade de escalada padrão é de 50%.

Utilização:

drone.set_climb_velocity(velocity)

Parâmetros

Descrição

velocity

A velocidade de subida do drone, expressa em percentagem.

# Raise the drone quickly before landing
drone.take_off(climb_to=300)
wait(1, SECONDS)
drone.set_climb_velocity(100)
drone.climb_for(direction=UP, distance=500)
wait(1, SECONDS)
drone.land()

set_move_velocity#

set_move_velocity define a velocidade de movimento predefinida como uma percentagem. Isto afetará todos os métodos subsequentes relacionados com o movimento. A velocidade de movimento padrão é de 50%.

Utilização:

drone.set_move_velocity(velocity)

Parâmetros

Descrição

velocity

A velocidade com que o drone se deslocará, expressa em percentagem.

# Move forward quickly, then reverse slowly
drone.take_off(climb_to=500)
drone.set_move_velocity(100)
drone.move_for(direction=0, distance=500)
wait(3, SECONDS)
drone.set_move_velocity(20)
drone.move_for(direction=180, distance=500)
wait(5, SECONDS)
drone.land()

set_turn_velocity#

set_turn_velocity define a velocidade de curva predefinida como uma percentagem. Isto afetará todos os métodos subsequentes relacionados com a curva. A velocidade de curva padrão é de 50%.

Utilização:

drone.set_turn_velocity(velocity)

Parâmetros

Descrição

velocity

A velocidade com que o drone irá rodar, expressa em percentagem.

# Turn clockwise quickly, then counterclockwise slowly
drone.take_off(climb_to=500)
drone.set_turn_velocity(100)
drone.turn_for(RIGHT, 360)
wait(3, SECONDS)
drone.set_turn_velocity(20)
drone.turn_for(LEFT, 360)
wait(5, SECONDS)
drone.land()

set_max_z_height#

O parâmetro set_max_z_height define um limite para a altura máxima de voo do drone.

Utilização:

drone.set_max_z_height(z_height, units)

Parâmetros

Descrição

z_height

O valor máximo no eixo z, em número inteiro ou decimal, que o drone não ultrapassará, num intervalo de 1000 a 5000 mm ou 40 a 196 polegadas.

units

Opcional. As unidades de distância são:

  • CM – Centímetros
  • MM (padrão) – Milímetros
  • INCHES
# Fly with controller under 1000 mm
drone.set_max_z_height(1000, MM)
drone.take_off(climb_to=500)
while not controller.button7.pressing():
    drone.move_with_vectors(
        forward=controller.axis4.position(),
        rightward=controller.axis3.position(),
        upward=controller.axis1.position(),
        rotation=controller.axis2.position()
    )
drone.land()

set_xyz_position#

set_xyz_position define a coordenada x, y ou z atual do drone para um valor especificado.

Utilização:

drone.set_xyz_position(x, y, z, units)

Nota: Todos os parâmetros são opcionais, mas pelo menos um (x, you z) deve ser especificado.

Parâmetros

Descrição

x

Opcional. A coordenada x a definir para o drone em unidades units como um decimal (float) ou inteiro.

y

Opcional. A coordenada y a definir para o drone em unidades units como um decimal (float) ou inteiro.

z

Opcional. A coordenada z a definir para o drone em unidades units como um decimal (float) ou inteiro.

units

Opcional. A unidade que representa a distância:

  • CM – Centímetros
  • MM (padrão) – Milímetros
  • INCHES
# Set a new z position, then fly to z position -300
drone.take_off(climb_to=800)
drone.set_xyz_position(z=0)
wait(1, SECONDS)
drone.climb(DOWN, 50)
while not drone.get_z_position() < -300:
    wait(5, MSEC)
drone.hover()
wait(1, SECONDS)
drone.land()

Getters#

get_max_z_height#

get_max_z_height devolve a altura máxima que o drone pode atingir como um número inteiro.

Utilização:

drone.get_max_z_height(units)

Parâmetros

Descrição

units

Opcional. Unidade de medida:

  • CM – Centímetros
  • MM (padrão) – Milímetros
  • INCHES
# Display the new z height limit
controller.screen.print(drone.get_max_z_height(MM))
controller.screen.next_row()
drone.take_off(climb_to=500)
drone.set_max_z_height(1000)
controller.screen.print(drone.get_max_z_height(MM))
wait(1, SECONDS)
drone.land()

get_flight_state#

get_flight_state devolve o estado de voo atual do drone como um DroneFlightStateType:

  • MOTOR_OFF - Nenhum outro estado de voo é verdadeiro.

  • CALIBRATION - O drone está a calibrar os seus sensores.

  • MOTOR_START - O drone está a ligar os seus motores.

  • FLIGHT_READY - O drone está pronto para voar.

  • FLIGHT - O drone está em voo.

Usage:
drone.get_flight_state()

Parâmetros

Descrição

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

# Report the flight status as the drone takes off
controller.screen.print("Preparing for flight!")
controller.screen.next_row()
drone.take_off(climb_to=800, wait=False)
while not drone.get_flight_state() == MOTOR_START:
    wait(5, MSEC)
controller.screen.print("Motors starting...")
controller.screen.next_row()
while not drone.get_flight_state() == FLIGHT:
    wait(5, MSEC)
controller.screen.print("Take off!")

get_x_position#

get_x_position devolve a coordenada x do drone como um decimal (float).

Usage:
drone.get_x_position(units)

Parâmetros

Descrição

units

Opcional. A unidade que representa a posição:

  • CM – Centímetros
  • MM (padrão) – Milímetros
  • INCHES
# Move to (200, 0, 500)
drone.take_off(climb_to=500)
wait(1, SECONDS)
drone.move_at(direction=90, velocity=50)
while not drone.get_x_position() > 200:
    wait(5, MSEC)
drone.hover()
wait(1, SECONDS)
drone.land()

get_y_position#

get_y_position devolve a coordenada y do drone como um decimal (float).

Utilização:

drone.get_y_position(units)

Parâmetros

Descrição

units

Opcional. A unidade que representa a posição:

  • CM – Centímetros
  • MM (padrão) – Milímetros
  • INCHES
# Move to (0, 200, 500)
drone.take_off(climb_to=500)
wait(1, SECONDS)
drone.move_at(direction=0, velocity=50)
while not drone.get_y_position() > 200:
    wait(5, MSEC)
drone.hover()
wait(1, SECONDS)
drone.land()

get_z_position#

get_y_position devolve a coordenada z do drone como um decimal (float).

Utilização:

drone.get_z_position(units)

Parâmetros

Descrição

units

Opcional. A unidade que representa a posição:

  • CM – Centímetros
  • MM (padrão) – Milímetros
  • INCHES
# Move to (0, 0, 800)
drone.take_off(climb_to=500)
wait(1, SECONDS)
drone.climb(UP, 50)
while not drone.get_z_position() > 800:
    wait(5, MSEC)
drone.hover()
wait(1, SECONDS)
drone.land()

get_safe_mode#

get_safe_mode retorna um Boolean indicando se o Propeller Lock está ativado no drone.

  • True – O bloqueio da hélice está ativado.

  • False – O bloqueio da hélice não está ativado.

Utilização:

drone.get_safe_mode()

Parâmetros

Descrição

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

# Change the sound by enabling the Propeller Lock
while True:
    if drone.get_safe_mode():
        controller.sound.play(FAULT)
        while controller.sound.is_active():
            wait(50, MSEC)
    else:
        controller.sound.play(SUCCESS)
        while controller.sound.is_active():
            wait(50, MSEC)
    wait(5, MSEC)

is_climb_active#

is_climb_active devolve um Boolean indicando se o drone está a subir.

  • True – O drone está a subir neste momento.

  • False – O drone não está a subir.

Utilização:

drone.is_climb_active()

Parâmetros

Descrição

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

# After the drone starts to climb, play a sound and land
drone.take_off(climb_to=500)
drone.climb(UP, 50)
wait(3, SECONDS)
if drone.is_climb_active():
    controller.sound.play(SUCCESS)
    drone.land()

is_move_active#

is_move_active devolve um Boolean indicando se o drone está atualmente a utilizar um método de movimento.

  • True – O drone está atualmente a utilizar um método de movimento.

  • False – O drone não está a utilizar um método de movimento neste momento.

Utilização:

drone.is_move_active()

Parâmetros

Descrição

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

# After the drone starts to move, play a sound and land
drone.take_off(climb_to=500)
drone.move_at(direction=0, velocity=50)
wait(2, SECONDS)
if drone.is_move_active():
    controller.sound.play(SUCCESS)
    drone.land()

is_turn_active#

is_turn_active devolve um Boolean indicando se o drone está a virar.

  • True – O drone está a rodar neste momento.

  • False – O drone não está a virar.

Utilização:

drone.is_turn_active()

Parâmetros

Descrição

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

# After the drone starts to turn, play a sound and land
drone.take_off(climb_to=500)
drone.turn(RIGHT)
wait(2, SECONDS)
if drone.is_turn_active():
    controller.sound.play(LOOPING)
    while controller.sound.is_active():
        wait(50, MSEC)
    drone.land()

is_hovering#

is_hovering devolve um Boolean indicando se o drone está a manter a sua posição (pairando).

  • True – O drone está atualmente a manter a sua posição (a pairar).

  • False – O drone está neste momento a mudar de posição.

Utilização:

drone.is_hovering()

Parâmetros

Descrição

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

# Play a sound after the drone has finished taking off
drone.take_off(climb_to=700)
while not drone.is_hovering():
    wait(5, MSEC)
controller.sound.play(PAUSE)
wait(2, SECONDS)
drone.land()

is_taking_off#

is_taking_off devolve um Boolean indicando se o drone está em processo de descolagem.

  • True – O drone está atualmente em processo de descolagem.

  • False – O drone não está em processo de descolagem.

Utilização:

drone.is_taking_off()

Parâmetros

Descrição

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

# Play sounds while the drone is taking off
drone.take_off(700, wait=False)
wait(1, SECONDS)
while drone.is_taking_off():
    controller.sound.play(LOOPING)
    wait(5, MSEC)

is_landing#

is_landing devolve um Boolean indicando se o drone está em processo de aterragem.

  • True – O drone está atualmente em processo de aterragem.

  • False – O drone não está em processo de aterragem.

Utilização:

drone.is_landing()

Parâmetros

Descrição

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

# Play sounds while the drone is landing
drone.take_off(climb_to=500)
wait(1, SECONDS)
drone.land(wait=False)
wait(1, SECONDS)
while drone.is_landing():
    controller.sound.play(LOOPING)
    wait(5, MSEC)

is_landed#

is_landed devolve um Boolean indicando se o drone está atualmente aterrado.

  • True – O drone aterrou.

  • False – O drone não aterrou.

Utilização:

drone.is_landed()

Parâmetros

Descrição

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

# Celebrate a successful landing
drone.take_off(climb_to=500)
wait(1, SECONDS)
drone.land()
wait(1, SECONDS)
if drone.is_landed():
    controller.sound.play(SUCCESS)