[3D&Halcon] 三维点云匹配&无序抓取

  • 📢博客主页:https://loewen.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉
  • 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨


一. 3D无序抓取原理

通过3D成像系统(激光三角、结构光+单/双目等),对物体表面轮廓进行扫描,形成点云数据。选择其中一个物体的点云数据作为模板,去对其他物体的点云数据进行「三维点云匹配」,获取各个物体的姿态信息(x、y、z、Rx、Ry、Rz+1个旋转类型)。

根据物体所在的世界坐标系和机械手坐标系之间的「3D手眼标定」关系,将各个「物体坐标系下的姿态转换成机械手坐标系下的姿态」,从未完成机械手对物体的抓取。当然,抓取时还需要考虑避障、路径规划等。

针对上面无序抓取涉及到的三个核心点,本文主要讲解Halcon三维点云匹配:

⑴基于表面的三维点云匹配:参考案例 — `分类 — 方法 — 三维匹配(基于表面)`

在这里插入图片描述

⑵基于形状的三维点云匹配:参考案例 — `分类 — 方法 — 三维匹配(基于形状)`

在这里插入图片描述


二. 点云匹配核心算子

1、create_surface_model ( : : ObjectModel3D, RelSamplingDistance, GenParamName, GenParamValue : SurfaceModelID) — 创建3D点云模型
参数
ObjectModel3D(in)要读取的文件的文件名。
RelSamplingDistance(in)代表采样距离在点云最小外界球体直径的比例。
GenParamName(in)参数名称。
GenParamValue (in)参数名称对应的值。
SurfaceModelID(out)3D点云模板的句柄。

重点解释一下第二个参数RelSamplingDistance

曲面模型是通过以一定距离对三维对象点云模型进行采样来创建的,采样距离即为点云模型最小外界球体的直径D与比例参数RelSamplingDistance乘积,即D*RelSamplingDistance

例如,如果RelSamplingDistance设置为0.05,而ObjectModel3D的直径为“10 cm”,则从对象曲面采样的点之间的距离将约为“5 mm”。

参数RelSamplingDistance越小,则创建点云模板所参与的坐标点越多,匹配精度提高但匹配速度会下降,反之亦然。采样点用于运算符find_surface_model中的近似匹配,可以使用值“sampled_model”使用操作符get_surface_model_param获得采样点。通过参数选取采样点的时候,应避免对象模型中的异常点,因为它们会破坏直径。

在这里插入图片描述


三. 点云匹配具体流程

3.1、读取硬币点云模型数据

如图所示:

在这里插入图片描述

read_object_model_3d ('C:/Users/Administrator/Desktop/2020-01-22-71816.om3', 'mm', [], [], ObjectModel3D, Status)
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['lut','color_attrib'], ['color1','coord_z'], [], [], [], PoseOut)
3.2、创建硬币点云模板

如图所示:

在这里插入图片描述

* 提取出硬币的点云数据(类似二维的Blob分析)
get_object_model_3d_params (ObjectModel3D, 'point_coord_z', GenParamValue)
select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 12, 14, ObjectModel3DThresholded)
connection_object_model_3d (ObjectModel3DThresholded, 'distance_3d', 1.5, ObjectModel3DConnected)
select_object_model_3d (ObjectModel3DConnected, 'num_points', 'and', 30000, 45000, ObjectModel3DSelected)
* 对硬币的点云数据进行三角曲面重建
triangulate_object_model_3d (ObjectModel3DSelected, 'greedy', [],[], TriangulatedObjectModel3D, Information)
visualize_object_model_3d (WindowHandle, TriangulatedObjectModel3D, [], [], ['lut','color_attrib'], ['color1','coord_z'], [], [], [], PoseOut)
* 创建硬币点云数据模板,SFM句柄
create_surface_model (TriangulatedObjectModel3D, 0.03, [], [], SFM)
3.3、对硬币点云数据进行三维匹配并显示

如图所示:

在这里插入图片描述

* 对整个场景三角曲面重建(因为是对经过三角曲面重建的硬币点云数据创建的模板)
triangulate_object_model_3d (ObjectModel3D, 'greedy', [],[], TriangulatedObjectModel3D1, Information)
* 三维点云匹配,获取当前匹配对象的Pose
find_surface_model (SFM, TriangulatedObjectModel3D1, 0.03, 0.5, 0.9, 'true', 'num_matches', 6, Pose, Score, SurfaceMatchingResultID)
* 获取场景信息和关键点
get_surface_matching_result (SurfaceMatchingResultID, 'sampled_scene', [], SampledScene)
get_surface_matching_result (SurfaceMatchingResultID, 'key_points', [], KeyPoints)
visualize_object_model_3d (WindowHandle, [ObjectModel3D,SampledScene,KeyPoints], [], [], ['color_' + [0,1,2],'point_size_' + [0,1,2]], ['gray','cyan','yellow',1.0,3.0,5.0], [], [], [], PoseOut)
ObjectModel3DResult:=[]
* 有可能会匹配到多个点云数据,所以遍历依次显示(本文只有一个)
for Index2 := 0 to |Score| - 1 by 1
    if (Score[Index2] < 0.11)
        continue
    endif
    CPose := Pose[Index2 * 7:Index2 * 7 + 6]
    * 当前被找到物体的点云数据 = 原始点云模板 * 匹配得到的当前物体姿态
    rigid_trans_object_model_3d (TriangulatedObjectModel3D, CPose, ObjectModel3DRigidTrans)
    ObjectModel3DResult := [ObjectModel3DResult,ObjectModel3DRigidTrans]
