跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 跨境风云 > UR5机械臂仿真实例(三)1 末端添加robotiq夹爪 [ubuntu20.04+ROSnoetic+gazebo11]

UR5机械臂仿真实例(三)1 末端添加robotiq夹爪 [ubuntu20.04+ROSnoetic+gazebo11]

时间:2024-04-08 09:35:51 来源:网络cs 作者:康由 栏目:跨境风云 阅读:

标签: 机械  真实 
阅读本书更多章节>>>>

【ur5机械臂末端添加robotiq 2f 85夹爪】

分别给出以下场景的实现过程:

一、实现rviz中ur5与robotiq85的连接和控制【本文】

二、实现gazebo中ur5与robotiq85的连接和控制

三、Moveit配置实现rivz与gazebo的联合控制

一、实现rviz中ur5与robotiq85的连接和控制(新版本)

(一)功能包下载

创建工作空间,下载好ur机械臂和robotiq夹爪相关工具包。

ur:

cd ~/catkin_ws/git clone https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git src/Universal_Robots_ROS_Drivergit clone -b calibration_devel https://github.com/fmauch/universal_robot.git src/fmauch_universal_robotgit clone https://github.com/ros-industrial/ur_msgs.git src/ur_msgsrosdep updaterosdep install --from-paths src --ignore-src -ycatkin_make

 robotiq:由于ros-industrial官方的包有些问题,所以使用如下链接

cd ~/catkin_wsgit clone https://github.com/jr-robotics/robotiq.git src/robotiqcatkin_make

(二)launch文件

rviz的启动文件为fmauch_universal_robot/ur_description/launch/view_ur5.launch,内容如下:

<?xml version="1.0"?><launch>  <include file="$(find ur_description)/launch/load_ur5.launch"/>  <node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />  <node name="rviz" pkg="rviz" type="rviz" args="-d $(find ur_description)/cfg/view_robot.rviz" required="true" /></launch>

load_ur5.launch:加载模型。将robot_description加载到参数服务器,我们需要修改的模型文件为:load_ur5.launch—>load_ur.launch—>ur_description/urdf/ur.xacro。

joint_state_publisher_gui:发布关节状态、通过gui控制关节角度。拖动gui滑块可以控制rviz中的机械臂关节角度。

robot_state_publisher:发布机器人状态。

rviz:启动rviz。

(三)修改ur.xacro

 ur_description/urdf/ur.xacro中添加以下两处代码。

<!--继承robotiq_arg2f_85宏--><xacro:include filename="$(find robotiq_2f_85_gripper_visualization)/urdf/robotiq_arg2f_85_macro.xacro"/>
<!--定义fixed关节,将robotiq_arg2f_base_link连接到机械臂末端的tool0--><joint name="ur_robotiq_joint" type="fixed">  <parent link="tool0"/>  <child link="robotiq_arg2f_base_link"/>  <origin xyz="0 0 0" rpy="0 0 0"/></joint><!--调用robotiq_arg2f_85,加入夹爪的link和joint--><xacro:robotiq_arg2f_85  prefix=""  transmission_hw_interface="$(arg transmission_hw_interface)"/>

打开robotiq_2f_85_gripper_visualization/urdf/robotiq_arg2f_85_macro.xacro,将第200行左右这段代码注释掉。如果单独仿真夹爪,要将其取消注释。

<!-- base link --><!-- <link name="${prefix}base_link"/> --><!-- <joint name="${prefix}base_link-${prefix}robotiq_arg2f_base_link" type="fixed"> -->  <!-- <parent link="${prefix}base_link" /> -->  <!-- <child link="${prefix}robotiq_arg2f_base_link" /> --><!-- </joint> -->

(四)启动

cd ~/catkin_ws/catkin_makesource devel/setup.bashroslaunch ur_description view_ur5.launch

 rviz启动, 机械臂成功添加夹爪,拖动gui中的滑动条,可以实现机械臂关节和夹爪的控制。

———————————以上为更新的新版本,直接继承robotiq宏———————————

———————————以下为旧版本,继承robotiq宏失败的改法———————————

(保留旧版本,因为旧版本对各个嵌套写的比较详细,有助于理解代码结构和语句)

一、实现rviz中ur5与robotiq85的连接和控制

(一)功能包下载

创建工作空间,下载好ur机械臂和robotiq夹爪相关工具包。

ur:

cd ~/catkin_ws/git clone https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git src/Universal_Robots_ROS_Drivergit clone -b calibration_devel https://github.com/fmauch/universal_robot.git src/fmauch_universal_robotgit clone https://github.com/ros-industrial/ur_msgs.git src/ur_msgsrosdep updaterosdep install --from-paths src --ignore-src -ycatkin_make

 robotiq:由于ros-industrial官方的包有些问题,所以使用如下链接

cd ~/catkin_wsgit clone https://github.com/jr-robotics/robotiq.git src/robotiqcatkin_make

(二)修改urdf

我们需要修改的urdf文件所在路径为src/fmauch_universal_robot/ur_description/urdf。

PART1

按照嵌套顺序从外向里,将.xacro文件复制和重命名:(1)ur5.xacro改为ur5_gripper.xacro,(2)inc/ur5_macro.xacro改为inc/ur5_gripper_macro.xacro,(3)inc/ur_macro.xacro改为inc/ur_gripper_macro.xacro。按照嵌套顺序从里向外,分别修改三个文件:

