This is an old revision of the document!
TODO: THIS TUTORIAL IS NOT DONE YET
http://wiki.ros.org/cram_pl/InternalTutorials
(defstruct turtle-shape "represents an object in continuous space matching a symbolic description" radius edges) (cram-reasoning:def-fact-group shape-actions (action-desig) ;; for each kind of shape, call make-turtle-shape with the right number of edges ;; triangle (<- (action-desig ?desig (shape ?act)) (desig-prop ?desig (type shape)) (desig-prop ?desig (shape triangle)) (lisp-fun make-turtle-shape :radius 1 :edges 3 ?act)) ;; square (<- (action-desig ?desig (shape ?act)) (desig-prop ?desig (type shape)) (desig-prop ?desig (shape square)) (lisp-fun make-turtle-shape :radius 1 :edges 4 ?act)) ;; pentagon (<- (action-desig ?desig (shape ?act)) (desig-prop ?desig (type shape)) (desig-prop ?desig (shape pentagon)) (lisp-fun make-turtle-shape :radius 1 :edges 5 ?act)) ;; hexagon (<- (action-desig ?desig (shape ?act)) (desig-prop ?desig (type shape)) (desig-prop ?desig (shape hexagon)) (lisp-fun make-turtle-shape :radius 1 :edges 6 ?act))) (cram-process-modules:def-process-module turtle-actuators (action-designator) (roslisp:ros-info (turtle-process-modules) "Turtle navigation invoked with action designator `~a'." action-designator) (destructuring-bind (cmd action-goal) (reference action-designator) (ecase cmd (shape (call-shape-action :edges (turtle-shape-edges action-goal) :radius (turtle-shape-radius action-goal)))))) (defmacro with-turtle-process-module (&body body) `(cpm:with-process-modules-running (turtle-actuators) ,@body)) (def-fact-group turtle-actuators (matching-process-module available-process-module) (<- (matching-process-module ?designator turtle-actuators) (or (desig-prop ?designator (type shape))))
(top-level (with-turtle-process-modules (with-designators (( my-desig (action '((type shape) (shape hexagon))))) (perform my-desig))))