Appearance
闸片支撑板圆孔位置度
工程背景
测量背景
闸片支撑板尺寸检测确保产品质量与安全,遵循行业标准,保障互换性与可靠性。通过精准测量,预防制造偏差,提升市 场竞争力。严格检测助力优化设计,确保每一部件均达到最佳性能标准,为制动系统安全保驾护航。
相机选型
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")