roboforum.ru

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

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

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

Dmitry__ » 04 дек 2016, 19:29

smur писал(а):Но интереснее не перегонять текст в графы, а рисовать в графах логику программы и перегонять в текст.

Ну Graphviz как раз позволяет увидеть красивую картинку непонятных конечных автоматов.
Я не разделяю радости от рисования программы, но и не буду отговаривать.
Думаю это очередной этап программиста - переход от графики к тексту. Я раньше не мог обьяснить почему, но сейчас вспомнил :)

Я раньше программы для ПЛИС (Программируемые логические интегральные схемы) рисовал только в схемном редакторе. Но когда делал большой проект - электронный микроскоп, меня графика забодала, представь себе контроллер DRAM памяти нарисованный на 10 м^2 ватмана :) А это только один узел из десятка.
Стал переучиваться на verilog и потом ни разу не пожалел. Сразу был преодолен порог рисования сложных схем. В графике все красиво, но них не найдешь и не поймешь. Вот пример графич. ввода схем:

Изображение

А вот verilog:

Код: Выделить всёРазвернуть
// Mux examples - Three ways to do the same thing.

// The first example uses continuous assignment
wire out;
assign out = sel ? a : b;

// the second example uses a procedure
// to accomplish the same thing.

reg out;
always @(a or b or sel)
  begin
    case(sel)
      1'b0: out = b;
      1'b1: out = a;
    endcase
  end

// Finally - you can use if/else in a
// procedural structure.
reg out;
always @(a or b or sel)
  if (sel)
    out = a;
  else
    out = b;



И опять все сводится к обильному комментированию кода...

Добавлено спустя 5 минут 18 секунд:
Нашел по "графический редактор ввода схем vs verilog"
http://marsohod.org/11-blog/251-sch-or-tx

Как говорится ППКС. :)

Добавлено спустя 2 минуты 25 секунд:
Кста, луноход на verilog - обьектно-событийное программирование. :D

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

smur » 04 дек 2016, 19:31

Загибающиеся на состоянии графа стрелочки нужны, чтобы на каждом такте, если не изменилось значение входного параметра на этой стрелочке, отрабатывал вложенный автомат, тк он Вложенный а не Вызываемый (я там и написал об этом) и не перехватывает управление. Ёжиками все фазы движения не будут, если правильно делать декомпозицию. На рисунке показан автомат Вперёд, и там нет никакого ёжика. Выше уровнем будет граф:
https://www.dropbox.com/s/v9f7rng1w5t3l ... 4.jpg?dl=0
А в общем то подход Автоматного программирования не идеален :)

Мы рассматриваем пока простой вариант сценария - последовательного выполнения команд.
А вот как быть, если нужно отрабатывать разные миссии? Причём произвольные.
Ожидание -> Найти Васю -> Заставить делать уроки
А потом быстро перестроить на:
Ожидание -> Найти Петю -> Заставить мыть посуду

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

Виктор Казаринов » 04 дек 2016, 19:39

smur писал(а):Мы рассматриваем пока простой вариант сценария - последовательного выполнения команд.
А вот как быть, если нужно отрабатывать разные миссии? Причём произвольные.
Ожидание -> Найти Васю -> Заставить делать уроки
А потом быстро перестроить на:
Ожидание -> Найти Петю -> Заставить мыть посуду
В программе Lunohod1 можно сразу загрузить несколько сценариев, чтобы они все находились в памяти. Затем достаточно в модуле SIMULATOR ввести команду-факт mission со значением mission1 или другим значением - названием любой миссии, загруженной в память. И эта выбранная миссия начнет выполняться. Но в моем самом первом варианте программы Lunohod1 нет пока защиты от одновременного запуска разных сценариев. Поэтому можно выполнять их последовательно. Однако программа уже сейчас позволяет в любой момент остановить текущую миссию и перейти к другой простой заменой факта миссии на другое значение. Проблема будет в том, что робот к тому времени уже переместится в другое место и миссия выполнится некорректно. Как вариант, можно в качестве перехода реализовать в модуле SOLVER обратное выполнение уже выполненных шагов. Но это уже будет робот следующего вида, которые мы здесь еще не рассматривали - с учетом предыдущей истории восприятия.
Для тех, кто этого не видел: вот как работал у меня CLIPS еще в 2009 и в 2011 годах:

