Skip to content

MoveIt Grasps

MoveIt Grasps 是一个针对方块或圆柱体等物体的抓取生成器,可作为 MoveIt 抓取与放置管道的替代方案。它提供基于可达性的抓取过滤,以及接近、提升和撤退运动的笛卡尔规划功能。

抓取生成算法基于简单的立方体形状假设,不考虑摩擦锥或其他抓取动力学因素。

MoveIt Grasps 可与平行指夹爪和吸盘夹爪配合使用。

如果尚未完成,请先完成 Getting Started 中的步骤。

将 moveit_grasps 仓库克隆到一个 catkin 工作空间中。本教程使用 panda_moveit_config 中的 Franka Emika Panda 机器人配置:

Terminal window
cd ~/ws_moveit/src
git clone -b $ROS_DISTRO-devel https://github.com/moveit/moveit_grasps.git

使用 rosdep 工具自动安装其依赖:

Terminal window
rosdep install --from-paths . --ignore-src --rosdistro $ROS_DISTRO

构建工作空间:

Terminal window
catkin build

注意:截至 2019 年 4 月 11 日,该软件包尚未发布:

Terminal window
sudo apt-get install ros-$ROS_DISTRO-moveit-grasps

我们提供了 4 个演示脚本来展示 MoveIt Grasps 的功能,并用于可视化其配置参数。

在运行任何演示之前,你必须先启动 RViz:

Terminal window
roslaunch moveit_grasps rviz.launch

默认设置使用双指夹爪。要使用吸盘夹爪运行演示,请在启动 RViz 时指定夹爪类型:

Terminal window
roslaunch moveit_grasps rviz.launch gripper:=suction

注意:已发布的 panda_moveit_config 版本可能会落后于源码版本。如果你在演示中遇到问题,建议首先从源码下载并构建 panda_moveit_config。

要查看完整的 MoveIt Grasps 管道运行效果,请运行:

Terminal window
roslaunch moveit_grasps grasp_pipeline_demo.launch

要可视化夹爪特定参数:

Terminal window
roslaunch moveit_grasps grasp_poses_visualizer_demo.launch

结果看起来应该像这样:

该工具演示了抓取生成过程中评分机制的几个关键概念。它基于以下方法选择抓取:

  • 理想 TCP 抓取位姿:生成器会根据输入的偏好抓取方向来偏置所选择的抓取。例如,你可以指定“我希望在抓取物体时末端执行器指向左下方”。
  • 基于位姿的抓取评分加权:通过增加特定轴的权重,使某些平移或旋转轴获得更高评分。
  • 基于深度的抓取评分加权:使更深的抓取深度(即手指包裹物体的程度)优于其他参数。
  • 基于宽度的抓取评分加权:(仅适用于平行指夹爪)使更宽的指间距(物体与指垫之间可用空间的多少)优于其他参数。
  • 基于悬垂的抓取评分加权:(仅适用于吸盘夹爪)使吸盘抓取偏向于与物体完全重叠。该评分指标使用吸盘区域与物体接触百分比的平方。取平方后,具有多个吸盘区域(体素)的吸盘夹爪会更偏向于与单个体素 100% 重叠的方案,而不是一个 50% 加另一个 50% 的方案。

要可视化:

Terminal window
roslaunch moveit_grasps grasp_generator_demo.launch

要演示抓取过滤:

Terminal window
roslaunch moveit_grasps grasp_filter_demo.launch

过滤后,颜色代表以下含义:

  • RED - 被 IK 过滤的抓取
  • PINK - 被碰撞过滤的抓取
  • MAGENTA - 被切割平面过滤的抓取
  • YELLOW - 被方向过滤的抓取
  • BLUE - 被 IK 过滤的预抓取
  • CYAN - 被碰撞过滤的预抓取
  • GREEN - 有效

要演示使用吸盘夹爪时的管道,请运行:

Terminal window
roslaunch moveit_grasps suction_grasp_pipeline_demo.launch

MoveIt Grasps 基于三个主要组件:

  • 抓取生成器:使用末端执行器运动学和物体形状来采样抓取位姿,并通过几何评分函数对其进行优化。
  • 抓取过滤器:通过搜索 IK 解来验证抓取候选的可行性,以确认其可达性。
  • 抓取规划器:计算构成完整抓取运动的笛卡尔接近、提升和撤退轨迹。

