Pioneer-SDK2

Pioneer-sdk2 - это библиотека для управления квадрокоптерами «Пионер» и взаимодействия с микрокомпьютерами (Пионер Мини 2, RaZero, PiZero).

Примечание

Раздел находится на модерации. Информация периодически обновляется.

Работа с классом Pioneer

Экземпляр класса Pioneer

pioneer = Pioneer()
Описание класса:

Класс Pioneer является основным интерфейсом взаимодействия с библиотекой

Аргументы класса

Тип данных

Значение по умолчанию

Описание аргумента

tcp

str

127.0.0.1:20556

TCP адрес и порт

wait_callback

bool

True

Флаг включения блокирования методов на ожидание выполнения

logger

bool

True

Флаг включения логирования

Подсказка

Обратите внимание, что используя модуль Raspberry Pi Zero, требуется обязательно указать tcp:

  • Если вы подключаетесь к модулю используйте:

tcp="10.42.0.1:20556"
  • Если модуль подключается к вам через точку доступа, то используйте tcp указанный в свойствах системы

Методы класса Pioneer

arm(timeout=5, retries=0)
Описание метода:

Запуск моторов квадрокоптера

Аргументы метода:
  • timeout - задержка перед запуском моторов

  • retries - количество повторных попыток запуска моторов

Тип данных:

bool

Возвращает:

True, если команда успешно выполнена, иначе False

Примечание:

Ожидает события ENGINES_STARTED при параметре Pioneer.wait_callback=True

disarm()
Описание метода:

Выключение моторов квадрокоптера

Тип данных:

bool

Возвращает:

True, если команда успешно выполнена, иначе False

takeoff()
Описание метода:

Запуск процесса взлёта

Тип данных:

bool

Возвращает:

True, если команда успешно выполнена, иначе False

Примечание:

Ожидает события TAKEOFF_COMPLETE при параметре wait_callback=True

land()
Описание метода:

Запуск процесса посадки

Тип данных:

bool

Возвращает:

True, если команда успешно выполнена, иначе False

Примечание:

Ожидает события COPTER_LANDED при параметре wait_callback=True

go_to_local_point(x, y, z, yaw, time=0)
Описание метода:

Перемещает квадрокоптер в указанную координату относительно локальной системы координат

Аргументы метода:
  • x (float) - Координата X в метрах

  • y (float) - Координата Y в метрах

  • z (float) - Координата Z в метрах

  • yaw (float) - Угол рысканья в градусах

  • time (int) - Желательное время достижения целевой точки

go_to_local_point_body_fixed(x, y, z, yaw, time=0)
Описание метода:

Перемещает квадрокоптер в указанную координату относительно текущей позиции квадрокоптера. Работает только для LPS

Аргументы метода:
  • x (float) - Смещенение по оси X в метрах

  • y (float) - Смещенение по оси Y в метрах

  • z (float) - Смещенение по оси Z в метрах

  • yaw (float) - Угол рысканья в градусах

  • time (int) - Желательное время достижения целевой точки

go_to_global_point(latitude, longitude, altitude, yaw=0)
Описание метода:

Перемещает квадрокоптер в указанную координату относительно глобальной системы координат. Работает только для GPS

Аргументы метода:
  • latitude (float) - Широта целевой точки в градусах

  • longitude (float) - Долгота целевой точки в градусах

  • altitude (float) - Высота над уровнем моря в метрах

  • yaw (float) - Угол рысканья (азимут) в градусах

Тип данных:

bool

Возвращает:

True, если команда успешно отправлена, иначе False

go_to_global_point_relative(latitude_offset, longitude_offset, altitude_offset, yaw)
Описание метода:

Перемещает квадрокоптер в указанную координату относительно текущей позиции квадрокоптера. Работает только для GPS

Аргументы метода:
  • latitude_offset (float) - Смещение по широте в градусах относительно текущей позиции

  • longitude_offset (float) - Смещение по долготе в градусах относительно текущей позиции

  • altitude_offset (float) - Смещение по высоте в метрах относительно текущей позиции

  • yaw (float) - Угол рысканья (азимут) в градусах

