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:simple_plans [2017/07/04 14:35] cpotutorials:beginner:simple_plans [2022/02/25 23:15] (current) – [Implementing simple plans to move a turtle] schimpf
Line 4: Line 4:
  
 **Previous Tutorial:** [[tutorials:beginner:controlling_turtlesim_2|Controlling turtlesim from CRAM]]\\ **Previous Tutorial:** [[tutorials:beginner:controlling_turtlesim_2|Controlling turtlesim from CRAM]]\\
-**Next Tutorial:** [[tutorials:beginner:designators|Creating action designators for the turtlesim]]+**Next Tutorial:** [[tutorials:beginner:cram_prolog|Using Prolog for reasoning]]
  
- +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 need to 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>
 ===== Moving the turtle towards a point ===== ===== Moving the turtle towards a point =====
  
Line 28: Line 45:
  
 (defun relative-angle-to (goal pose-msg) (defun relative-angle-to (goal pose-msg)
-  "Given a `pose-msg' as a geometry_msgs/Pose and a `goal' as cl-transforms:3d-vector,+  "Given a `pose-msg' as a turtlesim-msg:pose and a `goal' as cl-transforms:3d-vector,
 calculate the angle by which the pose has to be turned to point toward the goal." calculate the angle by which the pose has to be turned to point toward the goal."
   (let ((diff-pose (cl-transforms:transform-point   (let ((diff-pose (cl-transforms:transform-point
Line 38: Line 55:
       (cl-transforms:x diff-pose))))       (cl-transforms:x diff-pose))))
  
-(defun calculate-angular-cmd (goal &optional (ang-vel-factor 4))+(defun calculate-angular-cmd (goal &optional (ang-vel-factor 8))
   "Uses the current turtle pose and calculates the angular velocity command   "Uses the current turtle pose and calculates the angular velocity command
 to turn towards the goal." to turn towards the goal."
Line 81: Line 98:
 (def-cram-function move-to (goal &optional (distance-threshold 0.1)) (def-cram-function move-to (goal &optional (distance-threshold 0.1))
   "Sends velocity commands until `goal' is reached."   "Sends velocity commands until `goal' is reached."
-  (let ((reached-fl (< (fl-funcall #'cl-transforms:v-dist+ (let ((reached-fl (< (fl-funcall #'cl-transforms:v-dist
                                    (fl-funcall                                    (fl-funcall
                                     #'cl-transforms:translation                                     #'cl-transforms:translation
Line 113: Line 130:
        (dolist (goal '((9 1 0) (9 9 0) (1 9 0) (1 1 0) (9 1 0)))        (dolist (goal '((9 1 0) (9 9 0) (1 9 0) (1 1 0) (9 1 0)))
          (move-to (apply #'cl-transforms:make-3d-vector goal))))          (move-to (apply #'cl-transforms:make-3d-vector goal))))
-</code>         +</code> 
 + 
 +We pass the ''dolist'' macro a list of lists containing coordinates in the TurtleSim world. It iterates over this list, storing one of the coordinates in ''goal'' each iteration. We then use ''apply'' to pass the contents of ''goal'' to ''make-3d-vector'' and pass the resulting vector to ''move-to''. This let's the turtle follow a trajectory described by the coordinates.
                    
 The turtle should now move along a rectangle. The turtle should now move along a rectangle.
Line 121: Line 140:
  
  
-Moving along predetermined points is all fine and good, but let's have a look at a more flexible way that CRAM provides to specify and reason about parameters ...+Moving along predetermined points is all fine and good, but let's have a look at a more flexible way that CRAM provides to specify and reason about parameters. To learn about motion parameter, we, however, first need to understand how the Lisp Prolog works ...
  
-[[tutorials:beginner:designators|Creating designators for the turtlesim]]+[[tutorials:beginner:cram_prolog|Using Prolog for reasoning]]