Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
tutorials:beginner:assigning_actions_2 [2017/07/27 08:07] – created cpotutorials:beginner:assigning_actions_2 [2022/02/25 23:19] (current) – [Automatically choosing a process module for a motion] schimpf
Line 1: Line 1:
-====== Automatically choosing a process module for an action  ======+====== Automatically choosing a process module for a motion  ======
  
 **Description:** in previous tutorials we called a process module explicitly via ''cram-process-modules:pm-execute'', and fed them appropriate action designators. However, it is sometimes useful to reason about what process module to use to handle a given designator. To illustrate the CRAM infrastructure that allows this, we provide a very simple example here. **Description:** in previous tutorials we called a process module explicitly via ''cram-process-modules:pm-execute'', and fed them appropriate action designators. However, it is sometimes useful to reason about what process module to use to handle a given designator. To illustrate the CRAM infrastructure that allows this, we provide a very simple example here.
  
-**Previous Tutorial:** [[tutorials:beginner:location_designators|Using location designators with the turtlesim]]\\+ 
 +**Previous Tutorial:** [[tutorials:beginner:process_modules_2|Creating process modules]]\\ 
 +**Next Tutorial:** [[tutorials:beginner:location_designators_2|Using location designators with the TurtleSim]]\\ 
 + 
 + 
 +To run the code in the tutuorial the roscore and the turtlesim need to be started over the terminal. Each in their own tab. 
 +<code bash> 
 +$ roscore 
 +</code> 
 +<code bash> 
 +$ rosrun turtlesim turtlesim_node 
 +</code> 
 + 
 +And in the REPL the following commands should be executed: 
 +<code lisp> 
 +CL-USER>(ros-load:load-system "cram_my_beginner_tutorial" :cram-my-beginner-tutorial) 
 +... 
 +CL-USER>(in-package :tut) 
 +... 
 +TUT>(start-ros-node "turtle1"
 +... 
 +TUT>(init-ros-turtle "turtle1"
 +</code>
  
 ===== Setting up fact groups to select a process module ===== ===== Setting up fact groups to select a process module =====
  
-First let's create a new file ''selecting-process-modules.lisp'' and add it to our ''*.asd'' file, which should now look like this:+First let's create a new file ''selecting-process-modules.lisp'' and add it to our ''*.asd'' file. We also need to add ''cram-executive'' as a dependency to our system. It should now look like this:
  
 <code lisp> <code lisp>
-(defsystem cram-beginner-tutorial+(defsystem cram-my-beginner-tutorial
   :depends-on (cram-language roslisp turtlesim-msg geometry_msgs-msg cl-transforms   :depends-on (cram-language roslisp turtlesim-msg geometry_msgs-msg cl-transforms
-                             cram-designators cram-prolog+                             cram-designators cram-prolog turtlesim-srv
                              cram-process-modules cram-language-designator-support                              cram-process-modules cram-language-designator-support
                              cram-executive)                              cram-executive)
Line 22: Line 44:
              (:file "simple-plans" :depends-on ("package" "control-turtlesim"))              (:file "simple-plans" :depends-on ("package" "control-turtlesim"))
              (:file "motion-designators" :depends-on ("package"))              (:file "motion-designators" :depends-on ("package"))
-             (:file "turtle-action-client" :depends-on ("package")) 
              (:file "process-modules" :depends-on ("package"              (:file "process-modules" :depends-on ("package"
                                                    "control-turtlesim"                                                    "control-turtlesim"
                                                    "simple-plans"                                                    "simple-plans"
-                                                   "motion-designators+                                                   "motion-designators"))
-                                                   "turtle-action-client"))+
              (:file "selecting-process-modules" :depends-on ("package"              (:file "selecting-process-modules" :depends-on ("package"
                                                              "motion-designators"                                                              "motion-designators"
-                                                             "location-designators" 
                                                              "process-modules"))))))                                                              "process-modules"))))))
 </code> </code>
Line 67: Line 86:
 This function is mostly similar to previous ones we used to call process modules; the difference is that rather than calling ''pm-execute'' with a process module and an motion designator, we call ''cram-executive:perform'' with a motion designator and allow the system to decide what process module to use. In our case the decision is very simple, just a matter of matching type to appropriate consumer; more complex inferences are possible for real systems. This function is mostly similar to previous ones we used to call process modules; the difference is that rather than calling ''pm-execute'' with a process module and an motion designator, we call ''cram-executive:perform'' with a motion designator and allow the system to decide what process module to use. In our case the decision is very simple, just a matter of matching type to appropriate consumer; more complex inferences are possible for real systems.
  