Тип данных:

bool

Возвращает:

True, если команда успешно отправлена, иначе False

set_manual_speed(vx, vy, vz, yaw_rate, interval=1.0)
Описание метода:

Перемещает квадрокоптер с указанной скоростью относительно локальной системы координат

Аргументы метода:
  • vx (float) - Скорость по оси X в м/с

  • vy (float) - Скорость по оси Y в м/с

  • vz (float) - Скорость по оси Z в м/с

  • yaw_rate (float) - Скорость рысканья в рад/с

  • interval=1.0 (float) - Время в секундах, в течение которого метод активен

set_manual_speed_body_fixed(vx, vy, vz, yaw_rate, interval=1.0)
Описание метода:

Перемещает квадрокоптер с указанной скоростью относительно текущей позиции квадрокоптера

Аргументы метода:
  • vx (float) - Скорость по оси X в м/с

  • vy (float) - Скорость по оси Y в м/с

  • vz (float) - Скорость по оси Z в м/с

  • yaw_rate (float) - Скорость рысканья в рад/с

  • interval=1.0 (float) - Время в секундах, в течение которого метод активен

set_yaw(yaw)
Описание метода:

Устанавливает угол рыскания

Аргументы метода:
  • yaw (float) - Угол рыскания в градусах

Тип данных:

bool

Возвращает:

True, если команда успешно отправлена, иначе False

rtl()
Описание метода:

Возвращение в домашнюю координату (место взлета)

Тип данных:

bool

Возвращает:

True, если команда успешно отправлена, иначе False

led_control(led_id=255, r=0, g=0, b=0)
Описание метода:

Устанавливает цвет для указанного светодиода

Аргументы метода:
  • led_id (int) - Номер светодиода. (255 - все светодиоды)

  • r (float) - Яркость красного цвета от 0 до 1 (0% - 100%)

  • g (float) - Яркость зеленого цвета от 0 до 1 (0% - 100%)

  • b (float) - Яркость синего цвета от 0 до 1 (0% - 100%)

Тип данных:

bool

Возвращает:

True, если команда успешно отправлена, иначе False

set_param(name, value)
Описание метода:

Устанавливает значение выбранному параметру автопилота

Аргументы метода:
  • name (str) - Имя параметра

  • value (float | int) - Устанавливаемое значение

Тип данных:

bool

Возвращает:

True, если выполнено, иначе False

set_logger(value=True)
Описание метода:

Разрешает (True) или запрещает (False) вывод информации о выполнении методов в консоль

Тип данных:

bool

connect()
Описание метода:

Устанавливает соединение с квадрокоптером

Примечание:

Автоматически выполняется при инициализации объекта класса «Pioneer»

close_connection()
Описание метода:

Закрывает соединение с квадрокоптером

Примечание:

Данный метод следует обязательно добавлять в конце каждого скрипта

reboot_board()
Описание метода:

Перезагружает плату автопилота, закрывает соединение и ждет 5 секунд, ожидается повторное подключение

Тип данных:

bool

Возвращает:

True, если перезагрузка разрешена и успешно выполнена, иначе False

Примечание:

Данный метод работает только с модулем Raspberry Pi Zero и Radxa Zero

point_deceleration()
Описание метода:

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

Тип данных:

bool

Возвращает:

True, если квадрокоптер начал замедление, иначе False

point_reached()
Описание метода:

Проверяет, достиг ли квадрокоптер целевой координаты

Тип данных:

bool

Возвращает:

True, если координата достигнута, иначе False

get_battery_status()
Описание метода:

Возвращает текущий статус заряда батареи

Тип данных:

tuple[float, float] | None

Возвращает:

Напряжение и температуру аккумулятора | None, если ошибка

get_param(name, update=False)
Описание метода:

Возвращает значение выбранного параметра автопилота

Аргументы метода:
  • name (str) - Имя параметра

  • update (bool) - True, считает значение из автопилота, иначе вернет кэшированное значение (при первом подключении)

