This is an old revision of the document!


Marker-based visualization canvas


This page describes the 'catkinized' version of KnowRob that uses the catkin buildsystem and the pure Java-based rosjava. The older version, which was based on the rosbuild buildsystem and rosjava_jni, used a local visualization canvas implemented in Java.


Based on rviz Markers, this visualization module can display 3D information in a browser-based canvas that has been built using the ros3djs library.

Usage

First, setup the rosbridge communication interface and initialiaze the `knowrob_vis` package.

$ roslaunch rosbridge_server rosbridge_websocket.launch
$ rosrun rosprolog  rosprolog knowrob_vis

Markers must be explicitly published by the user with following query (openEASE does this automatically).

% publish modified marker
?- marker_publish.

Semantic Map Marker

The following queries read data from a semantic map and visualize it in the browser-based visualization.

% load and visualize semantic map
?- owl_parse('package://knowrob_map_data/owl/ccrl2_semantic_map.owl').
?- owl_individual_of(A, knowrob:'SemanticEnvironmentMap'), marker_update(object(A)).

% highlight all electrical household appliances
?- owl_individual_of(A, knowrob:'ElectricalHouseholdAppliance'), marker_highlight(object(A)).

Agent Marker

The following queries read data from a robot description, look up the robot pose in the mongo DB and visualize it in the browser-based visualization.

% load and visualize the pr2 robot for given timepoint T
?- owl_parse('package://knowrob_srdl/owl/PR2.owl').
?- mng_robot_pose_at_time(pr2:'PR2Robot1','/map',T,_), marker_update(object(pr2:'PR2Robot1'),End).

Trajectory Marker

The following queries read data from a robot description, sample the '/base_link' between T0 and T1 and visualize it in the browser-based visualization.

% load and visualize the base link of the pr2 robot for given timerange (T0,T1)
?- owl_parse('package://knowrob_srdl/owl/PR2.owl').
?- marker_update(trajectory('/base_link'), interval(T0,T1,dt(Interval))).

Visualizing 3D object meshes

KnowRob supports the visualization of objects using 3D surface meshes in the STL or Collada file formats. These meshes can either be attached to an object instance or to an object class, in which case they are used for visualization of all of its instances. The following OWL snippet shows how an instance can be linked to its CAD model using the pathToCadModel property:

 <owl:NamedIndividual rdf:about="&map_obj;milk1">
     <rdf:type rdf:resource="&knowrob;CowsMilk-Product"/>
     <knowrob:pathToCadModel rdf:datatype="&xsd;string">
                             package://knowrob_tutorial/cad/milk.kmz</knowrob:pathToCadModel>
 </owl:NamedIndividual>

The package knowrob_cad_models in knowrob_addons provides such definitions for several object types, and also contains CAD models that are downloaded at build time.

Inside the ROS filesystem, resources such as binary files can be described using different kinds of URLs: The common file:// and http:// URLs, and the package:// URL used above that describes a path relative to a ROS package. These URLs can be resolved using the resource_retriever tool.

Since the client of a webserver cannot access the whole file system, this mechanism does not work as such if requests are made from a website. The ros3djs library therefore rewrites package:// URLs for object meshes to subfolders of the website's docroot. For example, meshes in the package pr2_description are searched at http://localhost/pr2_description/

If you would like to visualize meshes contained in ROS packages in the browser, you have to put these meshes into the docroot of the webserver, i.e. as a subfolder of the directory 'html' in knowrob_vis. Please make sure that the folder is named exactly like the ROS package containing the meshes and that is has the same subfolders. You can remove all files except the meshes themselves.