Поэтому я с оптимизмом смотрю на возможность реализации роботов на подобной программной основе. Нужно, конечно, учесть что CLIPS обладает некоторыми недостатками, многие из которых я устранил впоследствии, написав самодельный скоростной программный движок на С и который реализую сейчас в FPGA на Verilog.
Последний раз редактировалось Виктор Казаринов 04 дек 2016, 20:18, всего редактировалось 8 раз(а).

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

Angel71 » 04 дек 2016, 19:54

Scorpio, обсуждения этих всех "принципов" это чудно, а попытки реализации в обозримом будущем хоть будут?

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

Scorpio » 04 дек 2016, 20:40

Реализация чего? Виктор уже реализовал.
Виктор Казаринов писал(а):Для тех, кто этого не видел

Я не видел. Троекратное круто!
Виктор Казаринов писал(а):имеется многостраничный документ по использованию совместно с другими языками

слово "многостраничный" как раз и настораживает.
smur писал(а): и там нет никакого ёжика.

Ёжик будет на квадратике "препятствие".

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

smur » 04 дек 2016, 21:05

Чур я первый говорил что Виктор крут!
Что то мне подсказывает, что он ещё не все свои умные машинки показал! :)

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

Eruman » 04 дек 2016, 21:36

Виктор Казаринов писал(а):Более подробное пояснение работы программы имеет смысл делать, если кто-то проявит интерес.

Очень интересно, продолжайте, пожалуйста.

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

Dmitry__ » 05 дек 2016, 03:49

Вопрос Виктору Казаринову, подглядел на форуме clips, но там нет ответа.
Задача, вроде полностью вписывается в clips:

Вам нужно переправить через реку с помощью одного плота семью (мать, отца, 2-х дочерей и 2-х сыновей) и полицейского с заключенным.
Правила:

1. На плоту могут одновременно перемещаться максимум 2 человека.
2. Папе не разрешается находиться с дочерьми без присутствия матери.
3. Маме не разрешается находиться с сыновьями без присутствия отца.
4. Заключённого нельзя оставлять без полицейского ни с одним из членов семьи.
5. Управлять плотом могут только полицейский и родители.


Как такую задачу решает clips? Неужели ИИ? Или перебор всех комбинаций?

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

Scorpio » 05 дек 2016, 07:31

это поинтереснее лунохода будет.

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

smur » 05 дек 2016, 15:17

Пожалейте Виктора! Он же не Электроника делал!
Это в фильме робот и в шахматы может поиграть и по ходу хором спеть :)
Давайте лучше с миссиями разберёмся, можно ли там обойтись без ИИ или будет достаточно стандартного набора правил.
Что касается сценариев (не миссий с их свободой действий при достижения результата) в Автоматном программировании с длинной последовательностью повторяющихся с разными условиями действий все не очень хорошо (без расширений на более продвинутую логику). Тот же объезд препятствия с возвратом на траекторию будет выглядеть как цепочка состояний типа (для простоты пусть пока будет объезд через левый поворот и повороты в градусах без учёта препятствий по ходу движения вперёд при объезде, те препятствие типа прямоугольная стенка):
Препятствие - Таймер сработал - Препятствие - Автомат Объезд - Объезд:Налево(90) - Объезд:Вперёд:Включить одометр:Пока препятствие справа - Объезд:Выключить одометр:Поворот направо(90) - Объезд:Вперёд:Пока препятствие справа - Объезд:Поворот направо(90) - Объезд:Вперёд:Пока одометр не равен измеренному ранее расст. - Объезд:Поворот налево(90) - Объезд:Вперёд - Объезд:Выход из автомата
И так как в АП рассматривается глубина шагов только на один шаг (без расширений) то каждый такой шаг придётся делать состоянием автомата, чтобы не порушить логику работы и связей.
Получаем список состояний при объезде через левый поворот (можно измерять расст. налево и направо и делать выбор, плюс флаг от координаты по карте должен показать лучший выбор. Автоматы работают с булевыми переменными):
1. Объезд:Налево(90)_1
2. Объезд:Вперёд_1
3. Объезд:Поворот направо(90)_1
4. Объезд:Вперёд_2
5. Объезд:Поворот направо(90)_2
6. Объезд:Вперёд_3
7. Объезд:Поворот налево(90)_2
8. Объезд:Выход из автомата
По идее можно включить простую логику обхода препятствия без учёта пройденного маршрута, но тогда будет трудно вернуться на траекторию. Либо добавлять логику работы с картой, чтобы вектор движения показывал на оптимальные точки (координаты) при движении с учётом текущей координаты но это уже другая история.

