Appearance
端子高度测量
工程背景
测量背景
为了确保产品端子的质量和安全性,并优化其性能,制造商需要严格控制生产过程中的每一个环节,包括端子的尺寸精度。端子的高度3D检测旨在通过3D高度检测工具,实现对产品端子高度物理尺寸的精确测量。
测量项
端子高度
解决方案
AI-Vision采用裁切工具,将端子部分裁切出来,在端子位置创建ROI阵列,使用高度工具一键测量。
设计思路
执行效果展示
项目流程
一、初始化
- 使用
Lua脚本
工具,初始化需要保存的csv文件的表头。
lua
csvHead = ""
for i=1,18,1 do
--将"Name"修改为"您需要的列名"
csvHead = csvHead .. "Pin" .. i .. ","
end
csvHead = csvHead .. "\n"
--创建文件,脚本第一次运行时,没有就创建
--将"./Save.csv"修改为"您想要保存的文件名.csv"
if FileExists("./Save.csv") == false then
PrintToFile("./Save.csv", csvHead)
end
选择
加载点云
,获取点云选择
3D裁切
工具,裁切掉多余噪点。
二、预处理
位置调整
- 使用
3D方形探针
工具,分别找到点云左边直线和点云上边直线。
使用
3D几何交点
工具,根据上一步检测到的直线,计算两直线交点。使用
3D位置调整
工具,调整定位到到两直线交点位置
平面拟合
使用
创建roi
工具,选择基准区域使用
3D平面拟合
工具,根据上个工具选择的区域,拟合平面并将其设置为零平面。
裁切出端子区域
使用3D点云裁切
工具,设置z范围裁切出端子区域
端子高度测量
通过循环阵列roi的方式来实现循环测量所有端子高度。每次循环测量两列相邻的端子高度,端子高度的测量方式:用端子测量高度-基准区域测量高度。
- 使用
Lua脚本
工具,初始化循环开始值及初始box; 给出循环开始值1及相邻两个端子列的第一行box位置信息。
lua
SetIntVariable("loop", 1)
SetFloatArrayVariable("h_dif", {})
SetFloatVariable("box_sx", 0.635)
SetFloatVariable("box_sy", -4.844)
SetFloatVariable("box_sz", -0.362)
SetFloatVariable("box_ex", 0.881)
SetFloatVariable("box_ey", -4.690)
SetFloatVariable("box_ez", 0.354)
SetFloatVariable("box_d_sx", 1.200)
SetFloatVariable("box_d_sy", -5.173)
SetFloatVariable("box_d_sz", -0.204)
SetFloatVariable("box_d_ex", 1.284)
SetFloatVariable("box_d_ey", -5.029)
SetFloatVariable("box_d_ez", 0.400)
使用
标记
工具,标记循环开始。使用
Lua脚本
工具,根据上一个lua脚本输出的box位置信息输出相邻两个端子列的第一行box及两个端子参考计算高度的基准位置box。
lua
SetBox("box", box_sx, box_sy, box_sz, box_ex, box_ey, box_ez)
SetBox("box2", box_sx + 0.4, box_sy, box_sz, box_ex + 0.4, box_ey, box_ez)
SetBox("box_d", box_d_sx, box_d_sy, box_d_sz, box_d_ex, box_d_ey, box_d_ez)
使用
创建ROI阵列
工具,根据上一步输出的box作为手动模式输入区域,根据计算行数列数及行间隔列间隔阵列一列box。使用
3D高度
工具,计算上一步使用创建ROI阵列
工具阵列的一列box种所有box内区域的高度。使用
lua脚本
工具,绑定相邻两列端子的高度数据及参考计算高度的基准位置高度数据,计算端子高度并存入csv文件。
lua
save_h = ""
for i=1, #input1, 1 do
save_h = save_h .. (input0[i] - input1[i]) .. ","
end
save_h = save_h .. "\n"
for i=1, #input1, 1 do
save_h = save_h .. (input2[i] - input1[i]) .. ","
end
save_h = save_h .. "\n"
if FileExists("./Save.csv") == true then
PrintToFile("./Save.csv", save_h)
end
使用
变量设置
工具,将循环变量加1使用
条件分支
工具,实现当循环大于等于15时不执行条件分支,工程运行结束,循环小于15时跳转到loop标记继续执行下一次循环计算下两列端子的高度。使用
lua脚本
工具,设置下一次循环两列端子的第一行box位置值 前7组端子和后7组端子
lua
if loop ~= 8 then
SetFloatVariable("box_sx", box_sx + 1)
SetFloatVariable("box_ex", box_ex + 1)
SetFloatVariable("box_d_sx", box_d_sx + 1)
SetFloatVariable("box_d_ex", box_d_ex + 1)
else
SetFloatVariable("box_sx", box_sx + 3)
SetFloatVariable("box_ex", box_ex + 3)
SetFloatVariable("box_d_sx", box_d_sx + 3)
SetFloatVariable("box_d_ex", box_d_ex + 3)
end
使用
跳转
工具,跳转到循环开始标记