Skip to content

闸片支撑板圆孔位置度

工程背景

测量背景

闸片支撑板尺寸检测确保产品质量与安全,遵循行业标准,保障互换性与可靠性。通过精准测量,预防制造偏差,提升市 场竞争力。严格检测助力优化设计,确保每一部件均达到最佳性能标准,为制动系统安全保驾护航。

本地图片

相机选型

LMI激光线扫相机 Gocator2350

测量项

1.闸片支撑板的长度

2.大圆孔到边的距离

3.大圆孔到下方两孔连线的距离

检测要求

静态重复精度 ≤ 0.003mm

动态重复精度 ≤ 0.01mm

解决方案

AI-Vision采用3D孔工具,输出每个孔的圆心坐标,然后进行距离计算。操作简单,零代码,部署快。

设计思路

本地图片

执行效果展示

  • 工程结果展示

    • 长度结果

    本地图片

    • 圆孔长度方向位置结果

    本地图片

    • 圆孔宽度方向位置结果

    本地图片

项目流程

一、初始化

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

lua
-- 生成保存检测数据的csv文件
-- 生成用于拼接的字符串
write = ""
-- 判断文件是否存在,若不存在,则生成该文件
if FileSize("./DistanceX.csv") <= 0 then
    write = write .. "Time,"
    for i = 1,8,1 do
       write = write .. "x" .. i .. ","
    end
    -- "\n"表示换行
    write = write .. "\n"
end

write = write .. os.date("%Y_%m_%d %H:%M:%S") .. ","
-- 将字符串写入文件中
fprint("./DistanceX.csv", write)

-- 生成保存检测数据的csv文件
-- 生成用于拼接的字符串
write = ""
-- 判断文件是否存在,若不存在,则生成该文件
if FileSize("./DistanceY.csv") <= 0 then
    write = write .. "Time,"
    for i = 1,8,1 do
       write = write .. "y" .. i .. ","
    end
    -- "\n"表示换行
    write = write .. "\n"
end

write = write .. os.date("%Y_%m_%d %H:%M:%S") .. ","
-- 将字符串写入文件中
fprint("./DistanceY.csv", write)

-- 生成保存检测数据的csv文件
-- 生成用于拼接的字符串
write = ""
-- 判断文件是否存在,若不存在,则生成该文件
if FileSize("./DistanceAll.csv") <= 0 then
    write = write .. "Time,"
    write = write .. "Distance" .. ","
    -- "\n"表示换行
    write = write .. "\n"
end

write = write .. os.date("%Y_%m_%d %H:%M:%S") .. ","
-- 将字符串写入文件中
fprint("./DistanceAll.csv", write)

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

本地图片

二、初定位

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

本地图片

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

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

三、拟合平面

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

本地图片

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

本地图片

四、整体长度测量

[09-10] 使用3D方形探针工具,输出左侧直线与右侧顶点。

本地图片

[11] 使用3D距离工具,输出右侧顶点到左侧直线的距离。

本地图片

[12] 使用Lua脚本工具,将数据保存到csv文件中,同时将结果显示在IM1上。

本地图片

lua

-- 拼接数据
write = string.format("%.3f,",GetMeasure(0)) .. "\n"
-- 将字符串写入文件中
fprint("./DistanceAll.csv",write)
-- 数据显示
DrawOverlay(1,-97,-35,1,24,'green',"总长度为:" .. string.format("%.3f",GetMeasure(0)) .. "mm")

五、长度方向位置信息

[13] 使用3D裁切工具,将IM1中的点云复制到IM2中,方便后续处理。

[14] 使用3D孔工具,输出大圆孔的圆心位置信息。

本地图片

本地图片

[15] 使用3D距离工具,计算圆孔到左侧直线的距离。

本地图片

[16-29] 重复使用3D孔工具3D距离工具,计算剩余7个圆孔到左侧直线的距离。

本地图片

[30] 使用Lua脚本工具,保存数据至csv文件中,同时奖结果显示在IM2上。

