项目场景:
UR3和AG95已完成集成,作为抓取平台在moveit和gazebo实现联调。此时需要利用moveit的python接口进行物体的抓取控制进行编程。
问题描述:
机械臂默认的目标到达位置的是机械臂的第三腕部关节,而不是gripper的抓取尖端,使得gripper无法定位到被抓取物体。
原因分析:
分析抓取demo的程序后发现,arm.get_end_effector_link()所获取连杆为wrist_3_link,即机械臂的第三腕部关节,而不是gripper的抓取尖端。 我们需要的是位于gripper_finger1_finger_tip_link和gripper_finger2_finger_tip_link之间的抓取点。
解决方案:
拟通过给ee_link加上一定长度的偏置实现。 1.获取ee_link和抓取点(finger1_tip_link和finger2_tip_link中心点)的坐标转换关系,实现方法此处参考[6. 修改 ee_link 固定位置](https://blog.csdn.net/zxxxiazai/article/details/108647836)。命令如下:
rosrun tf tf_echo /ee_link /gripper_finger1_finger_tip_link
rosrun tf tf_echo /ee_link /gripper_finger2_finger_tip_link
分别获取两手指尖端的坐标关系,再取平均即为抓取点坐标关系。
2.moveit_setup_assistant中在group planning中对arm添加chain:base_link->ee_link,重新生成文件。正确操作的话,在srdf文件中可以看到会多出chain这一项。
3.给ur3.urdf.xacro中的ee_fixed_joint加偏置,y方向加上0.144。
4.由于camera位置与ee_link有关,因此还需修改ur_platform_urdf.xacro中的camera_joint的位置参数,x方向加上-0.144。
5.此时使用arm.get_end_effector_link()获得的ee_link为抓取点位置。