Разработка роботизированной платформы

Обзор методов реализации алгоритмов искусственного интеллекта. Примеры интеллектуальных систем, основанных на алгоритмах самообучения и кластеризации данных. Создание общей структурной схемы. Выбор языков программирования и инструментальных средств.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 20.08.2017
Размер файла 1,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

97

Размещено на http://www.allbest.ru/

2

Оглавление

  • Введение
  • 1. Анализ существующих технических решений
  • 1.1 Беспилотные автомобили
  • 1.2 Boston Dynamics
  • 1.3 Прочие системы
  • 1.4 Выводы к разделу 1
  • 2. Структурное решение
  • 2.1 Структурное решение для клиентской части
  • 2.2 Структурное решение серверной части
  • 2.3 Выводы к разделу 2
  • 3. Выбор элементной базы
  • 3.1 Выбор основных вычислительных и исполнительных компонентов
  • 3.1.1 Arduino Uno
  • 3.1.2 Iskra Neo
  • 3.1.3 Raspberry Pi 3
  • 3.1.4 LinkIt One
  • 3.2 Выбор дополнительных радиоэлементов и элементов питания
  • 3.3 Выводы к разделу 3
  • 4. Выбор языков программирования и инструментальных средств разработки
  • 4.1 Выводы к разделу 4
  • 5. Выбор алгоритма самообучения
  • 5.1 Выводы к разделу 5
  • 6. Методы решения поставленных задач
  • 6.1 Проектирование алгоритма самообучения
  • 6.2 Предварительная обработка входных данных
  • 6.2.1 Оператор Собеля
  • 6.2.2 Цветовая схема градаций серого
  • 6.2.3 Необработанные изображения
  • 6.2.4 Результаты исследования зависимости
  • 6.3 Проектирование программных интерфейсов
  • 6.3.1 Разработка программного интерфейса управления клиентом
  • 6.3.2 Разработка программного интерфейса считывания данных
  • 6.3.3 Разработка программного скрипта передачи и приёма данных
  • 6.4 Методы проведения тестирования системы
  • Выводы к разделу 6
  • Заключение
  • Список использованных источников
  • Приложения
  • Исходный код скрипта, передающий коды действий клиенту
  • Исходный код скрипта, считывающий показания датчиков
  • Исходный код класса "teacher"
  • Исходный код класса "neuron"
  • Исходный код класса "som"

Введение

Актуальность

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

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

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

Большинство существующих сегодня систем, использующих в своей работе алгоритмы искусственного интеллекта и методы машинного обучения, в частности, разработаны с целью решения достаточно узконаправленных задач. Для разработки систем, работающих в разных условиях и с разными наборами входных и выходных, необходимо либо вносить изменения в уже существующие алгоритмы, либо разрабатывать новые. Чтобы избежать трат ресурсов на подобные действия, в рамках данной работы было выдвинуто предложение разработать такую самообучающуюся (включающую в принцип своей работы методы машинного обучения без попутного вмешательства человека) систему, которая в максимально возможной степени не зависела бы от типов и вида входных и выходных данных и была бы способна охватить сразу множество видов решаемых задач. Сам алгоритм самообучения и обработки входных данных при этом следует выделить в отдельный модуль, который в том числе может располагаться удалённо по отношению к остальным частям системы. Такой подход позволит понизить связность системы, максимально абстрагироваться от конкретных решаемых задач и сделать разрабатываемую систему интегрируемой в другие различные по назначению системы.

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

Как один из ярких примеров использования алгоритмов машинного обучения в системах реального времени и кластеризации входных данных следует рассмотреть разрабатываемые сегодня многими компаниями и организациями беспилотные транспортные средства. Их особенностью является полная автономность в процессе работы, позволяющая не только избежать влияния на передвижения человеческого фактора, но и эффективнее использовать возможности транспортных средств (далее - "ТС"), целесообразнее прокладывать маршруты, вести диагностику внутренних систем ТС, использовать ТС в опасных условиях или при перевозке опасных грузов, предоставлять более широкие возможности по использованию ТС людьми с ограниченными возможностями. На сегодняшний день существует ряд проектов по разработке подобных транспортных средств, потому наработки и открытия в этой области могут стать полезными для разрабатывающих подобные системы групп и компаний. Модель же беспилотного ТС (такой моделью может являться роботизированная передвигающаяся платформа с реализованными в ней интерфейсами обмена данными об окружающей среде и системой распознавания и фиксации верных и ошибочных действий) может позволить протестировать предложенную ранее систему самообучения и на основе полученных по ней результатов создать базу для дальнейшей разработки системы принятия решений, не зависящей от вида входных и выходных данных.

Исходя из вышеописанных соображений, авторы данной работы выявили следующие цели и задачи.

