分别创建两个功能包,分别为dual_ur_description和dual_ur_gazebo,前者存放ur5的双臂模型文件,后者存放Gazebo的相关文件。
1 dual_ur_description
在dual_ur_description中将官方提供的ur_description功能包中的所有文件放入,在urdf文件中新建dual_ur5_robot.urdf.xacro和dual_ur5_joint_limited_robot.urdf.xacro两个文件,前者表示关节运动不限制的ur5双臂模型,后者在前者的基础上增加了关节限制。此外还需要在launch文件夹中创建dual_ur5_upload.launch文件,用于将双臂ur5模型的xacro文件上传至参数服务器。
1.1 dual_ur5_robot.urdf.xacro
dual_ur5_robot.urdf.xacro代码如下:
<?xml version="1.0"?>
<robot xmlns:xacro="http://wiki.ros.org/xacro" name="dual_ur" >
<!--grey-->
<material name="grey">
<color rgba="0.5 0.5 0.5 1.0"/>
</material>
<material name="black">
<color rgba="0.0 0.0 0.0 1.0"/>
</material>
<!-- prefix of two arms -->
<xacro:property name="prefix1" value="left_" />
<xacro:property name="prefix2" value="right_" />
<!-- transmission -->
<xacro:arg name="transmission_hw_interface" default="hardware_interface/PositionJointInterface"/>
<!-- common stuff -->
<xacro:include filename="$(find dual_ur_description)/urdf/common.gazebo.xacro" />
<!-- ur5 -->
<xacro:include filename="$(find dual_ur_description)/urdf/ur5.urdf.xacro" />
<!-- arm -->
<!-- left_arm -->
<xacro:ur5_robot prefix="left_" joint_limited="false"
transmission_hw_interface="$(arg transmission_hw_interface)"
/>
<!-- right_arm -->
<xacro:ur5_robot prefix="right_" joint_limited="false"
transmission_hw_interface="$(arg transmission_hw_interface)"
/>
<link name="world" />
<joint name="${prefix1}world_joint" type="fixed">
<parent link="world" />
<child link = "${prefix1}base_link" />
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
</joint>
<joint name="${prefix2}world_joint" type="fixed">
<parent link="world" />
<child link = "${prefix2}base_link" />
<origin xyz="1 1 0" rpy="0 0 3.1415926" />
</joint>
</robot>
关键部分:
<!-- ur5 -->
<xacro:include filename="$(find dual_ur_description)/urdf/ur5.urdf.xacro" />
<!-- arm -->
<!-- left_arm -->
<xacro:ur5_robot prefix="left_" joint_limited="false"
transmission_hw_interface="$(arg transmission_hw_interface)"
/>
<!-- right_arm -->
<xacro:ur5_robot prefix="right_" joint_limited="false"
transmission_hw_interface="$(arg transmission_hw_interface)"
/>
首先载入ur5.urdf.xacro模型文件,这个是官方提供的单个ur5的模型文件,而后分别调用该文件创建了左右两个ur5机械臂。
<link name="world" />
<j