Как я научил квадрокоптер возвращаться домой без GPS: алгоритм «верёвочной лестницы»

🚀 Проблема: GPS нет, дрейф есть

Представьте: квадрокоптер летает в ангаре, на складе или в квартире. GPS не ловит, а барометр и гироскоп дают дрейф в позиции. Что остаётся?

Оптический поток — камера, направленная вниз, отслеживает движение по текстуре пола. Это работает, но:

  • При интегрировании скорости накапливается ошибка.

  • Даже при возврате в начальную точку система продолжает показывать смещение.

  • Нет механизма сброса дрейфа.

Решения вроде PX4 используют EKF2, но они сложны и требуют точной калибровки. Я захотел что-то проще и понятнее.

🧠 Идея: «верёвочная лестница»

Плюс верёвочной лестницы — ты всегда понимаешь, на какой ступеньке находишься.

Применил это к визуальной навигации:

  • Стартовая точка — первая ступень.

  • При удалении — добавляю новые ступеньки (контрольные кадры).

  • При возврате — если текущий кадр совпадает с какой-то ступенькой — обрезаю всю историю после неё.

  • Если вернулся к первой ступеньке — система знает: я дома.

🔧 Как это работает

1. Старт

Камера захватывает первый кадр. Извлекаются ключевые точки (через cv2.goodFeaturesToTrack). Это — нулевая ступень.

2. Движение вперёд

При каждом кадре:

  • Отслеживаю точки через cv2.calcOpticalFlowPyrLK.

  • Сравниваю текущее положение с стартовой точкой.

  • Если удаляюсь от старта — добавляю новую ступень.

3. Возврат

Если текущий кадр совпадает с промежуточной ступенью — удаляю всё, что после.

📦 Выход в offsets.json

Система пишет файл, который читает контроллер.

Плюсы:

  • Простота: только OpenCV и Python.

  • Нет накопления ошибки при возврате.

  • Работает без GPS, IMU, LiDAR.

  • Легко интегрируется.

Минусы:

  • Требует текстурированной поверхности.

  • Пока нет поддержки поворота.

  • Ограничен радиусом видимости точек.

💻 Код: просто и понятно

Полный код — в репозитории:
👉 github.com/VohminV/rope-ladder-tracker

Основная логика — в функции rope_ladder_waypoint_management.

🙏 Заключение

rope-ladder-tracker — это новый взгляд на визуальную навигацию: не как на непрерывное интегрирование, а как на структурированное движение по карте.

#беспилотники #opencv #python #компьютерноезрение #квадрокоптер #роутинг #роутингбезgps #rope-ladder-tracker

Источник: https://habr.com/ru/articles/932254/

Опубликовано в категории: Статьи