Size: 8824
Comment:
|
Size: 8816
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 140: | Line 140: |
<chain base_link="r_shoulder_pan_link" tip_link="r_wrist_roll_link"/> | <chain base_link="torso_lift_link" tip_link="r_wrist_roll_link"/> |
Line 144: | Line 144: |
<chain base_link="l_shoulder_pan_link" tip_link="l_wrist_roll_link"/> | <chain base_link="torso_lift_link" tip_link="l_wrist_roll_link"/> |
Semantic Robot Description Format (SRDF) review
Proposer: Sachin Chitta, Kaijen Hsiao, Gil Jones, Ioan Sucan
Contents
Intent
This format is intended to represent information about the robot that is not in the URDF file, but it is useful for a variety of applications. The intention is to include information that has a semantic aspect to it.
Description
Tags
<robot> element
- Purpose: This is the root tag that for this document. All information is included in this tag.
Elements: <group>, <end_effector>, <virtual_joint>, <disable_collisions>
- Attributes:
name is the name of the robot. It should be the same name as in the corresponding URDF file.
<group> element
- Purpose: Representation of a set of joints and links. This can be useful for specifying DOF to plan for, defining arms, end effectors, etc
Elements: <link>, <joint>, <chain>, <group>
- Attributes:
name is the name of the group
- Note: when a group contains no tags, only its name attribute, it is assumed to be a reference to a group with that name, but that is defined earlier.
<link> element
Purpose: this element specifies a link that is part of a <group>.
- Elements: none
- Attributes:
name must be a name of a link in the corresponding URDF file
- Note: When a link is included in a group, so is the corresponding parent joint (if one exists)
<joint> element
Purpose: this element specifies a joint that is part of a <group>.
- Elements: none
- Attributes:
name must be a name of a joint in the corresponding URDF file
- Note: When a joint is included in a group, so is the corresponding child link
<chain> element
- Purpose: Represent a kinematic chain in the robot. This is useful for instance in representing arms.
- Elements: none
- Attributes:
name is the name of the chain
base_link is the root link of the chain (where the chain starts)
tip_link is the last link of the chain (where the chain ends)
- Note: Based on the links in the chain, the set of joints in the chain is implicitly defined. The joints that correspond to a chain are the parent joints for the links in the chain.
<end_effector> element
- Purpose: Represent information about an end effector.
- Elements: none
- Attributes:
name is the name of the end effector
parent_link is the name of the link this end effector is attached to.
group is the name of the group that contains the links (and joints) that make up the end effector
<virtual_joint> element
- Purpose: this element defines a virtual joint between a robot link and an external frame of reference (considered fixed with respect to the robot)
- Elements: none
- Attributes:
name the name of the joint that is assumed to exist between the robot and the environment
child_link the name of the link that connects the robot to the environment
parent_frame the name of the frame assumed to be fixed with respect to the robot
type the type of joint to be assumed. This can be fixed (0 DOF), floating (all 6 DOF) or planar (3 DOF: x, y, yaw)
<disable_collisions> element
- Purpose: By default it is assumed that any link of the robot could potentially come into collision with any other link in the robot. This tag disables collision checking between a specified pair of links. There can be many such tags in this file
- Elements: none
- Attributes:
link1 the name of the first link in the pair
link2 the name of the second link in the pair
Generic Example
<?xml version="1.0"?> <!-- This does not replace URDF, and is not an extension of URDF. This is a format for representing semantic information about the robot structure. A URDF file must exist for this robot as well, where the joints and the links that are referenced are defined --> <robot name="some robot"> <group name="group1"> <!-- when a link is specified, the parent joint of that link (if it exists) is automatically included --> <link name="..."/> <link name="..."/> <!-- when a joint is specified, the child link of that joint (which will always exist) is automatically included --> <joint name="..." /> <!-- when a chain is specified, all the links along the chain (including endpoints) are included in the group. Additionally, all the joints that are parents to included links are also included. This means that joints along the chain and the parent joint of the base link are included in the group --> <chain base_link="l_shoulder_pan_link" tip_link="l_wrist_roll_link"/> <chain base_link="r_shoulder_pan_link" tip_link="r_wrist_roll_link"/> </group> <!-- groups can also be formed by referencing to already defined group names --> <group name="arms"> <group name="left_arm"/> <group name="right_arm"/> <link name="..." /> </group> <!-- Define how the robot moves in its environment, i.e., connection to robot's root link --> <virtual_joint name="world_joint" type="planar" parent_frame="some fixed frame" child_link="robot's root link name"/> <!-- type can be planar, floating or fixed --> <!-- We can then include the virtual joint in groups --> <group name="whole_body"> <group name="arms"/> <joint name="world_joint"/> </group> <!-- define end effectors --> <end_effector name="some diff name" parent_link="..." group="group_name"/> <!-- By default it is assumed that any link of the robot could potentially come into collision with any other link in the robot. This tag disables collision checking between a specified pair of links. There can be many such tags in this file.--> <disable_collisions link1="link1" link2="link2" /> </robot>
Example for the PR2
<?xml version="1.0"?> <robot name="pr2"> <virtual_joint name="world_joint" type="planar" parent_frame="odom" child_link="base_footprint"/> <group name="right_arm"> <chain base_link="torso_lift_link" tip_link="r_wrist_roll_link"/> </group> <group name="left_arm"> <chain base_link="torso_lift_link" tip_link="l_wrist_roll_link"/> </group> <group name="arms"> <group name="left_arm"/> <group name="right_arm"/> </group> <group name="base"> <joint name="world_joint"/> </group> <group name="whole_body"> <group name="arms"/> <group name="base"/> <joint name="torso_lift_joint"/> </group> <group name="l_end_effector"> <joint name="l_gripper_palm_joint" /> <joint name="l_gripper_l_finger_joint" /> <joint name="l_gripper_l_finger_tip_joint" /> <joint name="l_gripper_led_joint" /> <joint name="l_gripper_motor_accelerometer_joint" /> <joint name="l_gripper_motor_slider_joint" /> <joint name="l_gripper_motor_screw_joint" /> <joint name="l_gripper_r_finger_joint" /> <joint name="l_gripper_r_finger_tip_joint" /> <joint name="l_gripper_joint" /> <joint name="l_gripper_tool_joint" /> </group> <group name="r_end_effector"> <joint name="r_gripper_palm_joint" /> <joint name="r_gripper_l_finger_joint" /> <joint name="r_gripper_l_finger_tip_joint" /> <joint name="r_gripper_led_joint" /> <joint name="r_gripper_motor_accelerometer_joint" /> <joint name="r_gripper_motor_slider_joint" /> <joint name="r_gripper_motor_screw_joint" /> <joint name="r_gripper_r_finger_joint" /> <joint name="r_gripper_r_finger_tip_joint" /> <joint name="r_gripper_joint" /> <joint name="r_gripper_tool_joint" /> </group> <end_effector name="r_end_effector" parent_link="r_wrist_roll_link" group="r_end_effector"/> <end_effector name="l_end_effector" parent_link="l_wrist_roll_link" group="l_end_effector"/> <disable_collisions link1="r_shoulder_pan_link" link2="r_shoulder_lift_link" /> <!-- and many more disable_collisions tags --> </robot>
Question / concerns / comments
Enter your thoughts on the API and any questions / concerns you have here. Please sign your name. Anything you want to address in the API review should be marked down here before the start of the meeting.
Person1 (change this)
- comment 1
- comment 2
Conclusion
TBD