-===== Running action designators =====+===== Running motion designators =====
  
 Let's load our code in ''roslisp_repl''. Make sure you have ''roscore'' and ''turtlesim'' in terminals in the background (see [[http://cram-system.org/tutorials/beginner/process_modules|a previous tutorial]] for the exact commands). Also make sure you call ''start-ros-node'' and ''(init-ros-turtle "turtle1")'' before executing the commands below. Let's load our code in ''roslisp_repl''. Make sure you have ''roscore'' and ''turtlesim'' in terminals in the background (see [[http://cram-system.org/tutorials/beginner/process_modules|a previous tutorial]] for the exact commands). Also make sure you call ''start-ros-node'' and ''(init-ros-turtle "turtle1")'' before executing the commands below.
Line 74: Line 93:
  
 <code lisp> <code lisp>
-TUT> (defparameter fast-circle (desig:a motion (type driving) (speed 10) (angle 7))) +TUT> (defparameter *fast-circle(desig:a motion (type driving) (speed 10) (angle 7))) 
-FAST-CIRCLE +*FAST-CIRCLE* 
-TUT> (defparameter goal (desig:a motion (type moving) (goal (1 9 0)))) +TUT> (defparameter *goal(desig:a motion (type moving) (goal (1 9 0)))) 
-GOAL +*GOAL* 
-TUT> (defparameter pen-off (desig:a motion (type setting-pen) (off 1))) +TUT> (defparameter *pen-off(desig:a motion (type setting-pen) (off 1))) 
-PEN-OFF+*PEN-OFF*
 </code> </code>
  
Line 85: Line 104:
  
 <code lisp> <code lisp>
-TUT> (perform-some-motion fast-circle)+TUT> (perform-some-motion *fast-circle*)
 [(TURTLE-PROCESS-MODULES) INFO] 1501142699.638: TurtleSim navigation invoked with motion designator `#<MOTION-DESIGNATOR ((TYPE [(TURTLE-PROCESS-MODULES) INFO] 1501142699.638: TurtleSim navigation invoked with motion designator `#<MOTION-DESIGNATOR ((TYPE
                                                                            DRIVING)                                                                            DRIVING)
Line 100: Line 119:
  
 <code lisp> <code lisp>
-(perform-some-motion goal)+(perform-some-motion *goal*)
 [(TURTLE-PROCESS-MODULES) INFO] 1501142702.867: TurtleSim navigation invoked with motion designator `#<MOTION-DESIGNATOR ((TYPE [(TURTLE-PROCESS-MODULES) INFO] 1501142702.867: TurtleSim navigation invoked with motion designator `#<MOTION-DESIGNATOR ((TYPE
                                                                            MOVING)                                                                            MOVING)
Line 108: Line 127:
 T T
 </code> </code>
 +
 +You can also perform ''*pen-off*'' and then one of the others to see that the turtle doesn't leave a trace anymore.
 +
 +<code lisp>
 + (perform-some-motion *pen-off*)
 +[(TURTLE-PROCESS-MODULES) INFO] 1504786623.566: TurtleSim pen control invoked with motion designator `#<MOTION-DESIGNATOR ((TYPE
 +                                                                            SETTING-PEN)
 +                                                                           (OFF
 +                                                                            1)) {1002BB26A3}>'.
 +[TURTLESIM-SRV:SETPEN-RESPONSE]
 +TUT> (perform-some-motion *fast-circle*)
 +[(TURTLE-PROCESS-MODULES) INFO] 1504786630.845: TurtleSim navigation invoked with motion designator `#<MOTION-DESIGNATOR ((TYPE
 +                                                                           DRIVING)
 +                                                                          (SPEED
 +                                                                           10)
 +                                                                          (ANGLE
 +                                                                           7)) {1002BB2CD3}>'.
 +1
 +</code>
 +
 +You can turn the pen back on with this:
 +
 +<code lisp>
 +(perform-some-motion (desig:a motion (type setting-pen) (off 0)))
 +[(TURTLE-PROCESS-MODULES) INFO] 1504786654.744: TurtleSim pen control invoked with motion designator `#<MOTION-DESIGNATOR ((TYPE
 +                                                                            SETTING-PEN)
 +                                                                           (OFF
 +                                                                            0)) {1002D6D763}>'.
 +[TURTLESIM-SRV:SETPEN-RESPONSE]
 +</code>
 +
 +== Next ==
 +
 +Let's have a look at location designators and other ways to move the turtle, as well as have some more practice with designator resolution and process modules … 
 +
 +[[tutorials:beginner:location_designators_2|Using location designators with the TurtleSim]]