Appearance
闸片支撑板圆孔位置度
工程背景
测量背景
闸片支撑板尺寸检测确保产品质量与安全,遵循行业标准,保障互换性与可靠性。通过精准测量,预防制造偏差,提升市 场竞争力。严格检测助力优化设计,确保每一部件均达到最佳性能标准,为制动系统安全保驾护航。
相机选型
LMI激光线扫相机 Gocator2350
测量项
1.闸片支撑板的长度
2.大圆孔到边的距离
3.大圆孔到下方两孔连线的距离
检测要求
静态重复精度 ≤ 0.003mm
动态重复精度 ≤ 0.01mm
解决方案
AI-Vision采用3D孔工具,输出每个孔的圆心坐标,然后进行距离计算。操作简单,零代码,部署快。
设计思路
执行效果展示
工程结果展示
- 长度结果
- 圆孔长度方向位置结果
- 圆孔宽度方向位置结果
项目流程
一、初始化
- 使用
Lua脚本工具
,生成保存数据的csv文件。
- 拼接表头字符串,保存到csv文件
经验
.. 用于string类型字符串拼接
part1 = "Hello, "
part2 = "world!"
result = part1 .. part2
print(result) # 输出: Hello, world!
,
作为分隔符,分割每个数据项
lua
-- 生成保存检测数据的csv文件
-- 生成用于拼接的字符串
write = ""
-- 判断文件是否存在,若不存在,则生成该文件
if FileExists("./DistanceX.csv") == false 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") .. ","
-- 将字符串写入文件中
WriteToFile("./DistanceX.csv", write)
-- 生成保存检测数据的csv文件
-- 生成用于拼接的字符串
write = ""
-- 判断文件是否存在,若不存在,则生成该文件
if FileExists("./DistanceY.csv") == false 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") .. ","
-- 将字符串写入文件中
WriteToFile("./DistanceY.csv", write)
-- 生成保存检测数据的csv文件
-- 生成用于拼接的字符串
write = ""
-- 判断文件是否存在,若不存在,则生成该文件
if FileExists("./DistanceAll.csv") == false then
write = write .. "Time,"
write = write .. "Distance" .. ","
-- "\n"表示换行
write = write .. "\n"
end
write = write .. os.date("%Y_%m_%d %H:%M:%S") .. ","
-- 将字符串写入文件中
WriteToFile("./DistanceAll.csv", write)
- 使用
加载点云工具
,加载需要处理的点云图。
二、预处理
位置调整
使用
3D方形探针工具
,得到工件的两条边。使用
3D几何交点工具
,绑定上一步算子变量输出的两条边作为输入几何,输出两直线交点。使用
3D位置调整工具
,绑定上一步算子变量输出的直线交点作为新原点调整点云位置。
拟合平面
使用
3D区域工具
,选择拟合平面的区域。使用
3D平面工具
,绑定上一步算子输出的变量区域作为输入区域,拟合平面并将其设置为零平面。
复制IM用于不同子程序调用
分别裁切IM1到IM2和IM3用于长度和宽度的测量
提示
使用并行调用子程序时,每个子程序需要在不同的IM执行。
三、长度及位置信息测量
整体长度测量
使用
3D方形探针工具
,分别找到左侧直线与右侧顶点。使用
3D距离工具
,绑定上一步输出的直线与点作为输入的几何1和几何2,运行得到右侧顶点到左侧直线的距离。
长度方向位置信息
使用
3D方形探针工具
,找到左侧直线。使用八个
3D孔工具
,输出8个大圆孔的圆心位置信息。使用
3D距离工具
,绑定直线与圆孔圆心位置作为输入的几何1与几何2,分别计算8个圆孔到左侧直线的距离。
宽度方向位置信息
使用
3D孔工具
,输出8个大圆孔下方左右两侧圆孔共16个小孔的圆心信息。使用
3D距离工具
,绑定两个小孔圆心点作为输入的几何1和几何2,测量大圆孔下方两个小孔圆心之间的距离。
四、数据保存
选择lua语言脚本
绑定上一步输出的算子变量(闸片总长度,8个大圆孔长度,16个圆孔宽度)
将绑定变量分别拼接到三个字符串
将拼接字符串保存至csv文件中
设置数据显示到IM
经验
string.format 用于格式化字符串 %.nf表示将浮点数格式化为保留 n 位小数。
pi = 3.14159 str = string.format("Pi is approximately %.3f", pi) print(str) -- 输出: Pi is approximately 3.141
lua
-- 总长度
-- 拼接数据
write = string.format("%.3f,",distance) .. "\n"
-- 将字符串写入文件中
WriteToFile("./DistanceAll.csv",write)
DrawText3D(1,'green',-97,-35,1,24,"总长度为:" .. string.format("%.3f",distance) .. "mm")
-- 圆孔长度方向位置信息
-- 生成用于拼接的字符串
write = ""
-- 拼接数据
write = write .. string.format("%.3f,",length1)
write = write .. string.format("%.3f,",length2)
write = write .. string.format("%.3f,",length3)
write = write .. string.format("%.3f,",length4)
write = write .. string.format("%.3f,",length5)
write = write .. string.format("%.3f,",length6)
write = write .. string.format("%.3f,",length7)
write = write .. string.format("%.3f,",length8)
-- "\n"表示换行
write = write .. "\n"
-- 将字符串写入文件中
WriteToFile("./DistanceY.csv",write)
-- 数据显示
DrawText3D(2,'green',-167,-35,1,24,"长度方向距离1为:" .. string.format("%.3f",length1) .. "mm")
DrawText3D(2,'green',-157,-35,1,24,"长度方向距离2为:" .. string.format("%.3f",length2) .. "mm")
DrawText3D(2,'green',-147,-35,1,24,"长度方向距离3为:" .. string.format("%.3f",length3) .. "mm")
DrawText3D(2,'green',-137,-35,1,24,"长度方向距离4为:" .. string.format("%.3f",length4) .. "mm")
DrawText3D(2,'green',-127,-35,1,24,"长度方向距离5为:" .. string.format("%.3f",length5) .. "mm")
DrawText3D(2,'green',-117,-35,1,24,"长度方向距离6为:" .. string.format("%.3f",length6) .. "mm")
DrawText3D(2,'green',-107,-35,1,24,"长度方向距离7为:" .. string.format("%.3f",length7) .. "mm")
DrawText3D(2,'green',-97,-35,1,24,"长度方向距离8为:" .. string.format("%.3f",length8) .. "mm")
-- 圆孔宽度方向位置度信息
-- 生成用于拼接的字符串
write = ""
-- 拼接数据
write = write .. string.format("%.3f,",width1)
write = write .. string.format("%.3f,",width2)
write = write .. string.format("%.3f,",width3)
write = write .. string.format("%.3f,",width4)
write = write .. string.format("%.3f,",width5)
write = write .. string.format("%.3f,",width6)
write = write .. string.format("%.3f,",width7)
write = write .. string.format("%.3f,",width8)
-- "\n"表示换行
write = write .. "\n"
-- 将字符串写入文件中
WriteToFile("./DistanceX.csv",write)
-- 数据显示
showText = string.format("宽度方向距离1为:%.3fmm\n",width1)
showText = showText .. string.format("宽度方向距离2为:%.3fmm\n",width2)
showText = showText .. string.format("宽度方向距离3为:%.3fmm\n",width3)
showText = showText .. string.format("宽度方向距离4为:%.3fmm\n",width4)
showText = showText .. string.format("宽度方向距离5为:%.3fmm\n",width5)
showText = showText .. string.format("宽度方向距离6为:%.3fmm\n",width6)
showText = showText .. string.format("宽度方向距离7为:%.3fmm\n",width7)
showText = showText .. string.format("宽度方向距离8为:%.3fmm\n",width8)
DrawText3D(3, 'green', 0, 0, 1, 300, showText)