🎯 Полётные миссии go_to_local_point.py

Полёт по локальным точкам

mission_examples/go_to_local_point.py

Взлетает и последовательно посещает три локальные точки, ожидая события POINT_REACHED.

Показан основной сценарий автономного полёта. Подписка на событие POINT_REACHED через threading.Event позволяет дождаться прибытия в точку. Дрон взлетает, летит в (0,0,1), затем в (0,1,1) и (1,1,1), после чего садится. Ошибки и Ctrl+C приводят к посадке.

Как работает

  1. Создать Pioneer() и threading.Event().
  2. Подписаться на pioneer_sdk2.Event.POINT_REACHED.
  3. Выполнить arm() и takeoff().
  4. Для каждой точки вызвать go_to_local_point(x, y, z, yaw=0, time=3) и ждать событие.
  5. Выполнить land().
  6. В finally закрыть соединение.

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

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

ПараметрЗначениеОписание
time3 сЖелаемое время достижения точки.
points(0,0,1) → (0,1,1) → (1,1,1)Маршрут в метрах.

Запуск

cd mission_examples
python3 go_to_local_point.py

Результат

  • Дрон взлетает, облетает три точки и садится.

Безопасность

  • Проверьте зону полёта и заряд аккумулятора.
  • Убедитесь, что активна локальная система навигации (LPS/OPT).

Примечания

  • В README к группе указано, что yaw задаётся в градусах.

Требования

  • Активная локальная навигация.

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

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


drone = Pioneer()                             # создаем экземпляр класса Pioneer, устанавливаем соединение
point_event = threading.Event()               # создаем событие, которое сработает при достижении точки

def point_reached(event):                     # функция вызывается, когда дрон достигает заданной точки
    point_event.set()                         # сообщаем программе, что точка достигнута

def wait_for_point():                         # функция ожидания прилета дрона в точку
    point_event.wait()                        # ждем, пока дрон достигнет заданной точки
    point_event.clear()                       # очищаем событие для следующего ожидания

drone.subscribe(point_reached, pioneer_sdk2.Event.POINT_REACHED) # подписываемся на событие достижения точки

try:                                          # основной код находится внутри блока try
    drone.arm()                               # включаем двигатели
    drone.takeoff()                           # взлетаем

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

    drone.go_to_local_point(x=0, y=0, z=1, yaw=0, time=3) # летим в точку с координатами x=0, y=0, z=1
                                                          # x, y, z - координаты точки в метрах
                                                          # yaw - поворот по курсу в радианах
                                                          # time - время, за которое требуется достигнуть точку
    wait_for_point()                                      # ждем, пока дрон долетит до заданной точки

    drone.go_to_local_point(x=0, y=1, z=1, yaw=0, time=3) # летим в первую точку с координатами x=0, y=1, z=1
    wait_for_point()                                      # ждем, пока дрон долетит до заданной точки

    drone.go_to_local_point(x=1, y=1, z=1, yaw=0, time=3) # летим во вторую точку с координатами x=1, y=1, z=1
    wait_for_point()                                      # ждем, пока дрон долетит до заданной точки

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

except KeyboardInterrupt:                     # если пользователь остановил программу сочетанием Ctrl+C
    print("Остановка программы, производится посадка") # выводим сообщение об остановке программы
    drone.land()                                       # сажаем дрон

except Exception as error:                    # если произошла любая другая ошибка
    print("Ошибка:", error)                   # выводим текст ошибки
    drone.land()                              # сажаем дрон при ошибке

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