Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
srdl_extensions [2013/02/05 13:24] – [Defining requirements on pose and size attributes of components or component types in *.owl-files] tenorth | srdl_extensions [2014/06/05 11:38] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== SRDL extensions ====== | + | #REDIRECT doc: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: 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, | + | |
- | + | ||
- | Prolog example lines: | + | |
- | + | ||
- | Attribute test: | + | |
- | + | ||
- | | + | |
- | + | ||
- | Pose test: | + | |
- | + | ||
- | | + | |
- | + | ||
- | | + | |
- | + | ||
- | Size test: | + | |
- | + | ||
- | | + | |
- | + | ||
- | Orientation test: | + | |
- | + | ||
- | | + | |
- | + | ||
- | If the files of Philipps SVN branch are being used, all of these lines should return " | + | |
- | + | ||
- | E.g.: | + | |
- | + | ||
- | | + | |
- | + | ||
- | + | ||
- | + | ||
- | 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 Gazebo [http:// | + | |
- | + | ||
- | Gazebo adds these additional attributes in its own < | + | |
- | + | ||
- | New features of the URDF2SRDL importer: | + | |
- | + | ||
- | * Read the content of the < | + | |
- | * Use the <sensor:...> | + | |
- | * 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 | + |