Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| doc:srdl_extensions [2013/04/22 09:35] – created admin | doc:srdl_extensions [2014/08/08 09:51] (current) – removed admin | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== SRDL extensions ====== | ||
| - | This page describes work in progress by P. Freyer on extensions of SRDL towards matching based on continuous values and towards selection among multiple matching solutions. | ||
| - | |||
| - | ===== Defining requirements on attributes of components or component types ===== | ||
| - | |||
| - | In order to define requirements that not only check the existence of a specific component but also check, if a component of a specific type is available and if it meets a specific set of requirements (e.g. a laser scanner with a minimum range of 0.01 metres), some new SRDL2 Prolog methods and schema additions got introduced. | ||
| - | |||
| - | ==== Defining an attribute requirement in *.owl files ==== | ||
| - | |||
| - | SRDL2 so far only knows restrictions on the existence of some components, as can be seen below: | ||
| - | |||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | If a requirement on a components or component types attributes is made, the < | ||
| - | |||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | Please notice, that the attributes name is appended with a '#' | ||
| - | |||
| - | The allowed range on the requirement attribute is then defined in the < | ||
| - | * < | ||
| - | * < | ||
| - | * < | ||
| - | * < | ||
| - | |||
| - | All of these tags are optional, so a range with only a minimum or a maximum value can also be defined. | ||
| - | |||
| - | ==== Defining requirements on pose and size attributes of components or component types in *.owl-files ==== | ||
| - | |||
| - | Not only the attributes of a components requirement are of interest for requirement definition. | ||
| - | Sometimes the size or position of a robot or its components can also be of interest. | ||
| - | |||
| - | A map of a room, for example, can look very different, depending on the height, it is created at. If a big robot creates a map using a laser scanner 1 meter above the ground, this map should not be used for a robot, that is only 0.2 meter high. This robot may have problems with obstacles much smaller than 1 meter and thus not in the previously created map. Instead, the small robot should use a different map, that was created at a much lower level of height. On the other hand, a map, that was created 0.02 meters above the ground may contain obstacles, such as door stoppers, which simply are of no interest to a big robot, which would just roll over it. | ||
| - | |||
| - | In order to define requirements on the pose and size of a component, special robot attributes got introduced. They can be defined and used same as the normal component attributes. The prolog routines branch these attributes to a different mechanism which analyses the pose matrices that are saved with a robot to get information on the X, Y and Z position and dimension of components or the robot itself. | ||
| - | |||
| - | These attributes are: | ||
| - | * 3DPoseXPosition | ||
| - | * Checks, if the position of a component on the robot is within a specific range on the X axis | ||
| - | * 3DPoseYPosition | ||
| - | * Checks, if the position of a component on the robot is within a specific range on the Y axis | ||
| - | * 3DPoseZPosition | ||
| - | * 3DPoseHeightAboveGround '' | ||
| - | * Checks, if the position of a component on the robot is within a specific range on the Z axis | ||
| - | * 3DPoseXLength | ||
| - | * 3DPoseWidth '' | ||
| - | * Checks, if the size of a component along the X axis is within a specified range | ||
| - | * 3DPoseYLength | ||
| - | * 3DPoseDepth '' | ||
| - | * Checks, if the size of a component along the Y axis is within a specified range | ||
| - | * 3DPoseZLength | ||
| - | * 3DPoseHeight '' | ||
| - | * Checks, if the size of a component along the Z axis is within a specified range | ||
| - | * IsTiltable | ||
| - | * Is 1, if any of the preceeding joints is a RevoluteUrdfJoint or a ContinuousUrdfJoint, | ||
| - | * 3DOrientationX | ||
| - | * Rotation around the X axis. 0 is at the Z axis. Rotation is CCW along the axis, values are in range [0;360[ | ||
| - | * 3DOrientationY | ||
| - | * Rotation around the Y axis. 0 is at the X axis. Rotation is CCW along the axis, values are in range [0;360[ | ||
| - | * 3DOrientationZ | ||
| - | * Rotation around the Z axis. 0 is at the Y axis. Rotation is CCW along the axis, values are in range [0;360[ | ||
| - | |||
| - | ==== Example OWL specifications ==== | ||
| - | |||
| - | === Example: Pose test using an alternative name === | ||
| - | |||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | === Example: Pose test === | ||
| - | |||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | === Example: Size test === | ||
| - | |||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | === Example: Orientation test === | ||
| - | |||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | ==== Testing requirements on attributes and a components pose and size in prolog ==== | ||
| - | |||
| - | Testing, if a capability is available on a robot did not change at all. The method just got extended and now tests attribute and pose requirements, | ||
| - | |||
| - | === Attribute test === | ||
| - | |||
| - | srdl2: | ||
| - | ' | ||
| - | |||
| - | === Pose test === | ||
| - | |||
| - | srdl2: | ||
| - | ' | ||
| - | |||
| - | srdl2: | ||
| - | ' | ||
| - | |||
| - | === Size test === | ||
| - | |||
| - | srdl2: | ||
| - | ' | ||
| - | |||
| - | === Orientation test === | ||
| - | |||
| - | srdl2: | ||
| - | ' | ||
| - | |||
| - | If the files of Philipps SVN branch are being used, all of these lines should return " | ||
| - | |||
| - | E.g.: | ||
| - | |||
| - | srdl2: | ||
| - | ' | ||
| - | |||
| - | |||
| - | |||
| - | Some new methods got introduced for detailed checks: | ||
| - | |||
| - | * subcomponent_list(Object, | ||
| - | * Determines a full list of subcomponents for a given object. This list is determined recursively over all subcomponents with the given object as the root. | ||
| - | |||
| - | * component_list_to_dimension_list_X(ComponentList, | ||
| - | * component_list_to_dimension_list_Y(ComponentList, | ||
| - | * component_list_to_dimension_list_Z(ComponentList, | ||
| - | * Converts a list of components to a list of dimension informations (position), the components have | ||
| - | |||
| - | * maxdim(DimensionList, | ||
| - | * maxdim(dimension(Min1, | ||
| - | * determines the global maximum and minimum of the given dimensions | ||
| - | |||
| - | * object_pose_X(Object, | ||
| - | * object_pose_Y(Object, | ||
| - | * object_pose_Z(Object, | ||
| - | * object_pose_Point(Object, | ||
| - | * Determines the (X/Y/Z) position of a given Component | ||
| - | |||
| - | * object_angle_X(Object, | ||
| - | * object_angle_Y(Object, | ||
| - | * object_angle_Z(Object, | ||
| - | * Determines the rotation around the (X/Y/Z) axis of a given Component | ||
| - | |||
| - | * object_pose_X_dim(Object, | ||
| - | * object_pose_Y_dim(Object, | ||
| - | * object_pose_Z_dim(Object, | ||
| - | * Determines the size of an object as dimension(Min, | ||
| - | |||
| - | * object_pose_X_length(Object, | ||
| - | * object_pose_Y_length(Object, | ||
| - | * object_pose_Z_length(Object, | ||
| - | * Determines the size of an object as length value | ||
| - | |||
| - | ===== Tool changes by P. Freyer ===== | ||
| - | |||
| - | In addition to the changes, that are done on SRDL itself, some tools along SRDL got changed, too. | ||
| - | |||
| - | ==== Changes in the URDF-> | ||
| - | |||
| - | The URDL2SRDL importer converts *.urdf-files to the *.owl-file format. This tool was originally developed by Alexander Perzylo. In order to be able to define requirements on a components attributes, it had to also convert these attributes into the SRDL files. | ||
| - | |||
| - | These attributes are not a part of the URDL description files as such but are added there by [[http:// | ||
| - | |||
| - | Gazebo adds these additional attributes in its own < | ||
| - | |||
| - | New features of the URDF2SRDL importer: | ||
| - | |||
| - | * Read the content of the < | ||
| - | * Use the < | ||
| - | * Use the appearance of a value to define its datatype | ||
| - | * Use the name or part of the name of some attributes to determine the datatype of its value | ||
| - | * Include all of these informations into the *.owl output file | ||

