ESP32-CAM Робототехника с OpenCV: Автономное и телеуправление с контроллером XBOX

В этой статье мы хотим поделиться работой, разработанной одним из наших читателей, которая показывает, как использовать потоковые серверы ESP32/ESP32-CAM в робототехнических системах с использованием OpenCV или OpenCV.js.

ESP32 ESP32-CAM Робототехника с OpenCV: Автономное и телеуправление с контроллером XBOX

Этот проект/руководство был создан Эндрю Р. Сассом (Andrew R. Sass) – одним из наших читателей/подписчиков.

Этот пост является лишь введением в его работу (Эндрю Сасс). Полная работа скомпилирована в PDF-документ с полными описаниями и объяснениями кода. Вы также можете получить доступ ко всем кодам, использованным в документе. Вы можете получить доступ и скачать всю его работу на странице GitHub:

Эндрю Сасс уже написал руководство об обнаружении и отслеживании цвета с помощью OpenCV.js на сервере видеопотока ESP32-CAM: ESP32-CAM Web Server with OpenCV.js: Color Detection and Tracking.

Введение

ESP32-CAM может выступать в роли сервера видеопотока для различных клиентов. В своей работе он рассматривает ESP32-CAM в роли сервера видеопотока для браузерного клиента и для клиентского окна Python. Затем он показывает, как обрабатывать видео с помощью OpenCV.js или OpenCV для получения выходных данных для автономной и ручной работы робототехники. Кроме того, он также создал пользовательский интерфейс/управление с помощью контроллера XBOX.

ESP32-CAM Сервер видеопотока – Браузерный клиент

Когда ESP32-CAM выступает в роли сервера видеопотока для браузерного клиента, мы можем использовать OpenCV.js в браузере для обработки изображения и отправки результатов обратно на сервер.

ESP32-CAM Сервер видеопотока – Python клиент

С другой стороны, когда ESP32-CAM выступает в роли сервера видеопотока для Python-клиента, мы получаем доступ к более обширной библиотеке программного обеспечения OpenCV, чем в настоящее время доступно в OpenCV.js, поскольку OpenCV установлен на ноутбуке пользователя, а не на ESP32.

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

Общее описание систем

Ниже приведено краткое вводное наглядное описание работы системы потоковой передачи через браузер.

Система потоковой передачи через браузер

Браузерный сервер публикует свой IP-адрес и доступен через веб-браузер. После нажатия кнопки Color Track на экране Chrome, отображается экран видео клиента, показанный ниже.

ESP32-CAM OpenCV Браузерная система

Красный участок экрана выше показывает пример данных датчиков, передаваемых сервером ESP32 клиенту.

Контроллер XBOX передает данные джойстика, кнопок, триггеров и D-pad на ESP32. ESP32 является фронтальной частью робота и отправляет/получает данные на/от основного процессора робота. Этот режим, в котором оператор-человек управляет роботом, называется режимом Teleop (телеуправление).

Когда выпадающий список под левой стороной видео установлен на NO, отображается вид, показанный на следующем изображении.

ESP32-CAM Робототехника Телеуправление с контроллером XBOX

Это автономный режим, в котором робот находится под программным управлением. В этом режиме для управления роботом используется OpenCV (компьютерное зрение). На верхнем левом виде автор в красной шапке. На нижнем правом виде показана белая точка приблизительно в нижней центральной части экрана. Эта точка перемещаемая и зондирует позицию экрана, где программа может измерить RGB-содержимое изображения. В этом примере зонд с белой точкой был первоначально перемещен к красной шапке, где было выполнено измерение, а затем возвращен в исходное положение.

RGB-ползунки были установлены на значение измерения RGB красной шапки. На верхнем правом виде показано бинарное изображение, соответствующее цветовому диапазону, установленному ползунками. Шапка является наибольшей частью изображения, соответствующей диапазонам ползунков. При нажатии кнопки Tracking синий контурный прямоугольник окружает наибольшую единичную часть белого, идентифицируя её как цель. Координаты центроида синего прямоугольника отображаются на экране и передаются на ESP32, а затем на основной процессор робота для автономного наведения (см. изображение ниже).

Диаграмма, описывающая систему потоковой передачи через браузер робота, показана ниже.

ESP32-CAM Робототехника с OpenCV: как это работает

Для полного описания системы, пожалуйста, скачайте полный PDF-документ.

Система потоковой передачи Python

Сервер потоковой передачи ESP32-CAM (описанный в документе) публикует свой IP-адрес сразу после загрузки.

Клиентская программа Python использует этот IP-адрес и отображает окно Python, показанное слева на изображении ниже.

Программа контроллера XBOX (также описанная в документе) также использует этот IP-адрес на порту 82/ws для отображения графического пользовательского интерфейса (GUI), показанного справа.

ESP32-CAM OpenCV система потоковой передачи Python

Белая полоса с данными в левом окне на рисунке выше и белые данные в нижней части GUI – это данные, которыми обмениваются две программы. Другими словами, контроллер XBOX может управлять выполнением программы клиента, а данные клиента могут использоваться контроллером XBOX и могут быть переданы контроллером на сервер ESP32.

На рисунке выше контроллер XBOX дает команду клиентской программе идентифицировать КРАСНЫЙ объект. Затем клиентская программа передает координаты центроида КРАСНОГО объекта контроллеру XBOX. Если оператор-человек переводит контроллер в автономный режим, координаты центроида передаются на сервер, а затем на основной процессор робота для навигации.

Диаграмма системы потоковой передачи Python показана ниже.

ESP32 ESP32-CAM Робототехника с OpenCV Демонстрация контроллера XBOX

Для полного описания системы, пожалуйста, скачайте полный PDF-документ.

Заключение

Это было лишь краткое описание систем, разработанных и описанных Эндрю Сассом в его документе. Вы можете получить доступ ко всей его работе по следующим ссылкам:

Все вопросы следует задавать на его странице Github (ESP32 Robot Systems Tutorial repository), чтобы получить ответ от Эндрю.

Он уже написал другое руководство об обнаружении и отслеживании цвета с использованием OpenCV.js, которое вы можете посмотреть по следующей ссылке:

Надеемся, что этот проект был для вас полезен.

Спасибо за чтение.