roboforum.ru

Технический форум по робототехнике.


Как правильно писать сценарии поведения робота?

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

Re: Как правильно писать сценарии поведения робота?

Сообщение Scorpio » 01 дек 2016, 01:30

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

Продолжу развлекаться - совершенствовать язык сценариев для "лунохода". Конечно мы должны позволить пользователю создавать разные сценарии под разными именами или номерами. Также задавать режимы их исполнения: Пуск, Останов, Пауза, Продолжить.
Код: Выделить всёРазвернуть
СТОП->{Стоп(),Миссия1.СТОП}
ПРЕПЯТСТВИЕ.ПОЯВИЛОСЬ->{Стоп(),Звук("Ошибка"),Миссия1.ПАУЗА}
ПРЕПЯТСТВИЕ.ИСЧЕЗЛО->{Миссия1.ПРОДОЛЖИТЬ}
ПУСК->{Миссия1.ПУСК}
Миссия1={Вперед(50),Вправо(30),Влево(80),Звук("ОК")}

Похоже на язык программирования для маленьких детей. Но на самом деле все концепции изначально базируются на протых вещах.
Вот интересно, вписывается ли этот сценарий в концепцию автоматного программирования, или уже нет?
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Как правильно писать сценарии поведения робота?

Сообщение Dmitry__ » 01 дек 2016, 05:05

Scorpio писал(а):Интерпретатор или компилятор -это лишь средство. Суть от этого не меняется: процессор получит какой-то набор конечных инструкций в машинных кодах.

Ну я не дописал прошлое сообщение. Слишком много надо клаву топтать, но вопрос таки всплыл.
Здесь меняется подход к сценариям. Если сценарии записываются на флешку, то задача практически неразрешимая для гибкого программирования. Красиво - да. Читаемость через 10 лет - да. Гибкость - нет. Если сценарии - парадигма программирования, то можно писать любой сложности программу, но читаемость программы будет обратно пропорциональна сложности алгоритма.

Scorpio писал(а):Похоже на язык программирования для маленьких детей.

Ты так до 1С дойдешь :D

Код: Выделить всёРазвернуть
// В тексте макета табличнго документа заменим вхожнения строки-ключа
// на строку значения
Функция УстановитьЗначениеКлючаВМакетеТД(макетТД,стрКлюч,стрЗначение)
   
   // получим область (ячейку) содержащую строку с ключом,
   // например ключ = "{номерДоговора}"
   областьСКлючом = макетТД.НайтиТекст(стрКлюч);   
   
   // если в тексте макета такая строка с ключом найдена,
   // - заменяем в тексте строку-Ключ на строку-ЗначениеКлюча
   если областьСКлючом <> неопределено тогда
      текстСКлючом = областьСКлючом.Текст;   
      стрРезультат = СтрЗаменить(ТекстСКлючом,стрКлюч,стрЗначение);
      областьСКлючом.Текст = стрРезультат;        
   КонецЕсли;         
   
КонецФункции

// Создать табличный документ
// заменить в тексте табличного документа строки-Ключи на строки-Значения
Функция СоздатьТабличныйДокумент(ИмяМакета) 
   
   ТабДокумент  = Новый ТабличныйДокумент;
   ТабДокумент.ИмяПараметровПечати = "ПараметрыПечатиДоговор";
   
   макетТД = ПолучитьМакет(ИмяМакета);   
   
   стрКлюч = "{НомерДоговора}";
   стрЗначение = "777";
   УстановитьЗначениеКлючаВМакетеТД(макетТД,стрКлюч,стрЗначение);
   
   стрКлюч = "{ДатаДоговора}";
   стрЗначение = "01.01.2011";
   УстановитьЗначениеКлючаВМакетеТД(макетТД,стрКлюч,стрЗначение);      
   
   ОбластьМакета = макетТД.ПолучитьОбласть("ВесьДокумент");
   ТабДокумент.Вывести(ОбластьМакета);
   
   Возврат ТабДокумент;
   
КонецФункции   
   
Функция  ПечатьТД()   Экспорт
   
   ИмяМакетаТД = "Договор";
   ТабДокумент = СоздатьТабличныйДокумент(ИмяМакетаТД);
   
   Возврат ТабДокумент;
КонецФункции // Печать


Scorpio писал(а):Вот интересно, вписывается ли этот сценарий в концепцию автоматного программирования, или уже нет?

Я считаю, что вписывается. Назовем "событийно-автоматное программирование" :)

