🚀 Введение
VisionPilot — простая, независимая и расширяемая система автономного автопилота, созданная в качестве примера на базе следующих компонентов:
-
Betaflight (полетный контроллер)
-
Orange Pi 5 с NPU Rockchip (аппаратное ускорение инференса YOLO)
-
ELRS (управление)
-
FPV-камера
Все вычисления и управление происходят на Orange Pi 5.
🔍 Проблематика и цель
Что важно:
-
Простота реализации и воспроизведения
-
Минимум оборудования — только доступные и недорогие компоненты
-
Реальная автономность работы системы
Цель VisionPilot:
-
Обнаружение объектов (человек, препятствие) с помощью камеры
-
Автоматическое удержание объекта в центре кадра
-
Плавная корректировка курса в реальном времени
-
Максимальная автономность работы без постоянного вмешательства оператора
🧠 Аппаратная архитектура
Камера → Orange Pi 5 (YOLO с использованием NPU) → offsets.json offsets.json → RC-конвертер на Python → CRSF-пакеты → Betaflight полётный контроллер
Сигнал ELRS всегда активен, однако автопилот корректирует управление только при активации, например, с помощью переключателя на канале 12.
🎯 YOLO + NPU на Orange Pi 5
-
Используется YOLOv5 (или другая версия), экспортированная в формат RKNN
-
Инференс выполняется на NPU Rockchip
-
Время обработки одного кадра (320×320) составляет примерно 30 мс
Работа системы включает:
-
Захват изображения с камеры через OpenCV
-
Вырезка центрированной области размером 320×320 пикселей
-
Запуск инференса модели YOLO на NPU
-
Поиск первого обнаруженного объекта и вычисление смещений offset_x, offset_y
-
Усреднение смещений по последним 20 значениям для сглаживания
-
Запись усреднённого смещения в файл offsets.json
⚙️ CRSF‑модуль: от JSON до управления
Вторая часть системы — Python-скрипт, который:
-
Считывает данные из файла
offsets.json -
Масштабирует пиксельные смещения в CRSF-совместимые значения RC (диапазон 172–1811 тиков)
-
Формирует CRSF-пакет с проверкой целостности CRC8
-
Отправляет пакет по UART на полётный контроллер Betaflight
Особенности работы модуля:
-
Трекинг активируется при переключении канала 12 на значение выше 1700
-
Газ (throttle) удерживается на уровне, не ниже стартового, чтобы обеспечить стабильность
-
При выключении трекинга:
-
Скрипт прекращает передачу команд автопилоту
-
Возвращает управление обратно оператору вручную
-
🧪 Результаты тестов
-
YOLO-инференс на NPU: 25–30 FPS
-
Задержка от кадра до отправки RC-пакета: 50 мс
💡 Почему VisionPilot?
-
Просто — работает всего на одной камере и «ядрёном» Python-коде без лишних сложностей
-
Мощно — использует инференс на NPU Rockchip, что обеспечивает быструю и эффективную обработку
-
Гибко — легко заменить модель детекции, настроить пороги срабатывания и добавить новые классы объектов
-
Надёжно — встроенная логика удержания уровня газа, контроль целостности данных через CRC и усреднение значений для плавной работы
🛠️ Что дальше?
-
Добавить обнаружение тонких объектов и возможность сегментации (segmentation) — для ещё более точного понимания сцены
-
Разработать надежные Failsafe‑механизмы — например, если объект теряется из вида, автопилот сможет автоматически вернуться домой
-
Внедрить поддержку Optical Flow — уже на стадии активной разработки для улучшения слежения и стабилизации
-
Реализовать Telemetry через MAVLink — чтобы в реальном времени следить за состоянием автопилота и его параметрами
-
Расширять список распознаваемых объектов и обучать модели на новых, более сложных датасетах для универсальности
📌 Заключение
VisionPilot демонстрирует, что автономный автопилот — это не просто сложная технология из научной фантастики, а реальный проект, который можно реализовать на доступных платформах и с минимальными затратами. От точной YOLO-детекции до надежной CRSF‑упаковки — всё в одном решении, готовом к дальнейшему развитию и интеграции.
🔗 Ссылки
Исходники и примеры: VohminV/VisionPilot
ссылка на оригинал статьи https://habr.com/ru/articles/928514/
Добавить комментарий