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.

Marker Types

The set of supported marker primitive types can be queried using the marker_prop_type(Type,_) predicate. The primitive types include arrow, cube, sphere, cylinder, line_strip, line_list, cube_list, sphere_list, points, text_view_facing, mesh_resource and triangle_list. Primitive markers can be created using marker($type('Name'),_), where $type must be replaced by one of the primitive types.

In addition, KnowRob supports a set of complex marker types.

  • cylinder_tf(Frame0,Frame1): A cylinder between 2 links
  • link(Frame): A marker that takes the pose of a link
  • trajectory(Frame): A trajectory of a link
  • trail(Frame): A trail of a link (trajectory with alpha fade)
  • average_trajectory(Frame): The average over multiple trajectories
  • pointer(Frame0,Frame1): Arrow that points from Frame0 in the direction of Frame1
  • object(Name): A marker that represents an OWL individual (including children objects)
  • agent(Name): A marker that represents an OWL agent individual (including all links)
  • stickman(Name): A special human skeleton visualization, kinematic structure is spanned by the OWL individual indentified by Name


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">

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.