前言
这部分内容主要讲如何实现Robotiq二指抓手在Gazebo中的仿真。
由于在二指抓手中使用了mimic标签,而Gazebo无法识别,导致直接读取二指手抓模型会在Gazebo中离散。
之前已经介绍过,可以使用mimic的插件实现(https://blog.csdn.net/weixin_42268975/article/details/106255685)。本文主要讲,如何在gazebo中为robotiq二指手抓配置该插件。
安装插件
https://github.com/roboticsgroup/roboticsgroup_gazebo_plugins
下载该插件功能包并编译安装。然后,将该插件功能包添加到工作空间。
可以用echo $ROS_PACKAGE_PATH
查看是否添加到工作空间。
需要注意:由于这是外部添加的插件,需要在使用时确认该插件功能包已经添加到工作空间,插件功能才会生效。
配置Robotiq二指手抓相关文件
这里使用robotiq的纯原生功能包https://github.com/ros-industrial/robotiq.git
1. 修改URDF
主要修改robotiq_2f_140_gripper_visualization/urdf/robotiq_arg2f_transmission.xacro
,添加三块内容。需要注意,对于transmission标签只需要给主动关节配置即可,不需要给被动关节(mimic)配置,不然可能会用ros_control来驱动。
另外,如果报错:
Deprecated syntax, please prepend ‘hardware_interface/’ to ‘PositionJointInterface’ within the tag in joint ‘finger_joint’.
在robotiq_arg2f_transmission.xacro中更新标签如下:
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
1.1 添加mimic插件宏
<xacro:macro name="mimic_joint_plugin_gazebo" params="name_prefix parent_joint mimic_joint has_pid:=false multiplier:=1.0 offset:=0 sensitiveness:=0.0 max_effort:=1.0 robot_namespace:=''">
<gazebo>
<plugin name="${name_prefix}mimic_joint_plugin" filename="libroboticsgroup_gazebo_mimic_joint_plugin.so">
<joint>${parent_joint}</joint>
<mimicJoint>${mimic_joint}</mimicJoint>
<xacro:if value="${has_pid}"> <!-- if set to true, PID parameters from "/gazebo_ros_control/pid_gains/${mimic_joint}" are loaded -->
<hasPID />
</xacro:if>
<multiplier>${multiplier}</multiplier>
<offset>${offset}</offset>
<sensitiveness>${sensitiveness}</sensitiveness> <!-- if absolute difference between setpoint and process value is below this threshold, do nothing; 0.0 = disable [rad] -->
<maxEffort>${max_effort}</maxEffort> <!-- only taken into account if has_pid:=true [Nm] -->
<xacro:unless value="${robot_namespace == ''}">
<robotNamespace>($robot_namespace)</robotNamespace>