在ros中下载的ur机器人包里不包括夹爪、力传感器等Robotiq的产品。
Robotiq相关产品的ros功能包可以在 https://github.com/ros-industrial/robotiq 中下载。但目前还不支持wrist camra
。
操作系统:Ubuntu 18.04
夹爪型号:Robotiq 2f-85
转换线:RS485转USB
通过RS485转USB建立两指夹爪和上位机通讯,此时Robotiq指示灯显示红色。
00 一些说明
因为厂家把夹爪、力传感器、腕部相机等都已经连接到控制箱上了,所以我一开始以为控制夹爪是可以直接将电脑和控制箱通过网线连接,然后就可以像控制ur机械臂一样控制robotiq的产品。
后来看到 在ROS中配置使用Robotiq 抓手 这篇文章,发现 直接通过ROS与UR控制箱的通信来控制抓手 是一件很困难和繁琐的工作。
在使用控制箱控制Robotiq抓手时,会将抓手连接在UR控制器上,通过对应的URCAPs来使用抓手。
一个自然而然的想法就是,能否保持这样的连接方式,直接通过ROS与UR控制箱的通信来控制抓手。这样就能避免把线接到计算机上时带来的各种麻烦。
目前查到的回答是,可以这么做,但是不推荐。
参考回答:
https://dof.robotiq.com/discussion/757/using-2-finger-gripper-attached-to-ur10-through-ros
需要通过ur_driver/URScript话题实现控制,也即需要熟悉URScript及抓手控制相关命令,还需要在Polyscope中编写程序。
另一篇参考回答:
https://dof.robotiq.com/discussion/1671/how-do-you-control-the-2f-gripper-using-ros-if-its-connected-to-a-ur5e-robot
① 可以考虑通过 ssh 进入机器人的控制箱编写一个简单的中继脚本(例如在 Bash 或 Python 中),该脚本将自动侦听特定的预先确定的端口并将其接收到的所有内容发送回抓手(可从控制箱的计算机访问)
② 如果选择在机器人旁边使用外部电缆,只需要一个 RS485<- ->USB 转换器,以及一个 24 伏直流电源。将夹爪电缆的一端插入转换器/电源,然后将转换器的 USB 端直接插入 ROS 计算机中
github上有一个专门做了一个类,完成夹爪动作的相关实现
参考:
① https://github.com/ros-industrial/ur_modern_driver/issues/162#issuecomment-420408093
② https://github.com/ctaipuj/luc_control/blob/master/robotiq_85_control/doc/documentation.pdf
用ur_driver/URScript控制机器人
参考
① 改进ur_modern_driver包,提供ur_driver/URScript_srv服务:https://blog.csdn.net/yimiyangguang185/article/details/87804693
② move the ur robot based on urscript:https://blog.csdn.net/coldplayplay/article/details/78880144
01 安装编译功能包
# 放到/src文件夹下
git clone https://github.com/ros-industrial/robotiq.git
克隆到本地后,安装依赖项
# Modbus TCP
rosdep install robotiq_modbus_tcp
# The EtherCAT soem library is also required to build the Robotiq package.
sudo apt-get install ros-melodic-soem
编译
cd ..
catkin_make
02 在rviz中查看夹爪
运行如下指令,启动rviz
roslaunch robotiq_2f_85_gripper_visualization test_2f_85_model.launch
效果如下图,拖动滑条可控制机械爪开闭
warn与解决
运行过程中,终端出现了3个警告
警告1
[ WARN] [1626268300.465340698]: The 'state_publisher' executable is deprecated. Please use 'robot_state_publisher' instead
- 解决
参考 https://blog.csdn.net/qq_15204179/article/details/108800907
将type
处的state_publisher
改为robot_state_publisher
警告2
[ WARN] [1626268300.468387330]: The root link robotiq_arg2f_base_link has an inertia specified in the URDF, but KDL does not support a root link with an inertia. As a workaround, you can add an extra dummy link to your URDF.
解决可以参考:https://blog.csdn.net/woodgril/article/details/108947746
这个可以不用修改
警告3
[WARN] [1626253621.684092]: 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
若没有安装 joint_state_publisher_gui
,使用如下命令安装:
sudo apt-get install ros-melodic-joint-state-publisher-gui
修改后如图所示
03 驱动真实robotiq二指夹爪
3.1 接线
参考 https://blog.csdn.net/qq_34935373/article/details/117445613
有一根 RS485 转 USB 线,usb线接在 UR 控制箱内部的 USB 接口,把这根线接在电脑usb接口上即可。
(其中两根 24V 的电源线接在 UR 控制柜中的 24V、0V 端口;两根控制信号线,一根屏蔽线通过 RS485 转 USB 线接在 UR 控制柜内部的 USB 接口)
这里有些需要特别说明的:
就是我使用的控制箱上除了gripper,同时还接着ft300力传感器和wrist camera,而这三个设备只有两个usb线所以不太明白哪根线是gripper的。
后面师兄帮忙拆了一下夹爪和腕部相机才发现,力传感器单独使用一根信号线,相机和夹爪共用一根。
可以参考视频 https://tieba.baidu.com/p/7341464744,夹爪和相机是通过下面这种接口连接的
使用的usb线如下图所示
刚插到电脑上时,夹爪显示红灯
3.2 修改配置串口
注意:
使用USB串行端口的Robotiq设备将在系统中显示为/dev/ttyUSBn
设备(其中“n”是一个数字,取决于插入计算机的USB设备的数量),并且需要读写权限才能正常工作。
将这个设备用户添加到dialout group
,可以确保这个用户永久拥有读写权限。
sudo usermod -a -G dialout $USER
# 要通过串行端口控制夹持器,需要向用户授予适当的权限
# YOURUSERNAME需要换为计算机用户名,如:
# sudo usermod -a -G dialout guyue
sudo usermod -a -G dialout YOURUSERNAME
#查看连接的串口
dmesg | grep tty
一般均为 ttyUSB0
,需要根据显示的串口信息修改后面的命令,确保夹爪能与计算机正常通信。
但是可能是因为我usb线同时连接了两个设备,所以返回的信息有点奇怪。
控制夹爪应当使用ttyACM0
3.3 启动 2-Finger Gripper Driver 节点
夹持器由robotiq_2f_gripper_control
包中包含的节点Robotiq2FGripperRtuNode.py
驱动
夹持器设备ID也需要作为参数提供。(2指夹持器的设备ID通过dmesg | grep tty
获得)
# 先启动节点
roscore
# 我的设备id是ttyACM0
rosrun robotiq_2f_gripper_control Robotiq2FGripperRtuNode.py /dev/ttyACM0
节点启动完成后,夹爪上的指示灯由红色变为蓝色,表明夹爪可以正常工作
3.4 启动 2-Finger Gripper Simple Controller 节点
驱动程序使用Robotiq2FGripper_robot_output
消息类型侦听Robotiq2FGripperRobotOutput
上的消息。
消息被解释并且命令被相应地发送到夹持器。
Robotiq2FGripper_robot_output
消息类型仅由Robotiq 2-Finger Gripper Instruction Manual 中描述的机器人输出变量组成。
因此,可以修改这个简单的控制器节点以向夹持器发送自定义命令。
在一个新的终端运行以下指令,提供了一个简单的控制器节点:
rosrun robotiq_2f_gripper_control Robotiq2FGripperSimpleController.py
然后显示如下:
-
我们先要 (r键)reset 重置夹爪,然后 (a键)activate 激活夹爪,再进行其他操作;
-
可以输入 o 或 c 执行张开闭合动作;
-
输入 0-255 的数字,0 是开合到最大位置,255 是完全关闭,回车后电爪即可执行;
-
可以输入 f 或 l 控制夹爪动作的快慢;
-
输入 i 增加夹取力;
-
输入 d 减小夹取力。
3.5 启动 2-Finger Gripper 状态监听器节点
在robotiq_2f_gripper_control
包中,还有一个用于监听和解释Gripper状态的节点。
驱动程序使用Robotiq2FGripper_robot_input
消息类型在Robotiq2FGripperRobotInput
上发布Gripper的状态。
msg
类型由Robotiq 2-Finger Gripper Instruction Manual 中描述的机器人输入变量组成。
在新的终端可以使用如下命令运行状态侦听器节点:
rosrun robotiq_2f_gripper_control Robotiq2FGripperStatusListener.py
可通过终端查看到夹爪当前的位置信息,电流大小等
04 robotiq_2f_gripper_control 程序说明
这里主要介绍三个在官方教程中提到的文件。
4.1 Robotiq2FGripperRtuNode.py
通过该文件与夹爪连接
#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)
从该文件中,可以看到:
第一段,不断查询抓手状态并发送。
第二段,用来接受用户输入的抓手控制信息,通过回调函数转给夹手。
4.2 Robotiq2FGripperSimpleController.py
向抓手输出控制信息
4.3 Robotiq2FGripperStatusListener.py
该文件用来监听夹爪状态
05 总结
下载编译功能包
# 放到/src文件夹下
git clone https://github.com/ros-industrial/robotiq.git
# Modbus TCP
rosdep install robotiq_modbus_tcp
# The EtherCAT soem library is also required to build the Robotiq package.
sudo apt-get install ros-melodic-soem
# 编译
cd ..
catkin_make
Rviz 中查看夹爪
roslaunch robotiq_2f_85_gripper_visualization test_2f_85_model.launch
连接并使用真实Robotiq_2f_85_gripper
sudo usermod -a -G dialout $USER
# 授予权限
sudo usermod -a -G dialout guyue
# 查看连接的串口
dmesg | grep tty
roscore
# 启动驱动节点
rosrun robotiq_2f_gripper_control Robotiq2FGripperRtuNode.py /dev/ttyACM0
# 启动简单控制节点
rosrun robotiq_2f_gripper_control Robotiq2FGripperSimpleController.py
# 启动状态监听节点
rosrun robotiq_2f_gripper_control Robotiq2FGripperStatusListener.py
06 参考
参考:
- 官方教程:http://wiki.ros.org/robotiq/Tutorials/Control of a 2-Finger Gripper using the Modbus RTU protocol (ros kinetic and newer releases)
- 在ROS中配置使用Robotiq 抓手:https://blog.csdn.net/weixin_42268975/article/details/105151377
- 【合工大机器人】Ubuntu16.04下基于ROS控制Robotiq_2f_85_gripper
https://blog.csdn.net/qq_34935373/article/details/117445613 - Robotiq自适应夹爪如何安装 https://tieba.baidu.com/p/7341464744