MoveIt Deep Grasps
本教程演示如何在 MoveIt Task Constructor(MoveIt 任务构造器)中使用 Grasp Pose Detection(GPD,抓取姿态检测) 和 Dex-Net。
下面的动画分别展示了使用 GPD(左)和 Dex-Net(右)生成的圆柱体抓取姿态。

如果尚未完成,请先完成 Getting Started 中的步骤。
运行这些演示还需要安装额外的依赖项。深度抓取相关的包位于独立的仓库中,请参阅 Deep Grasp Demo。该仓库详细说明了安装方法、演示运行方式、深度传感器模拟以及性能优化技巧。
你可以在 RViz 中可视化演示结果,如有需要还可以使用 Gazebo。
MoveIt Task Constructor 包含一个 DeepGraspPose 生成器阶段。该阶段本身并不包含 GPD 或 Dex-Net 的实现,而是通过 ROS action 消息与抓取姿态检测服务器通信。具体来说,DeepGraspPose 阶段包含一个 action client,它与 action server 通信。action server 的实现位于 moveit_task_constructor_gpd 和 moveit_task_constructor_dexnet 两个包中。action server 会将抓取候选及其相关代价作为反馈发送回 action client。
消息的相关字段可以在 moveit_task_constructor_msgs/action/SampleGraspPoses.action 中查看。
使用 DeepGraspPose 阶段非常简单,只需将该阶段添加到当前任务中即可。具体实现可以在 Deep Grasp Task 中查看。
auto stage = std::make_unique<stages::DeepGraspPose<moveit_task_constructor_msgs::SampleGraspPosesAction>>( action_name, "generate grasp pose");模板参数是 action 消息。你需要指定 action_name,它是服务器与客户端之间通信的命名空间。此外,还可以选择性地提供抓取采样和服务器连接的超时时间。这些超时时间默认设置为无限长。
抓取姿态检测(Grasp Pose Detection)
Section titled “抓取姿态检测(Grasp Pose Detection)”GPD 从点云中采样抓取候选,并使用 CNN 来判断该抓取是否会成功。在演示中,桌面平面会自动从点云中分割出来。这一步很有用:如果不移除该平面,GPD 就会围绕这个平面采样抓取候选。
gpd_config.yaml 中的 workspace 和 num_samples 参数可以提升性能。前者指定一个以点云坐标系原点为中心的立方体区域,用于在其中搜索抓取候选;后者指定从点云中采样多少个点来检测抓取候选。
Dex-Net
Section titled “Dex-Net”Dex-Net 从图像中采样抓取候选,需要同时提供彩色图像和深度图像。Dex-Net 使用抓取质量卷积神经网络(GQ-CNN)来预测抓取成功的概率。GQ-CNN 使用相机朝下拍摄的图像进行训练,因此对相机视角很敏感,当相机朝下时性能最佳。
在 dex-net_4.0_pj.yaml 中将 deterministic 参数设置为 0,即可启用非确定性的抓取采样。
演示所需的点云和图像已经提供,但你也可以选择使用 Gazebo 中模拟深度相机的传感器数据。
由于对相机视角的敏感性,建议在 Dex-Net 演示中使用所提供的圆柱体图像。
Camera View Point 部分展示了如何将相机移动到不同位置。根据物体的不同,调整相机位置有助于提升性能。
Depth Sensor Data 部分展示了如何使用模拟深度相机采集数据。
虚拟控制器(Fake Controllers)
Section titled “虚拟控制器(Fake Controllers)”首先,启动基础环境:
roslaunch moveit_task_constructor_demo demo.launch接下来,启动 GPD 或 Dex-Net 演示:
roslaunch moveit_task_constructor_gpd gpd_demo.launchroslaunch moveit_task_constructor_dexnet dexnet_demo.launch结果应与本教程顶部的两个动画类似。
Gazebo
Section titled “Gazebo”请确保已完成 deep grasp demo 安装指南,以获得 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.launchroslaunch moveit_task_constructor_dexnet dexnet_demo.launch下面的动画展示了在 Gazebo 中使用模拟深度相机时 Dex-Net 生成抓取姿态的能力。你可能会注意到 GPD 可以成功拾取圆柱体,但在处理更复杂的物体时会有困难,例如右侧的杆夹(bar clamp)。你可以尝试调整 workspace 和 num_samples 参数,看看能否用 GPD 成功完成一次抓取。
