转发请注明出处: https://blog.csdn.net/Eeko_x
本人毕业于英国南安普顿大学MSc Artificial Intelligence硕士专业,主攻计算机视觉方向,目前工作于机器人公司,研究机器视觉,识别抓取物体等…
最近做了一个GPD的demo,应用于机器人抓取很实用,在这里和大家分享一下,希望大家能一起为了机器人执行操作做出一些贡献、共勉。
本文主要参考于Github: https://github.com/atenpas/gpd
Github原文作者: Andreas ten Pas 东北大学计算机科学博士研究生
http://www.ccs.neu.edu/home/atp/
GPD机器人抓取姿态检测算法是为了使二指夹爪机械臂能在3D点云空间中检测到物体的6-DOF抓取位姿并实现抓取而设计的。
GPD算法主要有3步:
1. 生成选取大量抓取候选(grasp candidates)
2. 把这些抓取候选分成两类:有效抓取姿态和无效抓取姿态
3. 聚类几何相似的可行抓取
参考论文:High precision grasp pose detection in dense clutter(https://arxiv.org/abs/1603.01564)
1. Ubuntu 16.04
2. PCL 1.7 以上
http://pointclouds.org/
3. Eigen 3.0 以上
http://eigen.tuxfamily.org/index.php?title=Main_Page
4. ROS Kinetic for Ubuntu 16.04
1. 在Ubuntu16.04中, 安装ROS Kinetic
安装指南: http://wiki.ros.org/kinetic/Installation/Ubuntu
PS: 安装细节均不赘述,如果安装中遇到问题报错,建议耐心细读报错,静下心来好好理解一下问题所在,理解后再有针对性的去搜索解决方案。
2. git clone grasp_pose_generator(抓取生成器)库:
#切换目录至你的工作空间
mkdir
cd
git clone http://github.com/atenpas/gpg.git
3. build & install 安装 grasp_pose_generator
cd gpg
mkdir build && cd build
cmake ..
make
sudo make install
1. git clone GPD的库:
#注意这边因为后面要catkin_make编译,所以要将库放置于你工作空间中"src"目录下
cd
git clone http://github.com/atenpas/gpd.git
PS: 注意不要clone有caffe的版本的库,建议可以download库(https://github.com/sharronliu/gpd/tree/forward)的zip文件下载,然后再放置于src下extract解压
2. Build catkin workspace:
#回到工作空间根目录进行catkin_make
cd
catkin_make
至此GPD应该已经编译完成,让我们来运行一下GPD中的Tutorial测试一下:
#切换到你的工作空间
cd
#setup 一下 ROS
source devel/setup.bash
roslaunch gpd tutorial0.launch
这时会出现如下图所示的一个GUI窗口,在窗口下键盘按 ‘r’ 会居中视角得到下图, 按 ‘q’ 会退出当前GUI并加载下一个视图,一共三个视图窗口: 1. Grasp Candidates; 2. Valid Grasps; 3. Selected
当你完成了上面的测试之后,你就已经可以顺利使用 GPD 了
接下来你可以结合使用深度相机的点云生成 Grasps
我用的深度相机是Intel的Realsense D435 (当然任何深度相机都适用,例如: Microsoft Kinect or Asus Xtion Pro等,只需要你能在ROS下launch相机节点)
使用 Realsense D435 需要安装 ROS Wrapper for Intel® RealSense™ Devices,安装请参考:
https://github.com/IntelRealSense/realsense-ros
当你准备好 Realsense 或其他深度相机的时候就可以继续下一步了
1. Setup 设置
将 RGBD 相机连接到你的机器人/电脑上
下面的每行指令都需要运行于一个单独的 Terminal 窗口
首先我们运行一下你的 RGBD 相机的 driver,以获取点云 Pointclouds
这里我用的是 Realsense D435:
roslaunch realsense2_camera rs_camera.launch filters:=pointcloud
下一步运行 rviz(ROS视图)
rosrun rviz rviz
进入 rviz 界面后, 左下角点击 “Add”, 点击 By topic, 选中 /camera/depth/color/points/PointCloud2 后点击 “OK”
将 Global Options 下 Fixed Frame 栏,选定 camera_link,得到相机点云图
2. 检测Grasps
完成了第一步后,让我们启动GPD ROS node来检测抓取姿态
在launch之前,用文本编辑器打开gpd/launch/tutorial1.launch文件
找到下面的参数,将value后面的值改为你深度相机发布点云的topic,这里我修改为了: /camera/depth/color/points
修改完后 launch node:
roslaunch gpd tutorial1.launch
launch 完后你将在你的相机上看到类似下图的 result :
3. 在Python中使用得到的Grasps,参考代码:
import rospy
from gpd.msg import GraspConfigList
# global variable to store grasps
grasps = []
# Callback function to receive grasps.
def callback(msg):
global grasps
grasps = msg.grasps
# ==================== MAIN ====================
# Create a ROS node.
rospy.init_node('get_grasps')
# Subscribe to the ROS topic that contains the grasps.
sub = rospy.Subscriber('/detect_grasps/clustered_grasps', GraspConfigList, callback)
# Wait for grasps to arrive.
rate = rospy.Rate(1)
while not rospy.is_shutdown():
print '.'
if len(grasps) > 0:
rospy.loginfo('Received %d grasps.', len(grasps))
break
rate.sleep()
关于GPD还有其他的版本,本文是在CPU上使用GPD,相应的还有GPU版本:caffe、pytorch,OPENVINO等版本,有兴趣可以自行去研究一下,我也会继续更新,欢迎分享。
-------------------联系我请留言(https://blog.csdn.net/Eeko_x)------------------------
------------------------------------------------------完------------------------------------------------------