仿真机械臂夹爪

1、创建自己的夹爪流程


//  创建新的工作空间 
mkdir -p /home/hzx/autolabor_ws/teacher_zhao/demo02_joint_ws/src
cd /home/hzx/autolabor_ws/teacher_zhao/demo02_joint_ws
catkin_make

// 创建新的项目

catkin_create_pkg urdf_rviz urdf xacro gazebo_ros gazebo_ros_control gazebo_plugins

cd urdf_rviz
mkdir launch
mkdir config
mkdir -p urdf/urdf
mkdir -p urdf/xacro
mkdir meshes

cd urdf/urdf
gedit demo01.urdf   //  填入如下内容

cd ..
cd ..
cd launch
gedit demo01.launch


<?xml version="1.0"?>
<launch>
  <!-- 在参数服务器载入 urdf 文件 -->
  <param name="robot_description" textfile="$(find urdf_rviz)/urdf/urdf/demo01.urdf" />


  <!-- 设置GUI参数,显示关节控制插件 -->
  <param name="use_gui" value="true"/>
  <!-- 启动 rviz -->
  <node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf_rviz)/config/view_rviz.rviz"/>

  <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher"/>

  <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher"/>


</launch>



<!-- demo01.urdf -->


<?xml version="1.0" encoding="utf-8"?>
<robot name="demo">
	 					
  <link name="base_link">  					
    <visual>  								
      <geometry>  							
        <box size="0.2 0.2 0.2" />      					
      </geometry>

      <origin xyz="0 0 0" rpy="0 0 0"/>

      <material name="Blue">
        <color rgba="1 0 0 1"/>
      </material>
    </visual>
  </link>


  <link name="strack_link1">  							
    <visual>							
      <geometry>  								
        <box size="0.1 0.2 0.4" />      					
      </geometry>
      <origin xyz="0.05 0 -0.2" rpy="0 0 0"/>  
      <material name="Blue2">
        <color rgba="0 0.3 0.4 1"/>
      </material>
    </visual>  	
  </link>
 
  <joint name="strack_base_joint1" type="revolute">
    <parent link="base_link"/>
    <child link="strack_link1"/>
    <origin xyz="0.1 0 -0.1" rpy="0 0 0"/>  <!-- 关节安装在父级连杆的相对位置,然后调整连杆偏移角度 -->
    <axis xyz="0 1 0"/>
    <limit lower="-1.57" upper="0" effort="100" velocity="3" />
  </joint>


  <link name="strack_link2">  							
    <visual>  									
      <geometry>  								
        <box size="0.1 0.2 0.4" />       					
      </geometry>
      <origin xyz="0.05 0 -0.2" rpy="0 0 0"/>

      <material name="Blue2">
        <color rgba="0 0.3 0.4 1"/>
      </material>
    </visual>  	
  </link>
 
  <joint name="strack_base_joint2" type="revolute">
    <parent link="base_link"/>
    <child link="strack_link2"/>
    <origin xyz="-0.1 0 -0.1" rpy="0 0 3.14"/>
    <axis xyz="0 1 0"/>
    <limit lower="-1.57" upper="0" effort="100" velocity="3" />
  </joint>


  <link name="finger_link1">  							
    <visual>  									
      <geometry>  								
        <box size="0.1 0.2 0.2" />       					
      </geometry>
      <origin xyz="0.05 0 -0.1" rpy="0 0 0"/>

      <material name="Blue2">
        <color rgba="0 0.3 0.4 1"/>
      </material>
    </visual>  	
  </link>
 
  <joint name="finger_strack_joint1" type="revolute">
    <parent link="strack_link1"/>
    <child link="finger_link1"/>
    <origin xyz="0 0 -0.4" rpy="0 0 0"/>
    <axis xyz="0 1 0"/>
    <limit lower="0" upper="0.5235" effort="100" velocity="3" />
  </joint>


  <link name="finger_link2">  							
    <visual>  									
      <geometry>  								
        <box size="0.1 0.2 0.2" />        					
      </geometry>
      <origin xyz="0.05 0 -0.1" rpy="0 0 0"/>

      <material name="Blue2">
        <color rgba="0 0.3 0.4 1"/>
      </material>
    </visual>  	
  </link>
 
  <joint name="finger_strack_joint2" type="revolute">
    <parent link="strack_link2"/>
    <child link="finger_link2"/>
    <origin xyz="0 0 -0.4" rpy="0 0 0"/>
    <axis xyz="0 1 0"/>
    <limit lower="-0" upper="0.5235" effort="100" velocity="3" />
  </joint>