Тип данных:

float | None

Возвращает:

Значение параметра | None, если ошибка

get_orientation()
Описание метода:

Возвращает ориентацию дрона по углам крена(roll), тангажа(pitch), рыскания(yaw)

Тип данных:

tuple[float, float, float] | None

Возвращает:

Углы крена (roll), тангажа (pitch) и рыскания (yaw) | None, если ошибка

get_accel()
Описание метода:

Возвращает ускорение квадрокоптера по осям X, Y, Z

Тип данных:

tuple[float, float, float] | None

Возвращает:

Ускорение по осям X, Y, Z | None, если ошибка

get_gyro()
Описание метода:

Возвращает угловую скорость по осям X, Y, Z в рад/с

Тип данных:

tuple[float, float, float] | None

Возвращает:

Угловая скорость по осям X, Y, Z в рад/с | None, если ошибка

get_mag()
Описание метода:

Возвращает показания магнитометра по осям X, Y, Z

Тип данных:

tuple[float, float, float] | None

Возвращает:

Угловая скорость по осям X, Y, Z | None, если ошибка

Примечание:

Только для GPS

get_altitude()
Описание метода:

Возвращает высоту с барометра

Тип данных:

float | None

Возвращает:

Высота над поверхностью в метрах | None, если ошибка

get_dist_sensor_data()
Описание метода:

Возвращает высоту с лазерного дальномера

Тип данных:

float | None

Возвращает:

Высота над поверхностью в метрах | None, если ошибка

get_motors_rpm()
Описание метода:

Возвращает обороты каждого из 4 моторов квадрокоптера

Тип данных:

list[float | None]

Возвращает:

Список из 4 значений оборотов (RPM) для каждого двигателя | None, если ошибка

grab_open(movement_time=0, velocity=100)
Описание метода:

Открывает захват дрона

Аргументы метода:
  • movement_time (float) - Время открытия захвата (0 - открывает до упора)

  • velocity (int) - Скорость открытия (0% - 100%)

Тип данных:

bool

Возвращает:

True, если выполнено, иначе False

grab_close(movement_time=0, velocity=100)
Описание метода:

Закрывает захват дрона

Аргументы метода:
  • movement_time (float) - Время закрытия захвата (0 - открывает до упора)

  • velocity (int) - Скорость закрытия (0% - 100%)

Тип данных:

bool

Возвращает:

True, если выполнено, иначе False

grab_close(movement_time=0, velocity=100)
Описание метода:

Останавливает движение захвата

Тип данных:

bool

Возвращает:

True, если выполнено, иначе False

get_ranger_data()
Описание метода:

Возвращает данные с модуля Ranger

Тип данных:

tuple[float, float, float, float, float] | tuple[None, None, None, None, None]

Возвращает:

Кортеж из пяти значений, в метрах [право, лево, вперед, назад, сверху/снизу] | None, если ошибка

Примечание:

Только для квадрокоптера «Пионер Мини 2»

get_nav_system(update=False)
Описание метода:

Возвращает активную систему навигации квадрокоптера

Аргументы метода:
  • update (bool) - True, принудительно обновит значение параметра из автопилота, иначе вернет кэшированное значение

Возвращает:
  • NavSystem.GPS - Активна система GPS навигации

  • NavSystem.LPS - Активна система LPS навигации

  • NavSystem.OPT - Активна система OPT навигации

get_nav_status_lps()
Описание метода:

Возвращает статус LPS навигации квадрокоптера

Возвращает:
  • NavStatus.NO_DATA - Нет данных с модуля

  • NavStatus.CANNOT - Невозможно оценить позицию

  • NavStatus.LOW - Низкое доверие к оценке позиции

  • NavStatus.OK - Позиция определена

get_local_position_lps()
Описание метода:

Возвращает координаты по осям X, Y, Z в метрах

Тип данных:

tuple[float, float, float] | None

Возвращает:

Позицию по осям X, Y, Z в метрах | None, если ошибка

