🎯 Полётные миссии
mission_with_frames.py
Миссия по точкам с видеопотоком
mission_examples/mission_with_frames.pyОблетает квадрат по четырём точкам, публикуя видео с камеры в поток pioneer_camera.
Дрон взлетает, выходит в начальную точку и проходит 4 точки маршрута, описанные списком waypoints. Во время ожидания прибытия кадры камеры публикуются в поток pioneer_camera.
Как работает
- Создать
Pioneer(),Camera(),ImageViewer(). - Взлететь и выйти в начальную точку (0,0,1).
- Для каждой точки из
waypointsвызватьgo_to_local_point. - Во время ожидания публиковать кадры через
imshow("pioneer_camera", frame). - После маршрута выполнить
land(). - В
finallyзакрыть ресурсы.
Используемые методы SDK
Pioneer()arm()takeoff()go_to_local_point()point_reached()land()Camera()get_cv_frame()ImageViewer()imshow()ImageViewer.close()Camera.stop()close_connection()
Ключевые параметры
| Параметр | Значение | Описание |
|---|---|---|
waypoints | 4 точки | Маршрут: (1,0), (1,1), (0,1), (0,0) на высоте 0.7 м. |
time | 3 с | Время достижения точки. |
Запуск
cd mission_examples
python3 mission_with_frames.pyРезультат
- Квадратный маршрут и поток
rtsp://10.42.0.1:8889/pioneer_camera/.
Видеопотоки
rtsp://10.42.0.1:8889/pioneer_camera/
Безопасность
- Свободная зона не менее 1×1 м, устойчивая навигация.
Примечания
- Кадры публикуются только во время ожидания прибытия в точку.
Требования
- Локальная навигация.
- Драйвер камеры
gstreamer.
Полный исходный код
Показать mission_with_frames.py
from pioneer_sdk2 import Pioneer, Camera, ImageViewer # импортируем классы из библиотеки pioneer_sdk2
import time # библиотека time содержит функции для работы со временем
drone = Pioneer() # создаем экземпляр класса Pioneer, устанавливаем соединение
camera = Camera() # создаем экземпляр класса Camera для получения кадров с камеры
viewer = ImageViewer() # создаем экземпляр класса ImageViewer для трансляции видео
def show_camera(): # функция вывода видео с камеры дрона
frame = camera.get_cv_frame(timeout=1.0) # получаем один кадр с камеры
# timeout=1.0 - время ожидания кадра в секундах
if frame is not None: # проверяем, что изображение получено
viewer.imshow("pioneer_camera", frame) # отправляем изображение в RTSP-трансляцию
def wait_for_point(): # функция ожидания прилета дрона в точку
while not drone.point_reached(): # ждем, пока дрон не достигнет заданной точки
show_camera() # показываем видео с камеры во время полета
time.sleep(0.1) # ставим небольшую паузу, чтобы не нагружать программу
def go_to_start_point(): # функция взлета и выхода в начальную точку
drone.arm() # включаем двигатели
drone.takeoff() # производим взлет
drone.go_to_local_point(x=0, y=0, z=1, yaw=0, time=3) # летим в начальную точку
# x, y, z - координаты точки в метрах
# yaw - поворот по курсу в градусах
# time - время, за которое нужно достигнуть точку
wait_for_point() # ждем, пока дрон долетит до начальной точки
def fly_through_points(points): # функция полета по заданным точкам
for point in points: # перебираем все точки из списка
drone.go_to_local_point( # отправляем дрон в текущую точку
x=point["x"], # координата точки по оси X
y=point["y"], # координата точки по оси Y
z=point["z"], # координата точки по оси Z
yaw=point["yaw"], # поворот по курсу в градусах
time=3 # время, за которое нужно достигнуть точку
)
wait_for_point() # ждем, пока дрон долетит до текущей точки
waypoints = [ # список точек для полетного задания
{"x": 1, "y": 0, "z": 0.7, "yaw": 0}, # точка 1
{"x": 1, "y": 1, "z": 0.7, "yaw": 0}, # точка 2
{"x": 0, "y": 1, "z": 0.7, "yaw": 0}, # точка 3
{"x": 0, "y": 0, "z": 0.7, "yaw": 0}, # возврат к начальной точке
]
try: # основной код находится внутри блока try
go_to_start_point() # выполняем взлет и выход в начальную точку
fly_through_points(waypoints) # выполняем полет по заданным точкам
drone.land() # производим посадку после завершения полета
except KeyboardInterrupt: # если пользователь остановил программу сочетанием Ctrl+C
print("Остановка программы, производится посадка") # выводим сообщение об остановке программы
drone.land() # сажаем дрон
except Exception as error: # если произошла другая ошибка
print("Ошибка:", error) # выводим текст ошибки
drone.land() # сажаем дрон при ошибке
finally: # блок finally выполнится в любом случае
viewer.close() # останавливаем RTSP-трансляцию
camera.stop() # останавливаем получение кадров с камеры
drone.close_connection() # закрываем соединение с квадрокоптером