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/nameip- по умолчанию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 градусов