Добавлено спустя 5 минут 37 секунд:
Мда, все описано до нас "программирование с явным выделением состояний"

В дальнейшем автоматный подход был распространен на событийные системы, которые называются также "реактивными" [6]. В них указанные выше ограничения сняты. Как следует из названия этих систем, в них среди входных воздействий используются события, в качестве выходных воздействий применяются произвольные процедуры, а в качестве операционных систем — любые операционные системы реального времени.

Для программирования событийных систем с применением автоматов был использован процедурный подход, и поэтому такое программирование было названо "программирование с явным выделением состояний" [7].


Добавлено спустя 6 минут 28 секунд:
И такое есть:
Объектно-ориентированное программирование с явным выделением состояний.
Да тыщи их. Что только человек не придумает, чтобы не писать программы.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Как правильно писать сценарии поведения робота?

Сообщение smur » 01 дек 2016, 08:11

В примере:
СТОП->{Стоп(),Миссия1.СТОП}
ПРЕПЯТСТВИЕ.ПОЯВИЛОСЬ->{Стоп(),Звук("Ошибка"),Миссия1.ПАУЗА}
ПРЕПЯТСТВИЕ.ИСЧЕЗЛО->{Миссия1.ПРОДОЛЖИТЬ}
ПУСК->{Миссия1.ПУСК}
Миссия1={Вперед(50),Вправо(30),Влево(80),Звук("ОК")}

Есть смешение сценария и обработки событий. Как мне кажется, лучше разделять задачи и средства выполнения. Есть миссия - Вперед(50),Вправо(30),Влево(80),Звук("ОК"), она будет главной. События типа - Пуск, Стоп, Препятствие нужно убрать на более низкий уровень. На более низком уровне определиться с состояниями, переходами, входными переменными и входными событиями, с выходными переменными и функциями. На перовой картинке "смешанный" граф обработки сценария. На второй - только сценарий. По идее для него и граф не особо нужен. Графы требуются, чтобы в логике не запутаться, если много входных и выходных переменных и действий на переходах или внутри состояний. Плюс есть возможность рассматривать вложенные структуры тоже в виде графов.

Добавлено спустя 11 минут 38 секунд:
https://www.dropbox.com/sh/lhf6wa6x61q9 ... nohod1.jpg
https://www.dropbox.com/sh/lhf6wa6x61q9 ... nohod3.jpg

Добавлено спустя 20 минут 44 секунды:
https://www.dropbox.com/s/v9f7rng1w5t3l ... 4.jpg?dl=0

Добавлено спустя 1 час 9 минут 40 секунд:
Вложенный автомат Вперёд в рассматриваемом Луноходе может быть таким:
https://www.dropbox.com/s/p25c6km18hvq0 ... 1.jpg?dl=0
В автомате Вперёд три состояния, это 2 - Стоп, в котором вызывается автомат 4.Стоп. Этот вложенный (ещё один уровень вложения) автомат 4.Стоп останавливает двигатели и делает другие действия, которые мы захотим прописать при нахождении в данном состоянии. (Либо просто ф-ю z, вместо автомата с логикой, если просто остановить двигатели)
Состояние 1 - Вперёд по команде е1 или по событию !е6. Содержит вложенную ф-ю z1. Не вложенный автомат, а ф-ю, тк логику работы Вперёд мы на этом уровне прописываем и нам надо только моторы включить на Forward.
Состояние 3 - пауза, если во время движения наткнулись на препятствие, событие е6. Когда преп. убирают, то переходит обратно в состояние 1 - Вперёд по инверсии события !е6.
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

Re: Как правильно писать сценарии поведения робота?

Сообщение smur » 01 дек 2016, 12:20

Вложенный в состояние Пауза автомат Препятствие может иметь несколько состояний. Либо можно рассматривать разные варианты автоматов Препятствие которые будут вызываться по разным событиям (обработчиком событий, по ф-ии входов). Состояние Ожидание - ждёт N тактов/секунд и потом либо выходит на автомат Стоп (через инициализацию состояния автомата Стоп либо прямым вызовом автомата Стоп) и сбрасывает тем самым дальнейшее выполнение сценария, либо переходит в состояние - Объезд. В свою очередь состояние объезд может иметь вложенный автомат - Объезд со своей логикой либо несколько автоматов с разной логикой вызываемые по разным результатам формулам обработки входных событий/переменных. Итд итп - декомпозиция по состояниям (режимам).
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