Добавлено спустя 3 часа 36 минут 49 секунд:
Под ИИ я здесь понимаю возможность действий на основании истории событий. Мышка, в отличии от ящерки, пойдёт к сыру в лабиринте по найденному уже маршруту, а ящерка начнёт опять искать дорогу.

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

dccharacter » 05 дек 2016, 19:00

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

Добавлено спустя 58 секунд:
Папе не разрешается находиться с дочерьми без присутствия матери.

б-ть, почитал условия. Вы офигели там что ли

Добавлено спустя 2 минуты 14 секунд:
Точнее, я неправильно написал. Это не перебор комбинаций, а перебор комбинаций с проверкой условий и бэк-трекингом.

Добавлено спустя 5 минут 46 секунд:
А, спутал я немножко. Думал я про CSP - задачи с ограничениями. Но вот сейчас посмотрел в книжку, и такие задачи находят положение мира, удовлетворяющее условию, вне зависимости от способа прихода к этому состоянию (например, расписание). А вот путь находится поиском. Т.е. обычный поиск тут будет и все.

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

smur » 05 дек 2016, 19:14

Да это задача типа: Крестьянин купил 100 голов скота за 100 рублей. Бык 10 руб. корова 5 руб. телёнок 0.5 руб. Сколько и кого он купил. Несколько циклов с перебором, в самом простом случае решения в лоб.

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

Dmitry__ » 05 дек 2016, 19:21

dccharacter писал(а):Дим, а ИИ в этом случае и есть перебор всех комбинаций.

Да, но интересно, clips решит эту задачу? Ведь полная парадигма clipsа, просто описал правила и запустил. А если решит, то как? А если не решит, то зачем clips?
На си можно решить эту задачу методом перебора с оптимизацией - удаление лишних циклов по правилам. Весь код полностью прозрачен, можно понять за сколько такая задача решается, а что накомпилит clips?
Я всегда говорил - асмщики имеют недопрограммистов, т.к. они могут посмотреть дизассемблированный код с языка высокого уровня и найти косяк. Недопрограммистам остается только обращаться к профессионалам или ждать новую версию компилятора. Нормальный сишный программист должен уметь читать ассемблерный листинг программы, иначе это домохозяйка.
Но это так, мое нытье, щаз придет smur с битой и попросит пожалеть чужой моск :)

dccharacter писал(а):б-ть, почитал условия. Вы офигели там что ли

Да там замес порнухи на криминале, здесь вам не тут :D

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

smur » 05 дек 2016, 19:29

Чужой моск не надо нагружать комбинаторными задачами.
Вот если бы Clips научить играть в Го, это была бы достойная задача.
Это я так, шутю :)

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

Dmitry__ » 05 дек 2016, 19:30

smur писал(а):Несколько циклов с перебором, в самом простом случае решения в лоб.

А ты попробуй реши эту задачу :)
Очень трудно описать перебор с такими правилами, это как перебор всех ходов в шахматах. Если у тебя есть 8 человек, то имеем начальную разрядность 2^8, но потом условия становятся сложными - кого с кем нельзя оставлять на том берегу и это уже не добавить в чистый перебор, типа давай еще восьмую степень прилепим.
Если бы что-то синтетическое смогло составить перебор по условию, то это синтетическое и будет ИИ, а так должен программист думать, какие условия должны быть в переборе.


Rambler\'s Top100 Mail.ru counter