roboforum.ru

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

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

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

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

Сообщение Dmitry__ » 06 дек 2016, 19:07

Я в курсе, но ты сказал:
dccharacter писал(а):Ну производная - это просто математический аппарат. Математика сама никуда не пойдет и ничего не решит.


Я ответил:
Dmitry__ писал(а):Да, щаз, можно не зная производных самому решить:


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

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

Сообщение dccharacter » 06 дек 2016, 19:25

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

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

Сообщение Dmitry__ » 06 дек 2016, 19:28

Ага, повезло, 2 страницы подводил вас к этому флуду, аж вспотел :)

Добавлено спустя 1 минуту 33 секунды:
У тя, кста, ошибка в расчетах, считал производную, считал, потом перешел на формулу площади квадрата и все - ответ :)
Это как у меня сначала: х=x
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение dccharacter » 06 дек 2016, 19:32

нет ошибки, расписываю
p'(x) = 2 - 2s/x^2
2 - 2s/x^2 = 0
2 = 2s/x^2
1 = s/x^2
x^2 = s
s = x^2

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

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

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

Ждал, пока вы натешитесь, но видимо придется призвать вас к порядку :)
Вернее хоть к какому-нибудь соответствию изначальной теме.
Виктор уже как-то упоминал, что программирование поведения роботов, не сильно отличается от программирования персонажей в компьютерных играх. Из и-нета:
"Особенности второй технологии — сценариев (обычно именуемых на англоязычный манер скриптами) — в том, что управление общим ходом событий и действиями персонажей не зашито жестко в само тело игры, а выполняется с помощью внешних модулей-скриптов, написанных на языке высокого уровня. Такой подход позволяет разработчикам, устанавливающим общую цель и методы ведения конкретной игры, работать как бы полунезависимо от программистов, занятых непосредственным воплощением игрового механизма, т.е. движка (engine) игры.

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

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

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

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

Сообщение Dmitry__ » 06 дек 2016, 20:41

Scorpio писал(а):Ждал, пока вы натешитесь, но видимо придется призвать вас к порядку

Можно последний разик флуднуть? :cry:

dccharacter, ошибка в том, что нет аналитического вывода, у тебя получилась просто формула площади квадрата. Тогда уж надо было довести до ИИ:

x = sqrt(s)
сторона а = sqrt(s)
сторона b = s/sqrt(s) = sqrt(s)
a=b :)
Нет квадратов и есть аналитический вывод: периметр прямоугольника, при постоянной площади, имеет минимальный размер при равности ее сторон, это говорит математика, ИИ отдыхает :)
Будем флудить как найти фигуру с еще меньшим периметром (относительно прямоугольника) при одинаковой площади? :D
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение Scorpio » 07 дек 2016, 18:33

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

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

Сообщение Dmitry__ » 07 дек 2016, 18:49

А фиг знает :oops:
Или все выговорились.
Лично я для себя открыл RHVoice из этой темы. Задал пару вопросов в бложик linvinus, но он пропал. А так бы я с удовольствием конвертнул этот RHVoice на какую-нибудь маленькую плату с pic32 или stm32. А потом занялся бы опознавалкой голоса. После этих 2-х коробочек можно о чем-то говорить на тему роботов...
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

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

Вот следующая итерация программы лунохода для ОС Windows:
Lunochod1_V_1_0_1201612080004.zip
Программа Lunochod1 версии 1.0.1
(487.97 КиБ) Скачиваний: 0

В ней я произвел некоторые изменения, среди которых сделал мультиагентную среду, а также текстовое поле, где могут перемещаться роботы-агенты.
В данной программе сначала запускается агент Lunochod1, а спустя несколько тактов - Lunochod2. Луноходы выполнены в виде стрелочек разного цвета: Lunochod1 - зеленый, Lunochod2 - желтый. Агенты выполняют одинаковую миссию Mission1, которая заключается в движении вперед на 5 шагов, повороте вправо на 90 градусов, движении после поворота по прямой 3 шага, поворота налево на 90 градусов и движении по прямой 8 шагов.
В нижней части терминала имеется три статусных строки, верхняя из которых предназначена Lunochod1, ниже - Lunochod2.
На пути Lunochod2 встречается препятствие (символ 0), которое он обнаруживает своим сенсором препятствий и останавливается с выдачей сообщения об ошибке выполнения его миссии. Lunochod1 успешно выполняет свою миссию и останавливается после ее окончания. Через некоторое время работа программы завершается, о чем свидетельствует приглашение среды CLIPS в нижней строке терминала.
Подробности запуска программы читайте во вложенном файле README.txt
Аватара пользователя
Виктор Казаринов
 
Сообщения: 1387
Зарегистрирован: 21 июн 2006, 11:22
Откуда: г. Омск
Skype: victorkazarinov
прог. языки: почти все понемногу
ФИО: Казаринов Виктор Геннадьевич

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

Сообщение Scorpio » 07 дек 2016, 23:57

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

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

Сообщение smur » 08 дек 2016, 00:14

Да вроде запускается
и так (batch Lunochod1.bat)
и так CLIPSDOS32.exe -f Lunochod1.bat
Миссии работают :)