Re: Как правильно писать сценарии поведения робота?

Сообщение smur » 01 дек 2016, 18:00

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

//--- this file is machine generated ---

#include "common.h"
#include "log.h"

common_t cm;

//-------------------------------------------------------
// A0 - Forward
//-------------------------------------------------------
void A0( ubyte e )
{
ubyte y_old = cm.y0;

#ifdef A0_BEGIN_LOGGING
log_a_begin(0, y_old, e);
#endif

switch( cm.y0 )
{
case 1:// Вперёд
A1(e);
if((e == 2))
{
cm.y0 = 4;
}
else
if((e == 3))
{
cm.y0 = 2;
}
break;

case 2:// Вправо
A2(e);
if((e == 2))
{
cm.y0 = 4;
}
else
if((e == 4))
{
cm.y0 = 3;
}
break;

case 3:// Влево
A3(e);
if((e == 2))
{
cm.y0 = 4;
}
break;

case 4:// Стоп
A4(e);
if((e == 1))
{
cm.y0 = 1;
}
break;

default:
#ifdef A0_ERRORS_LOGGING
log_write(LOG_GRAPH_ERROR, "Ошибка в автомате A0: неизвестный номер состояния!");
#else
;
#endif
}

if( y_old == cm.y0 ) goto A0_end;

#ifdef A0_TRANS_LOGGING
log_a_trans(0, y_old, cm.y0);
#endif

switch( cm.y0 )
{
case 1:// Вперёд
A1(0);
break;

case 2:// Вправо
A2(0);
break;

case 3:// Влево
A3(0);
break;

case 4:// Стоп
A4(0);
break;

}

A0_end: ;
#ifdef A0_END_LOGGING
log_a_end(0, cm.y0, e);
#endif
}

void A1( ubyte e ){}
void A2( ubyte e ){}
void A3( ubyte e ){}
void A4( ubyte e ){}

Добавлено спустя 18 минут 2 секунды:
Сорри, я не тот Visio преобразовал, не Вперёд, а урезанный сценарий Вперёд - Вправо - Влево - Стоп.
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

Re: Как правильно писать сценарии поведения робота?

Сообщение Scorpio » 01 дек 2016, 20:22

Графы получились симпатичные. Попался таки не ленивый человек, smur! Хотя, для такой простой задачи, они скорее усложняют восприятие.
smur писал(а): События типа - Пуск, Стоп, Препятствие нужно убрать на более низкий уровень.

В приведенном мной примере подход событийный. Где, инициатором любого действия или последовательности действий, является событие. Событийным подходом мы часто пользуемся, когда пишем оконные приложения. Форма всегда находится в ожидании события: щелчка на кнопке, ввода текста и т.д. Робот, в программном смысле для нас тоже является объектом, со своими методами свойствами и событиями. Т.е. такой подход к нему тоже применим. (Это я не поучаю, а для себя пытаюсь сделать какие-то обобщения :) ) Проблема такого подхода, что при сложной, разветвленной логике, когда одно событие может генерировать десяток различных действий, в зависимости от дополнительных условий, теряется нить последовательности происходящего. Появляется знаменитый switch, а те же таблицы переходов, как мы видели, окончательно убивают читабельность программы. Хотя, конечно, делают код более компактным. Так же меня всегда напрягало то обстоятельство, что уже выполняющийся участок кода м.б. запущен повторно при возникновении того-же события. Та же кнопка ПУСК. Значит на событие придется ставить защелку- триггер, который потом придется сбрасывать.
Другой подход, когда событие изменяет свойство (состояние) робота, при этом не генерируя непосредственно ни каких действий. Т.е. робот стоял, а теперь он двигается. Та часть программы, которую мы называем сценарием, периодически опрашивает состояние робота и исходя из результатов, принимает решение, что делать дальше. Получается последовательное представление действий, а не параллельное. Что гораздо лучше воспринимается. Но, и тут есть свои недостатки. Например состояние ПРЕПЯТСТВИЕ приходится опрашивать весьма часто, что приводит к умельчению шагов.
Видимо самый правильный - это комплексный подход, концепцию которого я и хотел тут выработать.
Идея всей этой темы была изначально очень простая: Та часть кода, в которую возможно предстоит вносить изменения во время эксплуатации робота, или его развитии, находится в отдельном месте (классе, вкладке, файле) и оформляется по определенным правилам, гарантирующим быстрое ее понимание, как создателем, так и сторонним пользователем. Т.е. отладили навигацию по карте - забыли про нее. Пусть она будет где-то в недрах твоей программы и устроена как угодно хитро. А помним только про функцию, которая нам говорит куда по этой карте ехать и зачем.
Я, в принципе, так и стараюсь делать. Все настройки робота, которые возможно надо будет менять при эксплуатации, хранятся в отдельном классе, а свойства тех классов, где они используются, загружают эти настройки при инициализации. Фразы для робота тоже хранятся отдельно, чтобы не искать по всему коду, где их поменять. И т.д. Я подозревал, что все именно так и поступают, и просто хотел выяснить кто как пишет то, что я называю сценарием.

