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(使用前将#替换为@)