Skip to content

铝壳表面平面度检测

项目简介

项目背景

随着现代制造业的不断发展,对产品质量的要求也越来越高。铝壳作为众多产品的重要组成部分,其表面平面度直接影响到产品的整体性能和外观质量。因此,对铝壳表面平面度的准确测量和控制显得尤为重要。

本地图片

相机选型

LMI激光线扫相机 Gocator2430

检测要求

测量精度 ≤ 0.05mm
测量重复性 ≤ 0.018mm
测量周期 ≤ 200ms

解决方案

AI-Vision软件对3D点云图直接处理,进行定位后根据图纸指定区域进行平面拟合,进行平面度测量。

设计思路

本地图片

执行效果展示

  • 工程结果展示:

    本地图片

  • HMI结果展示:

    本地图片

项目流程

一、初始化

  1. 选择Lua脚本语言工具,全局变量初始化,创建待接收数据的csv文件。

经验

.. 用于string类型字符串拼接

part1 = "Hello, "
part2 = "world!"
result = part1 .. part2
print(result) # 输出: Hello, world!

,作为分隔符,分割每个数据项

lua
-- 生成保存检测数据的csv文件
-- 生成用于拼接字符串的表头
write = ""

-- 字符串写入csv文件中
-- 当无该文件时,系统会自动生成该文件,同时该工具会WARN提示系统内无该文件
if FileExists("./Plane.csv") == false then
   write = write .. "Time,"
   write = write .. "Plane" .. ","
   write = write .. "OK/NG" .. ","
   write = write .. "\n"
end

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

-- 字符串写入文件中
WriteToFile("./Plane.csv", write)
  1. 选择加载点云工具,获取点云。

二、预处理

本地图片

位置调整

  1. 选择两次3D方形探针工具,找到铝壳的左边以及下边直线。

  2. 选择3D几何交点工具,绑定上一步输出的两条边作为输入几何,找到两条边的交点。

本地图片

  1. 选择3D位置调整工具,绑定3D几何交点工具找到的交点作为原点,调整x,y的位置。

拟合平面:

  1. 选择3D区域工具,根据图纸选取铝壳15块不同的区域。

本地图片

  1. 选择3D平面工具,绑定上一步3D区域工具设置的区域作为输入区域拟合平面,并将拟合出来的平面作为0平面。

本地图片

三、平面度测量

选择3D平面度工具,根据图纸选取21块不同的平面,通过平面的平均点进行平面测量。

本地图片

四、数据保存,结果显示及判断

选择lua脚本语言工具,对结果进行判断,将结果显示在IM上,并将测量出来的平面度以及判断结果存入csv文件中。设置用于HMI展示的全局变量。

  • 绑定3D平面度工具输出变量平面度值

  • 编辑lua脚本判断结果并将结果显示在IM界面

  • 保存数据到csv文件,设置平面度值为全局变量用于HMI绑定数据显示。

经验

string.format 用于格式化字符串 %.nf表示将浮点数格式化为保留 n 位小数。

pi = 3.14159 str = string.format("Pi is approximately %.3f", pi) print(str) -- 输出: Pi is approximately 3.141

lua
-- 保存数据至csv文件中
write = ""

-- 结果判断显示
if 0.4<flatness and flatness<0.8 then
    DrawText3D(1,"green",50,110,20,16,"OK:" .. string.format("%.3f",flatness))
    write = write .. string.format("%.3f,", flatness) .. "OK" .. ","
else
    DrawText3D(1,"red",50,110,20,16,"NG:" .. string.format("%.3f",flatness))
    write = write .. string.format("%.3f,", flatness) .. "NG" .. ","
end

WriteToFile("./Plane.csv", write .. "\n")
-- 设置用于HMI展示的全局变量
SetFloatVariable("Plane" , math.floor(flatness*1000)/1000)

本地图片

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