2021-08-14如何指定end_effector_link为抓取点

项目场景:

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为抓取点位置。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 CPP 中使用 Orocos KDL 和 KDL Parser,需要先安装 Orocos KDL 库和 KDL Parser 库。下面是安装步骤: 1. 安装 Orocos KDL 库: ``` sudo apt-get install liborocos-kdl-dev ``` 2. 安装 KDL Parser 库: ``` sudo apt-get install libkdl-parser-dev ``` 安装完成后,可以在 CPP 中使用这两个库。使用 Orocos KDL 和 KDL Parser 的示例代码如下: ```cpp #include <kdl/chain.hpp> #include <kdl/chainfksolver.hpp> #include <kdl/chainfksolverpos_recursive.hpp> #include <kdl/chainjnttojacsolver.hpp> #include <kdl_parser/kdl_parser.hpp> int main(int argc, char** argv) { // Load the robot description from the parameter server. std::string robot_description; ros::param::get("robot_description", robot_description); // Parse the robot description into a KDL tree. KDL::Tree robot_kdl; if (!kdl_parser::treeFromString(robot_description, robot_kdl)) { ROS_ERROR("Failed to construct KDL tree from robot description."); return 1; } // Create a solver for computing the forward kinematics of the robot. KDL::Chain robot_chain; robot_kdl.getChain("base_link", "end_effector_link", robot_chain); KDL::ChainFkSolverPos_recursive fk_solver(robot_chain); // Compute the forward kinematics of the robot for a given joint configuration. KDL::JntArray joint_positions(robot_chain.getNrOfJoints()); for (size_t i = 0; i < robot_chain.getNrOfJoints(); ++i) { joint_positions(i) = i * 0.1; } KDL::Frame end_effector_pose; fk_solver.JntToCart(joint_positions, end_effector_pose); // Create a solver for computing the Jacobian of the robot. KDL::ChainJntToJacSolver jac_solver(robot_chain); // Compute the Jacobian of the robot for a given joint configuration. KDL::Jacobian jacobian; jac_solver.JntToJac(joint_positions, jacobian); return 0; } ``` 这段代码演示了如何使用 Orocos KDL 和 KDL Parser 实现机器人的正运动学和雅克比矩阵计算。需要注意的是,这段代码是在 ROS 中编写的,如果在其他环境中使用,需要根据需要进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值