之前配置过ur5+robotiq_gripper,但是在我的仿真中机械夹爪会散架,所以我把机械夹爪换成了这个。
参考另一篇文章,说的比较详细:https://blog.csdn.net/qq_44642372/article/details/123995916#t12
dh_gripper功能包下载:https://github.com/DH-Robotics/dh_gripper_ros
dh_gripper的功能包直接可以支持在gazebo中仿真,所以不怎么需要修改夹爪的描述文件,更多是修改ur5的描述文件来完成整合。
dh_gripper功能包下载下来之后,打开dh_robotics_ag95_gripper/dh_robotics_ag95_description/urdf/dh_robotics_ag95_gripper.xacro
,这个文件中使用了ros-control的插件,由于我们和ur机器人一块使用,在ur中已经调用了这个插件,所以这里要删掉,不然运行时会报错。删除或注释如下几行:
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/robotNamespace>
<legacyModeNS>truelegacyModeNS>
plugin>
gazebo>
还是这个文件中,下面几行都是设定坐标系变换的,本来是定义了一个长方体基座,让夹爪固定在基座上,这里我们直接把夹爪的基坐标系定在机械臂上,所以这里要把这些代码删除。删除或注释以下几行:
<link name="world"/>
<joint name="world_fixed" type="fixed">
<origin xyz="0 0 0" rpy="0 0 0"/>
<parent link="world"/>
<child link="gripper_root_link"/>
joint>
<link name="gripper_root_link">
<visual>
<origin xyz="0 0 0.5" rpy="0 0 0"/>
<geometry>
<box size="0.1 0.1 1.0"/>
geometry>
visual>
<collision>
<origin xyz="0 0 0.5" rpy="0 0 0"/>
<geometry>
<box size="0.1 0.1 1.0"/>
geometry>
collision>
<inertial>
<mass value="1e2" />
<origin xyz="0.0 0.0 0.0" />
<inertia ixx = "0.000001" ixy = "0.000000" ixz = "0.000000"
iyx = "0.000000" iyy = "0.000001" iyz = "0.000000"
izx = "0.000000" izy = "0.000000" izz = "0.000001" />
inertial>
link>
<xacro:dh_robotics_ag95_gripper prefix="" parent="gripper_root_link" >
<origin xyz="0.05 0 0.85" rpy="${pi/2} 0 ${pi/2}"/>
xacro:dh_robotics_ag95_gripper>
接下来就是修改ur机器人的描述文件:
找到universial_robot/ur_description/urdf/
文件夹,复制ur5_robot.urdf.xacro
,重命名为ur5_dh.urdf.xacro
,并在其中添加以下几行:
<xacro:include filename="$(find dh_robotics_ag95_description)/urdf/dh_robotics_ag95_gripper.xacro" />
<xacro:dh_robotics_ag95_gripper prefix="" parent="tool0" >
<origin xyz="0 0 0" rpy="0 0 0"/>
xacro:dh_robotics_ag95_gripper>
第一行的代码作用就是把dh_gripper的描述文件包含进来
下面代码的作用是实例化dh_gripper,并定义其parent坐标系为ur5的tool0关节。
首先在ur_description/launch
下复制ur5_upload.launch
,重命名为ur5_upload_dh_gripper
,将其中的加载的文件改成dh的:
<param unless="$(arg limited)" name="robot_description" command="$(find xacro)/xacro --inorder $(find ur_description)/urdf/ur5_dh.urdf.xacro transmission_hw_interface:=$(arg transmission_hw_interface)" />
还是这个文件夹下,继续复制view_ur5.launch
,重命名为view_ur5_dh_gripper.launch
,把
这一行修改一下,使其指向修改后的upload文件:
<include file="$(find ur_description)/launch/ur5_upload_dh_gripper.launch"/>
找到ur_gazebo/launch
中的ur5.launch
,同上,修改include标签内容,改为:
<include file="$(find ur_description)/launch/ur5_upload_dh_gripper.launch"/>
添加这一行来加载控制参数:
<rosparam file="$(find dh_robotics_ag95_gazebo)/controller/gripper_controller_dh_robotics.yaml" command="load"/>
修改下面这一行:(其实相比原来就多了个gripper)
<node name="arm_controller_spawner" pkg="controller_manager" type="controller_manager" args="spawn arm_controller gripper" respawn="false" output="screen"/>
添加下面这一行来启动gui关节控制:
<node name="gui_controller" pkg="rqt_joint_trajectory_controller" type="rqt_joint_trajectory_controller" />
这样文件修改就基本完成了。
运行roslaunch ur5_description view_ur5_dh_gripper.launch
,应该有如下效果:
运行roslaunch ur_gazebo ur5.launch
,会打开gazebo,效果如下:
1.如果运行时有报错Deprecated syntax, please prepend ‘hardware_interface/’ to ‘PositionJointInterface’ within the tag in joint ‘finger_joint’
就把dh_robotics_ag95_gripper/dh_robotics_ag95_description/urdf/dh_robotics_ag95_gripper.transmission.xacro
中的
<hardwareInterface>hardware_interface/PositionJointInterfacehardwareInterface>
改为
<hardwareInterface>hardware_interface/PositionJointInterfacehardwareInterface>
2.可以先安装gazebo的一些插件,有的地方会用到
下载地址:https://github.com/JenniferBuehler/gazebo-pkgs