The Gazebo grasp fix plugin

2023-05-16

The Gazebo grasp fix plugin

官方资料链接:https://github.com/JenniferBuehler/gazebo-pkgs/wiki/The-Gazebo-grasp-fix-plugin

特别是在较老的Gazebo版本中(<2),机器人在抓取物体时可能会表现出奇怪的行为:它可能会摆动、爆炸或飞向太空。这是因为物理引擎还没有针对抓取进行优化。gazebo_grasp_plugin包中提供的插件有助于克服这些问题。

在较新的Gazebo版本(>2)中,机器人在抓取时不会再表现出奇怪的行为,但被抓取的物体仍可能从机器人手中滑落。通过调整物体和夹持器的材料特性,使机器人能够静止地抓取物体。机器人施加在物体上的力也起作用。然而,这可能需要对机器人的URDF和对象属性进行相当多的微调。如果这不是一个项目的直接优先级,那么使用本包中提供的Gazebo grasp插件可能会更容易。

它是如何工作的

插件的灵感来自gazebo::physics::Gripper。它可以固定机器人手上的物体,以避免物理引擎的问题,并帮助物体留在机器人手上而不会滑落。

只要两个相反的力被抓取器连接到一个物体上,就可以检测到一个物体被“抓取”。然后将物体固定在手掌或手环上。一旦这一标准不再适用(例如,夹具打开),该对象再次分离。

这个插件不依赖于ROS。它可以在后台运行,并自动附加由夹具链接抓取的所有对象(“opposing”标准的公差可以在源代码中设置,但它计划将此作为一个参数)。

实现是一个模型插件,所以你必须从机器人URDF加载模型插件:

<gazebo>
   <plugin name="gazebo_grasp_fix" filename="libgazebo_grasp_fix.so">
        <arm>
           <arm_name>name-of-arm</arm_name>
           <palm_link> hand_link_name  </palm_link>
           <gripper_link> finger_index_link_1 </gripper_link>
           <gripper_link> finger_index_link_2 </gripper_link>
           <gripper_link> ... </gripper_link>
        </arm>
       <forces_angle_tolerance>100</forces_angle_tolerance>
       <update_rate>4</update_rate>
       <grip_count_threshold>4</grip_count_threshold>
       <max_grip_count>8</max_grip_count>
       <release_tolerance>0.005</release_tolerance>
       <disable_collisions_on_attach>false</disable_collisions_on_attach>
       <contact_topic>__default_topic__</contact_topic>
    </plugin>
</gazebo>

参数描述:

包含每个可以抓取一个对象的arm的规范集合(可能有几个标签):
<arm_name> 是这个arm的名称。必须是独一无二的。
<palm_link> 必须是连接到手指关节的链接。
<gripper_link> 标签必须包含用于主动抓取对象的抓手/手的所有链接名称(这些链接根据上述标准确定是否存在“抓取”)。

<update_rate> 是所有接触点根据“夹持标准”进行检查的速率。注意,在这些更新之间,现有的联络点可能会以更高的速度被收集(Gazebo世界的更新速度)。
update_rate只是处理它们的速度,这需要一些计算时间,因此应该低于gazebo世界的更新速度

<forces_angle_tolerance> 是两个被认为是“反作用力”的力向量之间的公差角度(以度为单位)。如果角比这个小,它们就不是对角。

<grip_count_threshold> 是在更新循环中(以update_rate运行)必须检测到一个对象被“捕获”的次数,以便附加该对象。根据更新速率进行调整。

<max_grip_count> 是计数器的最大数目:在每次更新迭代中(以update_rate运行),如果满足一个对象的“抓取条件”,则增加该对象的计数器。Max_grip_count是一个对象记录的最大数量。一旦计数器超过这个数字,计数器就会停止。一旦“抓住标准”不再有效,数量将再次开始减少(每次在更新迭代中检测到对象“未抓住”时减少1)。所以这个计数器就像一个“缓冲区”,当它被填满时,保持状态,当它为空时,再次释放对象。这至少应该是grip_count_threshold的两倍

<release_tolerance> 是在抓取过程中,在不脱离物体的情况下,即使当前物体没有实际接触,也允许夹持器链接离开物体的距离。如果手指“摆动”或稍微远离物体,这种情况就会发生,因此“抓取标准”在随后的几次更新迭代中失败。这个设置是为了使行为更稳定。设置这个数字太高也会导致对象不被分离,即使抓手已经打开释放它,所以使用这个小心。

<disable_collisions_on_attach> 可用于以下情况:当一个对象被附加时,与它的碰撞可能被禁用,以防机器人仍然保持抖动。

<contact_topic> 是相关联的gazebo话题。通常默认是__default_topic__。

案例

    <gazebo>
        <plugin name="gazebo_grasp_fix" filename="libgazebo_grasp_fix.so">
            <arm>
            	<!-- 机械臂名称,注意确保唯一性 -->
                <arm_name>ur3_arm</arm_name>
                
                <!--与夹持器末端 link 相连的 link 、,可以配置多个-->
                <palm_link>Link1</palm_link>
                
                <!--直接与抓取物体接触的 link ,与 palm_link 之间不能存在其他的 link-->
                <gripper_link>Link11</gripper_link>
                <palm_link>Link2</palm_link>
                <gripper_link>Link22</gripper_link>
            </arm>
            
			<!--是否是相反力的夹⻆判断阈值 -->
            <forces_angle_tolerance>100</forces_angle_tolerance>
            
            <!--检查频率,需要小于 gazebo 的刷新频率-->
            <update_rate>20</update_rate>
            
            <!-- 检测阈值:在一个 update_rate 内,物体与夹爪之间的碰触次数-->
            <grip_count_threshold>1</grip_count_threshold>

		   <!-- 最大记数数目,一般为grip_count_threshold的两倍-->
            <max_grip_count>2</max_grip_count>
            
            <!--释放物体时夹爪与物体的距离-->
            <release_tolerance>0.0198</release_tolerance>
            
           <!-- 当一个对象被附加时,与它的碰撞可能被禁用,以防机器人仍然保持抖动-->
            <disable_collisions_on_attach>false</disable_collisions_on_attach>
            <contact_topic>__default_topic__</contact_topic>
        </plugin>
    </gazebo>

当物体被抓取住了,可以在控制台看到输出内容:

GazeboGraspFix: Attaching materiel_model::material_link::material_link_collision to gripper ur3_arm!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

The Gazebo grasp fix plugin 的相关文章

随机推荐