Статьи о роботах

Алгоритм поиска пути для роботов

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

Автор: Андрей Маркеев


Язык для описания роботов RoboML

Стандартизация представления данных является важным моментом любой области знаний. RoboML - язык, который решает эту задачу в области робототехники.

Автор: Андрей Маркеев


XML-спецификация RoboML

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

Автор: Андрей Маркеев


Робот-охранник

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

Автор: Андрей Маркеев


Робот и искусственный интеллект

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

Автор: Андрей Маркеев


Робот для программиста

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

Автор: Андрей Маркеев


вернуться к списку статей

Робот и искусственный интеллект

Автор: Маркеев Андрей

При участии: Логинов Ярослав

Перепечатка материалов статьи
разрешена только с письменного разрешения автора,
и при указании прямой ссылки на его сайт.

Вступление

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

Как известно, любой робот состоит из двух частей:

  1. Железной - которая часто ставится во главу угла
  2. Программной, или поведенческой - про которую часто забывают

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

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

Дорогой читатель безусловно возмутится: "Как же создать что-то большее в домашних условиях? Нужны промышленные компьютеры, сложные логические цепи, нестандартные периферийные интерфейсы." Не совсем так: вполне можно использовать и обычный старенький персональный компьютер, а лучше - ноутбук. Для начала хватит, а если все пойдет хорошо - можно будет и на промышленные компьютеры пересесть.

Использование ПК вместо "мозгов" робота

Итак, что нам дает использование персоналки вместо мозгов будущего робота? Главный вопрос начинающих - как управлять внешними устройствами? Ответ прост: через порты компьютера COM (RS232) и LPT. Это решение дает возможность реализовать как управление двигателями, так и обратную связь.

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

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

Хотя, в данном случае, на взгляд автора, преимущества перевешивают:

  • Возможность подключения массы hi-tech периферийных устройств и использование их при формировании поведения - без дополнительной трудоемкой работы, ведь все эти устройства могут быть подключены к компьютеру и управляться программно. Эта возможность дает неограниченный потенциал для расширения функциональности нашего робота. Например, можно подключить web-камеру, GPS-навигацию, телефон, можно спокойно пользоваться звуковой картой для записи и воспроизведения звуков, и т.п.
  • Возможность использования всей вычислительной мощности компьютера и языков программирования высокого уровня для формирования поведения. Объезд препятствий - примитив по сравнению с открывающимися возможностями.
  • Возможность использования технологий сферы искусственного интеллекта (как, например, нейронные сети) - для формирования поведения

Использование компьютера дает нам шанс сделать что-то по-настоящему стоящее. Есть некоторые сложности с реализацией механики робота - но они решаемы. Все материалы Вы можете найти, например, на сайте автора - robot.paccbet.ru. В этой же статье давайте сконцентрируемся на программировании поведения.

Программирование поведения

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

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

Конечный автомат позволяет реализовать любые "предустановленные" модели поведения, так сказать врожденные линии поведения объекта (в нашем случае - робота).
Конечный автомат описывает такие формулы поведения, как:
Если я работал, и вдруг пошел дождь, то пойти домой
В более общем варианте:
Если объект находился в состоянии A, и случилось событие X, то объект переходит в состояние B.
Роль конечного автомата - это функция, задающая правило определения нового состояния объекта.
НовоеСостояние = КонечныйАвтомат(Событие,ТекущееСостояние)

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

Обычно для обучения нейронных сетей используют некоторую базу правильных ответов. Это естественно, ведь если наш робот чему-то научился, то ему необходимо знать, правильно ли он этому научился. Как пример, робот вполне может научиться объезжать препятствия - разворотом на 180 градусов! Что, конечно же, является неверным решением.

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

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

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

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

Список внутренних событий и оценка их :

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

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

  1. Люди-наладчики - те, кто настраивает робота
  2. Люди-обыватели - те, кто пользуется услугами робота и непосредственно взаимодействует с роботом
  3. Некоторые статические препятствия - положение которых долго не меняется и робот не может его изменить
  4. Динамические препятствия - препятствия, которые то появляются то исчезают но всегда в одном месте
  5. Непредсказуемые препятствия - препятствия которые нельзя предвидеть
  6. Источники звука
  7. Источники света
  8. Место подзарядки
  9. Маяки для определения местоположения

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

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

  1. Отдавать команды с пульта дистанционного управления (ДУ)
  2. Разговаривать с роботом / кричать на робота (воздействие звуком)
  3. Воздействие светом (закрывать робота от света/освещать его фонарем)
  4. Являться препятствием (непостоянным)
  5. Заряжать робота (высшее блаженство хихи)
  6. Выключать робота
  7. Обездвиживать робота

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

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

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

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

Заключение

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