Links, joints and sensors
Links, joints and sensors¶
Links¶
A physical link in the simulation contains inertia, collision and visual properties. A link must be a child of a robot and a robot can have multiple links.
# Import the element creator from pcg_gazebo.parsers.urdf import create_urdf_element
# The link is empty by default link = create_urdf_element('link') print(link)
<link name="link"/>
# By using reset(), it is possible to see the optional elements of a link link.reset(with_optional_elements=True) print(link)
<link name="link"> <inertial> <inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/> <origin rpy="0 0 0" xyz="0 0 0"/> <mass value="0"/> </inertial> <visual name="visual"> <material name=""> <color rgba="0 0 0 1"/> <gazebo/> </material> <geometry> <box size="0 0 0"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> <gazebo/> </visual> <collision name="collision"> <geometry> <box size="0 0 0"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> <gazebo/> </collision> <gazebo> <mu1>0</mu1> <minDepth>0</minDepth> <kd>1</kd> <maxContacts>20</maxContacts> <selfCollide>0</selfCollide> <mu2>0</mu2> <maxVel>0.01</maxVel> <kp>1000000000000.0</kp> </gazebo> </link>
# Let's create the elements dynamically at first link = create_urdf_element('link') # The link's name must be unique in a model link.name = 'base_link' print(link)
<link name="base_link"/>
# Mass of the link in kg link.mass = 30 # The center of mass are the cartesian coordinates in link.inertial.pose link.origin = create_urdf_element('origin') link.origin.xyz = [0, 10, 0] # The moments of inertia describe the elements of the 3x3 rotational inertial matrix link.inertia.ixx = 0.5 link.inertia.iyy = 0.5 link.inertia.izz = 0.5 print(link)
<link name="base_link"> <inertial> <inertia ixx="0.5" ixy="0" ixz="0" iyy="0.5" iyz="0" izz="0.5"/> <origin rpy="0 0 0" xyz="0 0 0"/> <mass value="0"/> </inertial> </link>
Joints¶
# The joint is empty by default joint = create_urdf_element('joint') print(joint)
<joint name="joint" type="revolute"> <parent link="link"/> <child link="link"/> <limit effort="0" lower="0" upper="0" velocity="0"/> </joint>
# By using reset(), it is possible to see the optional elements of a joint joint.reset(with_optional_elements=True) print(joint)
<joint name="joint" type="revolute"> <parent link="link"/> <child link="link"/> <dynamics damping="0" friction="0"> <gazebo/> </dynamics> <axis xyz="1 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/> <safety_controller k_position="0" k_velocity="0" soft_lower_limit="0" soft_upper_limit="0"/> <limit effort="0" lower="0" upper="0" velocity="0"> <gazebo/> </limit> <mimic multiplier="1" offset="0"/> <gazebo> <stopCfm>0.0</stopCfm> <stopErp>0.2</stopErp> </gazebo> </joint>