1. ur_gripper_macro.xacro
因为我直接继承robotiq的宏一直失败,所以直接将机械臂和夹爪的结构拼成一个文件,即ur_gripper_macro.xacro。

打开robotiq/robotiq_2f_85_gripper_visualization/urdf/robotiq_arg2f_85_macro.xacro,复制include添加至文件,添加后include为

<xacro:include filename="$(find ur_description)/urdf/inc/ur_transmissions.xacro" /><xacro:include filename="$(find ur_description)/urdf/inc/ur_common.xacro" /><xacro:include filename="$(find robotiq_2f_85_gripper_visualization)/urdf/inc/robotiq_arg2f_85_transmissions.xacro" />

将宏命名修改为“ur_gripper_robot”

<xacro:macro name="ur_gripper_robot" params="  prefix  joint_limits_parameters_file  kinematics_parameters_file  physical_parameters_file  visual_parameters_file  transmission_hw_interface:=hardware_interface/PositionJointInterface  safety_limits:=false  safety_pos_margin:=0.15  safety_k_position:=20">

复制Add URDF transmission elements,添加后transmission为

<!-- Add URDF transmission elements (for ros_control) --><xacro:ur_arm_transmission prefix="${prefix}" hw_interface="${transmission_hw_interface}" /><xacro:robotiq_arg2f_85_transmission prefix="${prefix}" hw_interface="${transmission_hw_interface}"/>

复制从<!-- fingers links macros -->到倒数第三行,添加后模型为

<!-- links: main serial chain --><link name="${prefix}base_link"/><link name="${prefix}base_link_inertia">...<!-- ROS-Industrial 'tool0' frame: all-zeros tool frame -->  <link name="${prefix}tool0"/>  <joint name="${prefix}flange-tool0" type="fixed">  <!-- default toolframe: X+ left, Y+ up, Z+ front -->  <origin xyz="0 0 0" rpy="${pi/2.0} 0 ${pi/2.0}"/>  <parent link="${prefix}flange"/>  <child link="${prefix}tool0"/></joint><!-- fingers links macros --><xacro:macro name="outer_knuckle" params="prefix fingerprefix">  <link name="${prefix}${fingerprefix}_outer_knuckle">...<!-- right finger --><xacro:finger_joints prefix="${prefix}" fingerprefix="right" reflect="-1.0"/><xacro:finger_links prefix="${prefix}" fingerprefix="right"/>  <joint name="${prefix}right_finger_joint" type="revolute">    <origin xyz="0 0.0306011 0.054904" rpy="0 0 0"/>    <parent link="${prefix}robotiq_arg2f_base_link" />    <child link="${prefix}right_outer_knuckle" />    <axis xyz="1 0 0" />    <limit lower="0" upper="0.81" velocity="0.5" effort="1000" />    <mimic joint="${prefix}finger_joint" multiplier="1" offset="0" />  </joint>

最后ur_gripper_macro.xacro(超长代码警告)文件为