Добавлено спустя 55 минут 19 секунд:
Как развитие этой темы, появляется другая интересная возможность, о которой тоже тут говорили. Если мы оформляем этот самый сценарий в виде отдельного файла и, соответственно, пишем к нему интерпретатор. То сценарии сможет писать любой желающий и в том числе сам робот. Ничего фантастического в этом не вижу. Например, собирался провести такой эксперимент с Ванессой: для того, чтобы добраться до места назначения она рассчитывает оптимальный маршрут по карте, по принципу ближайшего расстояния. Это уже можно назвать генерацией сценария поведения. Можно его сохранить в файл и считать сценарием проезда из пункта А в Б. Далее, робот обнаруживает, что на самом коротком маршруте стало появляться не обозначенное на карте препятствие в одном и том же месте. Т.е. маршрут уже не очень оптимальный. Робот запоминает это обстоятельство (опыт) и вносит изменения в собственные сценарий. Конечно, робот может хранить свой опыт и маршруты во внутренней БД и не считать это сценарием. Прелесть сценария в том, что пользователь, может его легко прочитать, наблюдая за "полетом мысли и фантазии" своего робота.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Как правильно писать сценарии поведения робота?

Сообщение Dmitry__ » 01 дек 2016, 20:45

Scorpio писал(а):То сценарии сможет писать любой желающий и в том числе сам робот.

А не проще сразу написать езду с обходом препятствий? Как роботы пылесосы? Написать красивый алгоритм перемещения, с возможностью менять свойства поведения при перемещении -слон/пожарник/исследователь/пьятницо :). В том-то и дело, что интеллект этих самогенерируемых сценариев ничтожный.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Как правильно писать сценарии поведения робота?

Сообщение Scorpio » 01 дек 2016, 21:16

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

Добавлено спустя 8 минут 39 секунд:
Пока, в этой теме, я только понял, что никто тут не делает роботов у которых предполагается менять сценарии поведения, и, соответственно, этим не заморачивается.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Как правильно писать сценарии поведения робота?

Сообщение Dmitry__ » 01 дек 2016, 21:39

Scorpio писал(а):Проще вообще роботостроительством не заниматься, т.к. практической пользы от этого мало

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

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

Все равно, наверно, не обьяснил...

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

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

Изображение

Добавлено спустя 2 минуты 7 секунд:
Scorpio писал(а):Добавлено спустя 8 минут 39 секунд:
Пока, в этой теме, я только понял, что никто тут не делает роботов у которых предполагается менять сценарии поведения, и, соответственно, этим не заморачивается.

Вот на это я и пытался ответить выше :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Как правильно писать сценарии поведения робота?

Сообщение Виктор Казаринов » 01 дек 2016, 22:10

Приведу цитату из главы 2.4. книги Рассела и Норвига "Искусственный интеллект Современный подход", ссылку на которую я давал выше.
"Простейшим видом агента является простой рефлексный агент. Подобные агенты выбирают действия на основе текущего акта восприятия, игнорируя всю остальную историю актов восприятия."

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

У такого робота в наличии должен иметься базовый набор рефлексов - простейших поведений. Каждый рефлекс я запишу в виде простого продукционного правила ЕСЛИ-ТО:
-----------------------Правила----------------------------
-------------------Правила миссии 1-----------------------
Правило01: ЕСЛИ МИССИЯ=МИССИЯ1 ТО СоздатьФакт(ВПЕРЕД1)
Правило02: ЕСЛИ МИССИЯ=МИССИЯ1 И ФАЗА=ВПЕРЕД1 ТО Вперед(ВПРАВО1, 50)
Правило03: ЕСЛИ МИССИЯ=МИССИЯ1 И ФАЗА=ВПРАВО1 ТО Вправо(ВЛЕВО1, 30)
Правило04: ЕСЛИ МИССИЯ=МИССИЯ1 И ФАЗА=ВЛЕВО1 ТО Влево(ЗВУК1, 80)
Правило05: ЕСЛИ МИССИЯ=МИССИЯ1 И ФАЗА=ЗВУК1 ТО Звук(СТОП, "ОК")
--------------End of Правила миссии 1---------------------