本地图片

lua

-- 生成用于拼接的字符串
write = ""
-- 循环拼接数据
for i = 21,0,-3 do
    write = write .. string.format("%.3f,",GetMeasure(i))
end
-- "\n"表示换行
write = write .. "\n"
-- 将字符串写入文件中
fprint("./DistanceY.csv",write)

-- 数据显示
DrawOverlay(2,-167,-35,1,24,'green',"长度方向距离1为:" .. string.format("%.3f",GetMeasure(21)) .. "mm")
DrawOverlay(2,-157,-35,1,24,'green',"长度方向距离2为:" .. string.format("%.3f",GetMeasure(18)) .. "mm")
DrawOverlay(2,-147,-35,1,24,'green',"长度方向距离3为:" .. string.format("%.3f",GetMeasure(15)) .. "mm")
DrawOverlay(2,-137,-35,1,24,'green',"长度方向距离4为:" .. string.format("%.3f",GetMeasure(12)) .. "mm")
DrawOverlay(2,-127,-35,1,24,'green',"长度方向距离5为:" .. string.format("%.3f",GetMeasure(9)) .. "mm")
DrawOverlay(2,-117,-35,1,24,'green',"长度方向距离6为:" .. string.format("%.3f",GetMeasure(6)) .. "mm")
DrawOverlay(2,-107,-35,1,24,'green',"长度方向距离7为:" .. string.format("%.3f",GetMeasure(3)) .. "mm")
DrawOverlay(2,-97,-35,1,24,'green',"长度方向距离8为:" .. string.format("%.3f",GetMeasure(0)) .. "mm")

六、宽度方向位置信息

[31] 使用3D裁切工具,将IM1中的点云复制到IM3中,方便后续处理。

[32-33] 使用3D孔工具,输出大圆孔下方左右两侧圆孔的圆心信息。

[34] 使用3D几何创建工具,将下方左右两圆孔圆心连线。

本地图片

[35] 使用3D距离工具,测量大圆孔圆心到该直线的距离。

本地图片

[36-63] 重复使用3D孔工具3D几何创建工具3D距离工具,计算剩余7个圆孔到下方下圆孔圆心连线的距离。

本地图片

[64] 使用Lua脚本工具,保存数据至csv文件中,同时奖结果显示在IM3上。

本地图片

lua

-- 生成用于拼接的字符串
write = ""
-- 循环拼接数据
for i = 42,0,-6 do
    write = write .. string.format("%.3f,",GetMeasure(i))
end
-- "\n"表示换行
write = write .. "\n"
-- 将字符串写入文件中
fprint("./DistanceX.csv",write)

-- 数据显示
DrawOverlay(3,-167,-35,1,24,'green',"宽度方向距离1为:" .. string.format("%.3f",GetMeasure(42)) .. "mm")
DrawOverlay(3,-157,-35,1,24,'green',"宽度方向距离2为:" .. string.format("%.3f",GetMeasure(36)) .. "mm")
DrawOverlay(3,-147,-35,1,24,'green',"宽度方向距离3为:" .. string.format("%.3f",GetMeasure(30)) .. "mm")
DrawOverlay(3,-137,-35,1,24,'green',"宽度方向距离4为:" .. string.format("%.3f",GetMeasure(24)) .. "mm")
DrawOverlay(3,-127,-35,1,24,'green',"宽度方向距离5为:" .. string.format("%.3f",GetMeasure(18)) .. "mm")
DrawOverlay(3,-117,-35,1,24,'green',"宽度方向距离6为:" .. string.format("%.3f",GetMeasure(12)) .. "mm")
DrawOverlay(3,-107,-35,1,24,'green',"宽度方向距离7为:" .. string.format("%.3f",GetMeasure(6)) .. "mm")
DrawOverlay(3,-97,-35,1,24,'green',"宽度方向距离8为:" .. string.format("%.3f",GetMeasure(0)) .. "mm")

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