get_local_velocity_lps()
Описание метода:

Возвращает скорость по осям X, Y, Z в м/с

Тип данных:

tuple[float, float, float] | None

Возвращает:

Скорость по осям X, Y, Z в м/с | None, если ошибка

get_local_yaw_lps()
Описание метода:

Возвращает текущий угол рыскания

Тип данных:

float | None

Возвращает:

Угол рыскания в градусах (-180; +180) | None, если ошибка

get_optical_data()
Описание метода:

Возвращает данные оптического потока

Тип данных:

tuple[int, int, float] | None

Возвращает:

Данные оптического потока | None, если ошибка

get_nav_status_gps()
Описание метода:

Возвращает статус GPS навигации квадрокоптера

Возвращает:
  • NavStatus.NO_DATA - Нет данных с модуля

  • NavStatus.CANNOT - Невозможно оценить позицию

  • NavStatus.LOW - Низкое доверие к оценке позиции

  • NavStatus.OK - Позиция определена

get_global_position_gps()
Описание метода:

Возвращает координаты квадрокоптера по GPS

Тип данных:

tuple[int, int, float] | None

Возвращает:

Кортеж в градусах и метрах [широта, долгота, высота] | None, если ошибка

get_global_velocity_gps()
Описание метода:

Возвращает скорость дрона по GPS

Тип данных:

tuple[int, int, float] | None

Возвращает:

Кортеж, скорость в м/с [северная, восточная, вертикальная] | None, если ошибка

get_satellites_count()
Описание метода:

Возвращает количество обнаруженных спутников GPS и ГЛОНАСС

Тип данных:

tuple[int, int] | None

Возвращает:

Кортеж [GPS спутники, ГЛОНАСС спутники] | None, если ошибка

time()
Описание метода:

Возвращает время работы квадрокоптера в секундах с момента начала GPS-эпохи

Тип данных:

float | None

Возвращает:

Время в секундах с начала GPS-эпохи | None, если ошибка

uptime()
Описание метода:

Возвращает время в секундах, прошедшее с момента идентификации в системе навигации

Тип данных:

int | None

Возвращает:

Время в секундах | None, если ошибка

flight_time()
Описание метода:

Возвращает время с начала полёта квадрокоптера в секундах

Тип данных:

float | None

Возвращает:

Время полета в секундах | None, если ошибка

Для реализации неблокирующего фунционала управления можно самостоятельно подписаться на события и ожидать их получения от автопилота

События

Описание события

COPTER_LANDED

Посадка дрона на землю

LOW_VOLTAGE1

Низкий заряд АКБ, но заряда хватит, чтобы вернуться домой

LOW_VOLTAGE2

Низкий заряд АКБ, начата экстренная посадка

LOW_CHARGE

Критически низкий заряд АКБ

POINT_DECELERATION

Замедления дрона перед целевой координатой

POINT_REACHED

Достижение целевой координаты

TAKEOFF_COMPLETE

Взлет завершен

ENGINES_STARTED

Моторы запущены

SHOCK

Сильный удар

subscribe(callback, event)
Описание метода:

Подписка на события

Аргументы метода:
  • callback (callable) - Функция обратного вызова при получении события

  • event (Event) - Событие для подписки

Пример подписки на событие «Взлет»:
from pioneer_sdk2 import Pioneer, Event

def takeoff_callback():
    pass

pioneer = Pioneer()
pioneer.subscribe(takeoff_callback, Event.TAKEOFF_COMPLETE)
unsubscribe(callback, event)
Описание метода:

Отписка от события

Аргументы метода:
  • callback (callable) - Функция обратного вызова при получении события

  • event (Event) - Событие для отписки

Для управления RC каналами требуется выставить параметры АП:

  • Copter_flyWithoutRc=1.0

  • SensorMux_rc=2.0

send_rc_channels(channel_1=0, channel_2=0, channel_3=0, channel_4=0, channel_5=1, channel_6=0, channel_7=1, channel_8=0)
Описание метода:

Имитация значений RC каналов

