在ROS中配置使用Robotiq 抓手(一)

前言

印象中Robotiq系列产品已经成为了UR机器人的隐形标配,但是没想到在想要结合ROS使用竟然这么麻烦。。

1. 利用URScript通过UR控制器调用抓手

在使用试教器控制Robotiq抓手时,会将抓手连接在UR控制器上,通过对应的URCAPs来使用抓手。一个自然而然的想法就是,能否保持这样的连接方式,直接通过ROS与UR控制器的通信来控制抓手。这样就能避免把线接到计算机上时带来的各种麻烦。
目前查到的回答是,可以这么做,但是不推荐
需要通过ur_driver/URScript话题实现控制,也即需要熟悉URScript及抓手控制相关命令。

其他参考链接1,
这个好像专门做了一个类完成相关实现 参考链接2, 参考链接3

用ur_driver/URScript控制机器人,参考链接4,参考链接5

2. 将抓手直接与计算机相连

这么做,就要遭受线长与接口问题。

2.1 安装Robotiq功能包

官方教程1,官方教程2
这是一个Robotiq产品的综合包,但是不包含相机。使用时需要注意连接的USB端口号。

#下载至工作空间(我直接放在已经存在的工作空间)
mkdir -p robotiq_ws/src
cd robotiq_ws/src/
git clone https://github.com/ros-industrial/robotiq.git

#安装依赖项
rosdep install robotiq_modbus_rtu      //请在空间的src目录下执行该命令,该命令会查找安装robotiq_modbus_rtu包所需要的相关依赖
# 若出错需要socketcan-interface,则运行下面注释的语句安装
# sudo apt-get install ros-kinetic-socketcan-interface
sudo apt-get install ros-kinetic-soem

#编译
cd robotiq_ws
catkin_make

其他参考链接1,参考链接2,参考链接3

2.2 抓手功能包相关介绍

观察Robotiq包大致分成4部分,二指相关,三指相关,力传感器,连接通信相关。这里只关注二指相关部分(三指跟二指不太一样,多了gazebo部分?)
在这里插入图片描述

2.3 robotiq_2f_140_gripper_visualization

在rviz中查看二指手抓。

roslaunch robotiq_2f_140_gripper_visualization test_2f_140_model.launch

直接运行会有一个warn。

The ‘use_gui’ parameter was specified, which is deprecated. We’ll attempt to find and run the GUI, but if this fails you should install the ‘joint_state_publisher_gui’ package instead and run that. This backwards compatibility option will be removed in Noetic.

解决方法是,用joint_state_publisher_gui替换原本的joint_state_publisher,然后删除launch中对use_gui的设置。

sudo apt-get install ros-kinetic-joint-state-publisher-gui

然后再运行,还有一个小问题。

xacro: Traditional processing is deprecated. Switch to --inorder processing!
To check for compatibility of your document, use option --check-order.

在读取xacro文件时,需要添加–inorder。在ROS中配置使用Robotiq 抓手(一)_第1张图片参考链接1,参考链接2,参考链接3

2.4 robotiq_2f_gripper_control

这里主要介绍三个在官方教程中提到的文件。
三指抓手的简单控制方法也是类似,参看:
https://blog.csdn.net/w1301100424/article/details/88540442

2.4.1 Robotiq2FGripperRtuNode.py

官方教程上,通过该文件与抓手进行连接。注意USB端口号是否正确。

rosrun robotiq_2f_gripper_control Robotiq2FGripperRtuNode.py /dev/ttyUSB0

另外,查阅该文件,可以看到里面写着:

#The Gripper status is published on the topic named 'Robotiq2FGripperRobotInput'
pub = rospy.Publisher('Robotiq2FGripperRobotInput', inputMsg.Robotiq2FGripper_robot_input)

#The Gripper command is received from the topic named 'Robotiq2FGripperRobotOutput'
rospy.Subscriber('Robotiq2FGripperRobotOutput', outputMsg.Robotiq2FGripper_robot_output, gripper.refreshCommand)

上面那部分与2.4.2对应,不断查询抓手状态并发送。
下面那部分与2.4.3对应,用来接受用户输入的抓手控制信息,通过回调函数转给夹手。

2.4.2 Robotiq2FGripperStatusListener.py

rosrun robotiq_2f_gripper_control Robotiq2FGripperStatusListener.py

用来监听夹手状态

2.4.3 Robotiq2FGripperSimpleController.py

rosrun robotiq_2f_gripper_control Robotiq2FGripperSimpleController.py

向抓手输出控制信息。
按教程指示输入命令即可,会自动转化成话题对应的数据格式。
其他人那边看到的:

使用前需要激活设备,直接输入a,确定即可。若需复位,输入r。
之后输入0-255的数字,0是开合到最大位置,255是完全关闭,回车后电爪即可执行。

2.5 robotiq_2f_gripper_action_server

大致看了下,大概是将抓手动作写成了action,这是其中的server部分。
它好像是考虑了夹手目前状态与目标执行状态间的关系。
借用了robotiq_2f_gripper_control中的msg文件。
但是传递消息用的话题与2.4中的两个不同,因此,其与2.4.2及2.4.3没啥关系?但需要2.4.1与抓手连接?

另外,默认最大打开范围是85,如果是140的抓手需要手动修改。

说明

由于目前手头没有该夹手,上面几个文件的具体运行情况还未知。
后续会尝试将该抓手与UR机器集成,并试着在Gazebo中仿真。

你可能感兴趣的:(Gazebo,ROS)