--------Правила рефлекторного поведения робота------------
------------------Сенсорные правила-----------------------
Правило06: ЕСЛИ ПРЕПЯТСТВИЕ=ПОЯВИЛОСЬ ТО СоздатьФакт(ПАУЗА), Звук(NULL, "Ошибка: препятствие")
Правило07: ЕСЛИ ПРЕПЯТСТВИЕ=ИСЧЕЗЛО ТО СоздатьФакт(ПРОДОЛЖИТЬ)
--------------End of Сенсорные правила--------------------

------------------Эффекторные правила---------------------
Правило08: ЕСЛИ ДЕЙСТВИЕ=СТОП ТО Стоп()
Правило09: ЕСЛИ ДЕЙСТВИЕ=ПАУЗА ТО Пауза()
Правило10: ЕСЛИ ДЕЙСТВИЕ=ПРОДОЛЖИТЬ ТО Продолжить()
------------End of Эффекторные правила--------------------
-----End of Правила рефлекторного поведения робота--------
-----------------End of Правила---------------------------

-----------Исполнительный механизм робота-----------------
Представим исполнительный механизм робота (его эффекторы) в виде набора специальных функций, принимающих на вход два параметра:
1. Значение шаблона факта ДЕЙСТВИЕ, который нужно создать просле окончания выполнения функции
2. Числовое значение, необходимое для выполнения этой функции.
Например, функция Вперед(ВПРАВО1, 50) после своего успешного выполнения должна выдать факт ВПРАВО1. Результатом выполнения должно быть перемещение робота вперед на 50 каких-то единиц измерения, например, см.
Еще исполнительный механизм должен не просто выполнять функцию, а иметь возможность приостановки своей работы в случае выполнения встроенной в него функции Пауза() или полной отмены выполнения текущей функции при выполнеии функции Стоп().
Функция Продолжить() продолжает выполнение приостановленной функции, если таковая имеется.
Исполнительный механизм робота работает асинхронно по отношению к основному циклу движка продукционных правил.
-------End of Исполнительный механизм робота--------------

----Принципы действия движка продукционных правил---------
1. Движок состоит из списка шаблонов правил (см выше Правила), списка поступивших в программу фактов, FIFO очередь экземпляров сработавших правил (Agenda), и некоторых других вспомогательных узлов.
2. В простейшем случае в бесконечном цикле программа последовательно просматривает список шаблонов правил и если находит правило, в котором участвуют имеющиеся факты, то создает экземпляр правила, которому назначает эти факты. Каждый такой экземпляр правила попадает в Agenda.
3. С другого края Agenda программа забирает правило и выполняет его.
4. Один и тот же набор фактов не может повторно привести к срабатыванию одних и тех же правил, иначе программа зациклится.
--End of Принципы действия движка продукционных правил----

--------Функционирование робота без препятствий-----------
1. Вначале в программе нет никаких фактов и никакое правило не выполняется.
2. Для старта сценария Миссия1 нужно ввести в список фактов факт МИССИЯ1.
3. После этого сработает Правило01, после выполнения которого появится факт ВПЕРЕД1.
4. Сработает Правило02, т.к. в программе по-прежнему имеется факт МИССИЯ1 и появился новый факт ВПЕРЕД1, после выполнения которого появится факт ВПРАВО1, а робот выполнит перемещение вперед на 50.
5. И т.д. вплоть до выполнения последнего правила миссии1 Правило05.
6. Итог: видим работу обычного конечного автомата с тем отличием, что он основан на правилах и специальном вспомогательном факте типа ФАЗА.
--------End of Функционирование робота без препятствий----

