MoveIt Grasps

MoveIt Grasps 是一个针对方块或圆柱体等物体的抓取生成器,可作为 MoveIt 抓取与放置管道的替代方案。它提供基于可达性的抓取过滤,以及接近、提升和撤退运动的笛卡尔规划功能。
抓取生成算法基于简单的立方体形状假设,不考虑摩擦锥或其他抓取动力学因素。
MoveIt Grasps 可与平行指夹爪和吸盘夹爪配合使用。
如果尚未完成,请先完成 Getting Started 中的步骤。
安装 MoveIt Grasps
Section titled “安装 MoveIt Grasps”将 moveit_grasps 仓库克隆到一个 catkin 工作空间中。本教程使用 panda_moveit_config 中的 Franka Emika Panda 机器人配置:
cd ~/ws_moveit/srcgit clone -b $ROS_DISTRO-devel https://github.com/moveit/moveit_grasps.git使用 rosdep 工具自动安装其依赖:
rosdep install --from-paths . --ignore-src --rosdistro $ROS_DISTRO构建工作空间:
catkin build从 Debian 安装
Section titled “从 Debian 安装”注意:截至 2019 年 4 月 11 日,该软件包尚未发布:
sudo apt-get install ros-$ROS_DISTRO-moveit-grasps我们提供了 4 个演示脚本来展示 MoveIt Grasps 的功能,并用于可视化其配置参数。
在运行任何演示之前,你必须先启动 RViz:
roslaunch moveit_grasps rviz.launch默认设置使用双指夹爪。要使用吸盘夹爪运行演示,请在启动 RViz 时指定夹爪类型:
roslaunch moveit_grasps rviz.launch gripper:=suction注意:已发布的 panda_moveit_config 版本可能会落后于源码版本。如果你在演示中遇到问题,建议首先从源码下载并构建 panda_moveit_config。
1) 完整 MoveIt Grasps 管道
Section titled “1) 完整 MoveIt Grasps 管道”要查看完整的 MoveIt Grasps 管道运行效果,请运行:
roslaunch moveit_grasps grasp_pipeline_demo.launch
2) 可视化夹爪参数
Section titled “2) 可视化夹爪参数”要可视化夹爪特定参数:
roslaunch moveit_grasps grasp_poses_visualizer_demo.launch结果看起来应该像这样:

3) 可视化抓取生成
Section titled “3) 可视化抓取生成”该工具演示了抓取生成过程中评分机制的几个关键概念。它基于以下方法选择抓取:
- 理想 TCP 抓取位姿:生成器会根据输入的偏好抓取方向来偏置所选择的抓取。例如,你可以指定“我希望在抓取物体时末端执行器指向左下方”。
- 基于位姿的抓取评分加权:通过增加特定轴的权重,使某些平移或旋转轴获得更高评分。
- 基于深度的抓取评分加权:使更深的抓取深度(即手指包裹物体的程度)优于其他参数。
- 基于宽度的抓取评分加权:(仅适用于平行指夹爪)使更宽的指间距(物体与指垫之间可用空间的多少)优于其他参数。
- 基于悬垂的抓取评分加权:(仅适用于吸盘夹爪)使吸盘抓取偏向于与物体完全重叠。该评分指标使用吸盘区域与物体接触百分比的平方。取平方后,具有多个吸盘区域(体素)的吸盘夹爪会更偏向于与单个体素 100% 重叠的方案,而不是一个 50% 加另一个 50% 的方案。
要可视化:
roslaunch moveit_grasps grasp_generator_demo.launch
4) 抓取过滤器
Section titled “4) 抓取过滤器”要演示抓取过滤:
roslaunch moveit_grasps grasp_filter_demo.launch过滤后,颜色代表以下含义:
- RED - 被 IK 过滤的抓取
- PINK - 被碰撞过滤的抓取
- MAGENTA - 被切割平面过滤的抓取
- YELLOW - 被方向过滤的抓取
- BLUE - 被 IK 过滤的预抓取
- CYAN - 被碰撞过滤的预抓取
- GREEN - 有效
5) 吸盘抓取管道
Section titled “5) 吸盘抓取管道”要演示使用吸盘夹爪时的管道,请运行:
roslaunch moveit_grasps suction_grasp_pipeline_demo.launchMoveIt Grasps 基于三个主要组件:
- 抓取生成器:使用末端执行器运动学和物体形状来采样抓取位姿,并通过几何评分函数对其进行优化。
- 抓取过滤器:通过搜索 IK 解来验证抓取候选的可行性,以确认其可达性。
- 抓取规划器:计算构成完整抓取运动的笛卡尔接近、提升和撤退轨迹。
注意:理想情况下,抓取规划器最终将被新的 MoveIt Task Constructor 取代。
要运行完整的抓取管道,这三个组件需要按顺序依次应用。
此外,抓取生成器还使用以下组件:
- 抓取评分器:支持多种启发式方法,根据具体问题或应用的已知信息判断哪些抓取更有利。
生成、过滤和规划抓取运动的示例可以在文件 src/grasp_pipeline_demo.cpp 中找到。运行说明见下文。
与机器人无关的配置
Section titled “与机器人无关的配置”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 中找到。
应用与机器人无关的配置
Section titled “应用与机器人无关的配置”要应用你的 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 下指定。
由于参数集相当庞大,有多个不同的演示启动文件可用于可视化其效果。你可以把你的配置应用到本教程后面描述的演示启动文件中。
附加配置说明
Section titled “附加配置说明”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() 方法可用于选择理想的抓取方向。
这些方法用于对抓取候选进行评分,偏好更接近期望方向的抓取。
这在料箱抓取和货架抓取等应用中非常有用:从料箱中抓取物体时,你希望使用垂直对齐的抓取;而从货架上抓取物体时,你希望使用水平对齐的抓取。
已测试机器人
Section titled “已测试机器人”- UR5
- Jaco2
- Baxter
- REEM
- Panda