Миграция SDK1 → SDK2

В серии «Пионер» исторически было две Python-библиотеки: pioneer_sdk (первое поколение, SDK1) и pioneer_sdk2 (SDK2). Пионер Мини 2 работает с SDK2; SDK1 остаётся для «Базового» с платой-адаптером и старых учебных материалов. Этот урок помогает перенести код.

Какая библиотека где

БиблиотекаКому подходитУстановка
pioneer_sdk (SDK1)Пионер Базовый с платой-адаптером; старые примерыpip install pioneer_sdk
pioneer_sdk2 (SDK2)Пионер Мини 2; Базовый с Radxa Zero 3W / Pi Zero 2Wpip install pioneer_sdk2

На Пионере Мини 2 SDK2 уже установлена на борту (версия 0.15.1 в снимке — см. аудит).

Главное различие: RC-каналы

В SDK1 каналы задавались «пультовыми» значениями ШИМ (обычно около 1000–2000 мкс), а в SDK2 — нормированными значениями от −1 до 1. Для перехода между форматами в SDK2 есть готовый метод:

# rc_sdk1_to_sdk2: PWM-каналы SDK1 -> нормированные каналы SDK2
ch1, ch2, ch3, ch4, ch5 = rc_sdk1_to_sdk2(channel_1, channel_2, channel_3, channel_4, channel_5=2000)

Семантика нормированных каналов SDK2 (метод send_rc_channels()):

КаналСтикЗначения
channel_1правый−1 влево, 0 центр, 1 вправо
channel_2правый−1 вперёд, 0 центр, 1 назад
channel_3левый−1 вниз, 0 центр, 1 вверх
channel_4левый1 влево, 0 центр, −1 вправо
channel_5канал режима управления

Для отправки RC-каналов нужны параметры автопилота Copter_man_rcMode0=6.0, Copter_man_rcMode1=3.0, Copter_man_rcMode2=3.0, Copter_flyWithoutRc=1.0, SensorMux_rc=2.0. Подробнее — в справочнике и уроке «Примеры» (wasd_rc_channels.py).

Видео: VideoStream → ImageViewer

В SDK1 вывод изображения с камеры выполнялся классом VideoStream. В SDK2 его заменяет ImageViewer (публикация кадра в RTSP/WebRTC через mediamtx) и класс Camera для получения кадров:

# SDK2
from pioneer_sdk2 import Camera, CameraType, ImageViewer

cam = Camera(CameraType.MAIN)
iv = ImageViewer()
frame = cam.get_cv_frame(timeout=5.0)
iv.imshow("video", frame, fps=30)

Карта соответствий (обзор)

ЗадачаSDK1SDK2
СоединениеPioneer()Pioneer() (по умолчанию TCP 127.0.0.1:20556)
Взлёт/посадкаarm/takeoff/landarm()/takeoff()/land()
Полёт в точкулокальные/глобальные командыgo_to_local_point(), go_to_global_point()
Ручное управлениеRC в значениях ШИМsend_rc_channels() (нормированные)
ВидеоVideoStreamCamera + ImageViewer
Серво камерысерво-командыServoCamera.set_angle()
Телеметриячтение компонентовPioneer.messenger.hub[...], события

Чек-лист миграции

  1. Замените импорты pioneer_sdkpioneer_sdk2.
  2. Переведите RC-значения в нормированный вид (или используйте rc_sdk1_to_sdk2()).
  3. Замените VideoStream на Camera + ImageViewer.
  4. Проверьте параметры автопилота под новый способ управления.
  5. Оберните миссию в try/finally с безопасным завершением (см. Безопасность).
  6. Протестируйте на малой высоте без нагрузки.