<?xml version="1.0"?><robot xmlns:xacro="http://wiki.ros.org/xacro">  <!--    Base UR robot series xacro macro.    NOTE: this is NOT a URDF. It cannot directly be loaded by consumers    expecting a flattened '.urdf' file. See the top-level '.xacro' for that    (but note: that .xacro must still be processed by the xacro command).    For use in '.launch' files: use one of the 'load_urX.launch' convenience    launch files.    This file models the base kinematic chain of a UR robot, which then gets    parameterised by various configuration files to convert it into a UR3(e),    UR5(e), UR10(e) or UR16e.    NOTE: the default kinematic parameters (ie: link lengths, frame locations,    offets, etc) do not correspond to any particular robot. They are defaults    only. There WILL be non-zero offsets between the Forward Kinematics results    in TF (ie: robot_state_publisher) and the values reported by the Teach    Pendant.    For accurate (and robot-specific) transforms, the 'kinematics_parameters_file'    parameter MUST point to a .yaml file containing the appropriate values for    the targetted robot.    If using the UniversalRobots/Universal_Robots_ROS_Driver, follow the steps    described in the readme of that repository to extract the kinematic    calibration from the controller and generate the required .yaml file.    Main author of the migration to yaml configs: Ludovic Delval.    Contributors to previous versions (in no particular order):     - Felix Messmer     - Kelsey Hawkins     - Wim Meeussen     - Shaun Edwards     - Nadia Hammoudeh Garcia     - Dave Hershberger     - G. vd. Hoorn     - Philip Long     - Dave Coleman     - Miguel Prada     - Mathias Luedtke     - Marcel Schnirring     - Felix von Drigalski     - Felix Exner     - Jimmy Da Silva     - Ajit Krisshna N L     - Muhammad Asif Rana  -->  <xacro:include filename="$(find ur_description)/urdf/inc/ur_transmissions.xacro" />  <xacro:include filename="$(find ur_description)/urdf/inc/ur_common.xacro" />  <xacro:include filename="$(find robotiq_2f_85_gripper_visualization)/urdf/inc/robotiq_arg2f_85_transmissions.xacro" />  <xacro:macro name="ur_gripper_robot" params="    prefix    joint_limits_parameters_file    kinematics_parameters_file    physical_parameters_file    visual_parameters_file    transmission_hw_interface:=hardware_interface/PositionJointInterface    safety_limits:=false    safety_pos_margin:=0.15    safety_k_position:=20"  >    <!-- Load configuration data from the provided .yaml files -->    <xacro:read_model_data      joint_limits_parameters_file="${joint_limits_parameters_file}"       kinematics_parameters_file="${kinematics_parameters_file}"      physical_parameters_file="${physical_parameters_file}"      visual_parameters_file="${visual_parameters_file}"/>    <!-- Add URDF transmission elements (for ros_control) -->    <xacro:ur_arm_transmission prefix="${prefix}" hw_interface="${transmission_hw_interface}" />    <xacro:robotiq_arg2f_85_transmission prefix="${prefix}" hw_interface="${transmission_hw_interface}"/>    <!-- links: main serial chain -->    <link name="${prefix}base_link"/>    <link name="${prefix}base_link_inertia">      <visual>        <origin xyz="0 0 0" rpy="0 0 ${pi}"/>        <geometry>          <mesh filename="${base_visual_mesh}"/>        </geometry>        <material name="${base_visual_material_name}">          <color rgba="${base_visual_material_color}"/>        </material>      </visual>      <collision>        <origin xyz="0 0 0" rpy="0 0 ${pi}"/>        <geometry>          <mesh filename="${base_collision_mesh}"/>        </geometry>      </collision>      <xacro:cylinder_inertial radius="${base_inertia_radius}" length="${base_inertia_length}" mass="${base_mass}">        <origin xyz="0 0 0" rpy="0 0 0" />      </xacro:cylinder_inertial>    </link>    <link name="${prefix}shoulder_link">      <visual>        <origin xyz="0 0 0" rpy="0 0 ${pi}"/>        <geometry>          <mesh filename="${shoulder_visual_mesh}"/>        </geometry>        <material name="${shoulder_visual_material_name}">          <color rgba="${shoulder_visual_material_color}"/>        </material>      </visual>      <collision>        <origin xyz="0 0 0" rpy="0 0 ${pi}"/>        <geometry>          <mesh filename="${shoulder_collision_mesh}"/>        </geometry>      </collision>      <xacro:cylinder_inertial radius="${shoulder_inertia_radius}" length="${shoulder_inertia_length}" mass="${shoulder_mass}">        <origin xyz="0 0 0" rpy="0 0 0" />      </xacro:cylinder_inertial>    </link>    <link name="${prefix}upper_arm_link">      <visual>        <origin xyz="0 0 ${shoulder_offset}" rpy="${pi/2} 0 ${-pi/2}"/>        <geometry>          <mesh filename="${upper_arm_visual_mesh}"/>        </geometry>        <material name="${upper_arm_visual_material_name}">          <color rgba="${upper_arm_visual_material_color}"/>        </material>      </visual>      <collision>        <origin xyz="0 0 ${shoulder_offset}" rpy="${pi/2} 0 ${-pi/2}"/>        <geometry>          <mesh filename="${upper_arm_collision_mesh}"/>        </geometry>      </collision>      <xacro:cylinder_inertial radius="${upperarm_inertia_radius}" length="${upperarm_inertia_length}" mass="${upper_arm_mass}">        <origin xyz="${-0.5 * upperarm_inertia_length} 0.0 ${upper_arm_inertia_offset}" rpy="0 ${pi/2} 0" />      </xacro:cylinder_inertial>    </link>    <link name="${prefix}forearm_link">      <visual>        <origin xyz="0 0 ${elbow_offset}" rpy="${pi/2} 0 ${-pi/2}"/>        <geometry>          <mesh filename="${forearm_visual_mesh}"/>        </geometry>        <material name="${forearm_visual_material_name}">          <color rgba="${forearm_visual_material_color}"/>        </material>      </visual>      <collision>        <origin xyz="0 0 ${elbow_offset}" rpy="${pi/2} 0 ${-pi/2}"/>        <geometry>          <mesh filename="${forearm_collision_mesh}"/>        </geometry>      </collision>      <xacro:cylinder_inertial radius="${forearm_inertia_radius}" length="${forearm_inertia_length}"  mass="${forearm_mass}">        <origin xyz="${-0.5 * forearm_inertia_length} 0.0 ${elbow_offset}" rpy="0 ${pi/2} 0" />      </xacro:cylinder_inertial>    </link>    <link name="${prefix}wrist_1_link">      <visual>        <!-- TODO: Move this to a parameter -->        <origin xyz="0 0 ${wrist_1_visual_offset}" rpy="${pi/2} 0 0"/>        <geometry>          <mesh filename="${wrist_1_visual_mesh}"/>        </geometry>        <material name="${wrist_1_visual_material_name}">          <color rgba="${wrist_1_visual_material_color}"/>        </material>      </visual>      <collision>        <origin xyz="0 0 ${wrist_1_visual_offset}" rpy="${pi/2} 0 0"/>        <geometry>          <mesh filename="${wrist_1_collision_mesh}"/>        </geometry>      </collision>      <xacro:cylinder_inertial radius="${wrist_1_inertia_radius}" length="${wrist_1_inertia_length}"  mass="${wrist_1_mass}">        <origin xyz="0 0 0" rpy="0 0 0" />      </xacro:cylinder_inertial>    </link>    <link name="${prefix}wrist_2_link">      <visual>        <origin xyz="0 0 ${wrist_2_visual_offset}" rpy="0 0 0"/>        <geometry>          <mesh filename="${wrist_2_visual_mesh}"/>        </geometry>        <material name="${wrist_2_visual_material_name}">          <color rgba="${wrist_2_visual_material_color}"/>        </material>      </visual>      <collision>        <origin xyz="0 0 ${wrist_2_visual_offset}" rpy="0 0 0"/>        <geometry>          <mesh filename="${wrist_2_collision_mesh}"/>        </geometry>      </collision>      <xacro:cylinder_inertial radius="${wrist_2_inertia_radius}" length="${wrist_2_inertia_length}"  mass="${wrist_2_mass}">        <origin xyz="0 0 0" rpy="0 0 0" />      </xacro:cylinder_inertial>    </link>    <link name="${prefix}wrist_3_link">      <visual>        <origin xyz="0 0 ${wrist_3_visual_offset}" rpy="${pi/2} 0 0"/>        <geometry>          <mesh filename="${wrist_3_visual_mesh}"/>        </geometry>        <material name="${wrist_3_visual_material_name}">          <color rgba="${wrist_3_visual_material_color}"/>        </material>      </visual>      <collision>        <origin xyz="0 0 ${wrist_3_visual_offset}" rpy="${pi/2} 0 0"/>        <geometry>          <mesh filename="${wrist_3_collision_mesh}"/>        </geometry>      </collision>      <xacro:cylinder_inertial radius="${wrist_3_inertia_radius}" length="${wrist_3_inertia_length}"  mass="${wrist_3_mass}">        <origin xyz="0.0 0.0 ${-0.5 * wrist_3_inertia_length}" rpy="0 0 0" />      </xacro:cylinder_inertial>    </link>    <!-- joints: main serial chain -->    <joint name="${prefix}base_link-base_link_inertia" type="fixed">      <parent link="${prefix}base_link" />      <child link="${prefix}base_link_inertia" />      <!-- 'base_link' is REP-103 aligned (so X+ forward), while the internal           frames of the robot/controller have X+ pointing backwards.           Use the joint between 'base_link' and 'base_link_inertia' (a dummy           link/frame) to introduce the necessary rotation over Z (of pi rad).      -->      <origin xyz="0 0 0" rpy="0 0 ${pi}" />    </joint>    <joint name="${prefix}shoulder_pan_joint" type="revolute">      <parent link="${prefix}base_link_inertia" />      <child link="${prefix}shoulder_link" />      <origin xyz="${shoulder_x} ${shoulder_y} ${shoulder_z}" rpy="${shoulder_roll} ${shoulder_pitch} ${shoulder_yaw}" />      <axis xyz="0 0 1" />      <limit lower="${shoulder_pan_lower_limit}" upper="${shoulder_pan_upper_limit}"        effort="${shoulder_pan_effort_limit}" velocity="${shoulder_pan_velocity_limit}"/>      <xacro:if value="${safety_limits}">         <safety_controller soft_lower_limit="${shoulder_pan_lower_limit + safety_pos_margin}" soft_upper_limit="${shoulder_pan_upper_limit - safety_pos_margin}" k_position="${safety_k_position}" k_velocity="0.0"/>      </xacro:if>      <dynamics damping="0" friction="0"/>    </joint>    <joint name="${prefix}shoulder_lift_joint" type="revolute">      <parent link="${prefix}shoulder_link" />      <child link="${prefix}upper_arm_link" />      <origin xyz="${upper_arm_x} ${upper_arm_y} ${upper_arm_z}" rpy="${upper_arm_roll} ${upper_arm_pitch} ${upper_arm_yaw}" />      <axis xyz="0 0 1" />      <limit lower="${shoulder_lift_lower_limit}" upper="${shoulder_lift_upper_limit}"        effort="${shoulder_lift_effort_limit}" velocity="${shoulder_lift_velocity_limit}"/>      <xacro:if value="${safety_limits}">         <safety_controller soft_lower_limit="${shoulder_lift_lower_limit + safety_pos_margin}" soft_upper_limit="${shoulder_lift_upper_limit - safety_pos_margin}" k_position="${safety_k_position}" k_velocity="0.0"/>      </xacro:if>      <dynamics damping="0" friction="0"/>    </joint>    <joint name="${prefix}elbow_joint" type="revolute">      <parent link="${prefix}upper_arm_link" />      <child link="${prefix}forearm_link" />      <origin xyz="${forearm_x} ${forearm_y} ${forearm_z}" rpy="${forearm_roll} ${forearm_pitch} ${forearm_yaw}" />      <axis xyz="0 0 1" />      <limit lower="${elbow_joint_lower_limit}" upper="${elbow_joint_upper_limit}"        effort="${elbow_joint_effort_limit}" velocity="${elbow_joint_velocity_limit}"/>      <xacro:if value="${safety_limits}">         <safety_controller soft_lower_limit="${elbow_joint_lower_limit + safety_pos_margin}" soft_upper_limit="${elbow_joint_upper_limit - safety_pos_margin}" k_position="${safety_k_position}" k_velocity="0.0"/>      </xacro:if>      <dynamics damping="0" friction="0"/>    </joint>    <joint name="${prefix}wrist_1_joint" type="revolute">      <parent link="${prefix}forearm_link" />      <child link="${prefix}wrist_1_link" />      <origin xyz="${wrist_1_x} ${wrist_1_y} ${wrist_1_z}" rpy="${wrist_1_roll} ${wrist_1_pitch} ${wrist_1_yaw}" />      <axis xyz="0 0 1" />      <limit lower="${wrist_1_lower_limit}" upper="${wrist_1_upper_limit}"        effort="${wrist_1_effort_limit}" velocity="${wrist_1_velocity_limit}"/>      <xacro:if value="${safety_limits}">         <safety_controller soft_lower_limit="${wrist_1_lower_limit + safety_pos_margin}" soft_upper_limit="${wrist_1_upper_limit - safety_pos_margin}" k_position="${safety_k_position}" k_velocity="0.0"/>      </xacro:if>      <dynamics damping="0" friction="0"/>    </joint>    <joint name="${prefix}wrist_2_joint" type="revolute">      <parent link="${prefix}wrist_1_link" />      <child link="${prefix}wrist_2_link" />      <origin xyz="${wrist_2_x} ${wrist_2_y} ${wrist_2_z}" rpy="${wrist_2_roll} ${wrist_2_pitch} ${wrist_2_yaw}" />      <axis xyz="0 0 1" />      <limit lower="${wrist_2_lower_limit}" upper="${wrist_2_upper_limit}"             effort="${wrist_2_effort_limit}" velocity="${wrist_2_velocity_limit}"/>      <xacro:if value="${safety_limits}">         <safety_controller soft_lower_limit="${wrist_2_lower_limit + safety_pos_margin}" soft_upper_limit="${wrist_2_upper_limit - safety_pos_margin}" k_position="${safety_k_position}" k_velocity="0.0"/>      </xacro:if>      <dynamics damping="0" friction="0"/>    </joint>    <joint name="${prefix}wrist_3_joint" type="revolute">      <parent link="${prefix}wrist_2_link" />      <child link="${prefix}wrist_3_link" />      <origin xyz="${wrist_3_x} ${wrist_3_y} ${wrist_3_z}" rpy="${wrist_3_roll} ${wrist_3_pitch} ${wrist_3_yaw}" />      <axis xyz="0 0 1" />      <limit lower="${wrist_3_lower_limit}" upper="${wrist_3_upper_limit}"             effort="${wrist_3_effort_limit}" velocity="${wrist_3_velocity_limit}"/>      <xacro:if value="${safety_limits}">         <safety_controller soft_lower_limit="${wrist_3_lower_limit + safety_pos_margin}" soft_upper_limit="${wrist_3_upper_limit - safety_pos_margin}" k_position="${safety_k_position}" k_velocity="0.0"/>      </xacro:if>      <dynamics damping="0" friction="0"/>    </joint>    <!-- ROS-Industrial 'base' frame: base_link to UR 'Base' Coordinates transform -->    <link name="${prefix}base"/>    <joint name="${prefix}base_link-base_fixed_joint" type="fixed">      <!-- Note the rotation over Z of pi radians: as base_link is REP-103           aligned (ie: has X+ forward, Y+ left and Z+ up), this is needed           to correctly align 'base' with the 'Base' coordinate system of           the UR controller.      -->      <origin xyz="0 0 0" rpy="0 0 ${pi}"/>      <parent link="${prefix}base_link"/>      <child link="${prefix}base"/>    </joint>    <!-- ROS-Industrial 'flange' frame: attachment point for EEF models -->    <link name="${prefix}flange" />    <joint name="${prefix}wrist_3-flange" type="fixed">      <parent link="${prefix}wrist_3_link" />      <child link="${prefix}flange" />      <origin xyz="0 0 0" rpy="0 ${-pi/2.0} ${-pi/2.0}" />    </joint>    <!-- ROS-Industrial 'tool0' frame: all-zeros tool frame -->    <link name="${prefix}tool0"/>    <joint name="${prefix}flange-tool0" type="fixed">      <!-- default toolframe: X+ left, Y+ up, Z+ front -->      <origin xyz="0 0 0" rpy="${pi/2.0} 0 ${pi/2.0}"/>      <parent link="${prefix}flange"/>      <child link="${prefix}tool0"/>    </joint>    <!-- fingers links macros -->    <xacro:macro name="outer_knuckle" params="prefix fingerprefix">      <link name="${prefix}${fingerprefix}_outer_knuckle">        <inertial>          <origin xyz="-0.000200000000003065 0.0199435877845359 0.0292245259211331" rpy="0 0 0" />          <mass value="0.00853198276973456" />          <inertia ixx="2.89328108496468E-06" ixy="-1.57935047237397E-19" ixz="-1.93980378593255E-19" iyy="1.86719750325683E-06" iyz="-1.21858577871576E-06" izz="1.21905238907251E-06" />          </inertial>        <visual>          <origin xyz="0 0 0" rpy="0 0 0" />          <geometry>            <mesh filename="package://robotiq_2f_85_gripper_visualization/meshes/visual/robotiq_arg2f_85_outer_knuckle.dae" scale="0.001 0.001 0.001"/>          </geometry>          <material name="">            <color rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />          </material>        </visual>        <collision>          <origin xyz="0 0 0" rpy="0 0 0" />          <geometry>            <mesh filename="package://robotiq_2f_85_gripper_visualization/meshes/collision/robotiq_arg2f_85_outer_knuckle.dae" scale="0.001 0.001 0.001"/>          </geometry>        </collision>      </link>    </xacro:macro>    <xacro:macro name="outer_finger" params="prefix fingerprefix">      <link name="${prefix}${fingerprefix}_outer_finger">        <inertial>          <origin xyz="0.00030115855001899 0.0373907951953854 -0.0208027427000385" rpy="0 0 0" />          <mass value="0.022614240507152" />          <inertia ixx="1.52518312458174E-05" ixy="9.76583423954399E-10" ixz="-5.43838577022588E-10" iyy="6.17694243867776E-06" iyz="6.78636130740228E-06" izz="1.16494917907219E-05" />          </inertial>        <visual>          <origin xyz="0 0 0" rpy="0 0 0" />          <geometry>            <mesh filename="package://robotiq_2f_85_gripper_visualization/meshes/visual/robotiq_arg2f_85_outer_finger.dae" scale="0.001 0.001 0.001"/>          </geometry>          <material name="">            <color rgba="0.1 0.1 0.1 1" />          </material>        </visual>        <collision>          <origin xyz="0 0 0" rpy="0 0 0" />          <geometry>            <mesh filename="package://robotiq_2f_85_gripper_visualization/meshes/collision/robotiq_arg2f_85_outer_finger.dae" scale="0.001 0.001 0.001"/>          </geometry>        </collision>      </link>    </xacro:macro>    <xacro:macro name="inner_knuckle" params="prefix fingerprefix">      <link name="${prefix}${fingerprefix}_inner_knuckle">        <inertial>          <origin xyz="0.000123011831763771 0.0507850843201817 0.00103968640075166" rpy="0 0 0" />        <mass value="0.0271177346495152" />          <inertia ixx="2.61910379223783E-05" ixy="-2.43616858946494E-07" ixz="-6.37789906117123E-09" iyy="2.8270243746167E-06" iyz="-5.37200748039765E-07" izz="2.83695868220296E-05" />          </inertial>        <visual>          <origin xyz="0 0 0" rpy="0 0 0" />          <geometry>            <mesh filename="package://robotiq_2f_85_gripper_visualization/meshes/visual/robotiq_arg2f_85_inner_knuckle.dae" scale="0.001 0.001 0.001"/>          </geometry>          <material name="">            <color rgba="0.1 0.1 0.1 1" />          </material>        </visual>        <collision>          <origin xyz="0 0 0" rpy="0 0 0" />          <geometry>            <mesh filename="package://robotiq_2f_85_gripper_visualization/meshes/collision/robotiq_arg2f_85_inner_knuckle.dae" scale="0.001 0.001 0.001"/>          </geometry>        </collision>      </link>    </xacro:macro>    <xacro:macro name="inner_finger" params="prefix fingerprefix">      <link name="${prefix}${fingerprefix}_inner_finger">        <inertial>          <origin xyz="0.000299999999999317 0.0160078233491243 -0.0136945669206257" rpy="0 0 0" />          <mass value="0.0104003125914103" />          <inertia ixx="2.71909453810972E-06" ixy="1.35402465472579E-21" ixz="-7.1817349065269E-22" iyy="7.69100314106116E-07" iyz="6.74715432769696E-07" izz="2.30315190420171E-06" />          </inertial>        <visual>          <origin xyz="0 0 0" rpy="0 0 0" />          <geometry>            <mesh filename="package://robotiq_2f_85_gripper_visualization/meshes/visual/robotiq_arg2f_85_inner_finger.dae" scale="0.001 0.001 0.001"/>          </geometry>          <material name="">            <color rgba="0.1 0.1 0.1 1" />          </material>        </visual>        <collision>          <origin xyz="0 0 0" rpy="0 0 0" />          <geometry>            <mesh filename="package://robotiq_2f_85_gripper_visualization/meshes/collision/robotiq_arg2f_85_inner_finger.dae" scale="0.001 0.001 0.001" />          </geometry>        </collision>      </link>    </xacro:macro>    <!-- Finger pad link, the default are the "big pads" with rubber-->    <xacro:macro name="inner_finger_pad" params="prefix fingerprefix">      <link name="${prefix}${fingerprefix}_inner_finger_pad">        <visual>          <origin xyz="0 0 0" rpy="0 0 0" />          <geometry>            <box size="0.022 0.00635 0.0375"/>          </geometry>          <material name="">            <color rgba="0.9 0.9 0.9 1" />          </material>        </visual>        <collision>          <origin xyz="0 0 0" rpy="0 0 0" />          <geometry>            <box size="0.022 0.00635 0.0375"/>          </geometry>          <material name="">            <color rgba="0.9 0.0 0.0 1" />          </material>        </collision>      </link>    </xacro:macro>    <xacro:macro name="finger_links" params="prefix fingerprefix">      <xacro:outer_knuckle prefix="${prefix}" fingerprefix="${fingerprefix}"/>      <xacro:outer_finger prefix="${prefix}" fingerprefix="${fingerprefix}"/>      <xacro:inner_finger prefix="${prefix}" fingerprefix="${fingerprefix}"/>      <xacro:inner_finger_pad prefix="${prefix}" fingerprefix="${fingerprefix}"/>      <xacro:inner_knuckle prefix="${prefix}" fingerprefix="${fingerprefix}"/>    </xacro:macro>    <!-- fingers joints macros -->    <xacro:macro name="outer_finger_joint" params="prefix fingerprefix">      <joint name="${prefix}${fingerprefix}_outer_finger_joint" type="fixed">        <origin xyz="0 0.0315 -0.0041" rpy="0 0 0"/>        <parent link="${prefix}${fingerprefix}_outer_knuckle" />        <child link="${prefix}${fingerprefix}_outer_finger" />        <axis xyz="1 0 0" />      </joint>    </xacro:macro>    <xacro:macro name="inner_knuckle_joint" params="prefix fingerprefix reflect">      <joint name="${prefix}${fingerprefix}_inner_knuckle_joint" type="revolute">        <!-- <origin xyz="0 ${reflect * -0.0127} 0.06142" rpy="${pi / 2 + .725} 0 ${(reflect - 1) * pi / 2}" /> -->        <origin xyz="0 ${reflect * -0.0127} 0.06142" rpy="0 0 ${(1 + reflect) * pi / 2}"/>        <parent link="${prefix}robotiq_arg2f_base_link" />        <child link="${prefix}${fingerprefix}_inner_knuckle" />        <axis xyz="1 0 0" />        <limit lower="0" upper="0.8757" velocity="0.5" effort="1000" />        <mimic joint="${prefix}finger_joint" multiplier="1" offset="0" />      </joint>    </xacro:macro>    <xacro:macro name="inner_finger_joint" params="prefix fingerprefix">      <joint name="${prefix}${fingerprefix}_inner_finger_joint" type="revolute">        <origin xyz="0 0.0061 0.0471" rpy="0 0 0"/>        <parent link="${prefix}${fingerprefix}_outer_finger" />        <child link="${prefix}${fingerprefix}_inner_finger" />        <axis xyz="1 0 0" />        <limit lower="-0.8757" upper="0" velocity="0.5" effort="1000" />        <mimic joint="${prefix}finger_joint" multiplier="-1" offset="0" />      </joint>    </xacro:macro>    <xacro:macro name="inner_finger_pad_joint" params="prefix fingerprefix">      <joint name="${prefix}${fingerprefix}_inner_finger_pad_joint" type="fixed">        <origin xyz="0 -0.0220203446692936 0.03242" rpy="0 0 0"/>        <parent link="${prefix}${fingerprefix}_inner_finger" />        <child link="${prefix}${fingerprefix}_inner_finger_pad" />        <axis xyz="0 0 1" />      </joint>    </xacro:macro>    <xacro:macro name="finger_joints" params="prefix fingerprefix reflect">      <xacro:outer_finger_joint prefix="${prefix}" fingerprefix="${fingerprefix}"/>      <xacro:inner_knuckle_joint prefix="${prefix}" fingerprefix="${fingerprefix}" reflect="${reflect}"/>      <xacro:inner_finger_joint prefix="${prefix}" fingerprefix="${fingerprefix}"/>      <xacro:inner_finger_pad_joint prefix="${prefix}" fingerprefix="${fingerprefix}"/>    </xacro:macro>    <!-- base link -->    <joint name="${prefix}attach_gripper" type="fixed">        <parent link="${prefix}tool0" />        <child link="${prefix}robotiq_arg2f_base_link" />    </joint>    <link name="${prefix}robotiq_arg2f_base_link">        <inertial>          <origin xyz="8.625E-08 -4.6583E-06 0.03145" rpy="0 0 0" />          <mass value="0.22652" />          <inertia ixx="0.00020005" ixy="-4.2442E-10" ixz="-2.9069E-10" iyy="0.00017832" iyz="-3.4402E-08" izz="0.00013478" />        </inertial>        <visual>          <origin xyz="0 0 0" rpy="0 0 0" />          <geometry>            <mesh filename="package://robotiq_2f_85_gripper_visualization/meshes/visual/robotiq_arg2f_base_link.stl" />          </geometry>          <material name="">            <color rgba="0.1 0.1 0.1 1" />          </material>        </visual>        <collision>          <origin xyz="0 0 0" rpy="0 0 0" />          <geometry>            <mesh filename="package://robotiq_2f_85_gripper_visualization/meshes/collision/robotiq_arg2f_base_link.stl" />          </geometry>        </collision>      </link>    <!-- left finger -->    <xacro:finger_links prefix="${prefix}" fingerprefix="left"/>    <xacro:finger_joints prefix="${prefix}" fingerprefix="left" reflect="1.0"/>    <joint name="${prefix}finger_joint" type="revolute">      <origin xyz="0 -0.0306011 0.054904" rpy="0 0 ${pi}"/>      <parent link="${prefix}robotiq_arg2f_base_link" />      <child link="${prefix}left_outer_knuckle" />      <axis xyz="1 0 0" />      <limit lower="0" upper="0.8" velocity="0.5" effort="1000" />    </joint>    <!-- right finger -->    <xacro:finger_joints prefix="${prefix}" fingerprefix="right" reflect="-1.0"/>    <xacro:finger_links prefix="${prefix}" fingerprefix="right"/>    <joint name="${prefix}right_finger_joint" type="revolute">      <origin xyz="0 0.0306011 0.054904" rpy="0 0 0"/>      <parent link="${prefix}robotiq_arg2f_base_link" />      <child link="${prefix}right_outer_knuckle" />      <axis xyz="1 0 0" />      <limit lower="0" upper="0.81" velocity="0.5" effort="1000" />      <mimic joint="${prefix}finger_joint" multiplier="1" offset="0" />    </joint>  </xacro:macro></robot>