Цели и задачи

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

Задачи:

анализ существующих технических решений;

разработка общей концепции системы;

выбор инструментальных и технических средств выполнения;

выбор метода самообучения;

разработка программного обеспечения самообучающейся системы;

разработка аппаратной части системы (роботизированной передвигающейся платформы) для дальнейшего тестирования алгоритма;

разработка физических и программных интерфейсов аппаратной части системы;

интеграция самообучающейся системы в полученный прототип устройства;

тестирование и отладка системы.

алгоритм искусственный интеллект программирование

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

Требования к работе системы

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

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

иметь возможность получать входные значения и выполнять их предварительную обработку (нормализацию и дискретизацию);

быть способным проводить кластеризацию полученных данных;

проводить анализ зависимостей между возможными входными и выходными данными;

корректировать получаемые вышеописанным образом зависимости;

осуществлять взаимодействие с исполняющей (клиентской) частью системы;

хранить полученные результаты после завершения работы.

В свою очередь к исполняющей части системы, включая её аппаратную составляющую, предъявляются следующие требования:

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

возможность преобразования получаемых данных в формат, удобный для дальнейшей передачи вычислительной части системы и обработки;

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

Отдельные требования для механической составляющей аппаратной части системы (роботизированной платформы):

способность передвигаться в пространстве по плоским и слабо наклонным поверхностям;

обеспечение физической устойчивости.

Планируемые результаты

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

По вышеуказанным критериям были предположены следующие результаты:

время отклика клиентской части системы - не более 0.5 секунд (исходя из максимально возможной скорости записи изображения с видеокамеры в поток с последующей его передачей в виде структуры по протоколу TCP/IP);

время отклика серверной части системы - не более 0.5 секунд (исходя из необходимости синхронизации с клиентом);

среднее время обучения системы для входных данных объёмом 100 МБ - не более 4 часов (из соображений ограничения времени тестирования);

процент верных действий клиента - более 80%.

Инструментальные и программные средства

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

интегрированная среда разработки Qt версии 5.0.1 (включая программные библиотеки Qt);

текстовый редактор Vim;

компилятор GCC версии 6.3;

система контроля версий Git и основанный на ней веб-сервис GitHub;

интегрированная среда разработки Arduino IDE версии 1.8.2 (включая как официальные, так и неофициальные программные библиотеки).

Аппаратные средства

Для реализации аппаратной части роботизированной платформы (далее - клиента) были использованы следующие аппаратные средства:

одноплатный компьютер Raspberry Pi 3 B;

программно-аппаратная платформа Arduino Uno;

ультразвуковой дальномер HC-SR04;

видеокамера Raspicam v2.1;

2 коллекторных двигателя;

вычислительный центр (персональный компьютер) (далее - сервер);

дополнительные радиоэлементы и элементы питания (подробнее см. в пункте 4 "Выбор элементной базы").

1. Анализ существующих технических решений

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

1.1 Беспилотные автомобили

Наиболее близкой к классу решаемых в данной работе задач сферой является разработка беспилотных транспортных средств. Как оговаривалось в разделе введения, эти ТС имеют значительные преимущества над пилотируемыми аналогами. Безусловно, для реализации подобных аппаратно-программных комплексов требуется использовать методы обработки и кластеризации входных данных с последующей интеграцией в интеллектуальную систему.

Одним из наиболее активно развивающихся и на данный момент имеющих наибольшую базу тестов (более 1 миллиона км пробега автомобилей) является проект Google Car компании Google Inc. Это ТС запланировано как наиболее простой в эксплуатации малогабаритный автомобиль, рассчитанный на перевозку одновременно 1-5 человек. Помимо непосредственно принятия решений и расчёта маршрутов система Google Car обеспечивает минимальный износ внутренних компонентов, мониторинг состояния компонентов, а также корректировку маршрута в соответствие с дорожными условиями. Важной особенностью в работе автомобилей Google Car является многостороннее распознавание объектов окружающей среды. Для его выполнения система анализирует не только графическое изображение объектов, но и их относительную скорость, расстояние до них, температуру объектов, а также строит полноценную объёмную модель окружающей среды, используя лазерный сканер, испускающий лазерные импульсы в 64 направлениях вокруг автомобиля. Таким образом, на основе глубокого анализа окружающей среды, а также использовании данных о расположении важных дорожных объектов (дорожные знаки, светофоры и пр.) можно подготовить обширную базу знаний, состоящую из возможных ситуаций и соответствующих им действиях автомобиля. [1]

