机器人6D抓取姿态检测(GPD)-Ubuntu 16.04 + ROS Kinetic + RGBD + CPU版本的实现

机器人6D抓取姿态检测(GPD)-Ubuntu 16.04 + ROS Kinetic + RGBD + CPU版本的实现

转发请注明出处: 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/

1. 概述

GPD机器人抓取姿态检测算法是为了使二指夹爪机械臂能在3D点云空间中检测到物体的6-DOF抓取位姿并实现抓取而设计的。
机器人6D抓取姿态检测(GPD)-Ubuntu 16.04 + ROS Kinetic + RGBD + CPU版本的实现_第1张图片
GPD算法主要有3步:

1. 生成选取大量抓取候选(grasp candidates)
2. 把这些抓取候选分成两类:有效抓取姿态和无效抓取姿态
3. 聚类几何相似的可行抓取

参考论文:High precision grasp pose detection in dense clutter(https://arxiv.org/abs/1603.01564)

2. 环境要求

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

3. 必备条件

1. 在Ubuntu16.04中, 安装ROS Kinetic

安装指南: http://wiki.ros.org/kinetic/Installation/Ubuntu

PS: 安装细节均不赘述,如果安装中遇到问题报错,建议耐心细读报错,静下心来好好理解一下问题所在,理解后再有针对性的去搜索解决方案。

2. git clone grasp_pose_generator(抓取生成器)库:
机器人6D抓取姿态检测(GPD)-Ubuntu 16.04 + ROS Kinetic + RGBD + CPU版本的实现_第2张图片

#切换目录至你的工作空间
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

4. 编译GPD

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

5. 为一个点云文件生成Grasps(抓取姿态)

至此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机器人6D抓取姿态检测(GPD)-Ubuntu 16.04 + ROS Kinetic + RGBD + CPU版本的实现_第3张图片机器人6D抓取姿态检测(GPD)-Ubuntu 16.04 + ROS Kinetic + RGBD + CPU版本的实现_第4张图片

6. 用深度相机检测抓取姿态

当你完成了上面的测试之后,你就已经可以顺利使用 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 OptionsFixed 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 :
机器人6D抓取姿态检测(GPD)-Ubuntu 16.04 + ROS Kinetic + RGBD + CPU版本的实现_第5张图片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)------------------------

------------------------------------------------------完------------------------------------------------------

你可能感兴趣的:(机器人抓取)