Контроллер#

Введение#

Контроллер дрона VEX AIR имеет 12-кнопочную компоновку и два джойстика. Эти элементы управления позволяют дрону распознавать нажатия кнопок и движения джойстиков, обеспечивая интерактивное и быстрое управление.

Ниже приведён список всех доступных методов:

Геттеры – считывают состояние кнопки, джойстика и соединения.

  • pressing – Возвращает значение, если в данный момент нажата определенная кнопка.

  • position – Возвращает положение джойстика вдоль указанной оси.

  • is_drone_connected – Возвращает значение, указывающее, подключен ли контроллер к дрону.

  • get_battery_level – Возвращает уровень заряда батареи контроллера.

Обратные вызовы – Реагируют на изменения ввода с кнопок или джойстика.

  • pressed – Запускает функцию при нажатии указанной кнопки.

  • released – Запускает функцию при отпускании указанной кнопки.

  • changed – Выполняет функцию при изменении положения джойстика вдоль указанной оси.

Геттеры#

pressing#

Метод pressing возвращает логическое значение, указывающее, нажата ли в данный момент конкретная кнопка на контроллере. Этот метод необходимо вызывать для конкретного объекта кнопки, например, button5 (см. полный список объектов кнопок ниже).

  • True - Указанная кнопка нажата.

  • False - Указанная кнопка не нажата.

Использование:
Для этого метода можно использовать одну из восьми доступных кнопок с номерами от 5 до 12, как показано ниже:

Кнопка

Командование

button5

controller.button5.pressing() — Button 5

button6

controller.button6.pressing() — Button 6

button7

controller.button7.pressing() — Button 7

button8

controller.button8.pressing() — Button 8

button9

controller.button9.pressing() — Button 9

button10

controller.button10.pressing() — Button 10

button11

controller.button11.pressing() — Button 11

button12

controller.button12.pressing() — Button 12

Пульт управления дроном VEX AIR с кнопками с 5 по 12. Кнопки 5 и 6 расположены на задней правой стороне пульта, перпендикулярно джойстику. Кнопки 7 и 8 находятся в том же положении на левой стороне. Кнопки с 9 по 12 расположены на нижней поверхности пульта, при этом 9 находится в верхнем правом углу над 10, а 11 — в верхнем левом углу над 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.

Ось

Командование

axis1

controller.axis1.position() — Вертикальная ось левого джойстика

axis2

controller.axis2.position() — Горизонтальная ось левого джойстика

axis3

controller.axis3.position() — Горизонтальная ось правого джойстика

axis4

controller.axis4.position() — Вертикальная ось правого джойстика

Контроллер дрона VEX AIR с выделенными обозначениями осей 1 и 2 вокруг левого джойстика и обозначениями осей 3 и 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.

Кнопка

Командование

button5

controller.button5.pressing() — Button 5

button6

controller.button6.pressing() — Button 6

button7

controller.button7.pressing() — Button 7

button8

controller.button8.pressing() — Button 8

button9

controller.button9.pressing() — Button 9

button10

controller.button10.pressing() — Button 10

button11

controller.button11.pressing() — Button 11

button12

controller.button12.pressing() — Button 12

Пульт управления дроном VEX AIR с кнопками с 5 по 12. Кнопки 5 и 6 расположены на задней правой стороне пульта, перпендикулярно джойстику. Кнопки 7 и 8 находятся в том же положении на левой стороне. Кнопки с 9 по 12 расположены на нижней поверхности пульта, при этом 9 находится в верхнем правом углу над 10, а 11 — в верхнем левом углу над 12.

Параметры

Описание

callback

Предварительно определенная функция, которая будет выполняться каждый раз при нажатии указанной кнопки.

arg

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.

Кнопка

Командование

button5

controller.button5.pressing() — Button 5

button6

controller.button6.pressing() — Button 6

button7

controller.button7.pressing() — Button 7

button8

controller.button8.pressing() — Button 8

button9

controller.button9.pressing() — Button 9

button10

controller.button10.pressing() — Button 10

button11

controller.button11.pressing() — Button 11

button12

controller.button12.pressing() — Button 12

Пульт управления дроном VEX AIR с кнопками с 5 по 12. Кнопки 5 и 6 расположены на задней правой стороне пульта, перпендикулярно джойстику. Кнопки 7 и 8 находятся в том же положении на левой стороне. Кнопки с 9 по 12 расположены на нижней поверхности пульта, при этом 9 находится в верхнем правом углу над 10, а 11 — в верхнем левом углу над 12.

Параметры

Описание

callback

Предварительно определенная функция, которая будет выполняться каждый раз, когда указанная кнопка отпускается.

arg

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.

Ось

Командование

axis1

controller.axis1.position() — Вертикальная ось левого джойстика

axis2

controller.axis2.position() — Горизонтальная ось левого джойстика

axis3

controller.axis3.position() — Горизонтальная ось правого джойстика

axis4

controller.axis4.position() — Вертикальная ось правого джойстика

Контроллер дрона VEX AIR с выделенными обозначениями осей 1 и 2 вокруг левого джойстика и обозначениями осей 3 и 4 вокруг правого джойстика.

Параметры

Описание

callback

Предварительно определенная функция, которая запускается каждый раз, когда положение джойстика изменяется вдоль указанной оси.

arg

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)