MoveIt Deep Grasps

本教程演示如何使用 Grasp Pose Detection (GPD) and Dex-Net 在 MoveIt 任务构造器中。

GPD(左)和 Dex-Net(右)用于生成拾取圆柱体的抓取姿势。

gif1 gif2

入门

如果您尚未完成,请确保您已完成 Getting Started.

为了运行演示,需要安装其他依赖项。因此,深度掌握包位于其自己的存储库中。请参阅 Deep Grasp Demo. 该存储库包含有关安装、运行演示、模拟深度传感器和性能提示的详细说明。

演示将允许您在 rviz 中可视化结果,并根据需要使用 Gazebo。

概念概述

MoveIt 任务构造器包含一个 DeepGraspPose 生成器阶段。此阶段不直接包含 GPD 或 Dex-Net 的实现。相反,与 MoveIt 任务构造器的通信是通过 ROS 操作消息实现的。DeepGraspPose 阶段包含一个与操作服务器通信的操作客户端。操作服务器的实现位于 moveit_task_constructor_gpdmoveit_task_constructor_dexnet 包中。操作服务器将抓取候选连同相关成本一起发送回操作客户端作为反馈。

消息的相关字段可以在 moveit_task_constructor_msgs/action/SampleGraspPoses.action 中看到。

Using the DeepGraspPose stage is easy. Add the stage below to the current task. The implementation can be seen in Deep Grasp Task.

auto stage = std::make_unique<stages::DeepGraspPose<moveit_task_constructor_msgs::SampleGraspPosesAction>>(
  action_name, "generate grasp pose");

模板参数是操作消息。指定“action_name”,即服务器和客户端之间通信的命名空间。可选地,可以提供抓取采样和服务器连接的超时。默认情况下,这些设置为无限时间。

抓握姿势检测

GPD 从点云中抽取抓握候选样本,并使用 CNN 来分类抓握候选是否成功。演示中,桌子平面会自动从点云中分割出来。这很有用,因为如果不移除,GPD 将在此平面周围抽取抓握候选样本。

The workspace and num_samples parameters in gpd_config.yaml 可以提高性能。 第一个参数指定立方体的体积,用于搜索以点云框架原点为中心的抓握候选点。第二个 指定从点云中采样的数量,用于检测抓握候选点。

Dex-Net

Dex-Net 将从图像中抽取抓握候选对象。必须提供彩色和深度图像。Dex-Net 使用抓握质量卷积神经网络 (GQ-CNN) 来预测抓握候选对象成功的概率。GQ-CNN 是使用向下摄像头对图像进行训练的。因此,网络对摄像头视点很敏感,当摄像头朝下时,性能最佳。

将“确定性”参数设置为 0 dex-net_4.0_pj.yaml 用于非确定性抓取采样。

运行演示

提供了演示的点云和图像,但您可以选择 使用 Gazebo 中模拟深度相机的传感器数据。

由于摄像机视点的敏感性,建议使用为 Dex-Net 演示提供的圆柱体图像。

The Camera View Point section shows 如何将相机调整到不同的位置。这将根据对象提高性能。

The Depth Sensor Data section shows 如何使用模拟深度相机收集数据。

伪控制器

首先,启动基本环境::

roslaunch moveit_task_constructor_demo demo.launch

接下来,启动 GPD 或 Dex-Net 演示::

roslaunch moveit_task_constructor_gpd gpd_demo.launch
roslaunch moveit_task_constructor_dexnet dexnet_demo.launch

结果应与本教程顶部的两个动画类似。

Gazebo

确保完成 deep grasp demo install guide 用于 Gazebo 支持。

gpd_demo.launch 中的 load_cloud 参数和 dexnet_demo.launch 中的 load_images 参数指定 是否从文件加载传感器数据。将其中一个参数设置为 false 即可使用模拟深度摄像头。

首先,启动 Gazebo 环境::

roslaunch deep_grasp_task gazebo_pick_place.launch

接下来,启动 GPD 或 Dex-Net 演示::

roslaunch moveit_task_constructor_gpd gpd_demo.launch
roslaunch moveit_task_constructor_dexnet dexnet_demo.launch

下面的动画演示了 Dex-Net 使用 Gazebo 中的模拟深度相机生成抓取姿势的功能。 您可能会注意到 GPD 可以成功拾取圆柱体。但是,该算法在处理更复杂的物体时会遇到困难 例如杆夹(如右图所示)。尝试使用“workspace”和“num_samples”参数,看看是否可以使用 GPD 生成成功的抓取。

gif3 gif4