Робокросс-2019

В июле 2019 команда Коптер Экспресс в 4-й раз подряд одержала победу на ежегодных испытаниях беспилотных транспортных средств "Робокроссopen in new window". Испытания проводятся на полигоне ГАЗ под Нижним Новгородом.

Основной задачей испытаний в категории БПЛА было локализовать и уничтожить цель — красный воздушный шар — в автономном режиме.

Видео

Реализация

Команда использовала квадрокоптер на базе рамы F450 и платформу Клеверopen in new window. Полный итоговый исходный код доступен для изучения на GitHubopen in new window.

Разработанный пакет robocross2019 разбит на модули: ROS-нодлет red_dead_detection распознает красный шар, balloon.py реализует высокоуровневую логику полета коптера.

red_dead_detection

Нодлет red_dead_detection обеспечивает обнаружение красного шара на изображении с камеры квадрокоптера, смотрящей вперед (топики /front_camera/image_raw и /front_camera/camera_info). Используется простейший метод фильтрации изображения по цвету. Затем вычисляется геометрический центр полученных участков и производится компенсация искажений камеры (cv::undistortPoints).

Используя известное фокусное расстояние камеры (из топика camera_info) вычисляется вектор, направленный в сторону цели. Полученный вектор публикуется в топик /red_dead_detection/direction, причем его система координат (frame_id связана с расположением передней камеры front_camera_optical).

balloon.pyopen in new window

Для полета к шару используется вектор направления red_dead_detection/direction, который используется как setpoint по скорости дрона. Угол по рысканью также устанавливается по направлению к шару. Цель считается уничтоженной, когда на протяжении заданного количества кадров общая площадь участка с красными пикселями меньше определенного порога.