Другим крупным проектом в сфере разработки беспилотных ТС является Spirit of Berlin Свободного университета Берлина. Команда разработчиков Spirit of Berlin первой в Германии получила лицензию на разработку беспилотного автомобиля и вела разработку с целью участия в соревновании DARPA Grand Challenge, проводимого среди разработчиков беспилотных ТС для дальнейшего использования министерством обороны Соединённых штатов Америки. Соревнование проводилось в условиях городской среды, и беспилотные автомобили команд-участников должны были не только доехать до установленного пункта, но и соблюдать правила дорожного движения, иметь возможность маневрировать в потоке автомобилей и осуществлять парковку. Так же, как и многие другие проекты беспилотных автомобилей, Spirit of Berlin в процессе работы строит модель окружающей среды по данным с датчиков и прокладывает маршрут, используя систему глобального позиционирования. В состав системы входят следующие аппаратные компоненты:

система позиционирования GPS;

2 лазерных дальномера, установленные на переднем и заднем бамперах;

лазерный сканер;

2 сонаправленных видеокамеры, составляющие стереопару;

"всенаправленная" (omnidirectional) камера;

вычислительный мейнфрейм из двух компьютеров, соединённых по протоколу Ethernet.

Реализация системы предполагает работу в условиях городской среды, используя установленные в ней камеры и датчики не только для составления карты окружающей среды, но и для распознавания дорожной разметки и движения по ней. При этом лазерные датчики, расположенные в передней и задней частях автомобиля, используются лишь для корректировки данных с GPS-навигатора, данные с которого, получаемые в режиме реального времени, являются решающими при принятии решений системой. Стереопара, получаемая из двух видеокамер, установленных в передней части автомобиля, позволяет избавиться при реализации системы от использования дальномеров и вспомогательных датчиков распознавания объектов - получаемая информация по структуре аналогична информации, получаемой человеческой зрительной системой. Полученное с камеры изображение проходит через подсистему предварительной обработки, где к изображению применяется оператор Собеля, выделяющий границы объектов на изображении и переводящий изображение в чёрно-белый формат. Это позволяет уменьшить объём поступающей информации и ускорить в дальнейшем её обработку. Кроме того, оператор Собеля хорошо подходит для распознавания дорожной разметки и дорожных знаков. Вся обработка данных производится на вычислительном мейнфрейме повышенной надёжности - в случае выхода из строя одного из компьютеров мейнфрейма, второй "на лету" включается в работу системы, обеспечивая бесперебойное функционирование. В результате была получена система, обладающая повышенной надёжностью и способная производить максимально быстрые расчёты. Несмотря на то, что система не вошла в число победителей соревнования, по ней имеются достаточно обширные результаты успешного тестирования на специальном полигоне при средней скорости передвижения автомобиля, равной примерно 60 км/ч. [2]

В вышеупомянутом соревновании DARPA Grand Challenge победителем стала команда Tartan Racing с их проектом Boss. Для работы системы управления и принятия решений в ней также используются GPS-навигатор, радары, камеры и лазерные сканеры. При этом алгоритм работы состоит из трёх "слоёв": планирования задачи, планирования поведения и планирования движения. Первый слой работает непосредственно с системой глобального позиционирования и прокладывает маршрут внутри города, определяя, по каким улицам движения будет оптимальным. Слой планирования поведения отвечает за выполнение правил дорожного движения. Так, с его помощью система распознаёт, когда следует поменять полосу движения и определяет приоритет участников движения на перекрёстках. После внесения исправлений в траекторию поведенческий слой передаёт свои выходные данные слою движения. Слой движения выполняет наиболее тонкие расчёты, связанные с объездов возникающих на пути препятствий. Таким образом, слои, передавая друг другу посредством программных интерфейсов обработанные ими данные об окружающей среде, выполняют последовательно сужающиеся по значимости и увеличивающиеся по требованиям к скорости обработки данных задачи. Устроенная таким образом архитектура позволяет параллельно работать над разработкой и отладкой разных по виду задач, ослабляя связность элементов системы. [3]

1.2 Boston Dynamics

Boston Dynamics - корпорация, занимающаяся разработкой передвигающихся роботов для выполнения разных видов задач. В рамках данной работы следует рассмотреть основные разработки этой компании как пример реализации подвижных роботизированных платформ с элементами распознавания объектов окружающей среды и системой принятия решений. Финансированием Boston Dynamics занимается отдел министерства обороны США DARPA, а также на протяжении некоторого времени компания числилась дочерней фирмой Google Inc.

Одной из наиболее успешных (и наиболее приближенных к разрабатываемой аппаратной системе) разработок Boston Dynamics стал проект BigDog. На его базе в дальнейшем были разработаны многие проекты компании, такие как Cheetah (самый быстрый на сегодня робот-шагоход), LittleDog (почти полный аналог BigDog), LS3 (концепт боевого робота). BigDog представляет собой шагающего робота на 4 роботизированных ногах (Рис.1).

