Ros2 - Moveit2 - Grasps(抓握)
MoveIt Grasps 是一款用于抓取块或圆柱体等物体的抓取生成器,可用作 MoveIt 拾取和放置管道的替代品。MoveIt Grasps 提供基于可达性和接近、抬起和后退运动的笛卡尔规划来过滤抓取的功能。
抓握生成算法基于简单的长方体形状,不考虑摩擦锥或其他抓握动力。
MoveIt Grasps 可与平行手指夹持器和吸盘夹持器一起使用。
入门
如果您还没有这样做,请确保您已经完成入门指南中的步骤。
安装 MoveIt Graps
从源安装
将moveit_grasps存储库克隆到catkin 工作区。在本教程中,我们使用来自panda_moveit_config的 Franka Emika 的 Panda 机器人设置:
cd ~/ws_moveit/src git 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 安装
注意:截至 2019 年 4 月 11 日,此软件包尚未发布:
sudo apt-get install ros-$ROS_DISTRO-moveit-grasps
演示脚本
我们提供了 4 个演示脚本来展示 MoveIt Grasps,并用于可视化 MoveIt Grasps 配置参数。
在运行任何演示之前,您必须首先使用以下命令启动 Rviz:
roslaunch moveit_grasps rviz.launch
默认设置使用两指夹持器。要使用吸盘夹持器运行演示,请在启动 Rviz 时指定夹持器:
roslaunch moveit_grasps rviz.launch gripper:=suction
注意:panda_moveit_config的发布版本可能落后于源版本。如果您对演示程序有疑问,最好先从源代码下载并构建panda_moveit_config。
1)整个 MoveIt 抓取管道
要查看整个 MoveIt Grasps 管道的运行情况,请运行:
roslaunch moveit_grasps grasp_pipeline_demo.launch
2)可视化夹持器参数
要可视化夹持器特定参数:
roslaunch moveit_grasps grasp_poses_visualizer_demo.launch
结果看起来应该是这样的:
3)可视化抓取生成
此工具演示了在抓握生成过程中评分的几个概念。它使用以下方法确定所选的抓握方式:
-
理想 TCP 抓握姿势:生成器将根据首选抓握的输入来偏向所选抓握。例如,这允许您说“我希望抓握物体时末端执行器指向左下方”。
-
基于姿势的抓握分数加权:通过增加特定轴的权重,偏向某些平移或旋转轴以获得更高的分数。
-
基于深度的抓握分数加权:与其他参数相比,更深的抓握深度(手指围绕物体的程度)更具偏向性
-
基于宽度的抓握得分权重:(仅适用于平行手指抓握器)相对于其他参数,更宽的手指抓握(物体和指垫之间有多少可用空间)
-
悬垂抓握得分权重:(仅适用于吸盘夹持器)使吸盘抓握偏向与物体完全重叠。此评分指标使用与物体接触的吸盘区域百分比的平方。通过使用平方,具有多个吸盘区域(体素)的吸盘夹持器偏向于与一个体素 100% 重叠的解决方案,而不是一个体素 50% 重叠,另一个体素 50% 重叠。
可视化:
roslaunch moveit_grasps grasp_generator_demo.launch
4)掌握过滤器
演示掌握过滤:
roslaunch moveit_grasps grasp_filter_demo.launch
经过过滤后,颜色代表以下内容:
-
红色 - 经过 ik 过滤的草
-
粉色-通过碰撞过滤的抓取
-
洋红色-通过切割平面过滤的抓取
-
黄色-按方向过滤抓取
-
蓝色 - pregrasp 由 ik 过滤
-
CYAN-通过碰撞过滤的预抓取
-
绿色-有效
5)吸抓Pipeline
要演示使用吸盘夹持器的管道,请运行:
roslaunch moveit_grasps suction_grasp_pipeline_demo.launch
概念概述
MoveIt Grasps 基于三个主要组件:
-
抓握生成器使用末端执行器运动学和物体形状来采样抓握姿势并使用几何评分函数对其进行优化。
-
抓取过滤器通过搜索 IK 解决方案来验证抓取候选的可行性,以验证其可达性。
-
抓取规划器计算构成完整抓取动作的笛卡尔接近、提升和后退轨迹。
注意:理想情况下,Grasp Planner最终将被逐步淘汰,取而代之的是新的MoveIt Task Constructor。
为了运行完整的掌握管道,需要按顺序应用这三个组件。
此外,Grasp Generator还使用以下组件:
-
Grasp Scorer支持多种启发式方法,用于在已知问题/应用信息的情况下判断哪些抓握方式是有利的
在文件src/grasp_pipeline_demo.cpp中可以找到生成、过滤和规划抓取动作的示例。运行说明如下。
机器人无关的配置
MoveIt Grasps 需要在启动时指定两个配置文件:
-
ROBOT_grasp_data.yaml描述了机器人末端执行器的几何形状,并且针对每个机器人都是定制的
-
moveit_grasps_config.yaml配置Grasp Generator、Grasp Filter和Grasp Planner的行为。此外,它还包含许多可选的调试和可视化选项,使 MoveIt Grasps 的使用更加容易。
除了本教程之外,请参阅以下示例文件中的注释以获取有关参数的进一步解释:
ROBOT_grasp_数据.yaml
典型示例末端执行器配置使用 Franka Emika 的 Panda:config_robot/panda_grasp_data.yaml。
在该文件中,您将找到使用吸盘或手指夹持器定制 MoveIt Grasps 所需的所有夹持器特定参数。
ROBOT_grasp_data.yaml文件中参数说明图
-
手指夹持器参数
-
吸盘参数
*
这些变量可以直接在ROBOT_grasp_data.yaml文件中配置。
**
您可以通过设置ROBOT_grasp_data.yaml文件中的tcp_name变量来配置工具中心点链接的名称。
moveit_grasps_config.yaml
可以在config/moveit_grasps_config.yaml中找到Grasp Generator、Grasp Filter和Grasp Planner的示例配置文件。
应用与机器人无关的配置
要应用您的 yaml 配置,请将它们作为 rosparams 加载到您的抓取应用程序/ROS 节点中。有关示例,请参阅文件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
从用于抓取姿势的工具中心点到末端执行器的安装链接的变换。提供此参数是为了允许不同的 URDF 末端执行器协同工作而无需重新编译代码。
在 MoveIt 中,驱动的末端执行器手指应始终具有父链接,通常是腕部链接或手掌链接。此腕部链接应使其手掌的 Z 轴指向您想要抓取的物体,即您的食指指向的位置。
这是 John Craig 于 1955 年在《机器人学》中制定的惯例。然而,许多 URDF 不遵循此惯例,因此此转换允许您修复它。
此外,x 轴应该沿着抓握的物体指向上方,即如果你握着啤酒瓶的话,x 轴就是啤酒瓶的圆轴。
y 轴应该指向其中一个手指。
setIdealGraspPose()
可用于选择理想的抓取方向。