В рамках регионального этапа хакатона “Кубок РТК: Высшая лига”, который проходил 12-13 октября в Москве, наша команда MISIS_alpha разработала автономного робота с функцией распознавания дорожных знаков и возможностью следовать по маршруту, используя эти знаки. Этот проект объединил в себе современные технологии компьютерного зрения и автономной навигации.

О соревнованиях

Организаторами соревнований выступили ГНЦ РФ ЦНИИ РТК. Хакатон длился два дня и проходил на специально оборудованном полигоне, имитирующем реальные задачи, отражающие одну из проблем больших вызовов Стратегии научно-технологического развития Российской Федерации.

Полигон включал задания, направленные на проверку алгоритмов технического зрения и навигации роботов. Роботы, запрограммированные участниками, должны были за отведенное время последовательно выполнить задачи в автономном режиме. Это позволяло оценить не столько механические характеристики робота, сколько его «интеллектуальные» способности.

Задача хакатона

Основная цель: обеспечить автономное передвижение робота в условиях городской среды. Робот должен был самостоятельно добраться до точки, обозначенной ArUco-маркером, используя распознавание дорожных знаков и светофора.

Технологии и инструменты

Для реализации проекта мы использовали следующие технологии:

- Lego Mindstorms ev3 — для создания базовой конструкции робота.

- Python — основной язык программирования.

- OpenCV — для реализации алгоритмов компьютерного зрения.

- Raspberry Pi 4 — для обработки данных с камеры.

Выбор инструментов

Мы остановились на платформе Lego Mindstorms, так как она оказалась интуитивно понятной и легко интегрируемой с Raspberry Pi 4. Это позволило сократить время на прототипирование и сосредоточиться на алгоритмах автономного управления.

Реализованный функционал

1. Распознавание дорожных знаков:

   - Использовались алгоритмы из библиотеки OpenCV для анализа изображений с камеры.

2. Поддержка ArUco-маркеров:

   - Для идентификации финиша маршрута.

3. Распознавание сигналов светофора:

   - Включена обработка цветовых индикаторов, определяющих разрешение движения.

Работа в команде

Наша команда состояла из четырёх человек, и мы распределили задачи следующим образом:

- Разработка кода для камеры (OpenCV): Егорова Кристина, Зеленцова Фаина.

- Разработка кода для моторов: Плешевич Милена, Муромцев Александр.

Каждый из участников внёс свой вклад в успешную интеграцию всех компонентов системы.

Технические аспекты

Работа с камерой

Код для обработки изображений был написан на Python с использованием OpenCV. Основные задачи включали:

  • Распознавание дорожных знаков.

  • Обнаружение ArUco-маркеров.

  • Определение состояния светофора.

Управление движением

На стороне моторов реализовано:

  • Управление скоростью и направлением движения в зависимости от входных данных.

  • Калибровка поворотов, точное выполнение манёвров, необходимых для достижения заданной цели.

Тестирование и результаты

Тестирование кода

Мы провели серию тестов, чтобы убедиться в корректности работы всех компонентов. Камера успешно распознавала знаки и светофоры, а робот выполнял автономные манёвры без внешнего вмешательства.

Демонстрация

Фото файла клиента (справа) для работы моторов, фото файла сервера (слева) для работы камеры.
Фото файла клиента (справа) для работы моторов, фото файла сервера (слева) для работы камеры.
Фото файла клиента (справа) для работы моторов, фото файла сервера (слева) для работы камеры.
Проведение тестов взаимодействия файлов.
Проведение тестов взаимодействия файлов.
Модель робота.
Модель робота.

Важность и перспективы

Проект важен тем, что позволяет продемонстрировать возможности создания автономных решений на основе доступных инструментов, таких как Lego Mindstorms и OpenCV. Он подчеркивает, как простые технологии можно использовать для обучения, разработки сложных систем, включая распознавание дорожных знаков и автономное управление роботом.

Комментарии (1)


  1. sunsexsurf
    17.12.2024 06:16

    код скриншотами? Вы б хоть гитхаб бы дали, чтоль...
    на левом скриншоте не понял, зачем делать from cv2 import aruco, но при этом в коде продолжать использовать cv2.aruco