Рис.1 Внешний вид Boston Dynamics BigDog

Основное назначение BigDog - перемещение по пересечённой местности, где это возможно, с переносом грузов с суммарным весом до 150 кг. Для ориентации на местности и распознавания окружающих объектов робот использует стереопару из 2 видеокамер и лазерный сканер, позволяющий создавать объёмную модель окружающей среды. На момент окончания разработок BigDog был способен переносить груз заявленного веса, передвигаться по горизонтальным и наклонным (до 45 градусов) поверхностям, удерживать равновесие в случае возможного падения и восстанавливать исходное положение после падения. Для удержания равновесия и передвижения по наклонным плоскостям встроенная интеллектуальная система анализирует положение "тела" робота относительно его ног. В зависимости от полученных углов наклона (в двух координатах на горизонтальной плоскости) система принимает решение о направлении движения ног и о длине каждого шага. Так, при спуске с горы робот сокращает длину шагов для сохранения горизонтального положения, а при падении в сторону система старается передвигать ноги в сторону падения, осуществляя попытку удержать устройство от падения. Несмотря на значительные успехи в разработке системы и дальнейших планах компании по её развитию в направлении большей автономности, аппаратная платформа имела значительный недостаток - электромоторы, двигающие робота, издавали громкий звуковой шум. Недостаток так и не был устранён, и от системы пришлось отказаться. Однако, как было сказано ранее, Boston Dynamics продолжают разрабатывать другие системы, где используются наработки из проекта BigDog. [4]

Другим важным проектом Boston Dynamics стал антропоморфный робот Atlas (Рис. 2), о разработке которого Boston Dynamics объявили в 2016 году.

Рис.2 Внешний вид Boston Dynamics Atlas

Atlas также предназначен для передвижения по пересечённой местности, где не может проехать колёсная платформа. Однако в отличие от BigDog и производных от него проектов Atlas имеет лишь две ноги и две роботизированные руки. С помощью рук робот способен осуществлять подъём и перенос грузов, а также карабкаться по наклонным поверхностям. Как и BigDog, робот способен удерживать состояние равновесия и подниматься в случае падений. Для ориентации в пространстве и распознавания объектов в нём используется вращающийся лазерный сканер, установленный в верхней части. На данный момент алгоритм, встроенный в Atlas, позволяет ему распознавать по особым меткам грузы, переносить их, выбирать оптимальные для прохождения к выбранному пункту маршруты с учётом наклона поверхности, преодолевать препятствия, в том числе открывать двери. [5] На данный момент какой-либо другой информации о работе и сферах использования робота не предоставляется, однако имеющиеся на сегодня результаты работы системы показывают высокую скорость и корректность работы робота.

1.3 Прочие системы

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

Примером самообучающейся системы можно считать связку алгоритма принятия решений "AlphaGo" и аппаратуры, которая делала ходы. AlphaGo - это программа для игры в го, разработанная компанией Google DeepMind. Эта система знаменита тем, что стала первой в мире системой искусственного интеллекта, которая выиграла матч с профессиональным игроком в го (игра с Фань Хуэем в октябре 2015 года). Основным отличием данной программы от подобных является то, что изначально она не была заточена на выигрыш, а лишь "знала" правила игры. Также, в отличие от ранних систем, она не имела непосредственного взаимодействия с базой данных сыгранных партий во время игры. Принцип её действия основан на обучении нейросети с помощью базы данных прошлых игр, а также на дообучении во время игры. Так, например, AlphaGo после матча с Фань Хуэем смогла обыграть свою же "старую" версию до матча. Чтобы оценить позицию или предсказать следующий ход, AlphaGo использует свёрточные нейронные сети. На её вход подаётся несколько обработанное изображение доски с дополнительной информацией. Единственный приём, который изначально знает сеть - "ситё" (захват в лестницу). Для отбрасывания "плохих" ходов AlphaGo использует стратегические нейронные сети - они искусственно уменьшают возможное число ходов. Именно эта нейронная сеть обучается по методу обучения с подкреплением во время игры. Программу периодически заставляют играть со своей видоизменённой версией, чтобы избежать явления переобучения. После отсеивания заведомо плохих ходов строится дерево возможных ходов с текущей позиции игры, производя возможные правдоподобные симуляции развития игровой ситуации. Во время игры для каждого хода подсчитывается оценка, которая позволяет понять, насколько хорошим является рассматриваемый вариант хода. Для решения подобных вычислительных задач, требуются большие вычислительные мощности. Обучение системы происходило на платформе Google Cloud в течение нескольких недель. При игре используется порядка 1200 процессоров и 180 графических процессоров. При этом сами игроки и обозреватели характеризуют отдельные ходы программы как "креативные" и освещающие нетипичные решения, которые игроки могут использовать в дальнейших партиях [6]. [7] Данная система является примером использования "многоярусных" нейросетей, использующих несколько последовательно выстроенных методов обучения без предварительного наличия информации о среде своего применения. Кроме того, методы, использованные в ней, теперь применяются DeepMind в других сферах, включающих в себя алгоритмы искусственного интеллекта.

