摘要:在工业自动化生产中,机械臂对零部件的抓取常面临零件对称性强、外形特征单一等挑战。此类零件往往仅局部具有显著特征,而大部分区域特征不明显。在三维点云匹配过程中,尽管整体几何误差较小,但因关键特征区域未被有效识别,可能导致误匹配。
导言
在工业自动化生产中,机械臂对零部件的抓取常面临零件对称性强、外形特征单一等挑战。此类零件往往仅局部具有显著特征,而大部分区域特征不明显。在三维点云匹配过程中,尽管整体几何误差较小,但因关键特征区域未被有效识别,可能导致误匹配。
为解决该问题,本文提出一种基于特征区域提取的优化策略:通过剔除非关键区域(如大面积平面)的数据,保留并强化特征显著部位,从而提高匹配的准确性与鲁棒性。本方案基于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::vectorbin::vector_hpt_clouds1;m_client->get_scan_data_by_index(pt_clouds1,0);
for(int i=0;i
{
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;
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;
}
}
来源:小向科技园地