为任意一机械臂安装自己的机械手
1、修改URDF文件
为下面一篇的延续:
https://blog.csdn.net/qq_40569926/article/details/111791313
对于市面上的一些机械臂安装自制的机械手,首先要得到机械手和机械臂的URDF文件。
我是通过SW2019直接导出 robot gripper describe file
在导出URDF文件的时候,1、注意旋转轴自己添加;2、word 坐标系和 end 坐标系自己添加。(建议生成文件后自己修改)
好了,我们得到了两个URDF文件了我定义为gripper.urdf 和 robot.urdf ,下一步就应该把这两个文件合并起来。对于一般正规的机械臂的URDF文件中都会预留一个joint 和Link 用来安装机械手爪。(没有的话可以自己建一个)废话不多说,开始分析代码:
<!--添加机械夹爪-->
<link
name="elfin_dummy_gripper">
<inertial>
<origin
xyz=" 0.000489398642395972 -0.0494574311241469 -0.0673400835885924"
rpy="0 0 0" />
<mass
value="0.350473997197119" />
Link 标签就是定义的连杆,elfin_dummy_gripper 就是机器人提供的连杆,我就是直接把gripper.urdf 文件中的复制到 robot.urdf 中,把机械手第一个Link的名称改成elfin_dummy_gripper。(这样子就不用更改后面的 joint了省去了很多麻烦)
Link 后面跟着的就是它的Join:
<joint name="elfin_dummy_joint" type="fixed">
<origin
xyz=" 0 -0.06 -0 "
rpy="${PI} 0 ${PI/2}" />
<parent
link="elfin_link6" />
<child
link="elfin_dummy_gripper" />
</joint>
更改origin标签里的xyz 和rpy参数,调整机械臂末端和自己的手爪的位置。xyz 坐标位置,rpy 姿态。自己慢慢调,直到爪子位置和机械臂末位置达到理想。
自己导入的模型要添加最大和最小力:
effort=“” 、 velocity=“” 标签,要不然在gazebo中动不了。
mesh 标签 要对应好,以至于能找到自己模型。
不要忘了为自己的爪子选择一个自己喜欢的颜色。SW导出来灰不溜秋的很难看。
2、添加电机-
<transmission name = "jointx_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="jointx">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name = "jointx_motor">
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
elfin_dummy_joint 并不是一个真正的joint,因为它就是把我们的手爪和机械臂末端连接起来,不需要动。因此只添加你自己爪子上的transmission就行。
3、moveit
参考古月居的教程:
1、添加末端执行器
4、gazebo
不同的地方:
1、添加爪子的控制器
probot_elfin:
arm_joint_controller:
type: "position_controllers/JointTrajectoryController"
joints:
- elfin_joint1
- elfin_joint2
- elfin_joint3
- elfin_joint4
- elfin_joint5
- elfin_joint6
gains:
elfin_joint1: {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
elfin_joint2: {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
elfin_joint3: {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
elfin_joint4: {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
elfin_joint5: {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
elfin_joint6: {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
gripper_controller:
type: "position_controllers/JointTrajectoryController"
joints:
- jointx
# - elfin_dummy_joint
gains:
jointx: {p: 50.0, i: 0.0, d: 0.1, i_clamp: 0.0}
# elfin_dummy_joint : {p: 50.0, i: 0.0, d: 0.1, i_clamp: 0.0}
2、添加爪子的控制器
<node name="arm_controller_spawner" pkg="controller_manager" type="spawner" output="screen" ns="/probot_elfin" args="arm_joint_controller gripper_controller"/>
controller_manager_ns: controller_manager
controller_list:
- name: probot_elfin/arm_joint_controller
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
default: true
joints:
- elfin_joint1
- elfin_joint2
- elfin_joint3
- elfin_joint4
- elfin_joint5
- elfin_joint6
- name: probot_elfin/gripper_controller
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
default: true
joints:
#- elfin_dummy_joint
- jointx
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
default: true
joints:
#- elfin_dummy_joint
- jointx