需求
在UR5机械臂末端添加robotiq 2f 85夹爪
环境
ubuntu20.04 + ROS1 noetic
准备工作
- 创建工作空间
mkdir -p catkin_UR5/src
- 进入catkin_UR5/src目录,分别下载机械臂和夹爪对应的功能包
cd ~/catkin_UR5/src git clone https://github.com/ros-industrial/universal_robot.git git clone https://github.com/jr-robotics/robotiq.git
- 进入catkin_UR5工作空间目录,检查依赖关系并编译
cd ~/catkin_UR5 sudo rosdepc init rosdepc update --rosdistro=noetic rosdepc install --rosdistro noetic --ignore-src --from-paths src catkin_make
机械臂末端添加夹爪
修改夹爪功能包
-
打开robotiq_arg2f_85_macro.xacro,其路径如下
catkin_UR5/src/robotiq/robotiq_2f_85_gripper_visualization/urdf/robotiq_arg2f_85_macro.xacro
-
注释或删除掉第196-200行的代码
这主要是因为功能包中默认夹爪的父级是base_link,而要将夹爪安装在机械臂末端,它的父级应该是机械臂末端的tool0。当然,如果要单独仿真夹爪,则需要取消这个注释。
195 <!-- base link --> 196 <!-- <link name="${prefix}base_link"/> 197 <joint name="${prefix}base_link-${prefix}robotiq_arg2f_base_link" type="fixed"> 198 <parent link="${prefix}base_link" /> 199 <child link="${prefix}robotiq_arg2f_base_link" /> 200 </joint> -->
添加夹爪
-
打开ur.xacro,其路径如下
catkin_UR5/src/universal_robot/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)" />
最终,ur.xacro文件中的完整代码如下
<?xml version="1.0"?> <robot xmlns:xacro="http://wiki.ros.org/xacro" name="$(arg robot_model)_robot"> <!-- import main macro --> <xacro:include filename="$(find ur_description)/urdf/inc/ur_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_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)"/> <!--继承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)" /> </robot>
-
在rivz中可视化带有夹爪的机械臂
在catkin_UR5工作空间目录下,激活工作空间,并启动相应的launch文件
cd ~/catkin_UR5 source ./devel/setup.bash roslaunch ur_description view_ur5.launch
rviz启动后,可以看到机械臂成功添加夹爪,拖动gui的滚动条可以实现对机械臂关节和夹爪的控制。
附录A 查看并修改文件的一些技巧
-
如何知道应该修改哪些文件
首先应该对Universal Robots的相关功能包有一定了解,打开UR功能包的github链接
https://github.com/ros-industrial/universal_robot
可以看到如下的文件结构
从中可以找到用于显示ur5的launch文件,即:universal_robot/ur_description/launch/view_ur5.launch
查看该文件,可以发现它包含了load_ur5.launch:
<include file="$(find ur_description)/launch/load_ur5.launch"/>
因此,继续查看load_ur5.launch文件,可以发现它包含了load_ur.launch:
<include file="$(find ur_description)/launch/load_ur.launch" pass_all_args="true"/>
进一步查看load_ur.launch文件,发现其加载的模型为ur_description功能包下的urdf/ur.xacro:
<param name="robot_description" command="$(find xacro)/xacro '$(find ur_description)/urdf/ur.xacro' robot_model:=$(arg robot_model) joint_limit_params:=$(arg joint_limit_params) kinematics_params:=$(arg kinematics_params) physical_params:=$(arg physical_params) visual_params:=$(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)" />
查看ur.xacro文件,发现创建机械臂的代码就在此文件中:
<!-- arm --> <xacro:ur_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)"/>
此时初步确定,可以在此文件中创建机械臂的代码后面添加夹爪相关代码。
接下来就是夹爪应该添加在机械臂的哪个link上,所以我们需要了解机械臂的结构。机械臂的创建使用了宏函数,而该宏函数来自于ur_description功能包下的/urdf/inc/ur_macro.xacro,通过阅读该宏函数,我们可以发现,夹爪应该添加在名为tool0的link上。此外,还可以在添加夹爪前,通过rviz显示机械臂:
cd ~/catkin_UR5 source ./devel/setup.bash roslaunch ur_description view_ur5.launch
在rviz中可以查看机械臂的层级关系
下图是安装夹爪后的层级关系,可以看到机械臂的末端为tool0
查看夹爪的结构同理。
带有夹爪的机械臂结构如下
它们分别对应的link和joint名称为
底座 ----------------> base_link 肩连杆与底座的关节 ---> shoulder_pan_link 肩连杆 --------------> shoulder_link 肩关节 --------------> shoulder_lift_joint 上臂 ----------------> upper_arm_link 肘关节 --------------> elbow_joint 前臂 ----------------> forearm_link 腕关节1 -------------> wrist_1_joint 腕连杆1 -------------> wrist_1_link 腕关节2 -------------> wrist_2_joint 腕连杆2 -------------> wrist_2_link 腕关节3 -------------> wrist_3_joint 腕连杆3 -------------> wrist_3_link 末端:法兰盘和空工具 --> flange和tool0(连接夹爪)
附录B 踩过的坑
一开始看很多教程修改ur_description功能包下的urdf/ur5.xacro、urdf/inc/ur5_macro.xacro文件,结果并没有效果。其实如果修改上述两个文件,可能需要自己写launch文件。
官方例程显示机械臂统一采用的是在ur_description功能包下的launch/load_ur.launch中加载urdf/ur.xacro文件,只是展示不同的机械臂时,需要在launch/load_ur<3/3e/5/5e/…>.launch文件中加载不同的参数。