</robot>


 

2、完成结果


cd /home/hzx/autolabor_ws/teacher_zhao/demo02_joint_ws
source devel/setup.bash 

roslaunch urdf_rviz demo01.launch 

在这里插入图片描述
 

3、夹爪接入机械臂

3.1 同一个文件

版本一、将机械臂 与 夹爪 放在同一文件


cd /home/hzx/hzx_ws/probot_anno_03/src/probot_description/urdf/
gedit probot_anno_with_custom_gripper.xacro

// 填入如下内容:


<?xml version="1.0"?>
<robot name="probot_anno" xmlns:xacro="http://ros.org/wiki/xacro">

  <xacro:property name="base_link_length" value="0.2" />
  <xacro:property name="base_link_width" value="0.2" />
  <xacro:property name="base_link_height" value="0.2" />
  <xacro:property name="M_PI" value="3.1415926536"/>
  <xacro:include filename="$(find probot_description)/urdf/materials.urdf.xacro" />
  <!-- xacro:include filename="$(find probot_description)/urdf/custom_gripper.xacro" / -->

  <link name="world"/>

  <joint name="world_joint" type="fixed">
    <parent link="world" />
    <child link="base_footprint" />
    <origin xyz="0 0 0" rpy="0 0 0" />
  </joint>

  <link name="base_footprint" />
  <joint name="joint0" type="fixed">
    <parent link="base_footprint" />
    <child link="base_link" />
    <origin xyz="0 0 0.0532" rpy="0 0 0" />
  </joint>
    
  <link name="base_link">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.01" />
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0.017266 0 0.0315" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/base_link.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0.017266 0 0.0315" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/base_link.STL" />
      </geometry>
    </collision>
  </link>

  <link name="link_1">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.01" />
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/link_1.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/link_1.STL" />
      </geometry>
    </collision>
  </link>
  <joint name="joint_1" type="revolute">
    <origin xyz="0 0 0.0315" rpy="1.5708 0 0" />
    <parent link="base_link" />
    <child link="link_1" />
    <axis xyz="0 1 0" />
    <limit lower="-3.1416" upper="3.1416" effort="100" velocity="3" />
  </joint>

  <link name="link_2">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.001" />
        <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/link_2.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/link_2.STL" />
      </geometry>
    </collision>
  </link>
  <joint name="joint_2" type="revolute">
    <origin xyz="0 0.2305 0" rpy="0 0 0" />
    <parent link="link_1" />
    <child link="link_2" />
    <axis xyz="0 0 1" />
    <limit lower="-2.0071" upper="2.0071" effort="100" velocity="3" />
  </joint>

  <link name="link_3">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.001" />
        <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/link_3.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/link_3.STL" />
      </geometry>
    </collision>
  </link>
  <joint name="joint_3" type="revolute">
    <origin xyz="0 0.225 0" rpy="0 0 0" />
    <parent link="link_2" />
    <child link="link_3" />
    <axis xyz="0 0 1" />
    <limit lower="-0.6981" upper="3.8397" effort="100" velocity="3" />
  </joint>

  <link name="link_4">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.00001" />
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/link_4.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/link_4.STL" />
      </geometry>
    </collision>
  </link>
  <joint name="joint_4" type="revolute">
    <origin xyz="0.023 0 0.0" rpy="0 0 0" />
    <parent link="link_3" />
    <child link="link_4" />
    <axis xyz="1 0 0" />
    <limit lower="-3.1416" upper="3.1416" effort="100" velocity="3" />
  </joint>

  <link name="link_5">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.00001" />
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/link_5.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/link_5.STL" />
      </geometry>
    </collision>
  </link>
  <joint name="joint_5" type="revolute">
    <origin xyz="0.20585535 0 0" rpy="0 0 0" />
    <parent link="link_4" />
    <child link="link_5" />
    <axis xyz="0 0 1" />
    <limit lower="-0.7854" upper="3.9270" effort="100" velocity="3" />
  </joint>

  <link name="link_6">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.00001" />
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/link_6.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description/meshes/link_6.STL" />
      </geometry>
    </collision>
  </link>
  <joint name="joint_6" type="revolute">
    <origin xyz="0 -0.042 0" rpy="0 0 0" />
    <parent link="link_5" />
    <child link="link_6" />
    <axis xyz="0 -1 0" />
    <limit lower="-3.1416" upper="3.1416" effort="100" velocity="3" />
  </joint>

  <link name="tool0"/>
  <joint name="joint_tool0" type="fixed">
    <origin xyz="0 -0.013 0" rpy="${M_PI/2} 0 0" />
    <parent link="link_6" />
    <child link="tool0" />
  </joint>


  <!-- 增加自定义夹爪 -->
  <joint name="gripper_base_tool0_joint" type="fixed">
    <parent link="tool0"/>
    <child link="gripper_base_link"/>
    <origin xyz="0 0 0.12" rpy="3.14159 0 0"/>  <!-- 关节安装在父级连杆的相对位置,然后调整连杆偏移角度 -->
    <axis xyz="0 0 1"/>
    <limit lower="-1.57" upper="0" effort="100" velocity="3" />
  </joint>


  <link name="gripper_base_link">
    <inertial>
      <mass value="0.01"/>
      <origin xyz="0 0 0"/>
      <inertia ixx="1.0" ixy="1.0" ixz="1.0" iyy="1.0" iyz="1.0" izz="1.0"/>
    </inertial>
    <visual>
      <origin rpy="0 0 0" xyz=" 0 0 0 "/>
      <geometry>
        <box size="${base_link_length} ${base_link_width} ${base_link_height}" />  
      </geometry>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <material name="Blue">
        <color rgba="1 0 0 1"/>
      </material>
    </visual>
    <collision>
      <origin rpy="0 0 0" xyz="0.0 0.0 -0.01241"/>
      <geometry>
        <box size="${base_link_length} ${base_link_width} ${base_link_height}" />  
      </geometry>
    </collision>
  </link>

  <link name="strack_link1">  	
    <inertial>
      <mass value="0.01"/>
      <origin xyz="0 0 0"/>
      <inertia ixx="1.0" ixy="1.0" ixz="1.0" iyy="1.0" iyz="1.0" izz="1.0"/>
    </inertial>						
    <visual>							
      <geometry>  								
        <box size="0.1 0.2 0.4" />      					
      </geometry>
      <origin xyz="0.05 0 -0.2" rpy="0 0 0"/>  
      <material name="Blue2">
        <color rgba="0 0.3 0.4 1"/>
      </material>
    </visual>  	
  </link>
 
  <joint name="strack_base_joint1" type="revolute">
    <parent link="gripper_base_link"/>
    <child link="strack_link1"/>
    <origin xyz="0.1 0 -0.1" rpy="0 0 0"/>  <!-- 关节安装在父级连杆的相对位置,然后调整连杆偏移角度 -->
    <axis xyz="0 1 0"/>
    <limit lower="-1.57" upper="0" effort="100" velocity="3" />
  </joint>


  <link name="strack_link2">  
    <inertial>
      <mass value="0.01"/>
      <origin xyz="0 0 0"/>
      <inertia ixx="1.0" ixy="1.0" ixz="1.0" iyy="1.0" iyz="1.0" izz="1.0"/>
    </inertial>								
    <visual>  									
      <geometry>  								
        <box size="0.1 0.2 0.4" />       					
      </geometry>
      <origin xyz="0.05 0 -0.2" rpy="0 0 0"/>

      <material name="Blue2">
        <color rgba="0 0.3 0.4 1"/>
      </material>
    </visual>  	
  </link>
 
  <joint name="strack_base_joint2" type="revolute">
    <parent link="gripper_base_link"/>
    <child link="strack_link2"/>
    <origin xyz="-0.1 0 -0.1" rpy="0 0 3.14"/>
    <axis xyz="0 1 0"/>
    <limit lower="-1.57" upper="0" effort="100" velocity="3" />
  </joint>


  <link name="finger_link1">  	
    <inertial>
      <mass value="0.01"/>
      <origin xyz="0 0 0"/>
      <inertia ixx="1.0" ixy="1.0" ixz="1.0" iyy="1.0" iyz="1.0" izz="1.0"/>
    </inertial>							
    <visual>  									
      <geometry>  								
        <box size="0.1 0.2 0.2" />       					
      </geometry>
      <origin xyz="0.05 0 -0.1" rpy="0 0 0"/>

      <material name="Blue2">
        <color rgba="0 0.3 0.4 1"/>
      </material>
    </visual>  	
  </link>
 
  <joint name="finger_strack_joint1" type="revolute">
    <parent link="strack_link1"/>
    <child link="finger_link1"/>
    <origin xyz="0 0 -0.4" rpy="0 0 0"/>
    <axis xyz="0 1 0"/>
    <limit lower="0" upper="0.5235" effort="100" velocity="3" />
  </joint>


  <link name="finger_link2">  
    <inertial>
      <mass value="0.01"/>
      <origin xyz="0 0 0"/>
      <inertia ixx="1.0" ixy="1.0" ixz="1.0" iyy="1.0" iyz="1.0" izz="1.0"/>
    </inertial>								
    <visual>  									
      <geometry>  								
        <box size="0.1 0.2 0.2" />        					
      </geometry>
      <origin xyz="0.05 0 -0.1" rpy="0 0 0"/>

      <material name="Blue2">
        <color rgba="0 0.3 0.4 1"/>
      </material>
    </visual>  	
  </link>
 
  <joint name="finger_strack_joint2" type="revolute">
    <parent link="strack_link2"/>
    <child link="finger_link2"/>
    <origin xyz="0 0 -0.4" rpy="0 0 0"/>
    <axis xyz="0 1 0"/>
    <limit lower="-0" upper="0.5235" effort="100" velocity="3" />
  </joint>
  



   <!-- Attach the right gripper  调用宏定义,生成夹爪模型-->
   <!-- gripper parent="tool0" color="Blue" xyz="0 0.015 0.02" rpy="0 ${-M_PI/2} ${-M_PI/2}"/ -->

  <!-- Transmissions for ROS Control -->
  <xacro:macro name="transmission_block" params="joint_name">
    <transmission name="tran1">
      <type>transmission_interface/SimpleTransmission</type>
      <joint name="${joint_name}">
        <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
      </joint>
      <actuator name="motor1">
        <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
        <mechanicalReduction>1</mechanicalReduction>
      </actuator>
    </transmission>
  </xacro:macro>
  
  <xacro:transmission_block joint_name="joint_1"/>
  <xacro:transmission_block joint_name="joint_2"/>
  <xacro:transmission_block joint_name="joint_3"/>
  <xacro:transmission_block joint_name="joint_4"/>
  <xacro:transmission_block joint_name="joint_5"/>
  <xacro:transmission_block joint_name="joint_6"/>

  <xacro:transmission_block joint_name="strack_base_joint1"/>		<!-- 只需要对转动关节进行设置,固定关节不需要设置传动系统 -->
  <xacro:transmission_block joint_name="strack_base_joint2"/>
  <xacro:transmission_block joint_name="finger_strack_joint1"/>  
  <xacro:transmission_block joint_name="finger_strack_joint2"/>


  <!--xacro:include filename="$(find probot_description)/urdf/sensors/camera.urdf.xacro"/-->

  <!-- ros_control plugin -->
  <gazebo>
    <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
      <robotNamespace>/probot_anno</robotNamespace>
      <robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType>
      <legacyModeNS>true</legacyModeNS>
    </plugin>
  </gazebo>

