Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tutorials:beginner:motion_designators [2019/07/09 19:03] – [Designators: an overview] gkazhoyatutorials:beginner:motion_designators [2022/02/25 23:14] (current) – [Creating motion designators for the TurtleSim] schimpf
Line 3: Line 3:
 **Description:** In this tutorial you will learn what designators are, and in particular, work with motion designators: you will learn how to define one and how to use it. **Description:** In this tutorial you will learn what designators are, and in particular, work with motion designators: you will learn how to define one and how to use it.
  
-**Previous Tutorial:** [[tutorials:beginner:simple_plans|Implementing simple plans to move a turtle]]\\+**Previous Tutorial:** [[tutorials:beginner:cram_prolog|Using Prolog for reasoning]]\\
 **Next Tutorial:** [[tutorials:beginner:process_modules_2|Creating process modules]] **Next Tutorial:** [[tutorials:beginner:process_modules_2|Creating process modules]]
 +
 +To run the code in the tutuorial the roscore and the turtlesim need to be started in the terminal. Each in their own tab. 
 +<code bash>
 +$ roscore
 +</code>
 +<code bash>
 +$ rosrun turtlesim turtlesim_node
 +</code>
  
 ===== Designators: an overview ===== ===== Designators: an overview =====
Line 27: Line 35:
 (Do not add this code to your tutorial files, it is meant simply for illustration here.) (Do not add this code to your tutorial files, it is meant simply for illustration here.)
  
-This line of code creates a location designator (''spy-location'') which "knows" of the given object (''?prime-minister'', which we assume is an already defined object designator), and knows that its purpose is to see the object. We do not actually specify a location in terms of coordinates at this moment. When we do want to find a suitable set of coordinates for this location, we would call+This line of code creates a location designator (''*spy-location*'') which "knows" of the given object (''?prime-minister'', which we assume is an already defined object designator), and knows that its purpose is to see the object. We do not actually specify a location in terms of coordinates at this moment. When we do want to find a suitable set of coordinates for this location, we would call
  
 <code lisp> <code lisp>
Line 50: Line 58:
 <code lisp> <code lisp>
 (defsystem cram-my-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 turtlesim-srv 
 +                             geometry_msgs-msg cl-transforms
                              cram-designators cram-prolog)                              cram-designators cram-prolog)
   :components   :components
Line 70: Line 79:
 </code> </code>
  
-Now, reload the tutorial in ''roslisp_repl'' (which also loads the newly added dependencies).+Now, reload the tutorial in ''roslisp_repl'' (which also loads the newly added dependencies)
 + 
 +<code lisp> 
 +PROLOG> (ros-load:load-system "cram_my_beginner_tutorial" :cram-my-beginner-tutorial) 
 +PROLOG> (in-package :tut) 
 +</code>
  
 ==== Creating a motion designator ==== ==== Creating a motion designator ====
Line 77: Line 91:
  
 <code lisp> <code lisp>
-TUT> (defparameter my-desig (desig:a motion (type driving) (speed 1.5))) +TUT> (defparameter *my-desig(desig:a motion (type driving) (speed 1.5))) 
-MY-DESIG +*MY-DESIG* 
-TUT> (desig-prop-value my-desig :speed)+TUT> (desig-prop-value *my-desig:speed)
 1.5 1.5
 </code> </code>
 +
 +We call the variable ''*my-desig*'' with asterisks as this is the common convention in Common Lisp for naming global variables.
  
 We use the ''a'' macro to create designators. Internally it uses the ''make-designator'' function to create a designator of the specified type. The macro allows us to write cleaner code for designator creation. We use the ''a'' macro to create designators. Internally it uses the ''make-designator'' function to create a designator of the specified type. The macro allows us to write cleaner code for designator creation.
Line 88: Line 104:
  
 <code lisp> <code lisp>
-TUT> (reference my-desig)+TUT> (reference *my-desig*)
 Cannot resolve motion designator #<MOTION-DESIGNATOR ((TYPE Cannot resolve motion designator #<MOTION-DESIGNATOR ((TYPE
                                                        DRIVING)                                                        DRIVING)
Line 181: Line 197:
  
 <code lisp> <code lisp>
-TUT> (defparameter my-desig2 (desig:a motion (type driving) (speed 1.5) (angle 2))) +TUT> (defparameter *my-desig2(desig:a motion (type driving) (speed 1.5) (angle 2))) 
-MY-DESIG2 +*MY-DESIG2 
-TUT> (reference my-desig2)+TUT> (reference *my-desig2*)
 (DRIVE #S(TURTLE-MOTION :SPEED 1.5 :ANGLE 2)) (DRIVE #S(TURTLE-MOTION :SPEED 1.5 :ANGLE 2))
 </code> </code>
Line 283: Line 299:
  
 <code lisp> <code lisp>
-TUT> (defparameter my-desig3 (desig:a motion (type setting-pen) (r 100) (g 150) (b 0) (width 5))) +TUT> (defparameter *my-desig3(desig:a motion (type setting-pen) (r 100) (g 150) (b 0) (width 5))) 
-MY-DESIG3 +*MY-DESIG3* 
-TUT> (reference my-desig3)+TUT> (reference *my-desig3*)
 (SET-PEN #S(PEN-MOTION :R 100 :G 150 :B 0 :WIDTH 5 :OFF 0)) (SET-PEN #S(PEN-MOTION :R 100 :G 150 :B 0 :WIDTH 5 :OFF 0))
 </code> </code>