Loading files and ROS packages


This page describes the 'catkinized' version of KnowRob that has been converted to the catkin buildsystem and the new rosjava. The documentation for older versions can be found here.


There are different ways how OWL and Prolog files can be loaded. For testing purposes, it is common to manually load single files, while for deployment, one usually wants to set up a ROS package in such a way that all related files are automatically loaded. Both alternatives will be explained below.

Loading OWL files

OWL files need to be parsed to be internally represented as Prolog triples. Parsing is done using the owl_parser module in the knowrob_common package. The following command can be used to load an OWL file:

 owl_parse('path/to/file.owl').

The OWL parser understands URLs of the form package:\/\/<pkg_name>/local/path/to/file.owl that are also used by the resource_retriever package in ROS and reference a file relative to a ROS package. You can use these URLs both for loading OWL files from Prolog and for imports in the head of an OWL file.

Loading Prolog modules

Most functionality in KnowRob is contained in Prolog modules. They can be loaded using the use_module directive. The module needs to be either somewhere in the Prolog 'library' path or be referenced relative to the current working directory:

 use_module(library('module-name')).
 use_module('path/to/module-name').

The rosprolog init scripts automatically add the 'prolog' folder inside ROS packages to the Prolog library search path when they are loaded using register_ros_package. Afterwards, libraries in this folder can be loaded using the simple library(module_name) instead of the file path.

Loading OWL/Prolog files in ROS packages

KnowRob uses rosprolog to interact with the ROS filesystem structure. This facilitates loading complex package structures since dependencies on other ROS packages with KnowRob components are automatically resolved and loaded.

In order to use this functionality, each ROS package containing KnowRob components needs to correctly define its dependencies on other packages (in the package.xml) and has to contain a file 'prolog/init.pl'. This file will be called by rosprolog in order to set up the package itself and to initialize all dependencies (again by calling their respective init.pl).

Each KnowRob ROS package can be loaded using the following predicate:

 register_ros_package('pkg-name').

Alternatively, one can launch KnowRob giving the respective package as argument to rosprolog:

 rosrun rosprolog rosprolog pkg-name

Exporting knowledge into OWL files

At some point, you may want to create OWL files. This can be done with the predicates in the owl_export module in the knowrob_common package:

 % Export the perception of an object to an OWL file
 export_object(knowrob:'Drawer1', 'path/to/object.owl').
 
 % Export the definition of an object class to an OWL file
 export_object_class(knowrob:'Drawer', 'path/to/objclass.owl').
 
 % Export the map as the set of all perceptions of objects to an OWL file
 export_map(ias_semantic_map:'SemanticEnvironmentMap0', 'path/to/map.owl').
 
 % Export an action specification (TBOX) to an OWL file
 export_action(knowrob:'PickingUpAnObject', 'path/to/action.owl').