MoveIt 深度把握
本教程演示了如何在 MoveIt 任务构造器中使用抓握姿势检测 (GPD)和 Dex-Net 。
GPD(左)和 Dex-Net(右)用于生成拾取圆柱体的抓取姿势。
https://moveit.picknik.ai/main/_images/mtc_gpd_panda.gif
入门
如果您还没有这样做,请确保您已经完成入门指南中的步骤。
为了运行演示,需要安装其他依赖项。因此,深度抓取包位于其自己的存储库中。请参阅Deep Grasp Demo。此存储库包含有关安装、运行演示、模拟深度传感器和性能提示的详细说明。
演示将允许您在 rviz 中可视化结果,并根据需要使用 Gazebo。
概念概述
MoveIt 任务构造器包含一个DeepGraspPose
生成器阶段。此阶段不直接包含 GPD 或 Dex-Net 的实现。相反,与 MoveIt 任务构造器的通信是通过 ROS 操作消息实现的。该DeepGraspPose
阶段包含一个与操作服务器通信的操作客户端。操作服务器的实现位于moveit_task_constructor_dexnet和moveit_task_constructor_gpd
包中。操作服务器将抓取候选连同相关成本一起作为反馈发送回操作客户端。
消息的相关字段可以在中看到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_name
服务器和客户端之间通信的命名空间。可选地,可以提供抓取采样和服务器连接的超时。默认情况下,这些设置为无限时间。
抓握姿势检测
GPD 从点云中抽取抓握候选样本,并使用 CNN 来分类抓握候选是否会成功。演示中,桌子平面会自动从点云中分割出来。这很有用,因为如果没有移除,GPD 会在这个平面周围抽取抓握候选样本。
gpd_config.yaml中的workspace
和 num_samples参数可以提高性能。第一个参数指定立方体的体积,以搜索以点云坐标原点为中心的抓握候选点。第二个参数指定从点云中采样的数量,以检测抓握候选点。
Dex-Net
Dex-Net 将从图像中抽取抓握候选点。必须提供彩色和深度图像。Dex-Net 使用抓握质量卷积神经网络 (GQ-CNN) 来预测抓握候选点成功的概率。GQ-CNN 是使用朝下的摄像头在图像上进行训练的。因此,网络对摄像头视点很敏感,当摄像头朝下时性能最佳。
将dex-net_4.0_pj.yaml中的参数设置deterministic
为 0, 以进行非确定性抓取采样。
运行演示
提供了演示的点云和图像,但您可以选择使用来自 Gazebo 中的模拟深度相机的传感器数据。
由于摄像机视点的敏感性,建议使用为 Dex-Net 演示提供的圆柱体图像。
相机视点部分显示如何将相机更改为不同的位置。这将根据对象提高性能。
深度传感器数据部分展示了如何使用模拟深度相机收集数据。
虚拟控制器
首先,启动基本环境:
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
确保您完成了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 生成成功的抓取。