• Регистрация
OpenLab
OpenLab +5.59
От живых прототипов к новым технологиям

Разработка системы технического зрения для пространственной ориентации сервисного мобильного робота

05.12.2019

Приводятся результаты экспериментов по разработке системы технического зрения, предназначенной для корректировки движения автономного мобильного робота по центру дорог, тратуаров и коридоров на основе анализа потока видеоданных бортовой монокулярной камеры. Принцип управления движением мобильного робота заключается в минимизации расогласования центра изображений, получаемых с фронтальной видеокамеры, и точки линейной перспективы, образуемой краями и линиями цветовых переходов элементов архитектурных строений и других артефактов. Алгоритм поиска точки линейной перспективы основан на определении центра масс облака точек пересечения диагональных прямых, на которых лежат отрезки, найденные на изображениях с помощью преобразования Хафа. Предложенный алгоритм протестирован на разработанном прототипе автономного мобильного робота с двухуровневой системой управления: нижний реализован на основе микроконтроллерной платы Arduino Mega, а верхний – на основе микрокомпьютера Raspberry Pi, управляющие программы для которых были смоделированы и сгенерированы в среде Simulink.

В 2016 году корпорацией MathWorks был объявлен конкурс "MATLAB and Simulink Hardware Challenge", в рамках которого требовалось разработать и продемонстрировать собственный робототехнический проект с применением MATLAB или Simulink на основе Arduino, Raspberry Pi или других бюджетных встраиваемых плат. Так как наша команда давно и с успехом использует MATLAB и Simulink в образовательных и научных целях, то на тот момент уже скопился достаточный опыт, которым хотелось поделиться. Поэтому, мы с удовольствем взялись за дело.

Нами была выдвинута довольно серьёзная цель: разработать и собрать действующий прототип сервисного мобильного робота, способного автономно передвигаться в закрытых и открытых помещениях вдоль коридоров и тротуаров. Естетсвенно, для выполнения мобильным роботом полноценной работы, например, доставки пиццы или других мелких товаров, требовалось затратить гораздо больше усилий и проект превратился бы к коммерческий. Поэтому, с чисто педагогической точки зрения мы остановились только на реализации функции пространственной ориентации мобильного робота для движения строго по центру коридоров и тротуаров. Для достижения поставленной цели требовалось решить три задачи:

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

Чтобы сделать проект бюджетным и наглядным было решено не использовать дополнительные сенсоры, как например, датчики расстояния, лидары или стереокамеры, а воспользоваться только минимальным набором переферии. Для Raspberry Pi таким является Camera Board –модуль видеокамеры, которая подключается к плате с помощью параллельного интерфейса. Для решения поставленной задачи было решено воспользоваться уникальным и фундаментальным оптическим эффектом – линейной перспективой, одним из следствий которой является то, что горизонтальные и параллельные линии всегда стремятся сойтись в условной точке на горизонте. Благораря повсеместному процессу стандартизации и унификации в архитектуре, отделочных материалах и мебели, точка линейной перспективы отчётлива видна во всех современных артефактах.

Алгоритм выявления точки линейной перспективы состоит из следующей последовательности действий (рис. 1):

  1. перевод изображения из цветного формата в градации серого – уменьшение размерности;
  2. выделение контуров имеющихся в кадре объектов – этап сегментации;
  3. определение в полученном бинарном изображение отрезков с помощью преобразования Хафа – этап кластеризации;
  4. удаление из списка всех вертикальных и горизонтальных отрезков – этап классификации;
  5. определение точек пересечений прямых, на которых лежат оставшиеся диагональные отрезки – вспомогательные операции;
  6. определение величины и знака смещения центра масс полученного облака точек относительно центра изображения – этап принятия решений.

Этапы выявления точки линейной перспективы

Рис. 1   Этапы выявления точки линейной перспективы 

Верхний уровень системы управления мобильным роботом был спроектирован и программно реализован в виде Simulink-модели с помощью Simulink Support Package for Raspberry Pi Hardware, который в итоге позволил сгенерировать исполняемый файл для целевой платы. Графическое представление указанной Simulink-модели, соответствующей предложенному алгоритму определения величины смещения центра кадра отсносительно точки линейной перспективы,  представлен на следующем рисунке.

 Основные функциональные блоки системы технического зрения

Рис. 2   Основные функциональные блоки системы технического зрения

Одной из интересных особенностей разработанной Simulink-модели верхнего уровня управления было то, что в 2016 году в пакете Simulink Support Package for Raspberry Pi Hardware ещё не было специализированного коммуникационного блока по управлению имеющимся на Raspberry Pi COM-портом. А для связи верхнего и нижнего уровней системы управления как раз был выбран именно он. Для преодоления этой временной трудности нами был разарботан блок программной эмуляции COM-порта. Указанный блок был реализован на основе анализа алгоритма работы протокола RS-232 из открытых источников. В результате, с помощью имеющихся в библиотеке Simulink логических элементов и регистров сдвига предложенный блок COM-порта представлял собой эмуляцию аппаратной реализации протокола RS-232 на дискретных элементах. В связи с тем, что плата Raspberry Pi была загружена обработкой потока изображений, то для устойчивой работы прогрмнного COM-порта с принятым протоколом кодирования управляющих команд максимально достигнутая скорость его работы составляла только 9600 Бод. 

Нижний уровень управления движением мобильного робота был реализован на плате Arduino Mega 2560, для которого исполняемый код также генерировался на основе разработанной Simulink-модели (рис. 3), но уже с помощью Simulink Support Package for Arduino Hardware.

Основные функциональные блоки управления нижнего уровня

Рис. 3  Основные функциональные блоки системы управления нижнего уровня

Мобильная платформа представляла собой четырёх колёсное полноприводное шасси, однако боковые оси колёс программно были спарены, а сам робот управлялся по танковому принципу. Колёса были снабжены инкрементными оптическими датчиками поворота. Благодаря этому у нас появилась возможность реализовать ПИД-контоллер для поддержания прямолинейного движения мобильного робота. Алгоритм управления нижним уровнем заключался в прямолинейном движении робота без остановки вдоль вектора, значения которого поступали с верхнего уровня. Протокол передачи управляющего вектора представлял собой массив из 10 байт. Такая избыточность связана с тем, что мы использовали наш старый протокол, который изначально предназначался для дистанционного управления мобильными роботами с помощью стандартных джойстиков. Кстати данная особенность нам сыграла на руку при отладке алгоритма управления. Также на борту находились литий-ионновая батарея напряжением 7,8 В и ёмкостью 2,6 А/ч, понижающий DC-DC преобразователь. Указанные Simulink-модели можно скачать по следующей ссылке, а демонстрацию работы разработанного прототипа сервисного робота посмотреть в следующем видеоролике (если автоматика не сработает, то лучше начинать смотреть  со 142 секунды :)

Предложенная система технического зрения была разработана и протестирована на прототипе автономного мобильного робота с двухуровневой системой управления в реальных условиях. Разработанные и реализованные алгоритмы управления позволили роботу безошибочно двигаться по середине коридоров трёх различных зданий с максимальной для выбранного шасси скоростью – 54 м/мин. Таким образом, полученные результаты дают основание полагать, что полученные алгоритмы могут лечь в основу подпрограмм управления сервисными роботами, предназначенных для погрузочно-разгрузочных работ. Это могут быть роботы-санитары, развозящие еду по палатам больниц, либо транспортные роботы для работы на автономных товарных складах.

 

Теги

    05.12.2019

    Комментарии