2. ur5_gripper_macro.xacro

修改宏命名:xacro:macro name="ur5_gripper_robot"

修改include:filename="$(find ur_description)/urdf/inc/ur_gripper_macro.xacro"

修改调用宏:xacro:ur_gripper_robot

修改后ur5_gripper_macro.xacro文件为

<?xml version="1.0"?><robot xmlns:xacro="http://wiki.ros.org/xacro">  <!--    Convenience wrapper for the 'ur_robot' macro which provides default values    for the various "parameters files" parameters for a UR5.    This file can be used when composing a more complex scene with one or more    UR5 robots.    While the generic 'ur_robot' macro could also be used, it would require    the user to provide values for all parameters, as that macro does not set    any model-specific defaults (not even for the generic parameters, such as    the visual and physical parameters and joint limits).    Refer to the main 'ur_macro.xacro' in this package for information about    use, contributors and limitations.    NOTE: users will most likely want to override *at least* the          'kinematics_parameters_file' parameter. Otherwise, a default kinematic          model will be used, which will almost certainly not correspond to any          real robot.  -->  <xacro:macro name="ur5_gripper_robot" params="   prefix   joint_limits_parameters_file:='$(find ur_description)/config/ur5/joint_limits.yaml'   kinematics_parameters_file:='$(find ur_description)/config/ur5/default_kinematics.yaml'   physical_parameters_file:='$(find ur_description)/config/ur5/physical_parameters.yaml'   visual_parameters_file:='$(find ur_description)/config/ur5/visual_parameters.yaml'   transmission_hw_interface:=hardware_interface/PositionJointInterface   safety_limits:=false   safety_pos_margin:=0.15   safety_k_position:=20"  >    <xacro:include filename="$(find ur_description)/urdf/inc/ur_gripper_macro.xacro"/>    <xacro:ur_gripper_robot      prefix="${prefix}"      joint_limits_parameters_file="${joint_limits_parameters_file}"      kinematics_parameters_file="${kinematics_parameters_file}"      physical_parameters_file="${physical_parameters_file}"      visual_parameters_file="${visual_parameters_file}"      transmission_hw_interface="${transmission_hw_interface}"      safety_limits="${safety_limits}"      safety_pos_margin="${safety_pos_margin}"      safety_k_position="${safety_k_position}"    />  </xacro:macro></robot>