endfor
visualize_object_model_3d (WindowHandle, [ObjectModel3D,ObjectModel3DResult], [], [], ['color_' + [0,1],'point_size_0'], ['gray','red',1.0], [], [], [], PoseOut)

下雨天,最惬意的事莫过于躺在床上静静听雨,雨中入眠,连梦里也长出青苔。
  • 6
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Halcon 3D点云匹配是一种基于三维点云数据的图像处理技术。 Halcon是一款广泛应用于工业视觉领域的软件平台,可以进行三维点云匹配,用于实现三维物体的定位、检测和测量等任务。 在三维点云匹配中,首先需要获取待匹配的目标物体的三维点云数据。这些点云数据可以通过激光扫描仪、立体相机等设备采集得到。然后,通过Halcon提供的算法和工具,对这些点云数据进行预处理,如滤波、去噪等,以提高匹配的准确度。 接下来,需要提供一个参考物体的三维模型,这个模型可以是由CAD软件创建的模型文件,也可以通过Halcon的三维重建功能从物体的多张图像中生成。然后,通过Halcon的点云匹配工具,将目标物体的点云数据与参考物体的三维模型进行匹配Halcon的点云匹配算法主要基于特征点匹配和ICP(最近点迭代)算法。通过比较目标物体的点云数据和参考物体的模型,找到二者之间的对应关系。然后,通过ICP算法迭代调整目标物体的位置和姿态,使得点云数据和模型之间的差异最小化,从而实现点云匹配。 最后,根据匹配结果,可以获得目标物体在三维空间中的位置和姿态信息。这些信息可以被用来进行目标物体的定位、姿态检测、尺寸测量等工业自动化应用。 总之,Halcon 3D点云匹配是一种基于三维点云数据的图像处理技术,通过比较目标物体的点云数据和参考物体的三维模型,利用特征点匹配和ICP算法来实现目标物体的定位和识别。 ### 回答2: Halcon是一种计算机视觉软件库,它提供了丰富的功能用于图像处理和分析。Halcon也支持3D点云匹配,可以用于对物体进行三维空间中的定位和识别。 3D点云匹配是通过将输入的3D点云数据与已知的模型进行比较和匹配来实现的。首先,需要通过3D传感器或其他3D扫描设备获取物体的3D点云数据。然后,利用Halcon提供的工具,可以对这些点云数据进行预处理和分析,例如去除噪声、滤波和分割。 接下来,需要准备一个已知的3D模型,这个模型可以是通过CAD软件设计的,或者通过其他方式获取的。这个模型会被作为参考对象,用于与输入的点云数据进行比较和匹配。 在进行匹配之前,需要将点云数据和模型都进行一定程度的坐标系统转换和标定,以确保它们在同一个坐标系统下。 接下来,可以使用Halcon中的3D匹配工具,如shape-based matching和surface-based matching等,对点云数据和模型进行匹配匹配过程主要是计算两者之间的相似性,找出最佳的匹配变换参数,将模型与点云对齐。 最后,根据匹配结果可以进行进一步分析和应用,例如进行3D物体的位姿测量和姿态估计、3D物体的检测和识别等。 总之,Halcon提供了强大的功能和工具,可以实现3D点云匹配,并且可以广泛应用于机器人导航、自动化生产、品质控制等领域。 ### 回答3: Halcon是一种用于机器视觉的软件库,提供了丰富的功能和工具,用于多种图像处理和分析任务。其中包括对3D点云的匹配功能。 3D点云匹配可以用于将一个点云与一个或多个目标点云进行比较和匹配。它可用于各种应用,例如目标检测、物体测量、工件识别和3D重建。 在Halcon中,3D点云匹配功能的实现过程可以分为以下几个步骤: 1. 数据准备:首先,需要获取并准备目标点云和待匹配点云的数据。可以使用3D传感器或其他3D扫描设备来获取点云数据,并将其导入到Halcon中进行后续处理。 2. 点云预处理:对点云数据进行必要的预处理,以去除噪声、滤波、平滑等操作,以提高匹配的准确性和效果。 3. 特征提取:在目标点云和待匹配点云中提取特征点或特征描述子。这些特征可以是点的位置、曲率、法向量等。通过提取有意义的特征,可以减少匹配的计算量和提高匹配的鲁棒性。 4. 匹配算法:选择适当的匹配算法,根据提取的特征点或特征描述子进行匹配Halcon中提供了多种匹配算法,如ICP(迭代最近点算法)、模型匹配、局部特征匹配等。 5. 匹配结果分析:根据匹配算法的结果,可以得到点云之间的匹配变换矩阵或匹配点对应关系。可以进行进一步的分析和应用,如姿态估计、对象识别等。 总的来说,Halcon提供了强大的3D点云匹配功能,可以帮助用户实现多种基于点云的机器视觉应用。通过合理的数据准备、预处理、特征提取和匹配算法选择,可以实现准确、快速的点云匹配,并在各种应用中获得良好的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丶布布

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值