Pioneer-SDK2


Описание класса Pioneer

Создание экземпляра класса

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

Дополнительные возможности

Получение данных

Управление RC-каналами

Для управления RC-каналами требуется убедиться, что параметры автопилота соответствуют требуемым: Copter_man_rcMode0=6.0, Copter_man_rcMode1=3.0, Copter_man_rcMode2=3.0, Copter_flyWithoutRc=1.0, SensorMux_rc=2.0

Обработка событий автопилота

Список событий описан в классе Event и содержит следующие поля:

СобытиеОписание события
ENGINES_STARTEDдвигатели включены
TAKEOFF_COMPLETEвзлет выполнен
COPTER_LANDEDначата посадка
LOW_VOLTAGE1низкий заряд АКБ, но заряда хватит, чтобы вернуться в домашнюю координату
LOW_VOLTAGE2критический заряд АКБ, начата экстренная посадка
LOW_CHARGEаккумулятор разряжен, запуск невозможен
POINT_DECELERATIONначалось торможение перед достижением целевой координаты
POINT_REACHEDдостигнута целевая коорданта
SHOCKстолкновение, двигатели выключаются

Управление полезной нагрузкой (Мини 2)

Данные методы работают только с квадрокоптером "Пионер Мини 2".


Описание класса Camera

Класс Camera позволяет получить изображение с камеры квадрокоптера и при необходимости обработать его.

Создание экземпляра класса

Получить кадр и выключить видеопоток

get_cv_frame(timeout) - возвращает следующий доступный кадр из очереди в формате BGR.

stop() - останаливает передачу кадров.

from pioneer_sdk2 import Camera # импортируем класс Camera из библиотеки pioneer_sdk2
import cv2                      # библиотека cv2 содержит функции для работы с изображениями

camera_drone_1 = Camera()       # создаем экземпляр класса Camera

while True:                                          # запускаем бесконечный цикл
    frame = camera_drone_1.get_cv_frame(timeout=5.0) # сохраняем изображение в переменную frame 
                                                     # timeout=5.0 - время ожидания кадра в секундах
    
    if frame is not None:                            # проверяем, что изображение получено
        cv2.imshow("video", frame)                   # выводим полученное изображение frame в окне с названием "video"
    
    elif cv2.waitKey(1) == 27:                       # проверяем нажатие клавиши ESC
        camera_drone_1.stop()                        # закрываем передачу кдаров 
        break                                        # выходим из цикла

Описание класса ImageViewer (Мини 2, Radxa Zero)

Класс для трансляции numpy-кадров по RTSP через GStreamer, доступен только при использовании драйвера камеры gstreamer. Только для квадрокоптера "Пионер Мини 2" и модуля "Radxa Zero".

Создание экземпляра класса

from pioneer_sdk2 import ImageViewer # импортируем класс ImageViewer из библиотеки pioneer_sdk2

video_drone_1 = ImageViewer()        # создаем экземпляр класса ImageViewer, камера модуля esp32

Включить и выключить видеотрансляцию

imshow(name, frame, fps=30) - запускает видеотрансляцию в браузер.

close() - уничтожает все gstreamer пайплайны.

  • Адрес, если подключаетесь к Wi-Fi сети модуля или квадрокоптера: 10.42.0.1:8889/name

  • Адрес, если модуль или квадрокоптер подключается к вашей Wi-Fi сети: ip:8889/name

    • ip - по умолчанию 10.42.0.1 или скопировать из раздела хот-спот на компьютере.
    • 8889 - порт трансляции.
    • name - название трансляции.
from pioneer_sdk2 import ImageViewer # импортируем класс ImageViewer из библиотеки pioneer_sdk2
import cv2                           # библиотека cv2 содержит функции для работы с изображениями
import time                          # библиотека time содержит функции для работы со временем

video_drone_1 = ImageViewer()        # создаем экземпляр класса ImageViewer

my_time = time.time()                # объявляем переменную my_time, присваиваем текущее время (в секундах с 1970 года)
cycle_time = 30                      # объявляем переменную cycle_time, присваиваем желаемую длительность цикла

while time.time() - my_time < cycle_time:        # запускаем цикл, код будет повторяться, пока условие верно
    video_drone_1.imshow("video", frame, fps=30) # запускаем трансляцию, содержит аргументы: 
                                                 # video - название трансляции
                                                 # frame - по умолчанию передает изображение в формате BGR
                                                 # fps=30 - количество кадров в секунду при передаче видео
                                                 # трансляция выполняется по адресу: 10.42.0.1:8889/video

video_drone_1.stop()                             # останавливаем видеопоток 

Описание класса ServoCamera (Мини 2)

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

Создание экземпляра класса

from pioneer_sdk2 import ServoCamera # импортируем класс ServoCamera из библиотеки pioneer_sdk2

servo_drone_1 = ServoCamera()        # создаем экземпляр класса ServoCamera, проверяет поддержку сервомотора

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

set_angle(angle) - устанавливает угол поворота сервопривода камеры, диапазон от -90 до 30 градусов. Возвращает True, если выполнено, иначе False.

  • вызывает Except ValueError, если угол выходит за пределы допустимого диапазона (от -90 до 30 градусов).
from pioneer_sdk2 import ServoCamera # импортируем класс ServoCamera из библиотеки pioneer_sdk2
import time                          # библиотека time содержит функции для работы со временем

servo_drone_1 = ServoCamera()        # создаем экземпляр класса ServoCamera, проверяет поддержку сервомотора

servo_drone_1.set_angle(25)  # устанавливаем угол камеры на 25 градусов
time.sleep(3)                # ставим паузу на 3 секунды
servo_drone_1.set_angle(-25) # устанавливаем угол камеры на -25 градусов

Примеры скриптов

На этой странице