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.

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
set_steering_mode– Define o POV para dirigir o drone.set_movement_mode– Define o estilo de movimento do drone.set_climb_velocity– Define a velocidade de subida predefinida.set_move_velocity– Define a velocidade de movimento predefinida.set_turn_velocity- Define a velocidade de curva predefinida.set_max_z_height- Define um limite para a altura máxima de voo do drone.set_xyz_position– Define a posição atual do drone.
Obteve
get_max_z_height– Retorna a altura máxima que o drone consegue atingir.get_flight_state– Retorna o estado atual do drone.get_x_position– Retorna a coordenada x do drone.get_y_position– Retorna a coordenada y do drone.get_z_position– Retorna a coordenada z do drone.get_safe_mode– Retorna o estado de bloqueio da hélice do drone.is_climb_active– Retorna se o drone está neste momento a subir.is_move_active– Retorna se o drone está atualmente em movimento.is_turn_active– Retorna se o drone está neste momento a virar.is_hovering- Retorna se o drone está actualmente a pairar.is_taking_off– Retorna se o drone está atualmente a levantar voo.is_landing– Retorna se o drone está neste momento a aterrar.is_landed- Retorna se o drone está actualmente pousado.
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 |
|---|---|
|
A posição z (altura) para onde o drone irá voar. |
|
Unidades a utilizar:
|
|
Opcional. |
# 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 |
|---|---|
|
Opcional. |
# 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 |
|---|---|
|
A direção em que o drone irá voar: |
|
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 |
|---|---|
|
A direção em que o drone irá voar: |
|
A distância que o drone irá percorrer. |
|
Opcional. A unidade que representa a distância:
|
|
Opcional. A velocidade de subida do drone, em percentagem. Se a velocidade não for especificada, o valor predefinido é 50%. |
|
Opcional. |
# 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 |
|---|---|
|
A posição z, em número inteiro ou decimal, para onde o drone irá subir. |
|
Opcional. A unidade que representa a distância:
|
|
Opcional. A velocidade de subida do drone, em percentagem. |
|
Opcional. |
# 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 |
|---|---|
|
O ângulo, em número inteiro ou decimal, em que o drone se move, variando de 0 a 359 graus. |
|
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 |
|---|---|
|
O ângulo, como um número inteiro ou decimal (float), no qual o drone se move, variando de 0 a 359 graus. |
|
A distância, em número inteiro ou decimal, que o drone vai percorrer. |
|
Opcional. A unidade que representa a distância:
|
|
Opcional. A velocidade com que o drone se deslocará, expressa em percentagem. |
|
Opcional. |
# 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 |
|---|---|
|
A coordenada x para a qual o drone se vai deslocar. |
|
A coordenada y para a qual o drone se vai deslocar. |
|
A coordenada z para a qual o drone se vai deslocar. |
|
Opcional. A unidade que representa a distância:
|
|
Opcional. A velocidade com que o drone se deslocará, expressa em percentagem. |
|
Opcional. A velocidade de subida do drone, em percentagem. |
|
Opcional. |
# 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 |
|---|---|
|
Direção para a qual o drone irá virar: |
|
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 |
|---|---|
|
Direção para a qual o drone irá virar: |
|
O ângulo, como um número inteiro ou decimal (float), no qual o drone gira, variando de 0 a 359 graus. |
|
Opcional. A velocidade de rotação do drone, expressa em percentagem. |
|
Opcional. |
# 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 |
|---|---|
|
A direção para a qual o drone irá rodar, de 0 a 360 graus. |
|
Opcional. A velocidade de rotação do drone, expressa em percentagem. |
|
Opcional. |
# 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 |
|---|---|
|
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. |
|
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. |
|
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. |
|
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 |
|---|---|
|
Define o ponto de vista (POV) utilizado para controlar o drone. |
# 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 |
|---|---|
|
Define a velocidade utilizada para controlar o drone.
|
# 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 |
|---|---|
|
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 |
|---|---|
|
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 |
|---|---|
|
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 |
|---|---|
|
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. |
|
Opcional. As unidades de distância são:
|
# 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 |
|---|---|
|
Opcional. A coordenada x a definir para o drone em unidades |
|
Opcional. A coordenada y a definir para o drone em unidades |
|
Opcional. A coordenada z a definir para o drone em unidades |
|
Opcional. A unidade que representa a distância:
|
# 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 |
|---|---|
|
Opcional. Unidade de medida:
|
# 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 |
|---|---|
|
Opcional. A unidade que representa a posição:
|
# 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 |
|---|---|
|
Opcional. A unidade que representa a posição:
|
# 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 |
|---|---|
|
Opcional. A unidade que representa a posição:
|
# 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)