首页 热门资讯文章正文

从点云中剔除非关键区域以提升抓取识别准确率

热门资讯 2025年08月15日 16:32 1 admin

导言

在工业自动化生产中,机械臂对零部件的抓取常面临零件对称性强、外形特征单一等挑战。此类零件往往仅局部具有显著特征,而大部分区域特征不明显。在三维点云匹配过程中,尽管整体几何误差较小,但因关键特征区域未被有效识别,可能导致误匹配。

为解决该问题,本文提出一种基于特征区域提取的优化策略:通过剔除非关键区域(如大面积平面)的数据,保留并强化特征显著部位,从而提高匹配的准确性与鲁棒性。本方案基于TechLego SDK实现,并通过实验验证其有效性。

实施步骤

1.目标零件分析与模板构建/TECHLEGO-来高科技

针对需检测的零件,首先识别其关键特征区域(如凸台、孔位、边缘等),构建仅包含显著特征的模板模型,剔除底面等大面积、低辨识度的结构。

从点云中剔除非关键区域以提升抓取识别准确率

从点云中剔除非关键区域以提升抓取识别准确率

进行检测的零件和零件剔除不关键部位后的模板

2.点云数据预处理/TECHLEGO-来高科技

获取待检测零件的三维扫描点云数据,并将其转换至统一的大地坐标系。随后,对点云中的底面等非特征区域进行滤除,保留关键结构信息。

从点云中剔除非关键区域以提升抓取识别准确率

从点云中剔除非关键区域以提升抓取识别准确率

3.特征对齐匹配/TECHLEGO-来高科技

调用TechLego SDK提供的feature_align函数,基于提取的关键特征区域进行点云配准,计算最优匹配位姿。

从点云中剔除非关键区域以提升抓取识别准确率

从点云中剔除非关键区域以提升抓取识别准确率

匹配结果评估

实验表明,采用特征提取策略后,正确匹配与错误匹配的误差值差异显著。经多次测试,正确匹配的误差值均低于0.25mm,而错误匹配的误差值均高于0.5mm,具备良好的区分度。

实验数据统计

5次正确匹配与5次错误匹配实验进行对比多次实验中其中5组数据结果如下

从点云中剔除非关键区域以提升抓取识别准确率

数据表明,特征提取后,匹配误差在正确与错误情况下呈现明显分界,有利于后续算法进行准确判断。

结语

工业生产中,零件形态多样,特征复杂度差异显著。无论是特征过于简单还是过于复杂,均可能影响三维识别的准确性。通过针对性地提取关键特征区域,并结合TechLego SDK的高精度匹配能力,可显著提升识别结果的可靠性。该方法使正确与错误匹配在误差指标上形成明显区分,为后续决策算法提供有力支持,从而有效提高机械臂抓取的整体成功率。

源代码

#include"pch.h"

///进行一次扫描,转换为大地坐标系,并作为参考数据

if(!m_client->scan_to_reference())//把基于大地坐标系的扫描数据放到参考窗口

return;

//删除底面

//delete_plane(m_gun_PlaneInfo);

bin::vector<techlego::pos6f>plane_points1;

bin::vector_h<techlego::h_point_info>pt_clouds1;

m_client->get_scan_data_by_index(pt_clouds1,0);

for(int i=0;i<pt_clouds1.m_size;i++)

{

bin::vector<double>pt;

techlego::pos6f pos6f;

pt_clouds1[i].get_point_info(pt);

pos6f.m_x=pt[0];

pos6f.m_y=pt[1];

pos6f.m_z=pt[2];

pos6f.m_nx=pt[3];

pos6f.m_ny=pt[4];

pos6f.m_nz=pt[5];

plane_points1.emplace_back(pos6f);

}

//把当前点作为平面上的点,点的法相作为平面的法向,删除点云(删除底面)

plane.filter_points_by_plane(plane_points1,-500,filter_height);

m_client->load_feature_align_data_from_memory(plane_points1,true);

//定义机器手移动位姿

techlego::pose_3d res;

techlego::pose_3d res1;

double error;

bin::vector<int>inde;

///调用feature_align

if(!m_client->feature_align(res,error,inde))//将移动数据移动到与参考数据重合,并得到移动位姿

{

if(filter_height==filter_height_max)

{

BCGPMessageBox(m_hWnd,L"未识别到目标!\n开始识别下一层",L"提示",MB_OK|MB_ICONHAND|MB_ICONASTERISK);

filter_height=3;

continue;

}

if(filter_height==filter_height_min)

{

BCGPMessageBox(m_hWnd,L"未识别到目标!停止扫描",L"提示",MB_OK|MB_ICONHAND|MB_ICONASTERISK);

break;

}

}


发表评论

泰日号Copyright Your WebSite.Some Rights Reserved. 网站地图 备案号:川ICP备66666666号 Z-BlogPHP强力驱动