3. ur5_gripper.xacro

修改1:filename="$(find ur_description)/urdf/inc/ur5_gripper_macro.xacro"

修改2:xacro:ur5_gripper_robot

修改后ur5_gripper.xacro文件为

<?xml version="1.0"?><robot xmlns:xacro="http://wiki.ros.org/xacro" name="ur5_robot">  <!--    This is a convenience top-level xacro which loads the macro for the UR5e    which defines the default values for the various "parameters files"    parameters for a UR5e.    This file is only useful when loading a stand-alone, completely isolated    robot with only default values for all parameters such as the kinematics,    visual and physical parameters and joint limits.    This file is not intended to be integrated into a larger scene or other    composite xacro.    Instead, xacro:include 'inc/ur5e_macro.xacro' and override the defaults    for the arguments to that macro.    Refer to 'inc/ur_macro.xacro' for more information.  -->  <xacro:include filename="$(find ur_description)/urdf/inc/ur5_gripper_macro.xacro"/>  <xacro:ur5_gripper_robot prefix="" /></robot>

 PART2

此外,还需要将在launch中用到的文件复制和重命名:ur.xacro改为ur_gripper.xacro。

ur_gripper.xacro

修改:include filename="$(find ur_description)/urdf/inc/ur_gripper_macro.xacro"

