пятница, 29 августа 2008 г.

Старая идея самодельного робота

Промелькнула в моей RSS-ленте одна добрая и старая идея о способе изготовления самодельного робота. Идея, которая и мне в свое время пришла в голову. И на нее был даже сделан упор в моей дипломной работе, когда я представлял первого сделанного мной робота. Напомню, все материалы, необходимые для строительства данного робота, представлены на моем сайте «Самодельный робот».

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

"Вспомнили" об этой идее организаторы проекта KidBots (англ. "роботы для детей"), и выложили на своем сайте руководство и пару программ на Basic'е, для создания несложного робота на основе старенького компьютера. Отмечу, что в их варианте компьютеру предписывается стоять на столе, а робот привязывается к компьютеру LPT-кабелем. Соответственно, робот сможет отъехать от своих "мозгов" не более чем на 30 метров :)

Предназначен проект, по словам авторов, для недоразвитых развивающихся стран. Несмотря на некоторую обидность такого определения, посмотрим в лицо фактам: нам бы хотя бы такую "робототехнику" организовать бы в ВУЗ'ах - и то было бы здорово! А то, кроме некоторых столичных университетов, роботами нигде больше не пахнет, к сожалению :(

P.S. Раз уж заговорили о роботах на основе компьютеров, упомяну небольшую такую новость от компании VIA, которая, если вы еще не забыли, специализируется на создании материнских плат компактных размеров. Дак вот, на прошедшей недавно международной выставке роботов в столице Тайвани - городе Тайбэй - было представлено несколько роботов, успешно созданных на основе платы Pico-ITX. Так что вот, они приходят к нам!

четверг, 28 августа 2008 г.

Война роботов. Началось!

Еще совсем недавно мир гремел сообщениями о войне в Южной Осетии. А сегодня роботы начали уничтожать друг друга.

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

К нашим баранам: на этот раз действие происходило в юго-восточной части Ирака, и в главной роли оказался американский БПЛА MQ-9 Reaper, который сбил другой беспилотный аппарат, представлявший собой дистанционно управляемую бомбу.

Преимуществ у БПЛА довольно много, а недостатков - мало. БПЛА, как правило, стоят на 80% меньше, чем аналогичные по функциям пилотируемые самолеты; используют на 90% меньше топлива; могут оставаться в воздухе в 2-3 раза дольше, чем современные реактивные истребители. Недостаток основной один - беззащитность перед электронными "глушилками" (см. статью Чтобы не было конфуза... Настоящее и будущее БПЛА).

среда, 27 августа 2008 г.

Робототехника и ИИ: нейронные сети.

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

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

Итак, для начала нужно понять, что такое нейронная сеть, и каков общий принцип ее действия.

Всем, наверное, известно, что идея искусственной нейронной сети (ИНС) появилась в процессе исследования строения человеческого мозга. Биологические нейроны ведут себя не так уж и сложно: у каждого из них есть некоторое количество входов (синапсов), к которым могут присоединяться аксоны от других нейронов. Каждый вход имеет собственный "вес" (который может изменяться). Если сумма весов активных входов (активным считается вход, к которому присоединен аксон возбужденного нейрона) превышает некоторое число, нейрон возбуждается, и воздействует через собственный аксон на все входы нейронов, к которым он присоединен.

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

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

Тогда на выходе последнего в сети ряда нейронов мы получим решение.

Если известно, что решение неверно, значит и весы некоторых входов неверны. Таким образом, обучение нейронной сети - это настройка весов для каждого из нейронов.

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

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

Обратите внимание, поиск зависимостей между наборами данных. Между наборами данных. Наборами известных заранее, тестовых данных. Я как программист могу сказать, вот тестируешь, тестируешь, тестируешь программу - день, два, неделю - добиваешься чтобы она блестела, сияла и ну просто была идеальна. Приносишь ее заказчику. И она не хочет у него работать... :) И это не кривые руки, это тестовые наборы данных!

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

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

Выводы:

  1. Нейронная сеть всегда может быть заменена более понятными алгоритмами или математическими расчетами.
  2. Нейронную сеть нереально отладить.
  3. В любой серьезной задаче нейронной сети с вероятностью в 99,9% будет обучена неполно или вообще неправильно.

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