roboforum.ru

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

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

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

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

Сообщение smur » 30 ноя 2016, 11:59

Графы нас всех спасут ! :)
Посмотрел
https://habrahabr.ru/post/241941/
и не мог удержаться от повторного размещения ссылки:
http://is.ifmo.ru/books/_book.pdf
Там всё это прописано с разбором задач и с академическим подходом, те всё разложено по полочкам и с картинками.
Чтобы не путаться в построении сценариев рисуются графы. Есть даже программы преобразующие графы в код. Это описано там же, в конце книги.
По графам легко искать проблемы в логике. При этом копаться в коде не надо. Рисуем граф (на Visio или из другого варианта) и переводим в код сценария, вручную или программой.
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

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

Сообщение SkyStorm » 30 ноя 2016, 13:11

Графы это просто способ визуализации, и это кому как нравится.
Можно графами а можно как тут уже писали таблицу состояний + таблицу переходов.

Но все в результате сводится к конечному автомату.

Целевое программирование оно собственно ни чуть не идет в разрез.
Просто каждая цель - это свой автомат.
Мы добавляем еще одну таблицу с весами целей.
Никто кроме нас!!!
4Robots.ru - Все для роботов!
Аватара пользователя
SkyStorm
 
Сообщения: 2687
Зарегистрирован: 05 фев 2008, 15:33
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович

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

Сообщение smur » 30 ноя 2016, 13:30

Графы могут быть не только простой визуализацией, а и средством разработки в том числе и с автоматической генерацией кода, в этом то вся прелесть метода.
На компактной картинке с графами легче понять логику, чем листая страницы кода.
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

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

Сообщение Scorpio » 30 ноя 2016, 18:03

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

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

Сообщение dccharacter » 30 ноя 2016, 18:15

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

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

Сообщение Scorpio » 30 ноя 2016, 18:39

Скучный про Ванессу. На самом деле, он тоже не дает полную картину, потому что не говорит, что произойдет, если роботу не удастся добраться до места (непреодолимое препятствие, перегрев мотора, отказ системы навигации и т.д.). При неуспешном выполнении функции GoMapPos сценарий просто прекращается, т.к. реакции на такие ситуации находятся на более низком уровне в функции движения.
Последний раз редактировалось Scorpio 30 ноя 2016, 20:26, всего редактировалось 1 раз.
Аватара пользователя
Scorpio
 
Сообщения: 2683
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

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

Сообщение dccharacter » 30 ноя 2016, 19:52

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

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

Сообщение Scorpio » 30 ноя 2016, 20:17

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

Вот пример событийного сценария на изобретенном только что языке:
Код: Выделить всёРазвернуть
СТОП->{Стоп()}
ПРЕПЯТСТВИЕ->{Стоп(),Звук("Ошибка"}
ПУСК->{Вперед(50),Вправо(30),Влево(80),Звук("ОК")}

В описании языка сказано, что событие, занимающее верхнюю строчку имеет приоритет над тем, которое под ним.

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

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

Сообщение dccharacter » 30 ноя 2016, 20:40

Блин, ты же прописываешь не автомат, а сценарий. Вот попробуем взять пример из статьи хабровской.
Код: Выделить всёРазвернуть
struct transition FSM_table[3][3] = {
    [state_idle][signal_start] = {state_execute, fxn_execute},
    [state_idle][signal_stop]  = {state_idle, NULL},
    [state_idle][signal_block] = {state_idle, NULL},
    [state_execute][signal_start] = {state_execute, NULL},
    [state_execute][signal_stop]  = {state_idle, fxn_halt},
    [state_execute][signal_block] = {state_blocked, fxn_block},
    [state_blocked][signal_start] = {state_blocked, NULL},
    [state_blocked][signal_stop]  = {state_idle, fxn_halt},
    [state_blocked][signal_block] = {state_blocked, NULL},
};

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

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

Сообщение Scorpio » 30 ноя 2016, 21:00

Думаешь, твой код покажется легко читаемым пользователю лунохода (не программисту со стажем) от 6-ти до 99 лет? Хрен кто купит такой луноход :) И сам ты его читать замучаешься через пару лет.
ПРЕПЯТСТВИЕ, допустим, генерирует событие при любом изменении состояния, т.е. 2 события ЕСТЬ ПРЕПЯТСТВИЕ, НЕТ ПРЕПЯТСТВИЯ.
Аватара пользователя
Scorpio
 
Сообщения: 2683
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

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

Сообщение dccharacter » 30 ноя 2016, 21:09

Не, ну в этом ты прав. Но сохранив логику и переделав представление можно все это решить. Просто какой-то вариант может разобрать компилятор, а для какого-то варианта надо будет парсер писать.
ПРЕПЯТСТВИЕ, допустим, генерирует событие при любом изменении состояния, т.е. 2 события ЕСТЬ ПРЕПЯТСТВИЕ, НЕТ ПРЕПЯТСТВИЯ.
Ну и проверяй в обработчике - есть ли препятствие, и если нет, возвращай в состояние "выполнение программы".
Ты же понимаешь, что в состоянии "выполнение" работает вложенный автомат?

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

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

Сообщение Scorpio » 30 ноя 2016, 21:18

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

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

Сообщение dccharacter » 30 ноя 2016, 21:26

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

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

Сообщение Dmitry__ » 30 ноя 2016, 21:43

Вопрос смахивает на неразрешимую задачу. Мне непонятен пример с "Скучный про Ванессу". Все-таки это программа, а не сценарий. И с точки зрения VB6 - эта программа совершенна. Программисту поставить 5 и отпустить :)

Второй пример:

Scorpio писал(а):Вот пример событийного сценария на изобретенном только что языке:

Scorpio писал(а):Что если пользователь захочет, чтобы робот хотябы продолжил выполнять задание после того, как препятствие убрали с его пути?


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

А вообще, сложно вам программистам, кто учился по книгам. Загоняют вас в определенные рамки. :)

Добавлено спустя 1 минуту 22 секунды:
dccharacter писал(а):кстати, g-code - это тоже оно и есть

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

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

Сообщение Scorpio » 30 ноя 2016, 22:13

Dmitry__ писал(а): Программисту поставить 5 и отпустить :)

Раньше ты помнится говорил, что надо плясать от события и никаких циклов ожидания.
Сценарий - это основной стержень программы, вокруг которого все и крутится. типа g-code, только более гибкий.
Совершенно не обязательно, чтобы он был отдельно от программы и не на языке программы. Дело не в грамматике, а мыслях и последовательности их изложения. Нарисуйте лучше граф про луноход, раз они такие удобные.
Аватара пользователя
Scorpio
 
Сообщения: 2683
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Пред.След.

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

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

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