Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
tutorials:beginner:process_modules [2016/01/22 17:00] – [A process module for the turtlesim] gkazhoya | tutorials:beginner:process_modules [2016/01/25 17:13] – [Process modules: an overview] gkazhoya | ||
---|---|---|---|
Line 10: | Line 10: | ||
A process module is a program that controls a robot actuator. Different robots will have different kinds of actuators, requiring different kinds of controllers, | A process module is a program that controls a robot actuator. Different robots will have different kinds of actuators, requiring different kinds of controllers, | ||
- | For better organization, | + | For better organization, |
* :navigation | * :navigation | ||
Line 70: | Line 70: | ||
" | " | ||
" | " | ||
+ | </ | ||
+ | |||
+ | Finally, let's also add '': | ||
+ | <code lisp> | ||
+ | (:use :cpl :roslisp : | ||
+ | : | ||
</ | </ | ||
Line 132: | Line 138: | ||
(in-package :tut) | (in-package :tut) | ||
- | (cram-process-modules: | + | (def-process-module turtle-actuators (action-designator) |
(roslisp: | (roslisp: | ||
" | " | ||
action-designator) | action-designator) | ||
- | (destructuring-bind (cmd action-goal) (reference action-designator) | + | (destructuring-bind (command |
- | (ecase | + | (ecase |
- | (shape | + | (draw-shape |
- | | + | |
- | :edges (turtle-shape-edges action-goal) | + | :edges (turtle-shape-edges action-goal) |
- | :radius (turtle-shape-radius action-goal)))))) | + | :radius (turtle-shape-radius action-goal)))))) |
- | + | ||
(defmacro with-turtle-process-modules (&body body) | (defmacro with-turtle-process-modules (&body body) | ||
`(with-process-modules-running | `(with-process-modules-running | ||
Line 149: | Line 155: | ||
</ | </ | ||
- | First, we use the '' | + | First, we use the '' |
- | destructuring-bind will map the results from (reference action-designator) to the variables cmd and action-goal respectively. Note that the inference rules we defined previously provide a name for the kind of action goal we have (currently, all are " | + | The '' |
- | The with-turtle-process-modules macro is a macro we define for convenience. It allows us to set up a context in which to run commands, knowing that the turtle process modules are all running concurrently. Right now we only have one defined, turtle-actuators. When we will have several, we will add them to the list we pass to cpm: | + | Let's try this out. Make sure you have '' |
- | + | ||
- | Let's try this out. Make sure you have roscore, turtlesim, and turtle_actionlib running. In a terminal tab for each, | + | |
< | < | ||
Line 163: | Line 167: | ||
</ | </ | ||
- | (**Note** on Oct. 21st 2014: you should check out then catkin_make the ROS common_tutorials from github to make sure you have the newest turtle_actionlib version available, otherwise the turtle might not move. To clone the ros_common tutorials, you will need to | + | For convenience, |
- | + | ||
- | < | + | |
- | git clone https:// | + | |
- | </ | + | |
- | + | ||
- | inside the src folder of a ROS workspace, then catkin_make it.) | + | |
- | + | ||
- | For convenience, | + | |
<code lisp> | <code lisp> | ||
- | (defun draw-hexagon (r) | + | (defun draw-hexagon (radius) |
(let ((turtle-name " | (let ((turtle-name " | ||
(start-ros-node turtle-name) | (start-ros-node turtle-name) | ||
Line 180: | Line 176: | ||
(top-level | (top-level | ||
(with-turtle-process-modules | (with-turtle-process-modules | ||
- | (cpm:process-module-alias :manipulation | + | (process-module-alias :navigation |
- | (cram-language-designator-support: | + | (with-designators |
- | ((trajectory | + | ((trajectory |
- | (cpm:pm-execute :manipulation | + | (pm-execute :navigation |
</ | </ | ||
- | What the function does is simply start a ROS node for our turtle and sets up the action client, then activates the turtle process modules (in our case, the sole existing one), creates a designator to describe how the turtle should move, and calls the cpm:pm-execute macro to have the process module follow the trajectory specified by the designator. | + | What the function does is simply start a ROS node for our turtle and sets up the action client, then activates the turtle process modules (in our case, the sole existing one), creates a designator to describe how the turtle should move, and calls the '' |
- | Two other things to observe here are the use of the top-level macro, which sets up a CRAM running context and is needed for with-turtle-process-modules. Also, we declare that :manipulation | + | Two other things to observe here are the use of the '' |
Reload the tutorial in REPL, and let's try to start the tutorial | Reload the tutorial in REPL, and let's try to start the tutorial | ||
<code lisp> | <code lisp> | ||
- | TUT> (draw-hexagon | + | TUT> (draw-hexagon |
- | [(ROSLISP TOP) INFO] 1413894471.489: Node name is /turtle1 | + | [(ROSLISP TOP) INFO] 1453721727.445: Node name is /turtle1 |
- | [(ROSLISP TOP) INFO] 1413894471.489: Namespace is / | + | [(ROSLISP TOP) INFO] 1453721727.446: Namespace is / |
- | [(ROSLISP TOP) INFO] 1413894471.489: Params are NIL | + | [(ROSLISP TOP) INFO] 1453721727.446: Params are NIL |
- | [(ROSLISP TOP) INFO] 1413894471.489: Remappings are: | + | [(ROSLISP TOP) INFO] 1453721727.446: Remappings are: |
- | [(ROSLISP TOP) INFO] 1413894471.489: master URI is 127.0.0.1: | + | [(ROSLISP TOP) INFO] 1453721727.446: master URI is 127.0.0.1: |
- | [(ROSLISP TOP) INFO] 1413894472.493: Node startup complete | + | [(ROSLISP TOP) INFO] 1453721728.452: Node startup complete |
- | [(TURTLE-PROCESS-MODULES) INFO] 1413894472.501: Turtle navigation invoked with action designator `#< | + | [(TURTLE-PROCESS-MODULES) INFO] 1453721728.467: Turtle navigation invoked with action designator `#< |
SHAPE) | SHAPE) | ||
| | ||
HEXAGON) | HEXAGON) | ||
| | ||
- | | + | |
An error occured! | An error occured! | ||
Client lost connection to server. | Client lost connection to server. | ||
Reinitializing... | Reinitializing... | ||
- | [(TURTLE-SHAPE-ACTION-CLIENT) INFO] 1413894480.479: Waiting for turtle shape action server... | + | [(TURTLE-SHAPE-ACTION-CLIENT) INFO] 1453721736.385: Waiting for turtle shape action server... |
- | [(TURTLE-SHAPE-ACTION-CLIENT) INFO] 1413894482.480: Turtle shape action client created. | + | [(TURTLE-SHAPE-ACTION-CLIENT) INFO] 1453721738.386: Turtle shape action client created. |
- | [(TURTLE-SHAPE-ACTION-CLIENT) INFO] 1413894505.711: Nav action finished. | + | [(TURTLE-SHAPE-ACTION-CLIENT) INFO] 1453721761.206: Nav action finished. |
[TURTLE_ACTIONLIB-MSG: | [TURTLE_ACTIONLIB-MSG: | ||
| | ||
| | ||
| | ||
- | 2.598076105117798d0] | + | 1.7320507764816284d0] |
:SUCCEEDED | :SUCCEEDED | ||
</ | </ |