一、文章简介
文章介绍的是halcon 3D点云处理的入门级别的学习,计算螺丝与桌面之间的高度差,来判断螺丝是否拧紧(点云数据如图一所示):
判断高度差的原理如下:
1、提取螺丝上表面的点云数据(提取结果如图二所示):
2、提取背景点云数据(提取结果如图三所示):
3、获取上表面和下表面点云数据在Z轴上的均值(均值结果如图四所示):
4、两个的点云高度均值相减得到螺丝距离背景的距离(高度差结果如图五所示):
5、如果距离在+0.01mm之间则螺丝为拧紧状态(处理结果如图六所示):
二、代码流程如下所示
** 打开一个窗口
dev_open_window (0, 0, 400, 400, 'black', WindowHandle)
** 读取螺丝点云
read_object_model_3d ('bolt', 'm', [], [], ObjectModel3D, Status)
** 显示点云
* GenParamName :=['lut','color_attrib','disp_pose']
* GenParamValue :=['color2','coord_z','true']
* visualize_object_model_3d(WindowHandle, ObjectModel3D, [], [], GenParamName, GenParamValue, [], [], [], PoseOut1)
get_object_model_3d_params (ObjectModel3D, 'point_coord_z', zValues)
Zmin :=min(zValues)
Zmax :=max(zValues)
** 根据Z轴值分布特征提取对应点云数据
select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 0.614, 0.617, ObjectModel3DThresholded1)
select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 0.610, 0.614, ObjectModel3DThresholded2)
get_object_model_3d_params (ObjectModel3DThresholded1, 'point_coord_z', zValues1)
get_object_model_3d_params (ObjectModel3DThresholded2, 'point_coord_z', zValues2)
** 求取所有点云的均值高度
A := mean(zValues1)
B := mean(zValues2)
** 计算上表面和背景的高度差
tuple_abs(B -A, height)
GenParamName :=['color_0','color_1','disp_pose']
GenParamValue :=['red','green','true']
visualize_object_model_3d (WindowHandle, [ObjectModel3DThresholded1,ObjectModel3DThresholded2], [], [], GenParamName, GenParamValue, [], [], '高度差为'+height+'mm', PoseOut)
附录:
程序点云图网盘链接自取:
链接:https://pan.baidu.com/s/1YBCXzy61MVOZob3PxhkcaA
提取码:wzlb