Одним из проектов выпускных студенческих работ Королевского технологического института в Стокгольме, Швеция, стала разработка автономной роботизированной передвигающейся платформы, способной объезжать препятствия. Как видно из постановки этой задачи, данный проект максимально близок по идее и реализации к системе, разрабатываемой в данной работе. Работа по созданию платформы была выполнена студентом вышеупомянутого института Джейкобом Экезундом в 2016 году. Для реализации поставленной задачи он использовал роботизированную платформу с тремя колёсами, драйвером электромоторов, программно-аппаратной платформой Arduino Uno и двумя ультразвуковыми дальномерами HC-SR04 (Рис.3 и Рис.4).

Рис.3 Схема соединений устройства роботизированной передвигающейся платформы

Рис.4 Внешний вид готовой роботизированной передвигающейся платформы

Ультразвуковые дальномеры расположены на передней и правой частях платформы. Во время работы платформа постоянно едет вперёд, одновременно "прижимаясь" вправо. Однако она удерживает дистанцию в 15 сантиметров путём регулярного считывания значений с дальномеров и корректировки направления и скорости вращения двух задних электромоторов. При этом в случае, если передний дальномер не обнаруживает объектов, расположенных ближе, чем в 50 сантиметрах от него, скорость выбирается максимальной, что соответствует подаче постоянного напряжения с контроллера двигателей на электромоторы. Если же расстояние меньше 50 сантиметров, то скорость может варьироваться между значениями в 0, 20, 50 и 80 процентов от максимальной, что достигается путём подачи контроллером переменного напряжения с разной временной задержкой на максимальном значении напряжения. Таким образом, платформа совершает круговые движения против часовой стрелки по предоставленному ей помещению. Несмотря на относительную простоту такой системы, в рамках выполнения поставленных в данной работе задач полезно рассмотреть принципы управления платформой на низком уровне и основы работы с датчиками.

1.4 Выводы к разделу 1

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

2. Структурное решение

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

а) получать информацию об окружающей среде;

б) обеспечивать стабильное соединение между сервером и клиентом посредством сетевых протоколов;

в) обеспечивать максимально быстрый поиск решений в ситуациях, встречавшихся ранее;

д) обеспечивать принятие решений для ситуаций, не встречавшихся ранее;

е) передавать выбранное решение в виде кода действия клиенту;

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

Рассмотрим подробнее особенности каждой из поставленных задач:

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

для обеспечения соединения между сервером и клиентом (пункт б) был выбран стандарт связи 802.11b (Wi-Fi, 2.4 ГГц). Этот стандарт позволяет обеспечивать стабильное удалённое соединение на достаточном расстоянии и с достаточной шириной и скоростью работы канала, что обеспечивает достаточное время отклика сервера, минимизированное время передачи данных между сервером и клиентом, а также позволяет сделать сервер и клиент физически независимыми, что важно при условии, что сервер является массивным и крупногабаритным относительно платформы клиента. Передача данных производится с использованием TCP-сокетов;

для поиска решения в ситуации, встреченной системой ранее (пункт в), было принято решение формировать базу знаний из описывающих встреченные ситуации значений и выбранных для этих ситуаций решений (кодов действий). При этом такая база знаний должна храниться локально в файловой системе клиента для устранения задержек, связанных с запаковкой данных, передачей их с клиента на сервер и обратно и распаковкой данных. При этом максимальную скорость обработки встреченной ранее ситуации будет обеспечивать также и то, что локальная хранилище данных клиента содержится на microSD-карте класса V30, что позволяет с минимальными задержками искать объёмные данные по файлу базы знаний. Идентичный файл базы знаний также хранится и в файловой системе сервера;

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

для обеспечения выполнения клиентом корректных действий (пункт ж) была составлена таблица возможных действий. Эти действия с указанием их кодов приведены в Таблице 1. По полученному (от сервера, либо из локальной базы знаний) коду действия клиент выставляет значения собственных скорости и направления движения. Эти значения также приведены в Таблице 1 для каждого из двух двигателей, соответственно каждому коду действия. Все значения, записанные в Таблице 1, являются безразмерными величинами. В процессе выполнения действий клиент записывает в локальный лог-файл информацию о корректности своих действий. Корректным считается действие, в результате которого клиент не остановился без причины и не столкнулся с препятствием.

Таблица 1. Соответствие кодов действий клиента, их кодов и значений скорости и направлений движения клиента для каждого из двигателей

