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
Last revisionBoth sides next revision
tutorials:intermediate:semantic_environment_map [2016/01/15 16:24] gkazhoyatutorials:intermediate:semantic_environment_map [2016/06/14 13:04] – [Setting up] gkazhoya
Line 65: Line 65:
  
 <code lisp> <code lisp>
-SEMANTIC-MAP-COSTMAP> (setf cram-transforms-stamped:*fixed-frame* "map")+SEMANTIC-MAP-COSTMAP> (setf cram-tf:*fixed-frame* "map")
 SEMANTIC-MAP-COSTMAP>  SEMANTIC-MAP-COSTMAP> 
 (prolog:def-fact-group costmap-metadata () (prolog:def-fact-group costmap-metadata ()
Line 76: Line 76:
   (<- (location-costmap:costmap-in-reach-distance 0.9))   (<- (location-costmap:costmap-in-reach-distance 0.9))
   (<- (location-costmap:costmap-reach-minimal-distance 0.1)))   (<- (location-costmap:costmap-reach-minimal-distance 0.1)))
-SEMANTIC-MAP-COSTMAP> (roslisp-utilities:startup-ros)+SEMANTIC-MAP-COSTMAP> (roslisp:start-ros-node "sem_map_lisp")
 </code> </code>
  
Line 149: Line 149:
    #<QUATERNION (0.0d0 0.0d0 1.0d0 0.0d0)>>    #<QUATERNION (0.0d0 0.0d0 1.0d0 0.0d0)>>
 </code> </code>
 +
 A location description can be ambiguous, e.g., if we would like to have a location of an object of a certain semantic map part type: A location description can be ambiguous, e.g., if we would like to have a location of an object of a certain semantic map part type:
 <code lisp> <code lisp>
Line 165: Line 166:
    #<QUATERNION (0.0d0 0.0d0 0.0d0 1.0d0)>>    #<QUATERNION (0.0d0 0.0d0 0.0d0 1.0d0)>>
 </code> </code>
 +There are multiple objects of type cupboard, so we get multiple solutions.
 +
 +In the example semantic map '':type'' can be ''"Cupboard"'', ''"Drawer"'', ''"Refrigerator"'', etc., see the semantic map object for more detail.
 +
 +Now, let's use the location costmap mechanism to ground locations on or in objects:
 +<code lisp>
 +SEMANTIC-MAP-COSTMAP> (reference (make-designator :location '((:in "Refrigerator"))))
 +#<CL-TRANSFORMS-STAMPED:POSE-STAMPED 
 +   FRAME-ID: "map", STAMP: 0.0
 +   #<3D-VECTOR (1.3000001907348633d0 -0.9499998092651367d0 0.53999999538064d0)>
 +   #<QUATERNION (0.0d0 0.0d0 0.0d0 1.0d0)>>
 +</code>
 +{{ :tutorials:intermediate:in-fridge.png?direct&600 |}}
 +The big red dot is the location sampled for this designator.
 +
 +If we want a location on a specific object, not on all objects of a certain type, we can specify that using the '':name'' key:
 +<code lisp>
 +SEMANTIC-MAP-COSTMAP> (reference (make-designator :location '((:on "Cupboard")
 +                                                              (:name "kitchen_island"))))
 +#<CL-TRANSFORMS-STAMPED:POSE-STAMPED 
 +   FRAME-ID: "map", STAMP: 0.0
 +   #<3D-VECTOR (-0.6999998092651367d0 1.0500001907348633d0 0.8500000238418579d0)>
 +   #<QUATERNION (0.0d0 0.0d0 0.0d0 1.0d0)>>
 +</code>
 +{{ :tutorials:intermediate:location_on_kitchen_island.png?direct&1000 |}}
 +The marker array in RViz show a uniform distribution of all possible locations that satisfy the symbolic constraint in the designator.