本文档介绍如何使用 RVS 软件完成模板匹配案例,该案例展示了从数据准备、模板点云生成、目标点云处理到模板匹配和结果验证的完整流程。

模板匹配前准备

数据准备

获取离线数据

RVS开发者社区提供 3D 模板匹配离线工程和数据,帮助用户快速上手、验证功能并节省时间。点击 model_matching.zip 下载,解压后包含以下内容:

image-20241208201521977.png

文件说明

文件 说明
RVSCommonGroup 该文件夹包含常用的 Group 组,可以根据需要加载。
new_model.pcd 该文件为制作完成的模板点云文件。
match_model.rvs 用于离线模板匹配,使用时需要更新 ReadDirectoryNames 算子中离线数据的路径和 LoadModelCloud 算子中的模板点云文件。
使用时先点击交互面板中 start 按钮启动工程后,再点击 iterate 按钮迭代 test_data 中的离线数据。
test_data 该文件夹存有目标点云文件,用于模板匹配数据的加载,使用时请注意路径正确。
workpiece.obj 用于create_model.xml中 Load-Polydata 算子加载的 3D 模型文件。

本案例所有使用到的文件均保存在 model_matching 下,请放在 RVS 安装目录下运行即可。

备注

若在 linux 版本,请将 model_matching 文件夹放在RVS 安装目录下的 projects 内运行。
如不想调整工程项目中的文件路径。可以将 model_matching 重命名为 runtime 。

modemacthing_dir2

本文档所使用RVS软件版本为1.8.321,若在使用中出现问题或版本不兼容问题,请及时与我们反馈,发送邮件 rvs-support@percipio.xyz !

自定义数据

如要使用自定义数据进行模板匹配,需要准备以下数据文件。

准备文件 说明
3D模型文件 用于生成模板点云。
RVS支持的模型文件格式有:.ply .stl .obj .gltf *.glb。如果当前拥有的模型文件格式不符,需要提前完成转换。
目标点云文件 用于匹配结果验证,数据包括点云图和彩色图。

模板点云生成与处理

本章节主要介绍如何使用制作点云模板工具生成和处理 3D 模型的模板点云,包括以下步骤:

  1. 网格采样:根据给定的 3D 模型创建点云。

  2. 处理模板点云:

网格采样

加载 3D 模型文件,使用制作点云模板网格采样将其转化为点云。

操作步骤

  1. 点击菜单栏中的create_cloud_model_resized打开制作点云模板界面,然后点击mesh_resized图标进入网格采样的设置界面。

    image-20241208200829373

  2. 点击image-20241018105534205图标加载 3D 模型文件。使用离线数据时,可直接加载 workpiece.obj 文件。

    image-20241018100054041

  3. 点击image-20241018110232700打开参数表格面板,进行参数调整:

    • leaf_size → 1

    • sample_points → 30000

    image-20241018102421729

    小技巧

    参数表格面板中具体参数介绍见:网格采样界面

  4. 点击mesh_resized图标完成网格采样。

    image-20241018103609813

切割模板点云

根据模板匹配的作业要求,切割点云,只保留模型点云的上表面作为工作区域。

操作步骤

  1. 点击 image-20241018123822680 进入点云修改界面。

    image-20241018110645205

  2. 将立方体包围住所需的点云。鼠标点击立方体以显示旋转轴,通过拖拽进行旋转和移动至指定区域,也可以在左侧填写参数来移动和旋转立方体。

    image-20241018124319021

  3. 点击crop_resized图标进行裁剪。裁剪完成后在视图中显示结果。

    image-20241018124640350

调整并保存点云

为符合 Match3D 模板匹配算子的要求,将模板点云的 Oxy 平面与实际来料物体点云平行,并将模板点云中心置于RVS 3D世界坐标系的原点。

备注

由于实际来料物体点云位于机器人坐标系下,而机器人坐标系与 RVS 中的 3D 世界坐标系重合。因此,将模板点云进行空间变换,使得其姿态的 Oxy 平面平行于 RVS 3D 世界坐标系的 Oxy 平面,且点云中心在 RVS 的 3D 世界坐标系的原点,即可满足 Match3D 算子的输入要求。

