首页 > 编程语言 >Ros2 - Moveit2 - Grasps(抓握)

Ros2 - Moveit2 - Grasps(抓握)

时间:2024-09-12 14:36:16浏览次数:10  
标签:grasps Grasps 抓取 Ros2 grasp 抓握 Moveit2 moveit MoveIt

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 GeneratorGrasp FilterGrasp Planner的行为。此外,它还包含许多可选的调试和可视化选项,使 MoveIt Grasps 的使用更加容易。

除了本教程之外,请参阅以下示例文件中的注释以获取有关参数的进一步解释:

ROBOT_grasp_数据.yaml

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

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

ROBOT_grasp_data.yaml文件中参数说明图

  1. 手指夹持器参数

../../../_images/finger_gripper_explanation.jpg

  1. 吸盘参数

../../../_images/suction_gripper_explanation.jpg

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

**您可以通过设置ROBOT_grasp_data.yaml文件中的tcp_name变量来配置工具中心点链接的名称。

moveit_grasps_config.yaml

可以在config/moveit_grasps_config.yaml中找到Grasp GeneratorGrasp FilterGrasp 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_nameplanning_group_name 中。

由于参数集非常庞大,你可以使用不同的演示启动文件来可视化效果。你可以将你的配置应用到本教程后面描述的演示启动文件中。

其他配置说明

tcp_to_eef_mount_transform

 

表示tcp_to_eef_mount_transform从用于抓取姿势的工具中心点到末端执行器的安装链接的变换。提供此参数是为了允许不同的 URDF 末端执行器协同工作而无需重新编译代码。

在 MoveIt 中,驱动的末端执行器手指应始终具有父链接,通常是腕部链接或手掌链接。此腕部链接应使其手掌的 Z 轴指向您想要抓取的物体,即您的食指指向的位置。

这是 John Craig 于 1955 年在《机器人学》中制定的惯例。然而,许多 URDF 不遵循此惯例,因此此转换允许您修复它。

此外,x 轴应该沿着抓握的物体指向上方,即如果你握着啤酒瓶的话,x 轴就是啤酒瓶的圆轴。

y 轴应该指向其中一个手指。

 从货箱拣选切换到货架拣选 GraspGenerator 中的setIdealGraspPoseRPY()和方法setIdealGraspPose()可用于选择理想的抓取方向。

这些方法用于对抓握候选进行评分,以偏向更接近所需方向的抓握。

这在诸如箱子和架子拾取之类的应用中很有用,在这些应用中,您可能希望用垂直对齐的抓手从箱子中拾取物体,或者用水平对齐的抓手从架子中拾取物体。

经过测试的机器人

标签:grasps,Grasps,抓取,Ros2,grasp,抓握,Moveit2,moveit,MoveIt
From: https://www.cnblogs.com/ai-ldj/p/18410137

相关文章

  • Ros2 - Moveit2 - Pick And Place(拾取和放置)
    拾取和放置注意:本教程中使用的功能已弃用。要执行拾取和放置操作,应使用MoveIt任务构造器(MTC)(使用MoveIt任务构造器拾取和放置)。 在MoveIt中,抓取是使用MoveGroup接口完成的。为了抓取一个物体,我们需要创建moveit_msgs::Graspmsg,以便定义抓取操作中涉及的各种姿势和姿......
  • ROS2 - Moveit2 - Planning with Approximated Constraint Manifolds(使用近似约束流
    使用近似约束流形进行规划OMPL支持自定义约束,以使规划轨迹遵循所需的行为。约束可以在关节空间和笛卡尔空间中定义,后者基于方向或位置。在规划轨迹时,每个关节状态都需要遵循所有设置的约束,默认情况下,这是通过拒绝采样来执行的。然而,这可能会导致非常长的规划时间,特别是当约束非......
  • Ros2 - Moveit2 - TimeParameter(时间参数化)
    时间参数化MoveIt目前主要是一个运动规划框架-它规划关节或末端执行器的位置,但不规划速度或加速度。但是,MoveIt确实利用后处理来对速度和加速度值的运动轨迹进行时间参数化。下面我们将解释MoveIt这一部分所涉及的设置和组件。 速度控制来自文件默认情况下,MoveIt将关......
  • ROS2开发前置基础知识
    前言笔者发现现在市面上(主要是某站上)的ros2相关的教程内容大多不太基础(例如古某居(手动狗头保命),对于那些不熟悉Linux和C++甚至Python的童鞋来说不太友好,之前笔者自己在跟着学习过程中也有不少疑惑,踩了不少坑,现进行一些前置知识的总结(主要学习古某居和鱼香ros的教程,墙裂推荐),一......
  • Ros2- Moveit2 - Visualizing Collisions(可视化碰撞)
    本节将引导您了解C++示例代码,该代码可让您在RViz中移动和与机器人手臂交互时可视化机器人本身与世界之间的碰撞接触点。入门运行代码使用Roslaunch启动文件直接从moveit_tutorials运行代码:roslaunchmoveit_tutorialsvisualizing_collisions_tutorial.launch现在......
  • ROS2 - Moveit2 - 创建Moveit插件(MoveIt Plugins)
    创建MoveIt插件本节详细说明了如何在ROS中添加插件。两个必需元素是基类和插件类。插件类继承自基类并覆盖其虚拟函数。用于此目的的主要库是pluginlib。本教程包含三种不同类型的插件,即运动规划器、控制器管理器和约束采样器。运动规划器插件在本节中,我们将展示如何将新......
  • 拉取ros2_control_demos存储库
    目录克隆存储库方法1:使用gitclone和rosdep安装依赖方法2:使用vcs工具管理多个存储库区别总结rosdep和APT的关系网络问题安装依赖克隆存储库方法1:使用gitclone和rosdep安装依赖下载存储库:mkdir-p~/ros2_ws/srccd~/ros2_ws/srcgitclo......
  • ros2框架分析
    工作流包创建ros2pkgcreateimage_server--build-typeament_python--dependenciescv_bridgerclpysensor_msgsstd_msgs使用ros2pkgcreate创建的ROS2包默认位于你执行该命令时所在的当前工作目录下。定义消息类型定义服务接口配置包package.xml:作用:......
  • 【Moveit2】MoveGroupInterface设置目标姿态,然后创建一个计划到该姿态的运动路径,stati
    PlanandExecuteusingMoveGroupInterface//CreatetheMoveItMoveGroupInterfaceusingmoveit::planning_interface::MoveGroupInterface;automove_group_interface=MoveGroupInterface(node,"panda_arm");//SetatargetPoseautoconsttarget_p......
  • ROS2- Moveit2 - 运动规划API(Motion Planning API)
     在MoveIt中,运动规划器使用插件基础结构加载。这允许MoveIt在运行时加载运动规划器。在此示例中,我们将运行执行此操作所需的C++代码。入门如果您还没有这样做,请确保您已经完成入门指南中的步骤。 运行演示打开两个shell。在第一个shell中启动RViz并等待所有内......