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
doc:knowrob_basics [2021/02/18 09:22] – [Loading and querying environment information] daniel86doc:knowrob_basics [2021/02/18 09:25] (current) – [Visualizing objects] daniel86
Line 39: Line 39:
 <code prolog> <code prolog>
  ?- holds(A, rdf:type, knowrob:'IAIDrawer').  ?- holds(A, rdf:type, knowrob:'IAIDrawer').
- A = 'http://knowrob.org/kb/IAI-kitchen.owl#iai_kitchen_fridge_area_lower_drawer_main'+ A = iai_kitchen:'iai_kitchen_fridge_area_lower_drawer_main'
- A = 'http://knowrob.org/kb/IAI-kitchen.owl#iai_kitchen_kitchen_island_left_lower_drawer_main'+ A = iai_kitchen:'iai_kitchen_kitchen_island_left_lower_drawer_main'
- A = 'http://knowrob.org/kb/IAI-kitchen.owl#iai_kitchen_kitchen_island_left_upper_drawer_main' ;+ A = iai_kitchen:'iai_kitchen_kitchen_island_left_upper_drawer_main' ;
  [...]  [...]
 </code> </code>
Line 47: Line 47:
 For getting an overview of the information that is available about one object instance, we can query for all triples where the respective instance fills the Subject slot. In this example we pass two unbound variables //P// and //O// as arguments and receive all possible combinations of values as result. For getting an overview of the information that is available about one object instance, we can query for all triples where the respective instance fills the Subject slot. In this example we pass two unbound variables //P// and //O// as arguments and receive all possible combinations of values as result.
 <code prolog> <code prolog>
- ?- owl_has(knowrob:'Drawer1', P, O). + ?- owl_has(iai_kitchen:'iai_kitchen_kitchen_island_left_lower_drawer_main', P, O). 
- P = knowrob:prismaticallyConnectedTo+ P = urdf:hasBaseLinkName
- O = knowrob:'Door4' + O = kitchen_island_left_lower_drawer_main 
- P = knowrob:depthOfObject+ P = urdf:hasEndLinkName
- O = literal(type(xsd:double,'0.574538')) + O = kitchen_island_left_lower_drawer_handle 
- P = knowrob:heightOfObject, + [...]
- O = literal(type(xsd:double,'0.338121')) ; +
- P = knowrob:widthOfObject, +
- O = literal(type(xsd:double,'0.58045006')) ; +
- P = knowrob:properPhysicalParts, +
- O = knowrob:'Door4'+
- P = knowrob:properPhysicalParts, +
- O = knowrob:'Handle127'+
- P = knowrob:properPhysicalParts, +
- O = knowrob:'Slider4'+
- P = knowrob:describedInMap, +
- O = 'http://ias.cs.tum.edu/kb/ias_semantic_map.owl#SemanticEnvironmentMap0'+
- P = 'http://ias.cs.tum.edu/kb/srdl2-comp.owl#urdfName', +
- O = literal(drawer_fridge_bottom_fixed_link) ; +
- P = rdf:type, +
- O = owl:'NamedIndividual'+
- P = rdf:type, +
- O = knowrob:'Drawer' +
-</code> +
- +
- +
-===== Visualizing objects ===== +
- +
-KnowRob includes a browser-based visualization canvas that can display 3D data such as the environment map or the robot itself. The canvas is based on [[http://rosbridge.org/|rosbridge]] and the [[http://robotwebtools.org/|robotwebtools]] libraries that provide tools for displaying information from ROS in a browser. To forward information from the ROS world to the browser, you need to launch the rosbridge websocket server in another terminal using the following command: +
-<code bash> +
-roslaunch rosbridge_server rosbridge_websocket.launch +
-</code> +
- +
-You can just leave the rosbridge node running in the background while you are working on KnowRob. The following queries load a semantic environment map with a set of objects inside and push them to the 3D canvas. The result should look like the image below. +
- +
-{{ :tutorial:map-ccrl2-plain.png?nolink&300|}} +
- +
-<code prolog> +
-% Load the visualization Prolog module +
-?- register_ros_package(knowrob_vis). +
- +
-% Load an environment map to get some example objects +
-?- owl_parse('package://knowrob_map_data/owl/ccrl2_semantic_map.owl'). +
- +
-% Start the KnowRob side of the visualization canvas. This will start +
-% a web server at http://localhost:1111 -- open that page in a browser +
-?- visualisation_server. +
- +
-% Select the map instance of type 'SemanticEnvironmentMap'  +
-% and add it to the 3D canvas +
-?- owl_individual_of(A, knowrob:'SemanticEnvironmentMap'),  +
-   marker_update(object(A)).+
 </code> </code>