Наименование действия

Код действия

Значение направления движения

Значение скорости движения/Значение подаваемого напряжения, В

Левый двигатель

Правый двигатель

Левый двигатель

Правый двигатель

Остановка

0

Как на предыдущем шаге

Как на предыдущем шаге

0/0

0/0

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

1

1

1

255/5

255/5

Движение вперёд и влево

2

1

1

128/3.3

255/5

Движение вперёд и вправо

3

1

1

255/5

128/3.3

Движение назад

4

-1

-1

255/5

255/5

Движение назад и влево

5

-1

-1

128/3.3

255/5

Движение назад и вправо

6

-1

-1

255/5

128/3.3

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

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

2.1 Структурное решение для клиентской части

Для решения поставленных задач была составлена структурная схема клиента, представленная на Рис. 5.

Рис.5 Структурная схема клиента

Расшифровка условных обозначений компонентов системы приведена в Таблице 2. Стрелками показаны направления передачи данных между компонентами.

Таблица 2. Условные обозначения компонентов системы

Условное обозначение

Расшифровка

SB-computer

Одноплатный компьютер

Microcontroller

Программно-аппаратная платформа микроконтроллера

Motor shield

Плата аппаратного драйвера электродвигателей

Processing center

Вычислительный центр (сервер)

Database

Локальная база знаний клиента

Camera

Цифровая видеокамера

Rangefinder

Ультразвуковой дальномер

Wi-Fi module

Модуль Wi-Fi, обеспечивающий соединение по стандарту 802.11b

Left Motor

Левый коллекторный электродвигатель

Right Motor

Правый коллекторный электродвигатель

Наличие сервера на структурной схеме клиента обусловлено необходимостью показать схему обмена данными между клиентом и сервером. С учётом выбранных аппаратных средств разработки (см. раздел 1, подраздел 1.4 "Аппаратные средства") получаем структурную схему клиента, представленную на Рис.6.

Рис.6 Структурная схема клиента с учётом выбранных аппаратных средств

Wi-Fi модуль при этом фактически входит в состав одноплатного компьютера Raspberry Pi 3 B и показан на Рис.1 и Рис.2 отдельным компонентом для большей наглядности используемых физических интерфейсов.

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

2.2 Структурное решение серверной части

Задачей серверной части является преобразование "ситуации" (вектора чисел) в номер одного из возможных действий. Задача разработки такого программного обеспечения разбивается на несколько подзадач:

а) Разработка алгоритма принятия решений (нейросети);

б) Разработка оболочки над алгоритмом принятия решений, которая будет осуществлять первичное обучение нейросети;

в) Разработка интерфейса между нейросетью и клиентской частью, будет служить конечным транслятором "ситуации" в номер действия.

Эти подзадачи в рамках ООП образуют следующий набор классов:

а) нейрон - элементарная частица нейросети. Предполагается реализация метода, позволяющая измерить Евклидово расстояние до другого нейрона;

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

в)"учитель" - оболочка над нейросетью, которая должна обладать функционалом обучения сети, а так же быть интерфейсом между нейросетью и клиентской частью, который должен обладать функционалом приёма ситуации от клиента и возврата клиенту номера действия.

В соответствии с определённым набором классов, разработана диаграмма классов (Рис. 7).

Рис. 7. Диаграмма классов серверной части

Следует отметить, что у "ситуации" и "нейрона" класс один и тот же в силу того, что для ситуации все поля и методы класса Neuron одинаковы.

Основными полями класса NeuralNetwork являются:

а) map - вектор нейронов;

б) mapUsage - вектор показателей того, использовался ли соответствующий нейрон в данной эре;

Основными методами класса NeuralNetwork являются:

а) addNewCenter (Neuron situation) - на вход метода подаётся ситуация, которая становится новым нейроном сети;

б) correctWinnerCoordinate (Neuron situation, int winID) - изменить координаты нейрона-победителя;

в) getCluster (Neuron situation) - получить номер кластера по поданной ситуации. Второй параметр отвечает за возможность создания нового нейрона из данной ситуации.

Основными полями класса Teacher являются:

а) map - объект класса NeuralNetwork;

б) translator - двумерный вектор, хранящий статистику соотношения действия и номера кластера при обучении;

Основными методами класса Teacher являются:

а) train (float Rcritical, float v, float dv) - обучить имеющуюся нейросеть всеми имеющимися обучающими выборками с поданными параметрами нейросети;

б) situationToAction (Neuron situation) - выдать номер действия по поданной ситуации.

2.3 Выводы к разделу 2

Разработана общая структурная схема устройства-клиента;

выбраны методы взаимодействия устройств внутри системы и построена таблица кодирования условных сигналов для обмена информацией внутри клиента и между клиентом и сервером;

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

