Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
doc:srdl_extensions [2014/06/05 11:38] – external edit 127.0.0.1 | 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 |