Экспериментальные исследования системы управления поведением интеллектуального мобильного робота RAD

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

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

Оператор делает запрос к роботу:


"Робот, отнеси-ка один кубик к другому кубику".


Фраза разлагается на фразы "Робот" и "Отнеси-ка один кубик к другому кубику" (частичка "-ка" автоматически удаляется). Фраза "Робот" не находит эквивалента в базе знаний. Фраза "Отнеси один кубик к другому кубику" в базе знаний активизирует следующий командный фрейм:


ОТНЕСИ ЧТО КУДА
          объекты  место

При этом параметр "ЧТО" равен "кубик", а параметр "КУДА" равен "к другому кубику".

Согласно алгоритмическому следствию этого фрейма необходимо проверить, что в данный момент находится в руках у робота (идентификатор объекта, который робот держит в руках, хранится в глобальной переменной $Hold; если $Hold=0, то робот ничего не держит в руках). Если в руках у робота объект, идентификатор которого не совпадает с идентификатором объекта, который хранится в параметре "ЧТО", то алгоритмическое следствие фрейма делает запрос "Взять <ЧТО>". В данном случае у робота нет ничего изначально в руках, поэтому $Hold=0. Идентификатор объекта "кубик" определяется путем вызова соответствующего фрейма, который возвращает идентификатор объекта, равный 1. Т.к. 1 $Hold, производится запрос "Взять кубик".

Фраза "взять кубик" активизирует фрейм:


ВОЗЬМИ ОБЪЕКТ
         объекты


У данного фрейма один из синонимов слова "ВОЗЬМИ" является словом "ВЗЯТЬ". Согласно алгоритмическому следствию этого фрейма сначала необходимо проверить, что в данный момент в руках у робота. Если у робота что-то есть в руках ($Hold 0), то вызывается фрейм: "положи <ОБЪЕКТ>".

В данном случае у робота нет ничего в руках. Далее алгоритмическое следствие фрейма "возьми объект" делает запрос "встань перед <ОБЪЕКТ>". В данном случае "встань перед кубик". Нет криминала в том, что слово "кубик" входит в эту фразу не в том падеже.

Фраза "встань перед кубик" активизирует фрейм:


ВСТАНЬ КУДА-ЛИБО
        место


Здесь в качестве параметра "КУДА-ЛИБО" выступает словосочетание "перед кубик". Согласно алгоритмическому следствию этого фрейма необходимо раскрыть понятие "КУДА-ЛИБО". При этом вызывается алгоритмическое следствие фрейма:


ПЕРЕД ОБЪЕКТОМ
       объекты


Здесь в качестве параметра "ОБЪЕКТОМ" выступает слово "кубик". Согласно алгоритмическому следствию этого фрейма необходимо сначала найти объект. Для этого выполняется запрос "найти <ОБЪЕКТОМ>". В данном случае это запрос "найти кубик".

Запрос "найти кубик" активизирует фрейм:


НАЙДИ ОБЪЕКТ
        объекты


В качестве параметра "ОБЪЕКТ" здесь выступает слово "кубик". Алгоритмическое следствие этого фрейма раскрывает понятие "кубик" путем вызова алгоритмического следствия соответствующего фрейма. Алгоритмическое следствие фрейма "кубик" возвращает идентификатор объекта "кубик" равный 1. Этот идентификатор выводится через выходную переменную FindFig на модуль поиска образа. Если образ не найден, то алгоритмическое следствие фрейма "найди объект" начинает поворачивать робота вправо или влево (определяется случайным образом). В данном случае это было левое направление. После поворота влево на видеоизображении был обнаружен объект, похожий на кубик (Рис. 1, б, в). В этом случае для оператора формируется ответ "Объект обнаружен", а выполнение алгоритмического следствия "найди объект" заканчивается с кодом возврата 1 (удача).

После продолжается выполнение фрейма "перед объектом". Согласно алгоритмическому следствию этого фрейма формируется значение выходных сигналов x, y, before и SeekFig таким образом, чтобы задать точку перед объектом "кубик": x=0; y=0; before=200; SeekFig=1. Затем алгоритмическое следствие этого фрейма заканчивается с кодом возврата 1 (удача).

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

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

Алгоритмическое следствие этого фрейма делает запрос "встань <куда>". В данном случае "встань перед кубику". Работа этого запроса была рассмотрена выше. Робот производит поиск кубика (Рис. 1, п, р) и подходит к нему (Рис. 5.24, с). Далее фрейм "отнеси что куда" делает запрос "согнуться, разжать руки, разогнуться, назад, назад, влево". При этом робот нагибается, разжимает руки Рис. 1 (т), разгибается, отъезжает назад Рис. 1 (у) и поворачивается влево Рис. 1 (ф). На этом выполнение всех задач заканчивается.

Рис. 1 Этапы выполнения роботом команды "Робот, отнеси-ка один кубик к другому кубику"


Видео материалы данного эксперимента можно скачать здесь (AVI, Indeo® Video 5.10, 11 Мб).



Назад ]
Дизайн: DynSoft 

Рейтинг@Mail.ru
Используются технологии uCoz