Skip to content

Pin针高度测量

工程背景

测量背景

鉴于PIN针在PCB板中的关键作用及其对精度的严格要求,传统检测方法存在精度不足、效率低等问题。随着智能制造和3D视觉技术的发展,自动化检测成为趋势,旨在提高检测精度与效率,确保产品质量,满足大规模生产需求。

本地图片

相机选型

盛相科技 S162170

测量项

Pin针高度

检测要求

测量精度 ≤ 0.03mm

测量重复性 ≤ 0.05mm

测量周期 ≤ 2000ms

解决方案

AI-Vision采用区域划分的方法,将三块测量区域分割出来,通过Blob找到每块区域的Pin针,使用多高度测量集成工具一键输出高度。

设计思路

本地图片

执行效果展示

  • 工程结果展示

    • 区域1测量结果

    本地图片

    • 区域2测量结果

    本地图片

    • 区域3测量结果

    本地图片

项目流程

一、初始化

[00] 使用Lua脚本工具,生成保存数据的csv文件。

lua

-- 生成保存检测数据的csv文件
-- 生成用于拼接的字符串
write = ""
-- 判断是否存在该文件,若不存在,生成该文件
if FileSize("./Height1.csv") <= 0 then
  write = write .. "Time,"
  for i= 1,22,1 do
      write = write .. "Height" .. i ..","
  end
  -- "\n"表示换行
  write = write .. "\n"
end
-- 将时间拼接入字符串中
write = write .. os.date("%Y_%m_%d %H:%M:%S") .. ","
-- 将字符串写入文件中
fprint("./Height1.csv", write)


-- 生成保存检测数据的csv文件

write = ""

if FileSize("./Height2.csv") <= 0 then
  write = write .. "Time,"
  for i= 1,8,1 do
      write = write .. "Height" .. i ..","
  end
  write = write .. "\n"
end

write = write .. os.date("%Y_%m_%d %H:%M:%S") .. ","
fprint("./Height2.csv", write)


-- 生成保存检测数据的csv文件

write = ""

if FileSize("./Height3.csv") <= 0 then
  write = write .. "Time,"
  for i= 1,8,1 do
      write = write .. "Height" .. i ..","
  end
  write = write .. "\n"
end

write = write .. os.date("%Y_%m_%d %H:%M:%S") .. ","
fprint("./Height3.csv", write)

[01] 使用加载点云工具,加载需要处理的点云图。

本地图片

二、初定位

[02-03] 使用3D方形探针工具,输出工件的两条边。

本地图片

[04] 使用3D几何交点工具,输出两直线交点。

[05] 使用3D位置调整工具,根据输出的直线交点调整点云位置。

三、拟合平面

[06] 使用3D区域工具,选择拟合平面的区域。

本地图片

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

本地图片

四、裁切待测区域1

[08] 使用3D裁切工具,裁切出待测Pin针至IM2。

本地图片

[09] 使用3D斑点工具,输出每个焊点的位置信息。

本地图片

[10] 使用Lua脚本工具,推送待测Pin针位置信息到寄存器中。

lua

for i = 21,0,-1 do
    x,y,z = GetPoint(21)
    sx = x-0.3
    sy = y-0.3
    sz = z-0.3
    ex = x+0.3
    ey = y+0.3
    ez = z+0.3
    PushBox(sx,sy,sz,ex,ey,ez)
    DrawBox(2,sx,sy,sz,ex,ey,ez)
end

[11] 使用多高度工具,测量Pin针高度。

本地图片

[12] 使用Lua脚本工具,保存数据。

lua

-- 获取已测量高度值
Height = GetVariable("Height1")
-- 生成用于拼接的字符串
write  = ""
-- 循环拼接高度入字符串中
for i=1,22,1 do
    write = write .. string.format("%.3f,",Height[i])
end
-- "\n"表示换行
write= write .. "\n"
-- 将字符串写入文件中
fprint("./Height1.csv",write)

五、裁切待测区域2

[13] 使用3D裁切工具,裁切出待测Pin针至IM3。

本地图片

[14] 使用3D斑点工具,输出每个焊点的位置信息。

本地图片

[15] 使用Lua脚本工具,推送待测Pin针位置信息到寄存器中。

lua

for i = 7,0,-1 do
    x,y,z = GetPoint(7)
    sx = x-0.3
    sy = y-0.3
    sz = z-0.3
    ex = x+0.3
    ey = y+0.3
    ez = z+0.3
    PushBox(sx,sy,sz,ex,ey,ez)
    DrawBox(3,sx,sy,sz,ex,ey,ez)
end

[16] 使用多高度工具,测量Pin针高度。

本地图片

[17] 使用Lua脚本工具,保存数据。

lua

-- 获取已测量高度值
Height = GetVariable("Height2")
-- 生成用于拼接的字符串
write  = ""
-- 循环拼接高度入字符串中
for i=1,8,1 do
    write = write .. string.format("%.3f,",Height[i])
end
-- "\n"表示换行
write= write .. "\n"
-- 将字符串写入文件中
fprint("./Height2.csv",write)

六、裁切待测区域3

[18] 使用3D裁切工具,裁切出待测Pin针至IM4。

本地图片

[19] 使用3D斑点工具,输出每个焊点的位置信息。

本地图片

[20] 使用Lua脚本工具,推送待测Pin针位置信息到寄存器中。

lua

for i = 7,0,-1 do
    x,y,z = GetPoint(7)
    sx = x-0.3
    sy = y-0.3
    sz = z-0.3
    ex = x+0.3
    ey = y+0.3
    ez = z+0.3
    PushBox(sx,sy,sz,ex,ey,ez)
    DrawBox(4,sx,sy,sz,ex,ey,ez)
end

[21] 使用多高度工具,测量Pin针高度。

本地图片

[22] 使用Lua脚本工具,保存数据。

lua

-- 获取已测量高度值
Height = GetVariable("Height3")
-- 生成用于拼接的字符串
write  = ""
-- 循环拼接高度入字符串中
for i=1,8,1 do
    write = write .. string.format("%.3f,",Height[i])
end
-- "\n"表示换行
write= write .. "\n"
-- 将字符串写入文件中
fprint("./Height3.csv",write)

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