Skip to content

闸片支撑板圆孔位置度

工程背景

测量背景

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

本地图片

相机选型

LMI激光线扫相机 Gocator2350

测量项

1.闸片支撑板的长度

2.大圆孔到边的距离

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

检测要求

静态重复精度 ≤ 0.003mm

动态重复精度 ≤ 0.01mm

解决方案

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

设计思路

本地图片

执行效果展示

  • 工程结果展示

    • 长度结果

    本地图片

    • 圆孔长度方向位置结果

    本地图片

    • 圆孔宽度方向位置结果

    本地图片

项目流程

一、初始化

  1. 使用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)
  1. 使用加载点云工具,加载需要处理的点云图。

二、预处理

本地图片

位置调整

  1. 使用3D方形探针工具,得到工件的两条边。

    本地图片

  2. 使用3D几何交点工具,绑定上一步算子变量输出的两条边作为输入几何,输出两直线交点。

  3. 使用3D位置调整工具,绑定上一步算子变量输出的直线交点作为新原点调整点云位置。

拟合平面

  1. 使用3D区域工具,选择拟合平面的区域。

    本地图片

  2. 使用3D平面工具,绑定上一步算子输出的变量区域作为输入区域,拟合平面并将其设置为零平面。

    本地图片

复制IM用于不同子程序调用

分别裁切IM1到IM2和IM3用于长度和宽度的测量

提示

使用并行调用子程序时,每个子程序需要在不同的IM执行。

三、长度及位置信息测量

本地图片

整体长度测量

  1. 使用3D方形探针工具,分别找到左侧直线与右侧顶点。

  2. 使用3D距离工具,绑定上一步输出的直线与点作为输入的几何1和几何2,运行得到右侧顶点到左侧直线的距离。

    本地图片

长度方向位置信息

  1. 使用3D方形探针工具,找到左侧直线。

  2. 使用八个3D孔工具,输出8个大圆孔的圆心位置信息。

    本地图片

  3. 使用3D距离工具,绑定直线与圆孔圆心位置作为输入的几何1与几何2,分别计算8个圆孔到左侧直线的距离。

    本地图片

宽度方向位置信息

  1. 使用3D孔工具,输出8个大圆孔下方左右两侧圆孔共16个小孔的圆心信息。

  2. 使用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)

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