🕹️ События и ручное управление unsubscribe_event.py

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

unsubscribe_event.py

Подписывается на событие взлёта, а после взлёта отписывается от него.

Показывает, как снять подписку через unsubscribe(). До отписки событие TAKEOFF_COMPLETE включает зелёный свет; после отписки callback больше не вызывается.

Как работает

  1. Создать Pioneer() и подписаться на TAKEOFF_COMPLETE.
  2. Выполнить arm() и takeoff().
  3. Подождать 3 секунды.
  4. Вызвать unsubscribe(event_activate, Event.TAKEOFF_COMPLETE).
  5. Выполнить land() и закрыть соединение.

Используемые методы SDK

Ключевые параметры

ПараметрЗначениеОписание
sleep3 сПауза до отписки.

Запуск

python3 unsubscribe_event.py

Результат

  • Callback работает до отписки, затем перестаёт вызываться.

Полный исходный код

Показать unsubscribe_event.py
from pioneer_sdk2 import Pioneer, Event  # импортируем классы Pioneer и Event из библиотеки pioneer_sdk2
import time                              # библиотека time содержит функции для работы со временем

def event_activate(event):               # функция вызывается при получении события от дрона
    if event == Event.TAKEOFF_COMPLETE:  # если пришло событие завершения взлета
        drone.led_control(r=0, g=1, b=0) # включаем зеленый свет

drone = Pioneer()                        # создаем экземпляр класса Pioneer, устанавливаем соединение

try:                                     # основной код находится внутри блока try
    drone.subscribe(event_activate, Event.TAKEOFF_COMPLETE) # подписываем функцию на событие завершения взлета

    drone.arm()                          # включаем двигатели
    drone.takeoff()                      # взлетаем

    time.sleep(3)                        # ставим паузу на 3 секунды

    drone.unsubscribe(event_activate, Event.TAKEOFF_COMPLETE) # отписываем функцию от события завершения взлета

    drone.land()                         # садимся, двигатели выключатся автоматически

finally:                                 # блок finally выполнится при завершении программы
    drone.close_connection()             # закрываем соединение