Sensores#

Introdução#

O drone VEX AIR inclui um sensor inercial para medir o movimento rotacional e detetar mudanças de movimento, bem como um sensor de alcance para medir distâncias. O VEX AIR também monitoriza o nível da bateria. Estes sensores permitem que o drone acompanhe a sua orientação, direção, aceleração e distância dos objetos.

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

Inercial - Acompanha o movimento rotacional do drone.

  • get_rotation – Retorna quanto o drone rodou desde que começou.

  • get_heading – Retorna o rumo actual (0 a 359,99°).

  • get_yaw – Devolve o ângulo de guinada (–180 a 180°).

  • get_roll – Devolve o ângulo de rotação (–180 a 180°).

  • get_pitch – Devolve o ângulo de inclinação (–180 a 180°).

  • reset_rotation – Repõe o valor de rotação a 0.

  • reset_heading – Define o rumo actual para 0.

  • set_heading – Define o cabeçalho para um valor específico.

  • get_acceleration – Devolve a aceleração numa direção específica.

  • get_turn_rate – Devolve a taxa de rotação em graus por segundo.

Alcance — Deteta distâncias a partir dos sensores de alcance do drone.

  • get_distance — Retorna a distância entre o sensor de alcance selecionado e o objeto detetado mais próximo.

Bateria - Retorna a percentagem da bateria do drone.

Inercial#

get_rotation#

get_rotation devolve quantos graus o drone rodou desde que foi iniciado. Soma todas as rotações e devolve o total em graus: positivo para o sentido horário, negativo para o sentido anti-horário.

Usage:
drone.inertial.get_rotation()

Parâmetros

Descrição

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

# Display the rotation after turning
drone.take_off(climb_to=500)
drone.turn_for(LEFT, 450, 50)
print(drone.inertial.get_rotation(), end="")
drone.land()

get_heading#

get_heading devolve o ângulo de direção do drone como um número de ponto flutuante no intervalo de 0 a 359,99 graus.

Usage:
drone.inertial.get_heading()

Parâmetros

Descrição

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

# Display the drone's heading after turning
drone.take_off(climb_to=500)
drone.set_turn_velocity(100)
drone.turn(RIGHT)
wait(5, SECONDS)
controller.screen.print("Heading: ")
controller.screen.print(drone.inertial.get_heading())
drone.land()

get_yaw#

get_yaw devolve o ângulo de guinada do drone no intervalo de -180,0 a 180,0 graus como um número de ponto flutuante.

A imagem abaixo utiliza uma seta para mostrar o sentido da rotação positiva para o eixo de guinada (yaw).

Um drone VEX AIR com o nariz virado para o canto inferior direito, com uma seta azul que se estende para baixo a partir do centro. Em redor da seta azul, uma seta preta curva aponta no sentido dos ponteiros do relógio e está rotulada como Yaw, indicando o sentido positivo para a guinada.

Usage:
drone.inertial.get_yaw

Parâmetros

Descrição

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

# Display the yaw angle as you rotate the drone by hand
while True:
    controller.screen.clear_screen()
    controller.screen.set_cursor(1, 1)
    controller.screen.print("Yaw: ")
    controller.screen.print(drone.inertial.get_yaw())
    wait(0.2, SECONDS)

get_roll#

get_roll devolve o ângulo de rotação do drone no intervalo de -180,0 a 180,0 graus como um número de ponto flutuante.

A imagem abaixo utiliza uma seta para mostrar o sentido da rotação positiva para o rolamento.

Um drone VEX AIR com o nariz virado para o canto inferior direito, com uma seta verde a sair diretamente do nariz do drone. Em redor da seta verde, uma seta preta curva aponta no sentido anti-horário, indicando o sentido positivo de deslocação.

Usage:
drone.inertial.get_roll()

Parâmetros

Descrição

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

# Display the roll angle as you rotate the drone by hand
while True:
    controller.screen.clear_screen()
    controller.screen.set_cursor(1, 1)
    controller.screen.print("Roll: ")
    controller.screen.print(drone.inertial.get_roll())
    wait(0.2, SECONDS)

get_pitch#

get_pitch devolve o ângulo de inclinação do drone no intervalo de -180,0 a 180,0 graus como um número de ponto flutuante.

A imagem abaixo utiliza uma seta para mostrar o sentido da rotação positiva do tom.

Um drone VEX AIR virado para o canto inferior direito com uma seta vermelha a sair do lado direito do drone, junto ao logótipo da VEX. Em redor da seta vermelha, uma seta preta curva que aponta no sentido anti-horário indica o sentido positivo para a inclinação.

Usage:
drone.inertial.get_pitch()

Parâmetros

Descrição

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

# Display the pitch angle as you rotate the drone by hand
while True:
    controller.screen.clear_screen()
    controller.screen.set_cursor(1, 1)
    controller.screen.print("Pitch: ")
    controller.screen.print(drone.inertial.get_pitch())
    wait(0.2, SECONDS)

reset_rotation#

reset_rotation repõe o valor de rotação do drone para 0 graus.

Usage:
drone.inertial.reset_rotation()

Parâmetros

Descrição

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

