Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tutorials:beginner:motion_designators [2018/11/23 08:58] – [Adding a motion for moving] vanessa | tutorials:beginner:motion_designators [2022/02/25 23:14] (current) – [Creating motion designators for the TurtleSim] schimpf | ||
---|---|---|---|
Line 3: | Line 3: | ||
**Description: | **Description: | ||
- | **Previous Tutorial:** [[tutorials: | + | **Previous Tutorial:** [[tutorials: |
**Next Tutorial:** [[tutorials: | **Next Tutorial:** [[tutorials: | ||
+ | |||
+ | 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 bash> | ||
+ | $ rosrun turtlesim turtlesim_node | ||
+ | </ | ||
===== Designators: | ===== Designators: | ||
Line 10: | Line 18: | ||
From a user's point of view, a designator is a Common Lisp object that contains a sequence of key-value pairs representing a high-level, symbolic description of some aspect of robot' | From a user's point of view, a designator is a Common Lisp object that contains a sequence of key-value pairs representing a high-level, symbolic description of some aspect of robot' | ||
- | Currently there are five types of designators defined in CRAM: | + | Currently there are the following |
* location designators: | * location designators: | ||
Line 16: | Line 24: | ||
* motion designators: | * motion designators: | ||
* action designators: | * action designators: | ||
- | * human designators: | ||
These types should cover most use cases in robotics, however, if needed, new designator types can be defined as subclasses of the '' | These types should cover most use cases in robotics, however, if needed, new designator types can be defined as subclasses of the '' | ||
Line 23: | Line 30: | ||
<code lisp> | <code lisp> | ||
- | (defparameter spy-location (desig:a location (to see) (object ? | + | (defparameter |
</ | </ | ||
(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 ('' | + | This line of code creates a location designator ('' |
<code lisp> | <code lisp> | ||
- | (reference spy-location) | + | (reference |
</ | </ | ||
Line 40: | Line 47: | ||
===== Using motion designators ===== | ===== Using motion designators ===== | ||
- | First, you will need to add a few more dependencies to the tutorial package files you created previously. To '' | + | First, you will need to add a few more dependencies to the tutorial package files you created previously. To '' |
< | < | ||
- | <build_depend> | + | <depend> |
- | <build_depend> | + | <depend> |
- | + | ||
- | < | + | |
- | < | + | |
</ | </ | ||
- | In your '' | + | In your '' |
<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 | ||
| | ||
:components | :components | ||
Line 68: | Line 73: | ||
<code lisp> | <code lisp> | ||
- | (defpackage : | + | (defpackage :cram-my-beginner-tutorial |
(:nicknames :tut) | (:nicknames :tut) | ||
(:use :cpl :roslisp : | (:use :cpl :roslisp : | ||
Line 74: | Line 79: | ||
</ | </ | ||
- | Now, reload the tutorial in '' | + | Now, reload the tutorial in '' |
+ | |||
+ | <code lisp> | ||
+ | PROLOG> (ros-load: | ||
+ | PROLOG> (in-package :tut) | ||
+ | </ | ||
==== Creating a motion designator ==== | ==== Creating a motion designator ==== | ||
Line 81: | Line 91: | ||
<code lisp> | <code lisp> | ||
- | TUT> (defparameter my-desig (desig:a motion (type driving) (speed 1.5))) | + | TUT> (defparameter |
- | MY-DESIG | + | *MY-DESIG* |
- | TUT> (desig-prop-value my-desig :speed) | + | TUT> (desig-prop-value |
1.5 | 1.5 | ||
</ | </ | ||
+ | |||
+ | We call the variable '' | ||
We use the '' | We use the '' | ||
Line 92: | Line 104: | ||
<code lisp> | <code lisp> | ||
- | TUT> (reference my-desig) | + | TUT> (reference |
Cannot resolve motion designator #< | Cannot resolve motion designator #< | ||
| | ||
Line 103: | Line 115: | ||
==== Defining inference rules for designators ==== | ==== Defining inference rules for designators ==== | ||
+ | |||
+ | The function '' | ||
+ | CRAM Prolog engine is a Prolog interpreter / compiler implemented as a domain-specific language within Lisp. | ||
+ | To learn more about CRAM Prolog look at the [[cram_prolog|Using Prolog for reasoning]] tutorial. | ||
+ | To '' | ||
Append the following to your '' | Append the following to your '' | ||
Line 140: | Line 157: | ||
Let's see what this code does. The defstruct declares a structure type to hold values resulting from the inference. It's an instantiation of our motion in a space of (possibly) continuous parameters, which we deduce from a symbolic description of the designator via rules given in the def-fact-group. | Let's see what this code does. The defstruct declares a structure type to hold values resulting from the inference. It's an instantiation of our motion in a space of (possibly) continuous parameters, which we deduce from a symbolic description of the designator via rules given in the def-fact-group. | ||
- | As for the inference rules themselves, these are Prolog code embedded in Lisp, for it is Prolog that powers the inference behind designator resolution. To learn more about CRAM Prolog look at the [[cram_prolog|Using Prolog for reasoning]] tutorial. The '' | + | As for the inference rules themselves, these are Prolog code embedded in Lisp, for it is Prolog that powers the inference behind designator resolution. The '' |
<code lisp> | <code lisp> | ||
Line 180: | Line 197: | ||
<code lisp> | <code lisp> | ||
- | TUT> (defparameter my-desig2 (desig:a motion (type driving) (speed 1.5) (angle 2))) | + | TUT> (defparameter |
- | MY-DESIG2 | + | *MY-DESIG2 |
- | TUT> (reference my-desig2) | + | TUT> (reference |
(DRIVE # | (DRIVE # | ||
</ | </ | ||
Line 227: | Line 244: | ||
<code lisp> | <code lisp> | ||
TUT> (desig:a motion (type moving) (goal (1 1 0))) | TUT> (desig:a motion (type moving) (goal (1 1 0))) | ||
- | #<MOTION-DESIGNATOR | + | #<A MOTION |
+ | | ||
+ | | ||
</ | </ | ||
Line 280: | 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 | + | *MY-DESIG3* |
- | TUT> (reference my-desig3) | + | TUT> (reference |
(SET-PEN # | (SET-PEN # | ||
</ | </ |