Регистрация | Вход
(defmodule MAIN (export deftemplate ?ALL))(load Lunochod1/Main.ecl)(load Lunochod1/SimulatorNoBarrier.ecl)(load Lunochod1/Mission1.ecl)(load Lunochod1/Sensor.ecl)(load Lunochod1/Solver.ecl)(load Lunochod1/Executor.ecl)(reset)(run )
;;;======================================================;;; Lunochod V 1.0.0;;; MAIN Module;;; For ECLIPS Version 6.3;;; 2016.12.02 Victor Kazarinov;;;======================================================;;; Главный модуль программы.;;;======================================================; Система должна работать циклически, поэтому нужен факт cycle, обозначающий текущий номер цикла(deffacts MAIN::cycle-start (cycle -1) ; Начальное значение номера цикла);;;======================================================(defrule MAIN::Cycle-Start (cycle -1) => (printout t "MAIN::Program Lunochod started" crlf))(defrule MAIN::Cycle-Next ; Правило, определяющее последовательность работы всей программы. ?f <- (cycle ?current-cycle) => (retract ?f) (bind ?next-cycle (+ ?current-cycle 1)) (assert (cycle ?next-cycle)) (printout t "MAIN::Cycle=" ?next-cycle crlf) (focus SIMULATOR MISSION SENSOR SOLVER EXECUTOR))
(defrule MAIN::Cycle-Start (cycle -1) => (printout t "MAIN::Program Lunochod started" crlf))
(defrule MAIN::Cycle-Next ; Правило, определяющее последовательность работы всей программы. ?f <- (cycle ?current-cycle) => (retract ?f) (bind ?next-cycle (+ ?current-cycle 1)) (assert (cycle ?next-cycle)) (printout t "MAIN::Cycle=" ?next-cycle crlf) (focus SIMULATOR MISSION SENSOR SOLVER EXECUTOR))
;;;======================================================;;; Lunochod V 1.0.0;;; SIMULATOR Module;;; For ECLIPS Version 6.3;;; 2016.12.02 Victor Kazarinov;;;======================================================;;; Модуль симулятора внешней среды, сенсоров и пользователя.;;;======================================================(defmodule SIMULATOR (export deftemplate ?ALL) (import MAIN deftemplate ?ALL))(defrule SIMULATOR::Mission1-Start ; Правило старта Миссии1 ?c <- (cycle 0) => (assert (mission mission1)) (printout t "SIMULATOR::Mission1:Start." crlf))
;;;======================================================;;; Lunochod V 1.0.0;;; SIMULATOR Module;;; For ECLIPS Version 6.3;;; 2016.12.02 Victor Kazarinov;;;======================================================;;; Модуль симулятора внешней среды, сенсоров и пользователя.;;;======================================================(defmodule SIMULATOR (export deftemplate ?ALL) (import MAIN deftemplate ?ALL))(defrule SIMULATOR::Mission1-Start ; Правило старта Миссии1 ?c <- (cycle 1) => (assert (mission mission1)) (printout t "SIMULATOR::Mission1:Start." crlf))(defrule SIMULATOR::Barrier-Set ; Правило, устанавливающее препятствие на пути робота. ?c <- (cycle 2) => (assert (barrier detected)) (printout t "SIMULATOR::Barrier Set." crlf))(defrule SIMULATOR::Barrier-Removed ; Правило, устраняющее препятствие на пути робота. ?c <- (cycle 4) ?f <- (barrier detected) => (retract ?f) (printout t "SIMULATOR::Barrier Removed." crlf))
;;;======================================================;;; Lunochod V 1.0.0;;; MISSION Module;;; For ECLIPS Version 6.3;;; 2016.12.02 Victor Kazarinov;;;======================================================;;; Модуль пользовательского сценария.;;;======================================================(defmodule MISSION (export deftemplate ?ALL) (import MAIN deftemplate ?ALL) (import SIMULATOR deftemplate ?ALL))(deftemplate MISSION::command ; Шаблон факта команды, поступающей в сенсорный модуль (slot name) (slot param (type INTEGER) (default 0)))(deftemplate MISSION::answer ; Шаблон факта ответа, поступающего из модуля EXECUTOR (slot name) (slot param))(deffacts MISSION::mission1-facts ; Шаблон факта фаз выполнения миссии. (phase forward1));;;======================================================(defrule MISSION::Mission1-Forward1 ; Правило первой фазы Миссии1 ?c <- (cycle ?current-cycle) ?f <- (mission mission1) ?m <- (phase forward1) => (retract ?m) (printout t "MISSION::Mission1.Command.Forward1(5)" crlf) (assert (command (name forward) (param 5))) ; Для модуля SOLVER (assert (phase right1)))(defrule MISSION::Mission1-Right1 ; Правило второй фазы Миссии1 ?c <- (cycle ?current-cycle) ?f <- (mission mission1) ?m <- (phase right1) ?n <- (answer (name forward) (param OK)) => (retract ?m) (retract ?n) (printout t "MISSION::Mission1.Command.Right1(3)." crlf) (assert (command (name right) (param 3))) ; Для модуля SOLVER (assert (phase left1)))(defrule MISSION::Mission1-Left1 ; Правило третьей фазы Миссии1 ?c <- (cycle ?current-cycle) ?f <- (mission mission1) ?m <- (phase left1) ?n <- (answer (name right) (param OK)) => (retract ?m) (retract ?n) (printout t "MISSION::Mission1.Command.Left1(8)." crlf) (assert (command (name left) (param 8))) ; Для модуля SOLVER (assert (phase end1)))(defrule MISSION::Mission1-End1 ; Правило четвертой фазы Миссии1 ?c <- (cycle ?current-cycle) ?f <- (mission mission1) ?m <- (phase end1) ?n <- (answer (name left) (param OK)) => (retract ?m) (retract ?n) (retract ?f) (printout t "MISSION::Mission1.Command.End()." crlf) (halt))
;;;======================================================;;; Lunochod V 1.0.0;;; SENSOR Module;;; For ECLIPS Version 6.3;;; 2016.12.02 Victor Kazarinov;;;======================================================;;; Модуль обработки сенсорных данных.;;;======================================================(defmodule SENSOR (export deftemplate ?ALL) (import MAIN deftemplate ?ALL) (import MISSION deftemplate ?ALL))(defrule SENSOR::Barrier-Detected ; Правило обнаружения препятствия. ?c <- (cycle ?current-cycle) ?f <- (barrier detected) => (assert (sensor barrier)) ; Для модуля SOLVER (printout t "SENSOR::Error: Barrier Detected!" crlf))(defrule SENSOR::Barrier-Removed ; Правило определения отстутсвия препятствия. ?c <- (cycle ?current-cycle) (not (barrier detected)) => (assert (sensor nobarrier)) ; Для модуля SOLVER (printout t "SENSOR::Message: No Barrier." crlf))
;;;======================================================;;; Lunochod V 1.0.0;;; EXECUTOR Module;;; For ECLIPS Version 6.3;;; 2016.12.02 Victor Kazarinov;;;======================================================;;; Модуль принятия решений.;;;======================================================(defmodule SOLVER (export deftemplate ?ALL) (import MAIN deftemplate ?ALL) (import MISSION deftemplate ?ALL) (import SENSOR deftemplate ?ALL))(deftemplate SOLVER::action ; Шаблон факта действия, поступающего в модуль EXECUTOR (slot name) ; Название действия. (slot param) ; Параметр действия. (slot status) ; Статус действия.);;;======================================================(defrule SOLVER::Decision-Motion-Start ?c <- (cycle ?current-cycle) ?f <- (sensor nobarrier) ?n <- (command (name ?motion) (param ?p)) => (retract ?f) (retract ?n) (printout t "SOLVER::" ?motion ".Start()." crlf) (assert (action (name ?motion) (param (- ?p 1)) (status request))) ; Для модуля EXECUTOR)(defrule SOLVER::Decision-Motion-Cycle ?c <- (cycle ?current-cycle) ?f <- (sensor nobarrier) ?n <- (action (name ?motion) (param ?p) (status OK)) => (retract ?f) (retract ?n) (if (> ?p 0) then (printout t "SOLVER::" ?motion ".Continue()." crlf) (assert (action (name ?motion) (param (- ?p 1)) (status request))) ; Для модуля EXECUTOR else (printout t "SOLVER::" ?motion ".End()." crlf) (assert (answer (name ?motion) (param OK))) ; Для модуля MISSION ))
;;;======================================================;;; Lunochod V 1.0.0;;; EXECUTOR Module;;; For ECLIPS Version 6.3;;; 2016.12.02 Victor Kazarinov;;;======================================================;;; Модуль выполнения действий.;;;======================================================(defmodule EXECUTOR (import MAIN deftemplate ?ALL) (import SOLVER deftemplate ?ALL))(defrule EXECUTOR::Action-Forward ?c <- (cycle ?current-cycle) ?f <- (action (name forward) (param ?p) (status request)) => (retract ?f) (printout t "EXECUTOR::Action=Forward.Step()." crlf) (assert (action (name forward) (param ?p) (status OK))) ; Для модуля SOLVER)(defrule EXECUTOR::Action-Left ?c <- (cycle ?current-cycle) ?f <- (action (name left) (param ?p) (status request)) => (retract ?f) (printout t "EXECUTOR::Action=Left.Step()." crlf) (assert (action (name left) (param ?p) (status OK))) ; Для модуля SOLVER)(defrule EXECUTOR::Action-Right ?c <- (cycle ?current-cycle) ?f <- (action (name right) (param ?p) (status request)) => (retract ?f) (printout t "EXECUTOR::Action=Right.Step()." crlf) (assert (action (name right) (param ?p) (status OK))) ; Для модуля SOLVER)
;;;======================================================;;; 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*)