# Display the new rotation after resetting
drone.take_off(climb_to=500)
drone.turn(RIGHT)
while not drone.inertial.get_rotation() > 360:
    wait(5, MSEC)
drone.hover()
drone.inertial.reset_rotation()
wait(1, SECONDS)
print(drone.inertial.get_rotation(), end="")
drone.land()

reset_heading#

reset_heading reinicia a direção do drone para 0 graus.

Utilização:

drone.inertial.reset_heading()

Parâmetros

Descrição

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

# Turn to a heading, reset the heading, and turn to the same heading.
drone.take_off(climb_to=500)
drone.turn_to(heading=180, velocity=50)
wait(3,SECONDS)
drone.inertial.reset_heading()
drone.turn_to(heading=180, velocity=50)
wait(3,SECONDS)
drone.land()

set_heading#

set_heading define a direção do drone para um valor especificado em graus.

Utilização:

drone.inertial.set_heading(heading)

Parâmetros

Descrição

heading

O valor a utilizar para o novo rumo encontra-se no intervalo de 0 a 359,99 graus.

# Turn to a heading, set the heading, and turn to the same heading.
drone.take_off(climb_to=500)
drone.turn_to(heading=180, velocity=50)
wait(3,SECONDS)
drone.inertial.set_heading(90)
drone.turn_to(heading=180, velocity=50)
wait(3,SECONDS)
drone.land()

get_acceleration#

get_acceleration devolve a aceleração do drone numa direção especificada. O valor devolvido representa a taxa de variação da velocidade, medida em unidades de g (em que 1g ≈ 9,81 m/s²), como um número de ponto flutuante que varia de -4,00 a 4,00.

A imagem abaixo utiliza setas para mostrar o sentido da aceleração positiva para a frente e para a direita, e a aceleração negativa para baixo.

É mostrado um drone VEX AIR com uma seta verde a sair da frente do drone com a inscrição "Para a frente", uma seta azul a sair do centro da parte inferior do drone com a inscrição "Para baixo" e uma seta vermelha a sair do lado direito do drone junto ao logótipo da VEX, com a inscrição "Para a direita".

Utilização:

drone.inertial.get_acceleration(type)

Parâmetros

Descrição

type

Sentido da aceleração a reportar:

  • DOWNWARD
  • FORWARD
  • RIGHTWARD

# Display the acceleration as the drone takes off
drone.take_off(500, wait=False)
while True:
    controller.screen.clear_screen()
    controller.screen.set_cursor(1, 1)
    controller.screen.print(drone.inertial.get_acceleration(DOWNWARD))
    wait(5, MSEC)

get_turn_rate#

get_turn_rate devolve a taxa a que o drone está a rodar em torno do eixo especificado. Este devolve um valor em graus por segundo \(dps\) como um número de ponto flutuante de -1000,00 a 1000,00 dps.

A imagem abaixo utiliza setas para mostrar o sentido da rotação positiva para o rolamento, arfagem e guinada.

Um drone VEX AIR é mostrado com setas direcionais. Uma seta verde estende-se a partir da frente do drone com uma seta preta curva a apontar no sentido anti-horário à sua volta, rotulada como Roll (Rotação). Uma seta azul estende-se a partir do centro da parte inferior do drone com uma seta preta curva a apontar no sentido dos ponteiros do relógio à sua volta, rotulada como Yaw (Guinada). E uma seta vermelha estende-se do lado direito do drone junto ao logótipo da VEX, com uma seta preta curva a apontar no sentido anti-horário à sua volta, rotulada como Pitch (Inclinação).

Usage:
drone.inertial.get_turn_rate(axis)

Parâmetros

Descrição

axis

Qual a orientação a reportar:

  • YAW
  • ROLL
  • PITCH

# Display the drone turn rate as it is rotated by hand.
while True:
    controller.screen.clear_screen()
    controller.screen.set_cursor(7, 1)
    controller.screen.print(drone.inertial.get_turn_rate(ROLL))

Intervalo#

get_distance#

get_distance devolve a distância entre o sensor de alcance selecionado e o objeto detetado mais próximo.

Usage:
drone.range.get_distance(range, units)

Parâmetros

Descrição

range

O sensor de alcance a utilizar: FORWARD_RANGE ou DOWNWARD_RANGE FORWARD_RANGE indica a distância da frente do drone. DOWNWARD_RANGE indica a distância da parte inferior do drone.

units

Opcional. Unidade de distância:

  • MM (padrão) — milímetros
  • CM — centímetros
  • INCHES

# Fly forward until close to an object
drone.take_off(climb_to=500)
drone.move_at(direction=0, velocity=50)
while not drone.range.get_distance(FORWARD_RANGE, MM) < 750:
    wait(0.1, SECONDS)
drone.land()

Bateria#

get_battery_level#

get_battery_level devolve o nível de carga da bateria do drone em percentagem. Isto devolve um número de 0 a 100.

Usage:
drone.get_battery_level()

Parâmetros

Descrição

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

# Display the drone's battery level
if drone.get_battery_level() < 25:
    controller.screen.print("Charge the drone Battery!")
else:
    controller.screen.print("Ready to fly!")