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>
参数描述:
包括每个可以抓取一个对象的对象ar的规范集合(可能有几个标签): <arm_name> 是这个arm的名称。必须是独一无二的。 <palm_link> 必须是连接到手指关节的链接。 <gripper_link> 标签必须包含用于主动抓取对象的抓手/手的所有链接名称(这些链接根据上述标准确定是否存在“抓取”)。
<update_rate> 是所有接触点根据“夹持标准”进行检查的速率。注意,在这些更新之间,现有的联络点可能会以更高的速度被收集(Gazebo世界的更新速度)。 update_rate只是处理它们的速度,这需要一些计算时间,。
<forces_angle_tolerance> 是两个被认为是“反作用力”的力向量之间的公差角度(以度为单位)。如果角比这个小,它们就不是对角。
<grip_count_threshold> 是在更新循环中(以update_rate运行)必须检测到一个对象被“捕获”的次数,以便附加该对象。根据更新速率进行调整。
<max_grip_count> 是计数器的最大数目:在每次更新迭代中(以update_rate运行),如果满足一个对象的“抓取条件”,则增加该对象的计数器。Max_grip_count是一个对象记录的最大数量。一旦计数器超过这个数字,计数器就会停止。一旦“抓住标准”不再有效,数量将再次开始减少(每次在更新迭代中检测到对象“未抓住”时减少1)。所以这个计数器就像一个“缓冲区”,当它被填满时,保持状态,当它为空时,再次释放对象。。
<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!!!