The SemanticMapToOWL service

The SemanticMapToOWL node offers a service for generating an OWL representation of a semantic map from a SemMap message (see msg folder) which is a list of objects with their types, dimensions, poses, and parent objects. This representation is transformed into an OWL representation that is compatible to the files in the ias_semantic_map directory.

A test client is included that creates a map with a single cupboard including door, hinge and handle.

$ roslaunch mod_semantic_map mod_semantic_map.launch
$ rosrun mod_semantic_map SemanticMapToOWLTestClient 

In general, you run the service like this:

$ rosrun mod_semantic_map SemanticMapToOWL

The service takes a header message and a list of objects as input and returns the generated map in OWL format as a string.

Here is the service format:

$ rossrv show mod_semantic_map/GenerateSemanticMapOWL
mod_semantic_map/SemMap map
 Header header
   uint32 seq
   time stamp
   string frame_id
 mod_semantic_map/SemMapObject[] objects
   int32 id
   string type
   float32 width
   float32 depth
   float32 height
   float32[] pose
   int32 partOf
string owlmap

You should provide a point in time at which the map was perceived, e.g. the current system time, and a namespace that is used for prefixing the map entries, e.g., '' by using the fields stamp and frame_id of the header message respectively.

An object in the list should have a unique id, type, width, height, depth, pose (4×4 rotation matrix) and an id of another object of which the object is part of (partOf). If the object is not part of anything please provide a 0.

All geometric information should be provided in meters.

The type of the object can be one from the set of subclasses of the Knowrob concept SpatialThing-Localized. You can retrieve a list of all types by the following command:

$ rosrun mod_semantic_map SemanticMapToOWL list

The encoding of type is case-insensitive, i.e. handle, Handle, HANDLE will work.


The service uses the following parameters that set the base IRI of the generated OWL file and the address of the room that is described in the map. The latter is important if the map is to be exchanged via RoboEarth since the search for maps in the DB depends on the address being set. You can adapt the following parameter definitions in the launch file to your values:

<param name="map_address_room_nr" type="string" value="3001" />
<param name="map_address_floor_nr" type="string" value="3" />
<param name="map_address_street_nr" type="string" value="45" />
<param name="map_address_street_name" type="string" value="Karlstrasse" />
<param name="map_address_city_name" type="string" value="Munich" />