首先特别感谢博主“光头明明”的帮助,本文主要按其博文“UR5+robotiq_85_gripper GAZEBO模拟视觉抓取平台仿真-1”的步骤进行。另写博文一篇用于记录近期进展已经回顾过程中遇到的问题及解决方案。
2020-09-08修改:由于要使用ros驱动包,发现ur机器人功能包不匹配,所以更换了ur功能包,
出错后修改的代码部分如下:
(代码修改参考https://blog.csdn.net/bornfree5511/article/details/107529420)
1. 功能包准备
- ur功能包:https://github.com/fmauch/universal_robot/tree/calibration_devel
- robotiq功能包:https://github.com/StanleyInnovation/robotiq_85_gripper
- gazebo抓取包:https://github.com/JenniferBuehler/gazebo-pkgs/wiki/Installation(教程)
2. ur_platform_description
新建ur_platform_description功能包(catkin_create_package),在里面新建文件夹launch、urdf。
2.1 urdf文件夹
在urdf文件夹中,新建ur_platform.urdf.xacro按照ur功能包内的ur3e_robot.urdf.xacro文件集成各部分urdf文件(若需要添加关节限制,则按照ur3e_joint_limited_robot.urdf.xacro进行修改)。其中添加了robotiq的urdf宏文件和自定义camera的urdf文件。
PS:在ur3e.urdf.xacro中,我把ee_link与tool0的坐标系方向改成了相同的。因为后续做的时候感觉坐标很混乱。
ur_platform.urdf.xacro
<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro"
name="ur_platform" >
<!-- common stuff -->
<xacro:include filename="$(find ur_e_description)/urdf/common.gazebo.xacro" />
<!-- ur3e -->
<xacro:arg name="kinematics_config" default="$(find ur_e_description)/config/ur3e_default.yaml"/>
<xacro:include filename="$(find ur_e_description)/urdf/ur3e.urdf.xacro" />
<xacro:include filename="$(find robotiq_85_description)/urdf/robotiq_85_gripper.urdf.xacro"/>
<xacro:include filename="$(find ur_platform_description)/urdf/camera.urdf.xacro"/>
<!-- arm -->
<xacro:ur3e_robot prefix="" joint_limited="false"
kinematics_file="${load_yaml('$(arg kinematics_config)')}" transmission_hw_interface="$(arg transmission_hw_interface)"/>
# ××××××××××××××××关节限制情况下:
# <xacro:ur3e_robot prefix="" joint_limited="true" kinematics_file="${load_yaml('$(arg kinematics_config)')}" transmission_hw_interface="$(arg transmission_hw_interface)"
# shoulder_pan_lower_limit="${-pi}" shoulder_pan_upper_limit="${pi}"
# shoulder_lift_lower_limit="${-pi}" shoulder_lift_upper_limit="${pi}"
# elbow_joint_lower_limit="${-pi}" elbow_joint_upper_limit="${pi}"
# wrist_1_lower_limit="${-pi}" wrist_1_upper_limit="${pi}"
# wrist_2_lower_limit="${-pi}" wrist_2_upper_limit="${pi}"
# wrist_3_lower_limit="${-pi}" wrist_3_upper_limit="${pi}"/>
<link name="world"/>
<joint name="world_joint" type="fixed">
<parent link="world" />
<child link = "base_link" />
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
</joint>
<!--robotiq gripper-->
<xacro:robotiq_85_gripper prefix="" parent="ee_link">
<origin xyz="0 0 0" rpy="0.0 ${-pi/2.0} ${pi/2.0}"/>
</xacro:robotiq_85_gripper>
<!--camera link-->
<xacro:mycamera parent="base_link"/>
</robot>
PS:robot name用来区分不同的urdf文件,与后续moveit助手配置产生的文件名有关。
在调用robotiq的urdf宏文件时,需要提供一个parent_link,这里选择ee_link,而不是tool0。
PS:本人自认为ee_link为末端工具连接处,而tool0应该为tcp即工具中心点坐标系所在处。
<xacro:macro name="robotiq_85_gripper" params="prefix parent *origin">
<joint name="${prefix}gripper_base_joint" type="fixed">
<parent link="${parent}"/>
<child link="${prefix}gripper_base_link"/>
<xacro:insert_block name="origin"/>
</joint>
2.2 launch文件夹
在launch文件夹中,新建view_ur_platform.launch和ur_platform_upload.launch。按照ur功能包内的view_ur3e.launch和ur3e_upload.launch进行编写。
view_ur_platform.launch
robot_state_publisher:用于把机器人的状态发布到tf库中。可以发布和计算机器人各个link的位姿。
rviz:启动rviz并将配置保存于cfg文件夹内的文件中。
<?xml version="1.0"?>
<launch>
<include file="$(find ur_platform_description)/launch/ur_platform_upload.launch"/>
<node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state