注意:理想情况下,抓取规划器最终将被新的 MoveIt Task Constructor 取代。

要运行完整的抓取管道,这三个组件需要按顺序依次应用。

此外,抓取生成器还使用以下组件:

  • 抓取评分器:支持多种启发式方法,根据具体问题或应用的已知信息判断哪些抓取更有利。

生成、过滤和规划抓取运动的示例可以在文件 src/grasp_pipeline_demo.cpp 中找到。运行说明见下文。

MoveIt Grasps 要求在启动时指定两个配置文件:

  • ROBOT_grasp_data.yaml 描述机器人的末端执行器几何形状,每个机器人各不相同。
  • moveit_grasps_config.yaml 配置 抓取生成器、抓取过滤器和抓取规划器的行为。此外,它还包含许多可选的调试和可视化选项,使 MoveIt Grasps 的使用更加便捷。

除了本教程之外,还可以参阅以下示例文件中的注释,进一步了解各参数:

ROBOT_grasp_data.yaml

规范的末端执行器配置示例使用 Franka Emika 的 Panda:config_robot/panda_grasp_data.yaml。

在该文件中,你将找到使用吸盘或指夹爪定制 MoveIt Grasps 所需的所有夹爪特定参数。

ROBOT_grasp_data.yaml 文件中参数的图解示意图:

图 1:指夹爪参数

图 2:吸盘夹爪参数

* 这些变量可以直接在 ROBOT_grasp_data.yaml 文件中配置。

** 你的工具中心点连杆的名称可以通过在 ROBOT_grasp_data.yaml 文件中设置 tcp_name 变量来配置。

moveit_grasps_config.yaml

抓取生成器、抓取过滤器和抓取规划器的示例配置文件可以在 config/moveit_grasps_config.yaml 中找到。

要应用你的 yaml 配置,请在你的抓取应用程序或 ROS 节点中将其作为 rosparam 加载。例如,参见文件 launch/grasp_pipeline_demo.launch 中的以下片段:

<node name="moveit_grasps_demo" pkg="moveit_grasps" type="moveit_grasps_pipeline_demo">
<param name="ee_group_name" value="hand"/>
<param name="planning_group_name" value="panda_arm"/>
<rosparam command="load" file="$(find moveit_grasps)/config_robot/panda_grasp_data.yaml"/>
<rosparam command="load" file="$(find moveit_grasps)/config/moveit_grasps_config.yaml"/>
</node>

注意,机器人的规划组和末端执行器组必须在两个 yaml 文件之外、在参数 ee_group_name 和 planning_group_name 下指定。

由于参数集相当庞大,有多个不同的演示启动文件可用于可视化其效果。你可以把你的配置应用到本教程后面描述的演示启动文件中。

tcp_to_eef_mount_transform

tcp_to_eef_mount_transform 表示从用于抓取位姿的工具中心点(Tool Center Point)到末端执行器安装连杆的变换。提供此参数是为了让不同的 URDF 末端执行器无需重新编译代码即可协同工作。

在 MoveIt 中,被驱动的末端执行器手指应始终有一个父连杆,通常是腕部连杆或手掌连杆。该手掌连杆的 Z 轴应指向你想要抓取的物体,即你的食指所指的方向。

这是 John Craig 在《Robotics》一书中约定的规范。然而,很多 URDF 并不遵循这一约定,因此该变换允许你修正这一问题。

此外,X 轴应沿着被抓取的物体向上指向,即(啤酒)瓶的圆周轴(如果你正握着瓶子的话)。

Y 轴应指向其中一个手指。

从料箱抓取切换到货架抓取

GraspGenerator 中的 setIdealGraspPoseRPY() 和 setIdealGraspPose() 方法可用于选择理想的抓取方向。

这些方法用于对抓取候选进行评分,偏好更接近期望方向的抓取。

这在料箱抓取和货架抓取等应用中非常有用:从料箱中抓取物体时,你希望使用垂直对齐的抓取;而从货架上抓取物体时,你希望使用水平对齐的抓取。

  • UR5
  • Jaco2
  • Baxter
  • REEM
  • Panda