修改后ur_gripper.xacro文件为

<?xml version="1.0"?><robot xmlns:xacro="http://wiki.ros.org/xacro" name="ur">   <!-- import main macro -->   <xacro:include filename="$(find ur_description)/urdf/inc/ur_gripper_macro.xacro"/>   <!-- parameters -->   <xacro:arg name="joint_limit_params" default=""/>   <xacro:arg name="kinematics_params" default=""/>   <xacro:arg name="physical_params" default=""/>   <xacro:arg name="visual_params" default=""/>   <!-- legal values:         - hardware_interface/PositionJointInterface         - hardware_interface/VelocityJointInterface         - hardware_interface/EffortJointInterface   -->   <xacro:arg name="transmission_hw_interface" default="hardware_interface/PositionJointInterface"/>   <xacro:arg name="safety_limits" default="false"/>   <xacro:arg name="safety_pos_margin" default="0.15"/>   <xacro:arg name="safety_k_position" default="20"/>   <!-- arm -->   <xacro:ur_gripper_robot     prefix=""     joint_limits_parameters_file="$(arg joint_limit_params)"     kinematics_parameters_file="$(arg kinematics_params)"     physical_parameters_file="$(arg physical_params)"     visual_parameters_file="$(arg visual_params)"     transmission_hw_interface="$(arg transmission_hw_interface)"     safety_limits="$(arg safety_limits)"     safety_pos_margin="$(arg safety_pos_margin)"     safety_k_position="$(arg safety_k_position)"/></robot>

(三)修改launch文件

我们需要修改的launch文件所在路径为src/fmauch_universal_robot/ur_description/launch。

同样地,按照嵌套顺序从外向里将.launch文件复制和重命名:(1)view_ur5.launch改为view_gripper_ur5.launch,(2)load_ur5.launch改为load_gripper_ur5.launch,(3)load_ur.launch改为load_gripper_ur.launch。按照嵌套顺序从里向外,分别修改三个文件:

load_gripper_ur.launch

修改:command="$(find xacro)/xacro '$(find ur_description)/urdf/ur_gripper.xacro'

load_gripper_ur5.launch

修改:file="$(find ur_description)/launch/load_gripper_ur.launch"

view_gripper_ur5.launch

修改:file="$(find ur_description)/launch/load_gripper_ur5.launch"

(四)启动

cd ~/catkin_wscatkin_makesource devel/setup.bashroslaunch ur_description view_gripper_ur5.launch

rviz启动, 机械臂成功添加夹爪,拖动gui中的滑动条,可以实现机械臂关节和夹爪的控制。

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/fengyun/2024-04-08/155361.html,文章来源:网络cs,作者:康由,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论