陈泽瑜,李向国,曹登锋,朱灯林
河海大学 机电工程学院,江苏 常州 213022
无序抓取是机器人领域中的一个重要的研究方向,该技术通过相机采集场景信息,检测目标物体,并计算物体的位置、姿态等信息,再将信息传输给机械臂,机械臂根据得到的信息进行抓取,构成一个完整的闭环控制系统[1-2]。对于抓取任务来说,能够在场景中正确检测和识别目标是实现抓取的前提条件。在无序抓取中,通常还需要对一些堆叠的工件进行检测与计算,得到最适合抓取目标物体个数以及每个目标的位姿,然后引导机械臂进行抓取[3-4]。
抓取的前提是识别和检测。在以往的研究中,常用的目标检测方法包括阈值分割[5]、模板匹配以及基于深度学习[6]的方法。基于阈值分割的目标检测方法将图像的前景和背景分割开,通过分析前景中物体的特征来进行检测,但是这种方法检测效果不稳定,一般较少使用。基于模板匹配的目标检测方法包括基于二维图像的匹配以及基于三维点云的匹配。其中基于二维图像的匹配包括基于灰度的模板匹配、基于形状的模板匹配[7-8]以及基于特征点的模板匹配[9-10]。由于图像的特征点具有旋转以及尺度不变性,一般常使用特征点来进行检测。常用的特征点匹配算法包括尺度不变特征变换(scale invariant feature transform,SIFT)[11]、加速稳健特征(speeded up robust features,SURF)[12]以及旋转不变特征检测(oriented FAST and rotated BRIEF,ORB)算法[13]。近年来,基于深度学习的目标检测方式成为该领域的研究热点,其不仅具有较高的检测速度,并且能够达到较高的准确率[14]。但是该方式需要庞大的数据集进行训练,数据集的获取以及昂贵的标注成本限制了其应用,并且该方式不适用于抓取目标经常变换的场景。
针对目标检测,许多研究者对传统的模板匹配检测方式进行了改进。惠记庄等人[15]在机械臂的抓取应用中,将SURF和BRISK算法结合对图像进行特征提取并匹配,然后使用MSAC算法进行二次匹配消除误匹配点计算仿射变换参数,从而实现场景中的目标检测。该方法在忽略特殊几何畸变的条件下,对复杂环境具有很强的适应能力。但是该算法最终得到的匹配点数量较少,不适用于对弱纹理目标的检测。Li 等人[16]通过提取场景图片和模板图片的ORB 特征点,引入基于网格运动静力学(grid-based motion statics,GMS)的运动平滑度对匹配点进行评估以去除错误匹配,然后将图像划分为多个单元图像,根据每个单元中特征点的数量计算网格中心权重,进而计算检测目标的中心,生成检测框。该算法具有较高的检测速度和精度,但是当从不同的角度拍摄图片时,会出现检测框发生偏移的情况,不适合应用在无序抓取中。Wei等人[17]使用基于轮廓的模板匹配来进行目标识别,首先提取模板图像和待检测图像轮廓,并使用对于平移、旋转、缩放和变形具有鲁棒性的MTCD描述子对轮廓进行描述,通过计算描述符之间的差异来识别目标。该算法为了消除图像中的冗余信息,使用超像素分割结合启发式搜索的方式进行匹配,并且图像描述符的计算复杂,检测速度较慢。陶杰等人[18]通过深度相机采集目标的点云信息,并使用点对特征法(point-pair-feature,PPF)描述模型点云和目标点云的特征,最后使用投票方案返回场景中与模型最佳匹配的目标。该方法使用深度相机进行点云采集,相较于普通相机成本较高,并且在检测出的结果中未定义抓取优先级,无法保证机械臂每次都进行最优抓取。Zhao等人[19]在机械臂的无序抓取应用中使用一种名为MSG_SHOT的描述符对模型点云和场景点云进行描述,并根据描述符对点云进行匹配,大大提高了系统在有杂波干扰和遮挡场景目标识别精度,并将应用场景从3D 点云扩展到2.5D 深度信息,但是该算法使用的是局部特征描述子,计算复杂度高,实时性较差。
在无序抓取过程中,相机视野内可能存在多个相同的目标,为了尽可能多且准确地检测出可抓取目标,提出一种基于密度峰值聚类(density peaks clustering,DPC)的多目标检测算法,该算法可以同时检测出相机视野内的多个相同目标,并按照设定的规则进行优先级排序,从而提高无序抓取的成功率。并且该算法仅使用普通相机即可实现,与深度相机的点云匹配方法以及基于深度学习的多目标检测算法相比,该算法的实现成本较低,适用性好,有利于部署到无序抓取应用中。
常用的特征点检测方法有SIFT、SURF 以及ORB。其中SIFT 算法是经典的特征点检测算法之一,相较于SURF 以及ORB,其检测精度较高,具有较好的旋转及尺度不变性。为了保证目标检测的准确率,使用基于SIFT特征点的模板匹配方式进行检测。
分别提取模板图像和待检测图像中的SIFT特征点进行匹配。然而,当待检测图像中存在多个相同的目标物体时,图像中往往会出现大量相同的特征点。如果直接进行匹配,就会有很多相同的特征点与模板图像的同一个特征点匹配成功,这会使模板不确定与哪一个目标进行匹配,从而导致检测失败。这是由于传统的模板匹配方法是将待检测图像中的特征点看作是一个集合,用模板图像中的特征点和该集合中的特征点进行匹配,所以每次只能检测出一个目标。采用聚类算法能够将待检测图像的特征点分为属于不同目标的特征点集合,将模板图像中的特征点与不同目标的特征点集合分别进行匹配,从而实现一次检测多个目标。
在现有的多目标检测算法中,常使用K-means算法对目标特征进行聚类[20],但是该算法需要预先输入聚类中心个数,并且聚类结果严重依赖于初始聚类中心的选取。而聚类中心的个数在实际的应用场景中很难事先确定。为了提高无序抓取系统的自动化程度,提出使用DPC算法对特征点进行聚类,该算法可以在不预先确定聚类中心数量的情况下根据图像中的特征点分布自动完成聚类。DPC 算法基于两个基本假设:(1)聚类中心(密度峰值点)的局部密度大于围绕它的其他点的密度;(2)不同聚类中心的距离相对较远。
首先使用SIFT 算法提取待检测图像的特征点,并存储在集合表示该集合中特征点的索引值,采用dij=dist{(xi,yi),(xj,yj)} 表示两个特征点之间的欧氏距离。然后,对于集合S中的任何一个特征点,计算其局部密度ρi和相对距离δi两个指标,其中:
式中,ρi为第i个特征点的局部密度,dij为第i个和第j个特征点之间的距离,dc为截断距离。
由上式可知,γi越大,点(xi,yi)为聚类中心的可能性越大。得到特征点集中每个点的γ值后,对γ进行排序,选择γ较大的点作为聚类中心。计算特征点集中每个数据点与所有聚类中心点之间的距离,并将其划分到距离该点最近且密度比该点密度大的聚类中心完成聚类,最终将特征点划分为属于不同聚类中心地特征点子集mi。目标不同放置情况下的特征点聚类结果如图1所示,图像中不同颜色的点分别代表属于不同聚类中心的特征点。
图1 目标特征点聚类分析Fig.1 Target feature point clustering analysis
待检测图像的特征点经过DPC 算法聚类之后,得到聚类结果M(m1,m2,…,mi,…,mn),其中mi={(xi1,yi1),(xi2,yi2),…,(xij,yij)}表示属于第i个聚类中心的特征点集合。将属于不同聚类中心的特征点分别与模板图像中的特征点进行匹配,得到每个目标的匹配点对集合,匹配点对中不可避免地会出现错误,需要进行提纯。
在所有特征点提纯算法中,RANSAC 算法实现起来相对简单,并且该算法对于噪声以及异常值具有鲁棒性,适用于无序抓取中场景存在噪点的情况。此外,OpenCV还对该算法进行了优化,使运算速度进一步提高。因此,使用RANSAC算法去除误匹配点。
根据去除误匹配后的匹配点计算模板图像和待检测图像中目标的单应矩阵,将模板图像映射到待检测图像上,实现目标检测。转换关系如公式(6)所示:
式中,(x′,y′)表示模板图像中的特征点,(x,y)表示待检测图像中的特征点,s为尺度参数,H为单应矩阵。
RANSAC 算法计算目标单应矩阵的流程如图2 所示。首先从聚类结果M(m1,m2,…,mi,…,mn)中选取某个目标的点集mk,再从该点集中抽取子集,计算初始单应矩阵。然后根据初始单应矩阵计算其余点的实际坐标和计算坐标之间的差值,统计每次迭代的内点数量并与当前最大内点数量Nmax进行比较,判断是否需要更新Nmax。最后,将内点数量最多的单应矩阵作为该目标正确的单应矩阵。
图2 RANSAC算法流程图Fig.2 RANSAC algorithm flow chart
经过迭代计算的单应矩阵中,有一部分是根据较少的匹配点得到的。而从理论上说,如果要实现一个目标的正确检测,需要有足够多匹配点为支撑。当一个目标的匹配点数量较少的时候,该目标为错误检测结果的概率较大。因此,设置一个最少匹配点数量Th作为阈值,只有当目标与模板的正确匹配点个数大于此阈值的时候,才能认为该目标是一个正确的检测结果;反之,认为该目标检测错误,并将其舍弃。为了能够适应不同的场景,提出一种自适应阈值选取方式。经研究发现,在不同的场景中,目标的匹配点数量小于场景中最多匹配点数量的50%时,该目标较大概率为错误检测结果。因此,将阈值Th设为最多匹配点数量的50%。该方法实现简单,能够以极低的代价去除错误检测结果。
上述步骤的检测结果中包括一些被遮挡的目标,为了实现抓取,还需要找到可抓取目标。首先,将上述检测到的目标按照内点数量进行降序排列,其中内点数量最多的目标一定是可抓取目标。设置阈值λ,将内点数量与最多匹配点数量的差小于阈值λ的目标当作可抓取目标,放入可抓取目标集合O中,其余目标进行舍弃。然后,在可抓取目标集合O中,根据每个目标的质心到图像中心的距离进行抓取优先级排序。
为了使机械臂能够准确地抓取物体,还需要使用ad-census立体匹配算法[21]计算场景视差图,根据双目成像原理计算可抓取目标上某些特征点的三维坐标。然后,将世界坐标系下的三维坐标与图像坐标系下的二维坐标进行一一对应,使用投影寻踪算法(perspective-npoint algorithm,PNP)计算目标物体在世界坐标系下的位姿。将计算的目标物体的三维信息传输给机械臂,机械臂根据目标的位置、姿态以及优先级进行抓取。图3展示了完整的面向无序抓取的多目标检测流程。
图3 DPC多目标检测流程Fig.3 DPC multi-target detection process
实验使用的硬件平台为Intel Core i5-7300HQ,CPU 主频为2.5 GHz,内存容量为8 GB,操作系统为Windows 10 x64。使用C++语言结合OpenCV视觉库,在Visio Studio 2019 中进行开发。实验中的参数设置如表1所示。
表1 实验参数表Table 1 Experimental parameters table
首先在Visio studio 2019 中使用C++语言调用OpenCV视觉库,直接调用OpenCV中SIFT算法,提取模板图像和待检测图像的特征点,并生成SIFT 特征描述子进行存储。模板和待检测图像的特征点如图4所示。
图4 模板图像和待检测图像的SIFT特征点Fig.4 SIFT feature points of template image and image to be detected
然后使用DPC算法对待检测图像中的特征点进行聚类,得到的聚类中心如图5 所示,其中不同颜色的点代表不同的聚类中心,每个聚类中心的坐标以及属于每个聚类中心的特征点个数如表2所示。
表2 聚类中心坐标及特征点个数Table 2 Clustering center coordinates and number of feature points
图5 DPC聚类得到的聚类中心Fig.5 Clustering centers obtained by DPC clustering
从图5 和表2 中可以看出,在待检测图像中有6 个目标的情况下,DPC算法得到的6个聚类中心中有两个(蓝、灰)位于同一目标上,这会导致最终的检测结果出现错误。原因在于待检测图像中特征点之间相互连接,分布不均匀,在聚类过程中较为稀疏的特征点区域中的密度峰值点可能会被误认为是噪声点,从而导致聚类错误。并且在待检测图像中不仅包括目标物体的特征点,还不可避免地存在一些背景特征点以及噪声点,这些除目标特征点之外的干扰点也会对聚类结果产生影响。因此,仅仅依靠DPC 聚类无法正确检测图像中的多个目标物体,还需要对聚类结果进行筛选,以确保多目标检测的准确性和稳定性。
将聚类之后的特征点集分别与模板图像进行匹配,并使用RANSAC 算法去除误匹配点,计算每个目标的单应矩阵,并将模板图像的四个边缘点映射到待检测图像上,生成检测框。图6展示了RANSAC算法处理的结果,每个聚类目标的内点数量如表3所示。
表3 每个目标匹配点数量Table 3 Number of matching points per target
图6 RANSAC处理前后的匹配点Fig.6 Matching points before and after RANSAC processing
为了去除由于匹配点数量少导致的错误检测结果,设置最少匹配点数量阈值Th对检测结果进行过滤。在图5的场景下,所有的检测结果中目标所具有的最多匹配点数量为65,将最多匹配点数量的50%即32设置为阈值,匹配点数量小于该阈值的目标被舍弃。由表3 可知,经过阈值筛选之后,图像中能够正确检测出5 个目标,检测结果如图7 所示。图7 中红色边框标记的为检测出的目标物体。证明了所提多目标检测算法的有效性。
图7 筛选前后检测结果比较Fig.7 Comparison of test results before and after screening
而在实际的无序抓取应用中,不需要一次将场景中的所有目标都检测出来,只需要保证不出现检测错误即可。因此,实际应用场景中的阈值选取可以适当偏大。
从图7可以看出,使用DPC聚类多目标检测算法能够正确检测出场景中的目标物体。但是实际上,算法的检测结果不仅与阈值的选取有关,还与截断距离以及聚类中心个数有关。为了确定不同聚类中心个数对目标检测结果的影响,选用不同的截断距离进行多目标检测实验。图8 显示了使用不同截断距离所获得的聚类中心个数以及最终的检测结果。实验发现,随着截断距离的增大或减小,聚类中心的数量总体上也是随之减少和增多的。经分析发现,截断距离增大,相当于每个特征点的搜索邻域增大,会将更大范围的特征点聚类在一起,因此聚类中心的数量减少,而最终能够检测到的目标数量也会减少;反之,截断距离减小,聚类中心的数量增多,能够检测到的目标数量也增多。但是当截断距离小于一定范围,聚类中心个数超过一定数值之后,图像中的特征点总数不变,属于每个聚类中心的特征点数量变少,在与模板图像进行匹配时得到的正确匹配点数量也变少,达不到正确检测所需要的最小匹配点数量,因此会出现较多的错误检测结果,如图8(f)所示。所以,在实际的应用场景中,截断距离的选取既不能过大,也不能过小。
图8 不同聚类中心个数的检测结果Fig.8 Detection results of number of different clustering centers
在如图4的场景中,选取截断距离dc=37 结合最少匹配点数量阈值能够将目标全部正确地检测出来。但是在实际的无序抓取应用中,不需要一次将视场中的目标全部检测出来,所以对截断距离的选取不需要十分严格。在实际应用中可以通过实验选取不同的截断距离,从而得到不同的聚类中心个数,选择检测效果较好的作为最终的截断距离。
为了验证使用SIFT算法的必要性,设置对比实验,将使用SURF、ORB算法的检测结果和使用SIFT算法的检测结果进行比较,两种算法的检测结果如图9所示。
与使用SIFT特征点的算法相比,使用SURF特征点的多目标检测算法能够检测出场景中的多个目标物体。然而,该算法的个别目标检测结果会出现较大的偏差,如图9(a)所示。相比之下,使用ORB特征点进行多目标检测则无法正确检测出目标物体,如图9(b)所示。分析结果表明,这是由于SURF算法在特征点检测和描述符生成过程中采用了一些优化算法以降低计算复杂度,从而导致描述符的精确度降低,进而在匹配过程中出现错误,影响检测的准确性。而ORB 算法提取出的特征点数量相对于SIFT 算法较少,且这些特征点聚集在“纯牛奶”三个字附近,容易在聚类过程中出现错误。此外,ORB 特征点采用二进制描述子并使用一些近似的方式计算描述符方向,降低了描述符的精度及图像对旋转和尺度变化的鲁棒性,从而导致特征点匹配的过程中出现了大量的错误匹配。即使经过RANSAC算法筛选,这些误匹配也无法完全消除,因此无法正确检测出目标。
为了使机械臂能够进行正确的抓取,需要在检测结果中找到可抓取目标。在所有检测的结果中,匹配点数量最多的目标一定是没有被遮挡的可抓取目标,其抓取优先级相对较高。当图像中存在多个可抓取目标的时候,通过计算目标匹配点数量与最多匹配点数量的差值来进行判断。根据实验发现,如果目标的匹配点数量与最多匹配数量相差超过10%,则该目标较大概率为被遮挡目标。因此,在如图10的实验场景下,设置阈值λ为7。当差值小于阈值则认为目标未被遮挡,为可抓取目标,并放入可抓取目标集合,最终将可抓取目标信息传输给机械臂进行抓取。可抓取目标的筛选结果如图10所示,其中绿色边框为识别的可抓取目标。
图10 目标中的可抓取目标Fig.10 Capturable targets in target
对于如图10(a)所示堆叠目标图像,最终如图10(a)中绿框所示检测到一个可抓取目标。对于如图10(b)所示平铺目标,选取截断距离以及筛选阈值,最终可以检测到3个可抓取目标。为了便于抓取,根据每个目标形心坐标到图像中心的距离进行抓取优先级排序,排序结果列于表4。
表4 图10(b)中目标优先级排序Table 4 Target prioritization in Figure 10(b)
检测出可抓取目标之后,使用ad-census 立体匹配算法计算场景的视差图,并根据标定得到的相机内外参数重建牛奶盒左上、右上、左下、右下四个特征角点的三维坐标。根据目标检测结果将角点在图像上的二维坐标和三维坐标进行一一对应,最后使用PNP算法计算目标的位姿,用齐次变换矩阵表示。结果列于表5。
表5 图10(b)中可抓取目标位姿Table 5 Graspable target pose in Figure 10(b)
计算出位姿信息之后,将每个目标的位姿信息发送给机械臂。机械臂根据目标的抓取优先级、位姿信息进行抓取。
在无序抓取应用中,目标检测的准确性是实现成功抓取的前提。然而,当图像中存在多个相同目标时,容易导致目标检测失败。为了尽可能多地从场景中正确检测出目标,提出使用DPC聚类算法进行多目标检测。首先提取模板图像和待检测图像的SIFT 特征点,使用DPC算法对特征点进行聚类,将聚类后的特征点分别与模板图像中的特征点进行匹配,并使用RANSAC 算法去除误匹配点。然后,根据每个目标匹配点的数量来筛选正确的检测目标,并根据目标匹配点数量与最多匹配点数量的差值来筛选图像中的可抓取目标。基于每个目标的形心坐标到图像中心的距离来设置可抓取目标的优先级。最后使用立体匹配算法得到场景视差图,计算目标特征点的三维坐标,并根据三维坐标和二维坐标的对应关系使用PNP 算法计算目标的位姿信息。实验表明,基于DPC 聚类的特征点模板匹配方式能够检测出图像中的多个目标,包括图像中的被遮挡目标,并且能够根据阈值筛选出多个目标中的可抓取目标。此外使用立体匹配算法结合PNP 算法能够准确地计算出目标的位姿信息。将目标的优先级、位姿等信息传输给机械臂,可以实现工件的无序抓取。