no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
Previous revisionNext revision | |||
— | srdl_extensions [2013/02/12 17:41] – external edit 127.0.0.1 | ||
---|---|---|---|
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 |