This is an old revision of the document!


Create your own KnowRob package

If your application requires functionality beyond that one already provided by the standard KnowRob packages, you will need to create your own KnowRob package. The following description assumes that you would like to add knowledge in terms of OWL ontologies, or implement new Prolog predicates, or both. If you would just like to link against e.g. some Java libraries provided by the packages, you don't have to follow the description below, but can just implement a normal ROS package that depends on the respective KnowRob packages.

KnowRob packages are normal ROS packages that, in addition, contain some special files and folders. This common structure allows tools like rosprolog to automatically load the package and all its dependencies.

  your_package
  |- manifest.xml
  |- CMakeLists.txt
  |- owl
  |  \- your_file.owl
  |- prolog
     |- init.pl
     \- your_module.pl

The example above assumes that you would like to create a package your_package with an OWL ontology your_file.owl and a Prolog file your_module.pl. Consider wrapping your functionality into a Prolog module to increase modularity and to avoid name clashes.

The init.pl should initialize the package, which may include loading dependencies, parsing OWL files, and registering RDF namespaces. The …owl.in or …pl.in files you will find in some packages are required since the RDF parser needs global paths for loading files referenced by an OWL file. owl.in files therefore contain a placeholder that is replaced during compilation as specified in your CMakeLists.txt. You can have a look at e.g. comp_spatial for an example. Once you have set up your package like this, you can launch it using

  rosrun rosprolog rosprolog your_package

Like in any other ROS package, you will need to specify your dependencies in the manifest.xml. Which packages to depend on depends on which functionality you would like to use. You just need to list the direct dependencies in your manifest, their dependencies are automatically included as well. Common candidates could be to depend on mod_vis (if you would like to use the visualization somewhere) or on ias_semantic_map (if you would like to use that map).