Картинка Freepik

Есть одна весьма любопытная область приложения усилий, которая позволит как прокачать свои навыки в целом ряде областей, так и получить на выходе весьма любопытное изделие, которое может быть интересно многим — это создание роботизированных манипуляторов.

Работа в этой области позволит освоить микроконтроллеры, компьютерное зрение, изучить различные виды кинематики манипуляторов.

Для чего можно использовать манипуляторы?


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

Чем-то похоже на калибровку печатного стола у 3D принтеров, хотя это более сложный вариант примерно того же самого:

Тем не менее, гораздо интереснее, быстрее и универсальнее использовать методы компьютерного зрения для взаимодействия с физическими объектами.

Под компьютерным зрением понимается комплекс методов получения и анализа изображений в реальном времени, с последующим переводом (если такое зрение предназначено для оснащения манипулятора) в координаты реального мира и подачи соответствующих управляющих сигналов на двигатели манипулятора.

Даже в простых вариантах, с условно медленно работающими сервоприводами, получается впечатляюще:

Причём манипулятор не обязательно должен быть выполнен в виде руки, встречаются довольно-таки забавные варианты, например, «услужливое мусорное ведро», самостоятельно ловящее мусор творческого хозяина:

Или даже робот-теннисист:

Хотя, как можно заметить, у этого робота существуют явные проблемы в исполнительной части — распознавание работает быстро, а сервоприводы достаточно медленные. Что с этим можно поделать, — об этом несколько ниже.

Ещё одним любопытным применением может быть создание своего робота-бильярдиста, который, будучи объединённым с нейросетью, может представлять собой весьма любопытную конструкцию:

Подобных реализаций роботов имеется довольно большое количество, среди них есть даже построенные на базе робота-пылесоса, ездящего прямо по бильярдному столу!

Или несколько необычный взгляд на ту же самую проблему: компьютерное зрение и исполнительный механизм, расположенные прямо на конце бильярдного кия:

Человек примерно ориентирует кий в пространстве, а точное ориентирование и нанесение удара по шару производятся уже самим роботом.

А может быть, вам не нравятся активные виды проведения досуга? Тогда робот-шахматист ваш выбор:

А вот здесь имеется подробное объяснение проекта робота-шахматиста.

Компьютерное зрение


Как нетрудно увидеть, для всех этих применений требуется компьютерное зрение, которое должно вести захват изображений и их анализ.

Среди основных способов осуществления подобного анализа, можно перечислить такие как:
  • выделение контуров объекта: применение такого подхода существенно упрощает анализ изображения (однако не всегда контур объекта может быть чётко выделен),
  • сравнение изображений по шаблону: такой подход часто используется при поиске на изображении определённых объектов — транспортных средств и т.д.,
  • выделение наиболее характерных признаков и сравнение их с референсным изображением — например, нахождение на изображении лица и его компонентов (глаз, носа и т. д.),
  • сравнение областей изображений на попиксельном уровне, что позволяет найти сходство, если изображение не содержит явные характерные черты,
  • ряд других методов.

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

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

Комплекс представлен модулями с узкоспециализированным функционалом: математического анализа, обработки изображений, графического интерфейса пользователя, ввода/вывода изображений и видео, ряда других компонентов. Общее количество компонентов превышает 2500, что позволяет решать достаточно сложные задачи.

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

Функционал OpenCV не ограничивается анализом изображения, с его помощью можно работать, редактируя изображения (размер, обрезка и т.д.).

По некоторым оценкам, библиотека по скорости своей работы быстрее программного обеспечения для математических вычислений Matlab, однако имеет и свои недостатки, среди которых можно назвать сложность освоения и трудности с запуском на платформах с малыми возможностями (т.е. например, на микроконтроллерах – показывает малую производительность), поэтому, как можно видеть на множестве примеров имеющихся в интернете, даже если в этих примерах и использован OpenCV, он, как правило, запущен на компьютере, в то время как к компьютеру в качестве периферии подключено исполнительное устройство на микроконтроллере ( Arduino и т.д.), таким образом, анализ производится на компьютере, а контроллер является всего лишь «руками» робота.

Не всех такое положение вещей устроит, так как привязывает к большому по габаритам вычислительному устройству, вроде компьютера. В качестве компромиссного решения можно попробовать посмотреть в сторону возможности запуска этой библиотеки на более компактных устройствах, например, на смартфоне или Raspberry PI, установленному прямо на робота в качестве «мозга».

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

Кстати, выше было упомянуто «получение изображений», — как можно понять, OpenCV больше предназначен для анализа достаточно больших изображений, с камер с хорошим разрешением. Но не всегда это требуется, для многих применений достаточно небольшого разрешения. Например, некоторое время назад появилась весьма примечательная камера для микроконтроллера esp32,- esp32 cam, с камерой ov2640 (насколько мне известно, сейчас есть версия с камерой ещё большего разрешения, к сожалению, забыл её название):

image
Картинка: iarduino.ru

Несмотря на свои скромные возможности, — весьма низкая цена (на известном китайском сайте — порядка 500 руб. и даже меньше), беспроводные интерфейсы на борту (wifi, bluetooth), лёгкость программирования из среды Arduino IDE — делают её достаточно привлекательной для самоделок.

Тем не менее, если мы попытаемся взять эту тему «с наскока», то ничего не получится: множество имеющихся в сети мануалов предлагают анализ чуть ли не пошаговых изображений, с очень низким FPS (кадров в секунду). Это автоматически весьма сужает сферу применений этой камеры. Понятно, что это ограничение аппаратного типа (слабоват процессор для больших изображений) и, на первый взгляд, малопреодолимое… Но, никогда не говори «никогда»!

