Контроллер#
Введение#
Контроллер дрона VEX AIR имеет 12-кнопочную компоновку и два джойстика. Эти элементы управления позволяют дрону распознавать нажатия кнопок и движения джойстиков, обеспечивая интерактивное и быстрое управление.
Ниже приведён список всех доступных методов:
Геттеры – считывают состояние кнопки, джойстика и соединения.
pressing– Возвращает значение, если в данный момент нажата определенная кнопка.position– Возвращает положение джойстика вдоль указанной оси.is_drone_connected– Возвращает значение, указывающее, подключен ли контроллер к дрону.get_battery_level– Возвращает уровень заряда батареи контроллера.
Обратные вызовы – Реагируют на изменения ввода с кнопок или джойстика.
Геттеры#
pressing#
Метод pressing возвращает логическое значение, указывающее, нажата ли в данный момент конкретная кнопка на контроллере. Этот метод необходимо вызывать для конкретного объекта кнопки, например, button5 (см. полный список объектов кнопок ниже).
True- Указанная кнопка нажата.False- Указанная кнопка не нажата.
Использование:
Для этого метода можно использовать одну из восьми доступных кнопок с номерами от 5 до 12, как показано ниже:
Кнопка |
Командование |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Take a picture when button 5 is pressed.
drone.take_off(climb_to=500)
while True:
# Fly using the controller sticks
drone.move_with_vectors(
forward=controller.axis4.position(),
rightward=controller.axis3.position(),
upward=controller.axis1.position(),
rotation=controller.axis2.position()
)
# Capture an image from the forward camera when button 5 is pressed.
if controller.button5.pressing():
drone.camera.capture_image(FORWARD_CAMERA)
wait(5, MSEC)
position#
Параметр position возвращает положение указанной оси джойстика в процентах от –100% до 100%.
Применение:
В этом методе можно использовать одну из четырех доступных осей, пронумерованных от 1 до 4.
Ось |
Командование |
|---|---|
|
|
|
|
|
|
|
|

Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Climb when the left joystick is moved up.
drone.take_off(climb_to=500)
while True:
if controller.axis1.position() > 0:
drone.climb(direction=UP, velocity=50)
else:
drone.hover()
wait(5, MSEC)
is_drone_connected#
is_drone_connected` возвращает логическое значение, указывающее, подключен ли дрон.
True- Дрон подключен.False- Дрон не подключен.
Применение:
controller.is_drone_connected()
Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Print controller connection status on screen.
while True:
if controller.is_drone_connected():
controller.screen.clear_screen()
controller.screen.set_cursor(1, 1)
controller.screen.print("Controller connected")
wait(0.5, SECONDS)
get_battery_level#
get_battery_level` возвращает уровень заряда батареи контроллера в процентах от 0% до 100%.
Применение:
controller.get_battery_level()
Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Show controller's battery level.
if controller.get_battery_level() > 50:
controller.screen.print("Battery level ok")
else:
controller.screen.print("Battery level low")
Обратные звонки#
pressed#
pressed запускает функцию при нажатии указанной кнопки. После использования функция будет запускаться автоматически при каждом нажатии этой кнопки.
Использование:
Для этого метода можно использовать одну из восьми доступных кнопок, пронумерованных от 5 до 12.
Кнопка |
Командование |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Параметры |
Описание |
|---|---|
|
Предварительно определенная функция, которая будет выполняться каждый раз при нажатии указанной кнопки. |
|
Optional. A tuple containing arguments to pass to the callback function. See Using Events with Parameters for more information. |
# Take a picture when button 5 is pressed.
def take_picture():
drone.camera.capture_image(FORWARD_CAMERA)
# Run take_picture each time button 5 is pressed.
controller.button5.pressed(take_picture)
# Fly using the controller sticks.
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)
released#
released запускает функцию при отпускании указанной кнопки. После использования функция будет запускаться автоматически каждый раз при отпускании этой кнопки.
Использование:
Для этого метода можно использовать одну из восьми доступных кнопок, пронумерованных от 5 до 12.
Кнопка |
Командование |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Параметры |
Описание |
|---|---|
|
Предварительно определенная функция, которая будет выполняться каждый раз, когда указанная кнопка отпускается. |
|
Optional. A tuple containing arguments to pass to the callback function. See Using Functions with Parameters for more information. |
# Take a picture when button 5 is released.
def take_picture():
drone.camera.capture_image(FORWARD_CAMERA)
# Run take_picture each time button 5 is released.
controller.button5.released(take_picture)
# Fly using the controller sticks.
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)
changed#
changed runs a function when the joystick’s position changes along the specified axis. Once it is used, the function will run automatically each time the joystick’s position changes along that axis.
Применение:
В этом методе можно использовать одну из четырех доступных осей, пронумерованных от 1 до 4.
Ось |
Командование |
|---|---|
|
|
|
|
|
|
|
|

Параметры |
Описание |
|---|---|
|
Предварительно определенная функция, которая запускается каждый раз, когда положение джойстика изменяется вдоль указанной оси. |
|
Optional. A tuple containing arguments to pass to the callback function. See Using Functions with Parameters for more information. |
# Move forward when the left joystick moves.
def on_axis1_changed():
drone.move_for(direction=0, distance=200, velocity=50, units=MM)
drone.take_off(climb_to=500)
controller.axis1.changed(on_axis1_changed)