Аргументы метода:
  • channel_1 (float) - Правый стик (влево -1, центр 0, вправо 1)

  • channel_2 (float) - Правый стик (вперед -1, центр 0, назад 1)

  • channel_3 (float) - Левый стик (вниз -1, центр 0, вверх 1)

  • channel_4 (float) - Левый стик (влево 1, центр 0, вправо -1)

  • channel_5-8 (float) - Дополнительные каналы (тумблеры)

Тип данных:

bool

Возвращает:

True, если команда успешно отправлена, иначе False

rc_sdk1_to_sdk2(channel_1=0, channel_2=0, channel_3=0, channel_4=0, channel_5=2000)
Описание метода:

Конвертация команд из SDK1 в SDK2

Аргументы метода:
  • channel_1-4 (float) - Значения каналов SDK1

  • channel_5 (float) - Значение канала режима SDK1

Тип данных:

tuple[float, float, float, float, float]

Возвращает:

Кортеж из 5 значений для каналов управления

get_rc_channel()
Описание метода:

Возвращает значение 8 канала

Тип данных:

int | None

Возвращает:

Значение 8 канала | None, если ошибка

set_rc_trigger(callback)
Описание метода:

Устанавливает функцию обратного вызова для триггера RC-канала

Аргументы метода:
  • callback (callable) - Функция обратного вызова, будет вызвана при срабатывании триггера

Работа с камерой

Для работы с камерой используются классы Camera и ImageViewer, а также ServoCamera для квадрокоптера «Пионер Мини2».

Экземпляр класса Camera

Класс Camera используется для захвата видеокадров и предоставления их через очередь, данный класс можно использовать с «Пионер Мини 2», «Radxa Zero», «Raspberry Pi Zero»*.

Подсказка

Обратите внимание, что используя модуль Raspberry Pi Zero, требуется указать дополнительный аргумент camera_ip:

  • Если вы подключаетесь к модулю используйте:

camera_ip="10.42.0.1:8554"
  • Если модуль подключается к вам через точку доступа, то используйте ip указанный в свойствах системы

camera = Camera(camera_type=CameraType.MAIN)
Аргументы класса:
  • camera_type (CameraType) - Тип камеры для захвата (CameraType.MAIN или CameraType.OPT)

Примечание:

CameraType.MAIN используется по умолчанию, CameraType.OPT доступен только для «Пионер Мини 2»

get_cv_frame(timeout=5.0)
Описание метода:

Возвращает следующий доступный кадр из очереди

Аргументы метода:
  • timeout (float) - Время ожидания кадра в секундах

Возвращает:

Кадр в формате BGR

stop()
Описание метода:

Завершает поток захвата кадров

Экземпляр класса ImageViewer (только для Мини 2, Radxa Zero)

viewer = ImageViewer()
Примечание:

Класс ImageViewer не работает с Raspberry Pi Zero

imshow(name, frame, fps=30)
Описание метода:

Отправляет кадр в трансляцию

Аргументы метода:
  • name (str) - Название трансляции

  • frame (numpy.ndarray) - Изображение в формате BGR для трансляции

  • fps (int) - Кол-во кадров в секунду при передаче видео

close()
Описание метода:

Завершает все трансляции

Экземпляр класса ServoCamera (только для Мини 2)

Класс для управления сервоприводом камеры, позволяющий устанавливать угол поворота.

servo_camera = ServoCamera()
Примечание:

Проверяет поддержку сервомотора камеры бортом при инициализации

set_angle(angle, priority=ServoPriority.LOW)
Описание метода:

Устанавливает угол поворота сервопривода камеры

Аргументы метода:
  • angle (float) - Угол в градусах, диапазон от -90 до 30 градусов

  • priority (ServoPriority) - Приоритет команды сервопривода (HIGH, MEDIUM, LOW)

Тип данных:

bool

Возвращает:

True, если команда успешно отправлена, иначе False

Except:

ValueError, если угол выходит за пределы допустимого диапазона (от -90 до 30 градусов)