aubo i5 + realsense D435i识别抓取实践四

本文介绍了使用Aubo i5机器人和RealSense D435i摄像头进行物体识别和抓取的实践过程。首先通过手眼标定和物体识别确定物体位姿,然后建立工件坐标系,计算抓取点,转换为机械臂坐标并执行抓取动作。文章提供了部分关键代码,并提到了大寰AG-95手爪的ROS包。最后,作者鼓励读者留言交流。
摘要由CSDN通过智能技术生成

前言

前面已经通过手眼标定得到了相机与机械臂末端的位姿关系,然后又通过物体识别得到了物体在相机坐标系下的位姿,这样我们就可以得到物体相对机械臂末端或者物体相对机械臂基坐标的位姿,最后实现对物体的抓取。

一、抓取思路和流程

这里首先梳理一下抓取思路流程:

  • 根据物体在相机下的位姿建立一个临时的工件坐标系,发布其相对机械臂基坐标的tf关系
  • 根据抓取要求在工件坐标系下求得抓取准备点、抓取点、取走准备点的位姿
  • 通过坐标转换关系将抓取准备点、抓取点、取走准备点转换为机械臂基坐标下的位姿
  • 通过夹爪与机械臂末端之间的转换关系得到夹爪中心到达上述三个点时机械臂末端的位姿
  • 最后通过moveit将上述三点逐一发布给机械臂执行,执行过程中对夹爪进行打开或夹紧操作,即可完成对物体的抓取。

二、部分实现代码

下面是个人实现的部分代码,仅供参考,存在不足之处还望批评指正。

1.结构体定义

  • 下面是定义的抓取一个物体所需的动作点位的结构体,包括抓取动作所需要的各个点位,可以根据实际应用进行定义。
struct landPose
{
   
	geometry_msgs::Pose recognition_pose; //识别点
	geometry_msgs::Pose ready_pose; //准备点
	geometry_msgs::Pose grap_pose; //抓取点
	geometry_msgs::Pose up_pose; //抬起点
	geometry_msgs::Pose target_pose; //目标点
	geometry_msgs::Pose action_pose; //动作姿态
	geometry_msgs::Pose exit_pose; //退出点
};
  • 这里定义了一个工件坐标系结构体:
struct tfStruct
{
   
	std::string link; //child link
	std::string base_link; //parent link
	tf::Transform transform; //transform
};

2.获取工件位置信息

  • 订阅检测结果消息并保存工件坐标系结构体:
if (!result->recognized_objects.objects.empty())
{
   
	obj_num_ = result->recognized_objects.objects.size();
	for (int i = 0; i < obj_num_; i++)
	{
   
		geometry_msgs::PoseStamped pose;
		pose.pose = result->recognized_objects.objects.at(0).pose.pose.pose;
		pose.header = result->recognized_objects.objects.at(0).pose.header;
		
		//tf transform
		geometry_msgs::PoseStamped base_pose;
		try
		{
   
			tf_.transformPose("base_link", pose, base_pose);
			ROS_INFO("camera_link:(%f,%f,%f,%f,%f,%f,%f)------>base_link:(%f,%f,%f,%f,%f,%f,%f).",
			pose.pose.position.x, pose.pose.position
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值