Добавлено спустя 7 минут 42 секунды:
Я пока в глубокой задумчивости над логикой всего этого и в какой мере это похоже на Пролог.
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

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

Сообщение Dmitry__ » 08 дек 2016, 00:19

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

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

Сообщение Scorpio » 08 дек 2016, 02:17

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

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

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

Надеюсь, вас не расстраивает тот факт, что выглядит данная программа пока слишком примитивно? Но без хотя бы простейшей визуализации двигаться дальше было бы трудно. А затевать мультяшки для малых деток я не стал. Надеюсь, что красоту дорисует ваше воображение, а вы с пониманием отнесетесь к такому примитивизму.
Мультиагентность нужна не только для создания нескольких роботов, взаимодействующих между собой, но и позволит создавать роботов, в которых будут копошиться разные мысли. В качестве мыслей будут агенты. Как их организовать - надеюсь, увидим позже.
Даже в таком простейшем виде можно путем простых правок в коде программы изменить поведение роботов.
Файл Simulator.ecl модуль SIMULATOR.
Код: Выделить всёРазвернуть
;;;======================================================
;;;     Lunochod V 1.0.1
;;;     SIMULATOR Module
;;;     For ECLIPS Version 6.3
;;;     2016.12.02 Victor Kazarinov
;;;======================================================
;;; Модуль симулятора внешней среды, сенсоров и пользователя.
;;;======================================================

(defmodule SIMULATOR (export deftemplate ?ALL) (import MAIN deftemplate ?ALL) (import MAIN deffunction ?ALL) (import MAIN defglobal ?ALL))


(defrule SIMULATOR::Mission1-Lunochod1-Start                  ; Правило старта Миссии1
?c <- (cycle 0)
  =>
(bind ?*gamefieldref* (sys-2darray-create ?*gamefieldDimX* ?*gamefieldDimY* 1 1 ?*backgroundSym*)) ; Создать игровое поле размером 20х20 символов.
(field-fill ?*gamefieldDimX* ?*gamefieldDimY* 1 ?*gamefieldref*)

; Создать агента lunochod1
(assert (agent-position (agent-name lunochod1) (posx 10) (posy 9)))
(assert (agent-direction (agent-name lunochod1) (direction right)))
(assert (agent-image (agent-name lunochod1) (sym 26) (color 10)))
(assert (mission-phase (agent-name lunochod1) (mission-name mission1) (phase forward1))) ; Назначить агенту миссию.
(agent-goto 26 10 9 10 9 10 ?*backgroundSymBackColor*)

(agent-goto ?*barrierSym* 24 10 28 13 15 ?*backgroundSymBackColor*)             ; Установить препятствие на пути lunochod2.
;(tui_status-print "SIMULATOR::Mission1:Start." 0)
)

(defrule SIMULATOR::Mission1-Lunochod2-Start                  ; Правило старта Миссии1
?c <- (cycle 3)
  =>
; Создать агента lunochod2
(assert (agent-position (agent-name lunochod2) (posx 20) (posy 10)))
(assert (agent-direction (agent-name lunochod2) (direction right)))
(assert (agent-image (agent-name lunochod2) (sym 26) (color 14)))
(assert (mission-phase (agent-name lunochod2) (mission-name mission1) (phase forward1))) ; Назначить агенту миссию.
(agent-goto 26 20 10 20 10 14 ?*backgroundSymBackColor*)
)

Как видно из кода симулятора, для создания нового робота достаточно всего несколько строк, создающих новые факты и описывающих его положение на экране, направление движения в начальный момент времени, внешний вид (символ, которым робот будет отображен и его цвет), и с какой фазы какой миссии нужно этого агента запускать:
Код: Выделить всёРазвернуть
; Создать агента lunochod1
(assert (agent-position (agent-name lunochod1) (posx 10) (posy 9)))
(assert (agent-direction (agent-name lunochod1) (direction right)))
(assert (agent-image (agent-name lunochod1) (sym 26) (color 10)))
(assert (mission-phase (agent-name lunochod1) (mission-name mission1) (phase forward1))) ; Назначить агенту миссию.
(agent-goto 26 10 9 10 9 10 ?*backgroundSymBackColor*)

Последняя строка этого кода фактически размещает на экране робота по созданному шаблону.
Все это означает, что роботов можно стартовать имеющейся миссией не только вправо, но и в любую другую сторону, написав вместо right слово up, left или down. Также видно, что можно стартовать не только с начала миссии, но и выполнить любой ее участок до окончания миссии. Для этого нужно заглянуть в файл Mission1.ecl и взять оттуда название других фаз. Если хотите, попробуйте сами, я этого всего еще сам не делал и поэтому не отладил код.
Аватара пользователя
Виктор Казаринов
 
Сообщения: 1387
Зарегистрирован: 21 июн 2006, 11:22
Откуда: г. Омск
Skype: victorkazarinov
прог. языки: почти все понемногу
ФИО: Казаринов Виктор Геннадьевич

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

Сообщение Scorpio » 08 дек 2016, 19:23

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

Пред.След.

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

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

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