本文档介绍如何使用 RVS 软件完成模板匹配案例,该案例展示了从数据准备、模板点云生成、目标点云处理到模板匹配和结果验证的完整流程。
模板匹配前准备
数据准备
获取离线数据
RVS开发者社区提供 3D 模板匹配离线工程和数据,帮助用户快速上手、验证功能并节省时间。点击 model_matching.zip 下载,解压后包含以下内容:
文件说明
文件 | 说明 |
---|---|
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 。
本文档所使用RVS软件版本为1.8.321,若在使用中出现问题或版本不兼容问题,请及时与我们反馈,发送邮件 rvs-support@percipio.xyz !
自定义数据
如要使用自定义数据进行模板匹配,需要准备以下数据文件。
准备文件 | 说明 |
---|---|
3D模型文件 | 用于生成模板点云。 RVS支持的模型文件格式有:.ply .stl .obj .gltf *.glb。如果当前拥有的模型文件格式不符,需要提前完成转换。 |
目标点云文件 | 用于匹配结果验证,数据包括点云图和彩色图。 |
模板点云生成与处理
本章节主要介绍如何使用制作点云模板
工具生成和处理 3D 模型的模板点云,包括以下步骤:
网格采样
加载 3D 模型文件,使用制作点云模板
中网格采样
将其转化为点云。
操作步骤
点击菜单栏中的
打开
制作点云模板
界面,然后点击图标进入网格采样的设置界面。
点击
图标加载 3D 模型文件。使用离线数据时,可直接加载 workpiece.obj 文件。
点击
打开
参数表格面板
,进行参数调整:leaf_size → 1
sample_points → 30000
小技巧
参数表格面板中具体参数介绍见:网格采样界面
点击
图标完成网格采样。
切割模板点云
根据模板匹配的作业要求,切割点云,只保留模型点云的上表面作为工作区域。
操作步骤
点击
进入点云修改界面。
将立方体包围住所需的点云。鼠标点击立方体以显示旋转轴,通过拖拽进行旋转和移动至指定区域,也可以在左侧填写参数来移动和旋转立方体。
点击
图标进行裁剪。裁剪完成后在视图中显示结果。
调整并保存点云
为符合 Match3D 模板匹配算子的要求,将模板点云的 Oxy 平面与实际来料物体点云平行,并将模板点云中心置于RVS 3D世界坐标系的原点。
备注
由于实际来料物体点云位于机器人坐标系下,而机器人坐标系与 RVS 中的 3D 世界坐标系重合。因此,将模板点云进行空间变换,使得其姿态的 Oxy 平面平行于 RVS 3D 世界坐标系的 Oxy 平面,且点云中心在 RVS 的 3D 世界坐标系的原点,即可满足 Match3D 算子的输入要求。
操作步骤
点击
将模板点云中心移动至 RVS 的 3D 世界坐标系的原点。
将点云 RY 值填写
180
,将模板点云绕着 Y 轴旋转180°,使得模板点云 Oxy 平面与实际来料物体点云的 Oxy 平面平行。点击
导出制作好的模板点云,输入文件名称,点击
保存
。在 runtime 目录下查看保存的 “new_model.pcd” 文件。
点云稀疏化处理
加载 new_model.pcd 模板点云文件,并对其进行进一步稀疏化处理,以提高算子执行效率。
操作步骤
备注
可直接使用 model_matching/ 路径下的 match_model.rvs 进行模板匹配。也可按照以下步骤自行连接。
新建工程项目match_model.rvs。(可直接导入 model_matching/RVSCommonGroup 目录下的 LoadModelCloud.group,注意文件路径)
在算子图中创建一个新的 Group 。添加 Trigger、Load、Emit、DownSampling 算子。
设置算子参数。
设置 Group 参数:算子名称 → LoadModelCloud
设置 Trigger 算子参数:类型 → 初始化触发器
备注
用于自动触发 LoadModelCloud 算子和 Emit 算子。
设置 Load 算子参数:
算子名称 → LoadModelCloud
类型 → 点云
文件 → new_model.pcd ( 已保存的 new_model.pcd 的文件路径,注意文件路径 )
点云 →
可视 →
90
设置 Emit 算子参数:
类型 → 坐标
坐标 → 0 0 0 0 0 0
坐标 →
可视
备注
生成基于 RVS 3D 世界坐标原点 Pose(0,0,0,0,0,0)。
设置 DownSampling 算子参数:
算子名称 → DownSampling_model
类型 → 网络降采样
X方向采样 → 2
Y方向采样 → 2
Z方向采样 → 2
备注
表示在 2mm * 2mm * 2mm 的空间尺度内仅取一个点。
连接算子。
点击 RVS 运行按钮。
运行结果
如下图所示,在 3D 视图中显示加载的模板点云和生成的原点 pose,此时的原点 pose 也是点云的中心点。
目标点云准备与处理
目标点云准备
加载目标点云文件。test_date 文件夹中有多组离线数据,因此使用 Foreach-String 算子进行遍历加载目标点云文件。
操作步骤
添加 Trigger(2个)。
设置 Trigger 算子参数:
算子名称 → start
触发器 →
点亮曝光属性
设置 Trigger_0 算子参数:
算子名称 → iterate
触发器 →
点亮曝光属性
在算子图中创建一个新的 Group 。(可以直接导入 model_matching/RVSCommonGroup 目录下的 LoadTargetCloud.group,注意文件路径)
添加 DirectoryOperation、Foreach、Emit(2个)、Load(2个)算子。
设置 Group 参数:算子名称 → LoadTargetCloud
设置 DirectoryOperation 算子参数:
类型 → 读取目录列表
父目录 → 选择目标点云文件路径(如果您是直接加载已有的match_model.xml,注意文件路径)
备注
这步操作用于加载目标点云数据文件夹。
设置 Foreach 算子参数:类型 → 字符串
设置 Emit 算子参数:
算子名称 → image_name
类型 → 字符串
字符串 → /rgb.png (彩色图名称)
设置 Load 算子参数:
算子名称 → LoadImage
类型 → 图像
字符串 →
可视
设置 Emit_0 算子参数:
算子名称 → cloud_name
类型 → 字符串
字符串 → /cloud.pcd(点云图名称)
设置 Load_0 算子参数:
算子名称 → LoadPointCloud
类型 → 点云
点云 →
可视
在交互面板中添加 2 个输入工具——“按钮”控件,鼠标双击重新命名→ start 和 iterate 。鼠标中键点击按钮,选择同名的曝光属性绑定。
小技巧
添加控件和绑定曝光属性的方法详见:交互面板。
连接算子。
点击 RVS 运行按钮。点击面板上的
start
按钮时,触发后续算子。当点击面板上iterate
按钮时,遍历 test_data 文件夹中的离线数据。
运行结果
如下所示,在 2D 视图中显示当前遍历的图像,在 3D 视图中显示当前遍历的点云。
裁剪目标点云
加载目标点云数据后,剔除背景点云,筛选出工作区域。
操作步骤
添加 Emit 、CloudSegment 算子至算子图。
设置算子参数。
设置 Emit 算子参数:
算子名称 → EmitCube
类型 → 立方体
坐标→ -1260 -856 621 -180 -178 173
宽度 → 0.5
高度 → 0.5
深度 → 0.2
立方体 →
可视
设置 CloudSegment 算子参数:
类型 → 立方体切割
点云 →
可视 →
90
备注
CloudSegment 算子用于根据给定的立方体切割出所需要的点云。
连接算子 。
点击 RVS 运行按钮。点击面板上
start
按钮。
运行结果
如下图所示,下图为裁剪框前后的点云。左图为切割前点云,中间图为生成的立方体,右图为切割后点云(绿色部分)。
模板匹配
完成上述步骤后,模型点云和场景点云均已准备就绪。接下来,使用 Match3D 算子获取最优变换结果坐标,并根据该姿态(pose)对模板点云进行空间变换,使其与目标点云精确重合。
操作步骤:
添加 Match3D 、Transform 算子至算子图。
连接算子。
右击 Match3D 算子,打开
匹配3D面板
:downsampling → 勾选
downsampling_leaf → 2
initial_guess_step → 4
点击
匹配3D面板
中加载点云
,加载场景点云。点击
匹配3D面板
中预处理
,将场景点云进行降采样处理,提高算子执行效率。勾选
匹配3D面板
中显示初值猜测坐标
。确保点云模型的 Oxy 平面与场景点云的 Oxy 平面平行。然而,可能存在坐标轴转换的情况,例如模型点云的 X(Y)轴可能转化为目标点云的 Y(X)轴。
为了应对上述坐标轴转换问题,以场景点云的最小包围框中心点为基准,沿其 Z 轴依次旋转 90 度,总共生成 4 个不同的姿态(pose)。这 4 个姿态将作为初始推测值,确保其中至少有一个接近真实值。
勾选
匹配3D面板
中显示结果
,显示匹配结果。当匹配结果符合要求时,点击
√
保存面板参数值设置。设置 Transform 算子参数:
类型 → 点云
点云 →
可视 →
180
点击 RVS 运行按钮,点击面板上的
start
按钮,匹配开始。点击面板上iterate
按钮时,迭代离线数据中的目标点云进行模板匹配。
模板匹配结果
如下图所示,在3D视图中最终显示:
原始色彩点云:表示目标点云,即实际场景中的点云数据。
红色点云:表示匹配前的模板点云位置和姿态。
蓝色点云:表示匹配后经过空间变换的模板点云,已与目标点云对齐。
通过上述可视化结果,可以清晰地评估模板匹配算法的性能和准确性。
至此您已经完成了本文档的所有内容,感谢您的耐心查阅,相信您一定对于 RVS 软件已有所了解,可以自主创造属于您的独特项目,若在使用中出现问题,请及时与我们反馈,发送邮件rvs-support@percipio.xyz!