Appearance
铜卷位置检测及尺寸测量
项目简介
项目背景
利用云台传感器拍摄图像,对需要进行包装入箱的铜箔卷,检测其在铁托盘上的前后左右及高度位置,为机械臂的抓取提供引导,同时读取产品上的二维码信息以匹配装铜箔的木箱规格; 其次检测木箱规格以及在小车上的左右位置,以核对木箱规格,同时为机械臂抓取铜箔入箱提供位置引导信息。
相机选型
SICK云台线扫
检测要求
X向精度 ≤ 0.025mm
Y向精度 ≤ 0.03mm
测量周期 ≤ 2s
解决方案
AI-Vision软件针对3D点云进行处理,首先通过Blob工具进行铜卷定位,输出铜卷的位置等信息,再通过圆柱工具拟合出圆柱,从而进行体积的计算 。
设计思路
执行效果展示
工程结果展示:
HMI结果展示:
项目流程
一、初始化
[00] 选择Lua脚本语言
工具,全局变量初始化,创建待接收数据的csv文件。
lua
--初始化全局变量
SetVariable('CurrentTime',0)
write = ''
--对文件进行判断,如果当前文件不存在,则生成文件
if FileSize("./H.csv") <=0 then
write = write .. 'Time,'
for i = 1,15,1 do
write = write .. 'h' .. i .. ","
end
write = write .. '\n'
--"\n"表示换行
end
-- 每行第一列写入当前时间
write = write .. os.date("%Y_%m_%d %H:%M;%S") .. ","
-- 将刚才的内容写入csv文件中
fprint("./H.csv",write)
--生成用于拼接的字符串
write = ''
if FileSize("./Position.csv") <=0 then
write = write .. 'Time,'
for i = 1,15,1 do
write = write .. 'x' .. i .. ","
write = write .. 'y' .. i .. ","
write = write .. 'z' .. i .. ","
write = write .. ','
end
write = write .. '\n'
end
-- 每行第一列写入当前时间
write = write .. os.date("%Y_%m_%d %H:%M;%S") .. ","
-- 将刚才的内容写入csv文件中
fprint("./Position.csv",write)
[01] 选择加载点云
工具,获取点云。
二、预处理
[02] 选择3D变换
工具,将图像绕x轴反方向旋转90度。
[03] 选择3D剪裁
工具,将圆柱切割开并输出到IM1中。
[04] 选择3D下采样
工具,减少点的个数,方便后续操作。
[05] 选择3D离群点滤波
工具,过滤掉杂点。
三、圆柱高度与位置测量
[06] 选择3D斑点
工具,分割出15个圆柱并将圆柱的位置发送到寄存器中。
[07] 选择lua语言脚本
,保存圆柱位置至文件中。
lua
-- 生成永远拼接的字符串
write = ""
-- 将位置信息循环拼接入字符串中
for i =1,15,1 do
x="x"..i y="y"..i z="z"..i
x,y,z = GetPoint(i-1)
write = write .. string.format("%.3f,",x) .. string.format("%.3f,",y) .. string.format("%.3f,",z) .. ","
end
write = write .. "\n"
-- 将字符串写入表中
fprint("./Position.csv",write)
[08-22] 选择3D圆柱
工具,将铜卷拟合成圆柱,通过圆柱的两顶点坐标得到尺寸信息。
[23] 选择lua语言脚本
,计算铜卷尺寸并保存至文件中。
lua
--生成用于拼接的字符串
write = ""
--循环将测量数据拼接入字符串中
for i = 1,15,1 do
cx1,cy1,cz1,cx2,cy2,cz2,r = GetCylinder(i-1)
write = write .. string.format("%.3f,",math.abs(cx2-cx1))
SetVariable("h" .. i ,tointeger(1000*math.abs(cx2-cx1))/1000)
end
write = write .. "\n"
-- 将数据写入表中
fprint("./H.csv",write)