3. Выбор элементной базы

3.1 Выбор основных вычислительных и исполнительных компонентов

Для разработки аппаратных и программных интерфейсов было принято решение использовать программируемые микроконтроллеры. При этом было выявлено два варианта: использование отдельно микроконтроллеров (например, STM32F1) и программаторов к ним или использование готового набора смонтированных печатных плат, таких как Arduino или Iskra Neo. Использование собранного набора значительно проще, так как на плату изначально смонтированы непосредственно микроконтроллер, программатор, интерфейсные порты, аналоговые и цифровые входы и выходы (далее - "пины"), а также имеется возможность подключение готовых модулей и датчиков. Также для подобных плат существует множество удобных в использовании программных библиотек, по которым имеется большое количество наработок и документации. Таким образом, плата может быть запущена “из коробки”, не нуждается в пайке и большом количестве коммуникаций. Отдельный же контроллер требует подключения программатора и адаптеров для подключения внешних устройств по интерфейсам - например, USB или Ethernet. И хотя в большинстве случаев использование отдельного микроконтроллера является более дешёвым и гибким вариантом, выбор был остановлен на использовании готовых плат.

Среди наборов смонтированных печатных плат яркими представителями являются Arduino, Raspberry Pi, Iskra Neo и LinkIt One. Рассмотрим их по отдельности.

3.1.1 Arduino Uno

Аппаратно-программная платформа Arduino широко известна и популярна в использовании, так как стала одной из первых плат, позволяющих без лишних усилий создавать прототипы устройств. Благодаря этому у платформы имеются обширное сообщество, содержательная документация, а также множество недорогих, простых в эксплуатации подключаемых модулей, плат расширения и программных библиотек. [8] Помимо этого, разработчики предоставляют собственную IDE (среду разработки), которая позволяет скомпилировать и загрузить на плату исполняемый код. Одной из важных особенностей платы является наличие как цифровых, так и аналоговых пинов (контактов), способных работать в дуплексном режиме. Также преимуществом Arduino является сравнительная дешивизна аппаратной составляющей.

3.1.2 Iskra Neo

Плата Iskra Neo является “клоном" Arduino от российской компании “Амперка”, представляя собой плату с аналогичным размещением пинов и портов, однако доступна она по более низкой цене. Несмотря на более низкую стоимость (при равных технических характеристиках), Iskra Neo не имеет такого большого распространения, что сказывается на качестве технической поддержки, количестве свободной информации и известных показателях надёжности.

3.1.3 Raspberry Pi 3

Raspberry Pi отличается от предыдущих рассмотренных плат тем, что является полноценным одноплатным микрокомпьютером со сравнительно большим объёмом оперативной памяти, возможностями подключения microSD-носителя с предустановленной операционной системой и прямого подключения к сети. [9]

Таким образом, Raspberry Pi является более мощным устройством, чем контроллер, целью которого являются считывание данных с датчиков и подача напряжения на движущие элементы роботизированной платформы. Однако в дальнейшем Raspberry Pi также используется для наиболее ресурсоёмких процессов - обработки изображения с видеокамеры, соединения с вычислительным центром по Wi-Fi и принятии и передаче контроллеру решения о необходимом действии.

3.1.4 LinkIt One

LinkIt One является платой, разработанной совместно компаниями MediaTek и Seeed Studio. Так же, как и Raspberry Pi, эта плата представляет из себе сравнительно мощный одноплатный компьютер. Преимуществом её является полное совпадение расположения пинов с Arduino, что делает её хорошо совместимой с этой контроллерной платой. Также LinkIt имеет множество интерфейсов - I2C, SPI, UART, преобразователь UART-USB, Bluetooth - и встроенную систему глобального позиционирования. Однако её стоимость в России значительно превышает стоимость аналогов, а по сравнению с Raspberry Pi плата имеет слишком малый объём оперативной памяти и слишком низкую тактовую частоту процессора.

Таким образом, исходя из вышеописанных факторов, было принято решение использовать комбинацию плат Arduino Uno и Raspberry Pi 3.

3.2 Выбор дополнительных радиоэлементов и элементов питания

Для реализации клиентской части системы необходимо выбрать не только модели основных вычислительных/исполнительных компонентов и датчиков, но также и элементы, обеспечивающие подачу на компоненты электропитания и корректные значения токов и напряжений в цепи. Для выбора соответствующей элементной базы необходимо составить принципиальную схему устройства. Составленная принципиальная схема приведена на Рис.3. Так как драйвер электродвигателей целиком адаптирован для работы с платой Arduino Uno и его входные пины расположены идентично пинам Arduino Uno, принципиальная схема клиента была разбита на две части. Подключение электропитания и электродвигателей к драйверу двигателей показано на Рис.4. При этом схемы на Рис.8 и Рис.9 непосредственно связаны цифровыми и аналоговыми пинами Arduino Uno и драйвера двигателей.