操作步骤

  1. 点击image-20241018125558809 将模板点云中心移动至 RVS 的 3D 世界坐标系的原点。

    image-20241018130858139

  2. 将点云 RY 值填写 180,将模板点云绕着 Y 轴旋转180°,使得模板点云 Oxy 平面与实际来料物体点云的 Oxy 平面平行。

    image-20241018130342877

  3. 点击image-20241018131405556 导出制作好的模板点云,输入文件名称,点击保存

    image-20241018131314509

  4. 在 runtime 目录下查看保存的 “new_model.pcd” 文件。

    image-20241018132205887

点云稀疏化处理

加载 new_model.pcd 模板点云文件,并对其进行进一步稀疏化处理,以提高算子执行效率。

操作步骤

备注

可直接使用 model_matching/ 路径下的 match_model.rvs 进行模板匹配。也可按照以下步骤自行连接。

  1. 新建工程项目match_model.rvs。(可直接导入 model_matching/RVSCommonGroup 目录下的 LoadModelCloud.group,注意文件路径)

  2. 在算子图中创建一个新的 Group 。添加 Trigger、Load、Emit、DownSampling 算子。

    小技巧

    创建 Group 和添加算子方法详见:Group使用指南算子使用指南

  3. 设置算子参数。

    • 设置 Group 参数:算子名称 → LoadModelCloud

    • 设置 Trigger 算子参数:类型 → 初始化触发器

      备注

      用于自动触发 LoadModelCloud 算子和 Emit 算子。

    • 设置 Load 算子参数:

      • 算子名称 → LoadModelCloud

      • 类型 → 点云

      • 文件 → new_model.pcd ( 已保存的 new_model.pcd 的文件路径,注意文件路径 )

      • 点云 → icon_visOn可视 → icon_color 90

    • 设置 Emit 算子参数:

      • 类型 → 坐标

      • 坐标 → 0 0 0 0 0 0

      • 坐标 → icon_visOn可视

      备注

      生成基于 RVS 3D 世界坐标原点 Pose(0,0,0,0,0,0)。

    • 设置 DownSampling 算子参数:

      • 算子名称 → DownSampling_model

      • 类型 → 网络降采样

      • X方向采样 → 2

      • Y方向采样 → 2

      • Z方向采样 → 2

      备注

      表示在 2mm * 2mm * 2mm 的空间尺度内仅取一个点。

  4. 连接算子。

    image-20240826165012092

  5. 点击 RVS 运行按钮。

运行结果

如下图所示,在 3D 视图中显示加载的模板点云和生成的原点 pose,此时的原点 pose 也是点云的中心点。

result_3.1.1

目标点云准备与处理

目标点云准备

加载目标点云文件。test_date 文件夹中有多组离线数据,因此使用 Foreach-String 算子进行遍历加载目标点云文件。

