Skip to content

端子高度测量

工程背景

测量背景

为了确保产品端子的质量和安全性,并优化其性能,制造商需要严格控制生产过程中的每一个环节,包括端子的尺寸精度。端子的高度3D检测旨在通过3D高度检测工具,实现对产品端子高度物理尺寸的精确测量。

测量项

端子高度

解决方案

AI-Vision采用裁切工具,将端子部分裁切出来,在端子位置创建ROI阵列,使用高度工具一键测量。

设计思路

本地图片

执行效果展示

本地图片

项目流程

一、初始化

本地图片

  1. 使用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
  1. 选择加载点云,获取点云

  2. 选择3D裁切工具,裁切掉多余噪点。

二、预处理

位置调整

本地图片

  1. 使用3D方形探针工具,分别找到点云左边直线和点云上边直线。

本地图片

  1. 使用3D几何交点工具,根据上一步检测到的直线,计算两直线交点。

    本地图片

  2. 使用3D位置调整工具,调整定位到到两直线交点位置

本地图片

平面拟合

本地图片

  1. 使用创建roi工具,选择基准区域

    本地图片

  2. 使用3D平面拟合工具,根据上个工具选择的区域,拟合平面并将其设置为零平面。

    本地图片

裁切出端子区域

使用3D点云裁切工具,设置z范围裁切出端子区域

本地图片

端子高度测量

本地图片

通过循环阵列roi的方式来实现循环测量所有端子高度。每次循环测量两列相邻的端子高度,端子高度的测量方式:用端子测量高度-基准区域测量高度。

  1. 使用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)
  1. 使用标记工具,标记循环开始。

  2. 使用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)
  1. 使用创建ROI阵列工具,根据上一步输出的box作为手动模式输入区域,根据计算行数列数及行间隔列间隔阵列一列box。

    本地图片

  2. 使用3D高度工具,计算上一步使用创建ROI阵列工具阵列的一列box种所有box内区域的高度。

    本地图片

  3. 使用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. 使用变量设置工具,将循环变量加1

    本地图片

  2. 使用条件分支工具,实现当循环大于等于15时不执行条件分支,工程运行结束,循环小于15时跳转到loop标记继续执行下一次循环计算下两列端子的高度。

    本地图片

  3. 使用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
  1. 使用跳转工具,跳转到循环开始标记

    本地图片

AI-Vision,让3D测量更简单