从零实现无序抓取(五)利用两阶段的算法估计多目标场景中物体位姿

本文介绍了在多目标场景中,如何通过两阶段算法来估计目标位姿。首先,利用YoloV3在RGB图像上进行目标检测,提取二维ROI,然后将ROI映射到点云空间,转化为单目标位姿估计问题。作者详细阐述了数据集的制作、模型训练过程,并展示了实验结果,包括ROI映射到点云后的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在之前的文章中,我们基于模版匹配的方法估计了单个目标的位姿,但是这种方法只适用于场景中只有一个目标,一旦场景中有多个目标,算法很容易失效。一方面,一个完整的抓取场景往往范围比较大(相对于单个零件而言),采集到的常见点云数量会很多,尤其如果使用的一些高精度的工业级点云传感器,可以生成数百万的点。如果是只选取这大量点中的少量的关键点计算特征向量,可能会导致无法匹配,选的太多速度又太慢。另一方面,采集整个场景肯定会采集到背景,对背景进行点云特征向量计算也会对算力的浪费。
针对上述的问题,采用两阶段的算法往往更加合理。第一阶段,提取含有单个目标点云数据的局部点云区域,第二个阶段,在局部点云区域中估计目标位姿,这时问题就已经转化为单目标位姿估计了。
这篇文章主要讲一下第一阶段怎么做,并提供一种较为简单的操作方式。

一、算法思路

沿着先提取局部ROI这个思路,可以很自然地想到目标检测(找一个bounding box)或者语义分割(像素级分割)这两种方式。
如果是在点云数据上进行,有个问题:标注比较困难,现在开源的点云标注软件好像不是很多,我尝试了point-cloud-annotation-tool、annotate以及semantic-segmentation-editor感觉多少都有点麻烦,尤其是想到还要采集很多点云数据,然后一个个标注,相当麻烦。
所以我选择了另一种方式,那就是在RGB图像上先进行二维的ROI提取,然后将这个ROI映射到三维点云空间中去(具体如何映射后面讲),得到局部点云数据后问题就又变成了单目标位姿估计的问题了。
在RGB图像上同样可以采用语义分割或者检测的方式。虽然理论上来说,分割的方式会更好,但是因为懒,所以还是用检测的方式吧,毕竟数据集要标注的图片不是少数。
有了思路就开始动手实现了,目标检测网络千千万,随便找个开源的,(又或者自己写?我做的这种场景其实挺简单的,没必要自己整一个)。正好收藏夹里还有三年前收藏的YoloV3的github,就它了吧。

二、用yolov3训练自己的数据集

2.1 制作数据集

首先就是去拍一些场景的图像,改变一下光线,角度,远近这些参数。
然后下载一个LableImg,这个很容易使用,下载下来就是一个exe可以直接使用。开始标注,操作截面如下。lableimg下载地址
lableimag操作界面
根据自己的场景决定一下要采集多少图像,我这里总共是采集了大概六百张图像(标注到头昏眼花)
部分样本如下:
在这里插入图片描述

2.2 开始训练

数据集有了,就要开始训练了,其实如果你一点都不懂深度学习也无所谓,yolov3代码基本是傻瓜操作了。
首先下好代码yolov3 github地址
然后如何在自己的数据集上训练的官方的教程Train Custom Data也有了。开始训练就完事儿了,记得划分一下训练集,测试集和验证集,可以按照8:1:1的比例划分,另外,这种很简单的场景用tiny版本就行了。

2.3 结果分析

在这里插入图片描述
把实验结果记录一下,然后在验证集上看看效果。
在这里插入图片描述

三、二维ROI向三维点云的映射

得到了局部的ROI,下一步就是将他向三维点云空间中映射了。这是原理图。
在这里插入图片描述
一般相机就是RGB相机获取二维图,红外相机获取深度,其实就是标定一下这两者之间的关系,得到一个变换矩阵。但是这些也不用我们自己做了,一般集成好的点云相机都是能直接读出这个变换矩阵的。realsense,Kinect都是可以的。在网上也很容易搜到教程。
映射完了之后,咱们就能得到很多局部点云数据了。以下是YOLO检测结果和映射完后的结果。
在这里插入图片描述
在这里插入图片描述

四、从局部点云数据中估计目标位姿

用之前单目标位姿估计的方式估计零件的位姿,图中显示了(a)(b)©(d)(f)的结果,看起来效果还是可以的。但是有一个(e)估计失败了,应该是遮挡太多了的缘故,再调调参数说不定也可以检测出来。
在这里插入图片描述

### 无序分拣抓取规划技术的应用 在现代工业环境中,基于三维机器视觉的自动化无序分拣系统能够显著提升工作效率并减少人为错误。这类系统通过实时感知环境变化来调整机械臂的动作路径,确保即使面对复杂多变的工作场景也能顺利完成任务[^1]。 对于工业机器人而言,其核心优势在于可以精准地完成物品识别、定以及抓取动作。借助先进的图像处理技术和传感器融合方案,这些设备能够在毫秒级时间内做出反应,有效规避潜在风险因素如碰撞或夹持失败等情形发生。此外,随着人工智能算法的进步,特别是深度学习模型的发展,使得机器人具备更强的学习能力去适应不同类型的物件形状和姿态分布特点[^3]。 具体到实现层面,则涉及到多个关键技术环节: #### 数据采集与预处理阶段 采用高精度摄像头或其他形式的空间测量仪器(例如激光雷达),收集待分类对象表面形态学特征信息,并将其转换成计算机易于解析的形式——即所谓的“点云”。这一过程往往依赖开源软件包Point Cloud Library (PCL),该工具集提供了丰富的函数接口用于执行诸如滤波降噪、坐标变换等一系列必要的前期准备工作[^4]。 ```cpp // 使用 PCL 库读入点云文件 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); if(pcl::io::loadPCDFile<pcl::PointXYZ>("test_pcd.pcd", *cloud) == -1){ std::cout << "Error loading point cloud file." << std::endl; } ``` #### 物体检测与姿估计部分 在此基础上进一步开展目标分割操作,区分出单个实体轮廓边界;随后运用特定几何描述符或者神经网络架构来进行类别归属判断及六自由度空间置参数求解。此步骤决定了后续能否准确选取合适的接触面作为拾起起点。 #### 抓手控制策略制定方面 最后一步便是依据所得结论设计合理的末端效应器运动指令序列,考虑到实际物理约束条件(比如最大伸展范围限制)、力学特性等因素综合考量最优解法。同时还要兼顾效率最大化原则,在保障安全性的前提下尽可能缩短周期时间以满足高效生产的诉求[^2]。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值