操作步骤

  1. 添加 Trigger(2个)。

    • 设置 Trigger 算子参数:

      • 算子名称 → start

      • 触发器 → light点亮曝光属性

    • 设置 Trigger_0 算子参数:

      • 算子名称 → iterate

      • 触发器 → light点亮曝光属性

  2. 在算子图中创建一个新的 Group 。(可以直接导入 model_matching/RVSCommonGroup 目录下的 LoadTargetCloud.group,注意文件路径

  3. 添加 DirectoryOperation、Foreach、Emit(2个)、Load(2个)算子。

    • 设置 Group 参数:算子名称 → LoadTargetCloud

    • 设置 DirectoryOperation 算子参数:

      • 类型 → 读取目录列表

      • 父目录 → 选择目标点云文件路径(如果您是直接加载已有的match_model.xml,注意文件路径

      备注

      这步操作用于加载目标点云数据文件夹。

    • 设置 Foreach 算子参数:类型 → 字符串

    • 设置 Emit 算子参数:

      • 算子名称 → image_name

      • 类型 → 字符串

      • 字符串 → /rgb.png (彩色图名称)

    • 设置 Load 算子参数:

      • 算子名称 → LoadImage

      • 类型 → 图像

      • 字符串 → icon_visOn可视

    • 设置 Emit_0 算子参数:

      • 算子名称 → cloud_name

      • 类型 → 字符串

      • 字符串 → /cloud.pcd(点云图名称)

    • 设置 Load_0 算子参数:

      • 算子名称 → LoadPointCloud

      • 类型 → 点云

      • 点云 → icon_visOn可视

  4. 在交互面板中添加 2 个输入工具——“按钮”控件,鼠标双击重新命名→ start 和 iterate 。鼠标中键点击按钮,选择同名的曝光属性绑定。

    pannel_3.2.1

    小技巧

    添加控件和绑定曝光属性的方法详见:交互面板

  5. 连接算子。

    image-20240826170112568

  6. 点击 RVS 运行按钮。点击面板上的start按钮时,触发后续算子。当点击面板上 iterate 按钮时,遍历 test_data 文件夹中的离线数据。

运行结果

如下所示,在 2D 视图中显示当前遍历的图像,在 3D 视图中显示当前遍历的点云。

result_3.2.1

result_3.2.2

裁剪目标点云

加载目标点云数据后,剔除背景点云,筛选出工作区域。

操作步骤

  1. 添加 Emit 、CloudSegment 算子至算子图。

  2. 设置算子参数。

    • 设置 Emit 算子参数:

      • 算子名称 → EmitCube

      • 类型 → 立方体

      • 坐标→ -1260 -856 621 -180 -178 173

      • 宽度 → 0.5

      • 高度 → 0.5

      • 深度 → 0.2

      • 立方体 → icon_visOn 可视

    • 设置 CloudSegment 算子参数:

      • 类型 → 立方体切割

      • 点云 → icon_visOn 可视 → icon_color 90

      备注

      CloudSegment 算子用于根据给定的立方体切割出所需要的点云。

  3. 连接算子 。

    image-20240826165920951

  4. 点击 RVS 运行按钮。点击面板上 start 按钮。

运行结果

如下图所示,下图为裁剪框前后的点云。左图为切割前点云,中间图为生成的立方体,右图为切割后点云(绿色部分)。
resullt_3.3.1

模板匹配

完成上述步骤后,模型点云和场景点云均已准备就绪。接下来,使用 Match3D 算子获取最优变换结果坐标,并根据该姿态(pose)对模板点云进行空间变换,使其与目标点云精确重合。

操作步骤:

  1. 添加 Match3D 、Transform 算子至算子图。

  2. 连接算子。

    image-20240826142123146

  3. 右击 Match3D 算子,打开匹配3D面板

    • downsampling → 勾选

    • downsampling_leaf → 2

    • initial_guess_step → 4

      image-20240826143518865

  4. 点击匹配3D面板加载点云,加载场景点云。

    image-20240826143606469

  5. 点击匹配3D面板预处理,将场景点云进行降采样处理,提高算子执行效率。

    image-20240826144130785

  6. 勾选匹配3D面板显示初值猜测坐标

    确保点云模型的 Oxy 平面与场景点云的 Oxy 平面平行。然而,可能存在坐标轴转换的情况,例如模型点云的 X(Y)轴可能转化为目标点云的 Y(X)轴。

    为了应对上述坐标轴转换问题,以场景点云的最小包围框中心点为基准,沿其 Z 轴依次旋转 90 度,总共生成 4 个不同的姿态(pose)。这 4 个姿态将作为初始推测值,确保其中至少有一个接近真实值。

    image-20240826144310067

  7. 勾选匹配3D面板显示结果,显示匹配结果。

    image-20240826153922190

  8. 当匹配结果符合要求时,点击保存面板参数值设置。

    image-20240826154040976

  9. 设置 Transform 算子参数:

    • 类型 → 点云

    • 点云 →icon_visOn 可视 →icon_color180

  10. 点击 RVS 运行按钮,点击面板上的start按钮,匹配开始。点击面板上 iterate 按钮时,迭代离线数据中的目标点云进行模板匹配。

模板匹配结果

如下图所示,在3D视图中最终显示:

  • 原始色彩点云:表示目标点云,即实际场景中的点云数据。

  • 红色点云:表示匹配前的模板点云位置和姿态。

  • 蓝色点云:表示匹配后经过空间变换的模板点云,已与目标点云对齐。

result_3.5.1

通过上述可视化结果,可以清晰地评估模板匹配算法的性能和准确性。

至此您已经完成了本文档的所有内容,感谢您的耐心查阅,相信您一定对于 RVS 软件已有所了解,可以自主创造属于您的独特项目,若在使用中出现问题,请及时与我们反馈,发送邮件rvs-support@percipio.xyz!