Что, если я скажу вам, что эта камера может вести захват изображений с частотой 60 FPS? И не просто захват, а и производить анализ изображений прямо на борту, с такой же скоростью!

Это открывает прямую дорогу для создания компактных робототехнических решений, без подключения к внешним облачным сервисам и без высоких требований к производительности вычислительной системы на борту робота. На выходе можно получить систему, которая будет занимать всего лишь 1 КБ ОЗУ esp32 cam. В общем, «TinyML — как он есть»… К тому же и камера весьма доступна…

Вкратце, за счёт чего достигаются такие чудеса:
  1. На компьютер скачивается и устанавливается библиотека машинного обучения everywhereml;
  2. Скачивается и устанавливается библиотека для Arduino IDE — EloquentEsp32Cam;
  3. Запускается библиотека машинного обучения, скачанная на первом этапе, подключается камера и начинается захват изображений с неё, в разрешении 160х120 пикселей;
  4. Захваченные изображения уменьшаются до разрешения 40х30 пикселей (может быть всегда подкорректировано, если точность распознавания будет неудовлетворительной);
  5. Преобразование изображений в векторы признаков объектов;
  6. Обучение ML-классификатора;
  7. Перевод обученной модели в C++ и перенос её на esp32.

По оценкам самого автора, подобная процедура позволяет получить весьма производительную конструкцию, позволяющую распознавать отдельное изображение примерно за 12 миллисекунд, что составит порядка 80 кадров в секунду, даже превосходя возможности esp32 cam по числу кадров. Напомним: всё это происходит в реальном времени, прямо на борту esp32 cam, без подключения к внешним сервисам!

Подробное пошаговое объяснение с примерами кода и демонстрационным видео, можно найти вот здесь — для случая классификации изображений (может быть полезно для создания робота-сортировщика, раскладывающего разные предметы, в разные коробки).

Там же имеется и интересный пример нахождения и отслеживания цветового пятна, что может быть полезно для того же бильярда или пинг-понга.

В познавательных целях можно ознакомиться и с другими примерами сайта.

Кстати говоря, если обратить внимание на последовательность анализа изображений для роботов, то нетрудно заметить, что при анализе происходит, скажем так «принудительная деградация» изображения — выделение только одного цвета, оставление только контуров и т.д. А ведь можно пойти и другим путём — уже сразу сформировать минимальное и достаточное (для определённых целей) изображение — скажем, используя самодельный лазерный лидар:

Заинтересовавшиеся, могут изучить файлы показанного выше проекта (код, 3d-модели для печати, электрическая схема соединений).

Механика робота


Однако вернёмся к самому началу нашего рассказа, где мы отмечали, на примере робота теннисиста, что его приводы оставляют желать лучшего из-за малых возможностей в области скорости перемещений. На что теоретически можно было бы их заменить?

И тут нам на помощь придут приводы дельта-типа, которые являются одними из самых быстродействующих, благодаря чему часто используются для целей скоростной конвейерной сортировки:

А теперь самое вкусное — посмотрим, на что способен такого типа робот, если его использовать в качестве теннисиста:

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

С этими мыслями и с желанием найти что-то подобное в сети, мне удалось наткнуться на проект дельта-робота, с открытым программным обеспечением, использующего в качестве компьютерного зрения OpenCV и OpenGL. Робот весьма простой в построении и содержит множество деталей распечатанных на 3D принтере а также карбоновые тяги и алюминиевый корпус. В качестве «мозга» используется Arduino Mega 2560. Разработка позиционируется как быстрый настольный робот для малого бизнеса и образовательных учреждений. Страничку робота на YouTube можно найти вот здесь, а ниже показано одно из его возможных применений — робот-бармен:

Подытоживая этот рассказ, можно сказать, что «железных», а в частности, робототехнических стартапов, в мире запускается не так много, и показанный выше стартап робота-манипулятора является весьма редким экземпляром. Таким образом, создание своей собственной разработки в области манипуляторов является как интересным само по себе, так и позволит освоить множество областей знаний и создать привлекательный продукт, который можно использовать как для собственного развлечения, так и постараться (при наличии желания) превратить его в коммерческую разработку. Например, недорогие роботы-теннисисты, бильярдисты. Или умные мусорные вёдра :-). По крайней мере, в чём точно не откажешь подобным разработкам, — они реально интересны и «вау эффект» точно обеспечен. Собственно, как и продажи ;-).

Telegram-канал с розыгрышами призов, новостями IT и постами о ретроиграх ????️

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


  1. Moog_Prodigy
    21.09.2023 16:05
    +3

    Тема сервоприводов не раскрыта. Дельта-механика конечно штука занятная, но в отличие от машинного зрения быстрые и точные сервоприводы не очень-то и доступны по цене.


    1. Gryphon88
      21.09.2023 16:05

      А еще есть безлюфтовые редукторы и подшипники...


  1. marshallab
    21.09.2023 16:05

    помимо esp32, которая достаточно капризна к качеству кода и загрузке процессора, есть интересный проект OpenIPC. Модуль видеокамеры уже содержит linux, кодеки, быстрый доступ к кадрам, сетевой интерфейс. Про ML распознавание на OpenIPC не читал, но думаю ктото уже пробовал, этож линукс. Хочеш OpenCV, хочешь pyhton с библиотеками.