Рис.8 Принципиальная схема клиентской части системы

Рис.9 Принципиальная схема подключения электропитания и электродвигателей к драйверу двигателей клиентской части системы

В качестве источника тока 2.1 А на Рис.3 был выбран элемент питания Qumo PowerAid 10000. В качестве источника напряжения 7.5 В на Рис.4 был выбран блок из 5 последовательно включённых гальванических элементов с напряжением 1.5 В на каждом из них. Итоговая элементная база представлена в Таблице 3.

Таблица 3. Элементная база клиентской части системы

Наименование элемента/компонента, номинал

Наименование выбранной модели

Количество

Одноплатный компьютер

Raspberry Pi 3 B

1

Аппаратно-программная платформа микроконтроллера

Arduino Uno

1

Источник тока, 2.1 А

Qumo PowerAid 10000

1

Источник напряжения, 1.5 В

Varta 4103 (A286/LR03/AAA) 1

5

Резистор, 10 кОм

CF-25 (С1-4)

2

Цифровая видеокамера

Raspicam v2.1

1

Ультразвуковой дальномер

HC-SR04

1

Коллекторный электродвигатель

DG02S-A130

2

Драйвер электродвигателей

Amperka Motor shield

1

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

3.3 Выводы к разделу 3

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

для выполнения поставленных задач выбраны основные цифровые датчики, механические элементы и дополнительные радиоэлементы;

составлена принципиальная схема устройства-клиента.

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

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

При выборе инструментальных и языковых средств разработки для написания программного обеспечения клиентской части системы следует иметь в виду, что для работы клиента не требуется объёмное ПО, потому нет смысла пользоваться сложными интегрированными средами разработки (далее - IDE) и создавать крупные проекты из множества файлов. Весь программный интерфейс можно спроектировать в рамках относительно небольшого исполняемого файла скрипта. При этом таких скриптов требуется по одному для управления каждой из плат Rapberry Pi и Arduino.

Для платы Arduino Uno разработчики поставляют собственную IDE "Arduino IDE", которая помимо текстового редактора содержит набор готовых программных библиотек, а также инструменты для компиляции и загрузки готового скрипта на микроконтроллер платы через USB-порт компьютера. Использование данной IDE сильно упрощает и ускоряет написание программного интерфейса платы, а также гарантирует стабильное выполнение загруженных посредством этой среды скриптов (внутри среды скрипты имеют название "скетчи"). Программирование в среде производится на языке программирования C, что позволяет сочетать удобство и гибкость написания программы с малым количеством используемых ресурсов (что особенно важно ввиду наличия у платформы Arduino Uno всего 32 кБ доступной оперативной памяти) и высокой скоростью исполнения скомпилированной программы. Исходя из всех вышеописанных преимуществ для написания программного интерфейса (далее - "прошивка") платы Arduino Uno были выбраны "Arduino IDE" в качестве инструментального средства разработки и язык программирования C в качестве языкового средства разработки.

Разработчики одноплатного компьютера Raspberry Pi не предоставляют собственных инструментальных средств разработки, однако для работы с платой предлагают использовать собственный дистрибутив операционной системы (далее - "ОС") Linux на базе дистрибутива Debian под названием "Raspbian". Использование этого дистрибутива позволяет проектировать и реализовывать сравнительно сложное программное обеспечение с использованием крупных поддерживаемых инструментальных средств. Однако в рамках выполнения поставленных перед клиентской частью задач (обмен данными с сервером, обмен данными с локальной базой знаний, получение и компоновка полученных с дальномера и видеокамеры данных и подача кодов действий платформе Arduino посредством USB-интерфейса) достаточно использовать простые интерпретируемые языки программирования, такие как Python или Shell. Написанные на этих языках скрипты работают медленнее, чем аналогичные программы на компилируемых языках, однако предполагаемой скорости вычислений достаточно для получения ожидаемых результатов, при этом преимущества написания интерпретируемых скриптов следующие:

значительно сокращаются объём написанного кода и время его написания;

упомянутые скриптовые языки имеют удобный синтаксис работы со списками и массивами, не зависящими от типов данных, хранимых в них;

не требуется установка дополнительных пакетов IDE, компиляторов и прочих - интерпретатор языка Shell уже предустановлен в ОС Raspbian (для запуска скриптов, написанных на языке Python, необходимо установить интерпретатор Python);

готовые скрипты можно добавить в init-скрипт ОС - благодаря этому написанный скрипт будет автоматически запускаться при загрузке системы и будет равносилен прошивке платы;


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.