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