<gazebo>
   <plugin name="gazebo_grasp_fix" filename="libgazebo_grasp_fix.so">
        <arm>
           <arm_name>zju_anno_arm</arm_name>
           <palm_link> link_5  </palm_link>
           <gripper_link>link_6</gripper_link>
           <gripper_link> gripper_active_finger_bracket_link </gripper_link>
        </arm>
       <forces_angle_tolerance>100</forces_angle_tolerance>
       <update_rate>4</update_rate>
       <grip_count_threshold>4</grip_count_threshold>
       <max_grip_count>8</max_grip_count>
       <release_tolerance>0.005</release_tolerance>
       <disable_collisions_on_attach>true</disable_collisions_on_attach>
       <contact_topic>__default_topic__</contact_topic>
    </plugin>
</gazebo>

</robot>

 

3.2 单独文件

版本二、将机械臂 与 夹爪 单独成文件


cd /home/hzx/hzx_ws/probot_anno_03/src/probot_description/urdf/
gedit probot_anno_with_custom_gripper.xacro
gedit custom_gripper.xacro 

// 分别填入如下内容:

<!-- probot_anno_with_custom_gripper.xacro   1、机械臂文件 -->

<?xml version="1.0"?>
<robot name="probot_anno" xmlns:xacro="http://ros.org/wiki/xacro">

  <xacro:property name="base_link_length" value="0.2" />
  <xacro:property name="base_link_width" value="0.2" />
  <xacro:property name="base_link_height" value="0.2" />
  <xacro:property name="M_PI" value="3.1415926536"/>
  <xacro:include filename="$(find probot_description_two_file)/urdf/materials.urdf.xacro" />
  <xacro:include filename="$(find probot_description_two_file)/urdf/custom_gripper.xacro" />

  <link name="world"/>

  <joint name="world_joint" type="fixed">
    <parent link="world" />
    <child link="base_footprint" />
    <origin xyz="0 0 0" rpy="0 0 0" />
  </joint>

  <link name="base_footprint" />
  <joint name="joint0" type="fixed">
    <parent link="base_footprint" />
    <child link="base_link" />
    <origin xyz="0 0 0.0532" rpy="0 0 0" />
  </joint>
    
  <link name="base_link">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.01" />
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0.017266 0 0.0315" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/base_link.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0.017266 0 0.0315" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/base_link.STL" />
      </geometry>
    </collision>
  </link>

  <link name="link_1">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.01" />
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/link_1.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/link_1.STL" />
      </geometry>
    </collision>
  </link>
  <joint name="joint_1" type="revolute">
    <origin xyz="0 0 0.0315" rpy="1.5708 0 0" />
    <parent link="base_link" />
    <child link="link_1" />
    <axis xyz="0 1 0" />
    <limit lower="-3.1416" upper="3.1416" effort="100" velocity="3" />
  </joint>

  <link name="link_2">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.001" />
        <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/link_2.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/link_2.STL" />
      </geometry>
    </collision>
  </link>
  <joint name="joint_2" type="revolute">
    <origin xyz="0 0.2305 0" rpy="0 0 0" />
    <parent link="link_1" />
    <child link="link_2" />
    <axis xyz="0 0 1" />
    <limit lower="-2.0071" upper="2.0071" effort="100" velocity="3" />
  </joint>

  <link name="link_3">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.001" />
        <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/link_3.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/link_3.STL" />
      </geometry>
    </collision>
  </link>
  <joint name="joint_3" type="revolute">
    <origin xyz="0 0.225 0" rpy="0 0 0" />
    <parent link="link_2" />
    <child link="link_3" />
    <axis xyz="0 0 1" />
    <limit lower="-0.6981" upper="3.8397" effort="100" velocity="3" />
  </joint>

  <link name="link_4">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.00001" />
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/link_4.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/link_4.STL" />
      </geometry>
    </collision>
  </link>
  <joint name="joint_4" type="revolute">
    <origin xyz="0.023 0 0.0" rpy="0 0 0" />
    <parent link="link_3" />
    <child link="link_4" />
    <axis xyz="1 0 0" />
    <limit lower="-3.1416" upper="3.1416" effort="100" velocity="3" />
  </joint>

  <link name="link_5">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.00001" />
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/link_5.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/link_5.STL" />
      </geometry>
    </collision>
  </link>
  <joint name="joint_5" type="revolute">
    <origin xyz="0.20585535 0 0" rpy="0 0 0" />
    <parent link="link_4" />
    <child link="link_5" />
    <axis xyz="0 0 1" />
    <limit lower="-0.7854" upper="3.9270" effort="100" velocity="3" />
  </joint>

  <link name="link_6">
    <inertial>
      <origin xyz="-0.010934 0.23134 0.0051509" rpy="0 0 0" />
      <mass value="0.00001" />
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/link_6.STL" />
      </geometry>
      <material name="">
        <color rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://probot_description_two_file/meshes/link_6.STL" />
      </geometry>
    </collision>
  </link>
  <joint name="joint_6" type="revolute">
    <origin xyz="0 -0.042 0" rpy="0 0 1.57" />
    <parent link="link_5" />
    <child link="link_6" />
    <axis xyz="0 -1 0" />
    <limit lower="-3.1416" upper="3.1416" effort="100" velocity="3" />
  </joint>

  <link name="tool0"/>
  <joint name="joint_tool0" type="fixed">
    <origin xyz="0 -0.013 0" rpy="${M_PI/2} 0 0" />
    <parent link="link_6" />
    <child link="tool0" />
  </joint>

   <!-- Attach the right gripper  调用宏定义,生成夹爪模型-->
   <!-- gripper parent="tool0" color="Blue" xyz="0 0.015 0.02" rpy="0 ${-M_PI/2} ${-M_PI/2}"/ -->

  <!-- Transmissions for ROS Control -->
  <xacro:macro name="transmission_block" params="joint_name">
    <transmission name="tran1">
      <type>transmission_interface/SimpleTransmission</type>
      <joint name="${joint_name}">
        <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
      </joint>
      <actuator name="motor1">
        <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
        <mechanicalReduction>1</mechanicalReduction>
      </actuator>
    </transmission>
  </xacro:macro>
  
  <xacro:transmission_block joint_name="joint_1"/>
  <xacro:transmission_block joint_name="joint_2"/>
  <xacro:transmission_block joint_name="joint_3"/>
  <xacro:transmission_block joint_name="joint_4"/>
  <xacro:transmission_block joint_name="joint_5"/>
  <xacro:transmission_block joint_name="joint_6"/>

  <xacro:transmission_block joint_name="strack_base_joint1"/>		<!-- 只需要对转动关节进行设置,固定关节不需要设置传动系统 -->
  <xacro:transmission_block joint_name="strack_base_joint2"/>
  <xacro:transmission_block joint_name="finger_strack_joint1"/>  
  <xacro:transmission_block joint_name="finger_strack_joint2"/>


  <!--xacro:include filename="$(find probot_description_two_file)/urdf/sensors/camera.urdf.xacro"/-->

  <!-- ros_control plugin -->
  <gazebo>
    <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
      <robotNamespace>/probot_anno</robotNamespace>
      <robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType>
      <legacyModeNS>true</legacyModeNS>
    </plugin>
  </gazebo>

<gazebo>
   <plugin name="gazebo_grasp_fix" filename="libgazebo_grasp_fix.so">
        <arm>
           <arm_name>zju_anno_arm</arm_name>
           <palm_link> link_5  </palm_link>
           <gripper_link>link_6</gripper_link>
           <gripper_link> gripper_active_finger_bracket_link </gripper_link>
        </arm>
       <forces_angle_tolerance>100</forces_angle_tolerance>
       <update_rate>4</update_rate>
       <grip_count_threshold>4</grip_count_threshold>
       <max_grip_count>8</max_grip_count>
       <release_tolerance>0.005</release_tolerance>
       <disable_collisions_on_attach>true</disable_collisions_on_attach>
       <contact_topic>__default_topic__</contact_topic>
    </plugin>
</gazebo>

</robot>


 

<!-- custom_gripper.xacro       2、自定义夹爪文件,注意,夹爪link均要设置惯性矩阵,否则报错 -->
 
<?xml version="1.0" encoding="utf-8"?>
<robot name="demo" xmlns:xacro="http://wiki.ros.org/xacro">		
<!-- 

	urdf 存在的问题
		1、代码复用问题- xacro 宏
		2、参数设计-xacro变量
 -->
  <!-- 1、创建变量
  <xacro:property name="wheel_radius" value="0.5" />
  <xacro:property name="wheel_length" value="0.2" />
 -->

  <!-- 2、创建宏【函数】   
  <xacro:macro name="wheel_func" params="wheel_name flag" >
    <link name="${wheel_name}_wheel" >
      <visual>

        <geometry>
          <cylinder radius="${wheel_radius}" length="${wheel_length}" />
        <geometry>

	<origin xyz="${flag*1} 0 0" rpy="0 0 0"/>

	<material>
	  <color rgba="0 0 0 0.3" />
	</material>
      </visual>
    </link>
  </xacro:macro>
-->

  <!-- 3、调用宏  
  <xacro:wheel_func wheel_name="left" flag="1" />
  -->
	
  <xacro:property name="base_link_length" value="0.2" />
  <xacro:property name="base_link_width" value="0.2" />
  <xacro:property name="base_link_height" value="0.2" />


  <joint name="gripper_base_tool0_joint" type="fixed">
    <parent link="tool0"/>
    <child link="gripper_base_link"/>
    <origin xyz="0 0 0.12" rpy="3.14159 0 0"/>  <!-- 关节安装在父级连杆的相对位置,然后调整连杆偏移角度 -->
    <axis xyz="0 0 1"/>
    <limit lower="-1.57" upper="0" effort="100" velocity="3" />
  </joint>

			
  <link name="gripper_base_link">  
    <inertial>   								
      <mass value="0.01"/>
      <origin xyz="0 0 0"/>
      <inertia ixx="1.0" ixy="1.0" ixz="1.0" iyy="1.0" iyz="1.0" izz="1.0"/>
    </inertial>						
    <visual>  								
      <geometry>  							
        <box size="${base_link_length} ${base_link_width} ${base_link_height}" />      					
      </geometry>

      <origin xyz="0 0 0" rpy="0 0 0"/>

      <material name="Blue">
        <color rgba="1 0 0 1"/>
      </material>
    </visual>
  </link>


  <link name="strack_link1">  
    <inertial>             		   <!-- 必须设置,否则报错:This robot has a joint named "strack_base_joint1" which is not in the gazebo model.  -->
      <mass value="0.01"/>
      <origin xyz="0 0 0"/>
      <inertia ixx="1.0" ixy="1.0" ixz="1.0" iyy="1.0" iyz="1.0" izz="1.0"/>
    </inertial>								
    <visual>							
      <geometry>  								
        <box size="0.1 0.2 0.4" />      					
      </geometry>
      <origin xyz="0.05 0 -0.2" rpy="0 0 0"/>  
      <material name="Blue2">
        <color rgba="0 0.3 0.4 1"/>
      </material>
    </visual>  	
  </link>
 
  <joint name="strack_base_joint1" type="revolute">
    <parent link="gripper_base_link"/>
    <child link="strack_link1"/>
    <origin xyz="0.1 0 -0.1" rpy="0 0 0"/>  <!-- 关节安装在父级连杆的相对位置,然后调整连杆偏移角度 -->
    <axis xyz="0 1 0"/>
    <limit lower="-1.57" upper="0" effort="100" velocity="3" />
  </joint>


  <link name="strack_link2">  
    <inertial>
      <mass value="0.01"/>
      <origin xyz="0 0 0"/>
      <inertia ixx="1.0" ixy="1.0" ixz="1.0" iyy="1.0" iyz="1.0" izz="1.0"/>
    </inertial>								
    <visual>  									
      <geometry>  								
        <box size="0.1 0.2 0.4" />       					
      </geometry>
      <origin xyz="0.05 0 -0.2" rpy="0 0 0"/>

      <material name="Blue2">
        <color rgba="0 0.3 0.4 1"/>
      </material>
    </visual>  	
  </link>
 
  <joint name="strack_base_joint2" type="revolute">
    <parent link="gripper_base_link"/>
    <child link="strack_link2"/>
    <origin xyz="-0.1 0 -0.1" rpy="0 0 3.14"/>
    <axis xyz="0 1 0"/>
    <limit lower="-1.57" upper="0" effort="100" velocity="3" />
  </joint>


  <link name="finger_link1">  
    <inertial>
      <mass value="0.01"/>
      <origin xyz="0 0 0"/>
      <inertia ixx="1.0" ixy="1.0" ixz="1.0" iyy="1.0" iyz="1.0" izz="1.0"/>
    </inertial>								
    <visual>  									
      <geometry>  								
        <box size="0.1 0.2 0.2" />       					
      </geometry>
      <origin xyz="0.05 0 -0.1" rpy="0 0 0"/>

      <material name="Blue2">
        <color rgba="0 0.3 0.4 1"/>
      </material>
    </visual>  	
  </link>
 
  <joint name="finger_strack_joint1" type="revolute">
    <parent link="strack_link1"/>
    <child link="finger_link1"/>
    <origin xyz="0 0 -0.4" rpy="0 0 0"/>
    <axis xyz="0 1 0"/>
    <limit lower="0" upper="0.5235" effort="100" velocity="3" />
  </joint>


  <link name="finger_link2">  
    <inertial>
      <mass value="0.01"/>
      <origin xyz="0 0 0"/>
      <inertia ixx="1.0" ixy="1.0" ixz="1.0" iyy="1.0" iyz="1.0" izz="1.0"/>
    </inertial>								
    <visual>  									
      <geometry>  								
        <box size="0.1 0.2 0.2" />        					
      </geometry>
      <origin xyz="0.05 0 -0.1" rpy="0 0 0"/>

      <material name="Blue2">
        <color rgba="0 0.3 0.4 1"/>
      </material>
    </visual>  	
  </link>
 
  <joint name="finger_strack_joint2" type="revolute">
    <parent link="strack_link2"/>
    <child link="finger_link2"/>
    <origin xyz="0 0 -0.4" rpy="0 0 0"/>
    <axis xyz="0 1 0"/>
    <limit lower="-0" upper="0.5235" effort="100" velocity="3" />
  </joint>

</robot>


 


cd /home/hzx/hzx_ws/probot_anno_03/src/probot_description/urdf/
gedit materials.urdf.xacro

// 填入如下内容

<!-- materials.urdf.xacro -->

<?xml version="1.0"?>
<robot>

  <!-- Put all the color definitions in a separate file -->

  <material name="Black">
    <color rgba="0.2 0.2 0.2 1.0"/>
  </material>
  
   <material name="TransparentBlack">
    <color rgba="0.2 0.2 0.2 0.8"/>
  </material>

  <material name="Orange">
    <color rgba="1.0  0.55 0.0 1.0"/>
  </material>

  <material name="Grey">
    <color rgba="0.7 0.7 0.7 1.0"/>
  </material>
  
  <material name="DarkGrey">
    <color rgba="0.3 0.3 0.3 1.0"/>
  </material>

  <material name="Red">
    <color rgba="0.8 0.0 0.0 1.0"/>
  </material>

  <material name="White">
    <color rgba="1.0 1.0 1.0 1.0"/>
  </material>
  
  <material name="OffWhite">
    <color rgba="0.8 0.8 0.8 1.0"/>
  </material>

  <material name="Blue">
    <color rgba="0.0 0.0 0.8 1.0"/>
  </material>
  
  <material name="Green">
    <color rgba="0.0 0.8 0.0 1.0"/>
  </material>
  
  <material name="TransparentGreen">
    <color rgba="0.0 0.8 0.0 0.5"/>
  </material>

</robot>

 
 

4、编写launch文件

cd /home/hzx/hzx_ws/probot_anno_03/src/probot_description_two_file/launch
gedit view_probot_anno_with_custom_gripper.launch

<!-- view_probot_anno_with_custom_gripper.launch -->

<?xml version="1.0"?>
<launch>
    <arg name="model" />
    <!-- 加载机器人模型参数 -->
    <param name="robot_description" command="$(find xacro)/xacro --inorder $(find probot_description_two_file)/urdf/probot_anno_with_custom_gripper.xacro" />

    <!--   add hzx -->
    <!-- 启动 gazebo -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch" />

    <!-- 在 gazebo 中显示机器人模型 -->
    <node pkg="gazebo_ros" type="spawn_model" name="model" args="-urdf -model probot_anno -param robot_description -x 0 -y 0 -z 0.1"  />
    <!-- add hzx over -->


    <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
    
    <!-- 运行robot_state_publisher节点,发布tf  -->
    <node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher_gui" />

    <!-- 运行rviz可视化界面 -->
    <node name="rviz" pkg="rviz" type="rviz" args="-d $(find probot_description_two_file)/urdf.rviz" required="true" />
</launch>

 
 

5、最终结果如图所示:


// 启动launch文件
hzx@vm:~/hzx_ws/probot_anno_03$ roslaunch probot_description_two_file view_probot_anno_with_custom_gripper.launch 

在这里插入图片描述

 
 

6、xacro文件检查方法

// 对xacro文件进行检查
// xacro文件路径见下图;
// 可以在如下路径下,使用如下指令进行检查。

hzx@vm:~/robot_fd/epson_robot_ws$ rosrun xacro xacro /home/hzx/robot_fd/epson_robot_ws/src/epson3/urdf/xacro/epson3_with_gripper.urdf.xacro > epson3_with_gripper.urdf

 
在这里插入图片描述

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值