--------Функционирование робота с препятствиями-----------
1. Вначале в программе нет никаких фактов и никакое правило не выполняется.
2. Для старта сценария Миссия1 нужно ввести в список фактов факт МИССИЯ1.
3. После этого сработает Правило01, после выполнения которого появится факт ВПЕРЕД1.
4. Сработает Правило02, т.к. в программе по-прежнему имеется факт МИССИЯ1 и появился новый факт ВПЕРЕД1, после выполнения которого появится факт ВПРАВО1, а робот выполнит перемещение вперед на 50.
5. Допустим, что во время выполнения функции перемещения вперед на 50 в программу помещается факт типа ПРЕПЯТСТВИЕ со значением ПОЯВИЛОСЬ.
6. Сработает Правило06, которое создает факт ПАУЗА и передает исполнительному механизму на выполнение функцию Звук(NULL, "Ошибка: препятствие")
7. Сработает Правило09, которое приведет к паузе в работе робота.
8. Робот будет бездествовать до того момента, пока в него не поступит факт типа ПРЕПЯТСТВИЕ со значением ИСЧЕЗЛО.
9. Это приведет к срабатыванию Правило07, которое разрешает исполнительному механизму продолжить свою работу.
10. Выполнение миссии1 продолжится вплоть до выполнения последнего правила Правило05.
11. Итог: работу ЛЮБОЙ миссии на основе конечного автомата в любой момент может прервать какое-нибудь неожиданное событие и если реакция на него предусмотрена в роботе, это прерывание будет корректно обработано.
-----End of Функционирование робота с препятствиями-------

При таком подходе видим выделенные явным образом следующие элементы:
1. Базу знаний в виде набора шаблонов правил.
2. Набор данных (факты), которые управляют ходом выполнения программы.
3. Универсальный движок продукционных правил, который в реальной конструкции не такой простой как в примере.
4. Сенсорная подсистема робота.
5. Эффекторный механизм.
В свою очередь, база знаний делится на несколько частей, первая из который (Миссия1) интересует нас сейчас больше всего.
Аватара пользователя
Виктор Казаринов
 
Сообщения: 1387
Зарегистрирован: 21 июн 2006, 11:22
Откуда: г. Омск
Skype: victorkazarinov
прог. языки: почти все понемногу
ФИО: Казаринов Виктор Геннадьевич

Re: Как правильно писать сценарии поведения робота?

Сообщение Scorpio » 01 дек 2016, 23:33

Читая посты Виктора, прежде всего хочется застрелиться от сознания собственной неполноценности :o
Пойду курну травки, потом соберусь с мыслями....
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Как правильно писать сценарии поведения робота?

Сообщение dccharacter » 02 дек 2016, 00:04

Скорпио, а меж тем это самые основы. У меня рефлексный агент вышел во второй раунд Russian AI cup, мои хоккеисты по сопатке противникам знатно давали, пока я движение не сломал :-D
Если английский знаешь, то пройди курс базовый по ИИ, могу ссылку дать. Очень интересный, пакмана запрограммируешь самостоятельно - и рефлексно и с обучением... Классная штука.

Добавлено спустя 3 минуты 4 секунды:
https://habrahabr.ru/post/241553/

Добавлено спустя 2 минуты 39 секунд:
Вот так играет рефлексный агент (мой, до того, как я его сломал, хыхыхыхыхы)
http://2014.russianaicup.ru/game/view/5197
:-))

Добавлено спустя 6 минут:
А вот так уже - нормальный ИИ с просчетом вероятностей и т.д.
http://2014.russianaicup.ru/game/view/1440349
Смотреть голы с развороте, или в одно касание на 2800 тике
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Как правильно писать сценарии поведения робота?

Сообщение Scorpio » 02 дек 2016, 00:37

Круть. Не знал даже, что такие соревнования бывают...
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Как правильно писать сценарии поведения робота?

Сообщение Dmitry__ » 02 дек 2016, 00:39

Какие интересные игрища :)
dccharacter писал(а):мой, до того, как я его сломал, хыхыхыхыхы

dccharacter, а почему ты сначала делаешь все хорошо, а потом все ломаешь/сжигаешь? :cry:
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Как правильно писать сценарии поведения робота?

Сообщение dccharacter » 02 дек 2016, 00:47

Сейчас идет чемпионат этого года - волшебников программить.
А я, Дим, талант :-)

Добавлено спустя 4 минуты 40 секунд:
Но там куча приколов была на этом чемпионате. Были стратегии, которые просто ехали и мочили защитника у ворот, и когда его удалось сбивать с ног, лупили дальний гол. Были забивающие через тройной пас. Смотрелось офигенно :-) У меня все очень простенько было по сравнению с остальными, поэтому и в финал не вышел...
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Пред.След.

Вернуться в Компьютеры в роботостроении

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron