液面检测 / 位姿判断(浦东新区中天科技园_生物公司)
1.项目需求
- 试管名称:一次性使用采样器。(大规模送检测试器皿)
- 作用:类似于验血时的一次性保存容器,通过棉签擦拭部位然后采集液体。
(液体类似酒精混合物) - 项目需求:通过相机采集规定ROI区域内:试管内棉签的位姿状态和样本液体的高度数据。
- 高度误差: +-1mm————防止下针采集时刺穿了采样器。
- 角度误差: +-10°————主要了为了判断出棉签是靠左还是靠右,这样可以云台控住的采集器可以下针吸取液体。
2.硬件选型
相机布局示意图
视野范围
X方向:200*3.04/3.6=236.8
Y方向:200*3.04/2.7=177.6
相机参数
3.算法设计
- 主要分为棉签位姿判断和液面高度判断
- ROI区域前后景分离(OTSU)
- 液面高度—ROI区域进行倒置,下部区域模板匹配,上部区域Scharr梯度提取液面梯度。
- 倒置是为了提取液面低处,同时包含误差检验算法—像素和要求。
- ROI区域图像的一阶矩求重心,而阶矩求倾斜角。
- 误差检验算法—像素区域和,同时根据液面高度选择极限角度的不同位置
4.Modbus / PLC通讯
Modbus主要有线圈寄存器和保持寄存器。前者支持0和1的输入输出,常用于控制开关,保持寄存器常用于读写数据。
0x10: 写多个保持寄存器/16示例:
树莓派网络设置:
- IP: 192.168.178.100
- Mask: 255.255.255.0
- Timeout: 1000ms
- Port: 502
- ModbusTCPSlave
- 功能码0x17 / 23读写多个保持寄存器
0x17: 读写多个保持寄存器
主站询问报文:一般由三部分组成,
- 报头:7字节的报头,
- 数据大小和起始位置:1字节表示功能码,4字节高低位的数量和起始位,
- 具体的交互数据:1字节统计总数,输入数据字节1,字节2,字节3 ,我们共10字节
从站应答报文:对应主站报文
一个数据2个字节,高位和地位0-65535
在对应的交互数据中写入数据,返回报文
主站写 主站写 从站写 从站写 从站写 数据1 数据2 数据3 数据4 数据5 1.检索命令 2.试管类型编号 3.棉签角度 4.液面高度 5模板高度
- 错误码返回说明:
- 1.当出入试管类型不存在,返回65535
- 2.检测ROI区域存在问题,前景后景提取失败 65534
- 3.液面检测失败—(液面无梯度信息,液面高度过低)65533
5.工作流程
工作流程:
- 预处理:试管模板的制作,根据不同试管的尺寸和大小,制作不同的试管下部模板,然后生成下模板二值图和对应的试管类型编号xml文件。
- 包含了试管宽度、编号、模板类型信息——满足一套系统,不同尺寸试管的检测要求,只需Modbus通讯时,报文输入对应的使馆编号,按 照对应的试管编号进行类型处理。
- 建立Modbus TCP通讯连接,树莓派作为服务器(从站),西门子PLC为客户端(主站)
- PLC发送对应的Modbus—功能码23(0x17)读写多个保存寄存器,树莓派进行检测,返回对应数据。
- PLC根据返回数据,进行判断旋转云台,后再次采集数据,旋转试管至满足要求。
6.工作流程(精简)
- 试管进行预处理,对应的生成试管类型编号文件和模板文件
- PLC和树莓派进行Modbus TCP通讯,建立主站从站,收发数据。
- PLC根据树莓派返回的数据进行 云台的旋转,调整试管位姿至满足状态。
7.问题解决
首先使用的边缘检测,误检率比较高?
后使用背景分离算法。
前景背景分离时受到外部光线影响较大,如何减小影响?
解决方法:客户是在室内使用的,所以对外部光线对其影响不大,主要是解决室内光的问题。对相机采用了自适应曝光后,算法稳定性可靠的提升了。
对于角度的判定存在一定的误差,由于不同的液面,图像的矩的角度极限位置不同
解决方法:根据实际测量实验,得出了不同液面高度的修正系数表,根据液面高度来修正角度极限位置的交点位置。
8.算法介绍
1.OTSU大津法——最大类间方差法
- 分割后图像的前景与后景类间方差最大。
- 被认为是最佳的阈值分割算法,计算简单不受图像亮度和对比度的影响。
- 前景和背景的类间方差越大,说明两部分的差别越大。
- 当前景和背景错分时,都会导致类间方差变小。所以类间方差最大分割,意味着错分概率是最小的。
- 找到最合适的灰度级K,使得类间方差最大
2.图像的矩求 重心 / 倾斜角
- 0阶矩——白色区域面积
- 1阶矩——图像重心
- 2阶矩——图像倾斜角度
定义:图像识别的核心问题就是:图像的特征提取,利用一些简单的数据来描述整个图像。这些数据越简单越有代表性越好。图像识别发展几十年,不断有新的特征提出,而图像不变矩就是其中一个。
矩是概率与统计中的一个概念,是随机变量的一种数字特征。
设x为随机变量,c为常数,k为正整数。则量E[(x-c)k]为x关于c点的k阶矩。
1.如果E[(x-c)k]存在
- 当c=0,A = E(xk),称为x的k阶原点矩
- 当c=E(x),A = E( [x-E(x)]k ),称为x的k阶中心距
2.如果E[(x-c1)p * (y-c2)q ]存在,称其为X,Y关于c点p + q阶矩
不变矩是一处高度浓缩的图像特征,具有平移、灰度、尺度、旋转不变性。
- 1961M.K.Hu提出了Hu不变矩。
- 1979M.R.Teague根据正交多项式,提出了Zernike矩
9.实际工况图
PNP螺丝漏打识别 / 透视投影(博世BOSCH)
1.项目需求
项目需求:机器视觉,动态检测工人的电动螺丝刀头的位置,从而判断是否正确安装螺丝。
- 电动螺丝刀给零件拧螺丝:一般都是有顺序的拧多个螺丝。但是在实际的操作过程中,经常发生漏拧错拧漏的现象。为了提高良品率,杜绝这种错拧漏拧的现象,我们需要设计一套监控系统。
2.技术路线
- 工作流程:
- 单目相机位姿跟踪的方法——跟踪螺丝刀头的位置和姿态。
- 首先通过工人示教出打螺丝各个位置,刀头的姿态。然后工人实际拧螺丝的时候触发相机工作和实际计算的螺丝刀头的位姿进行比较,如果超过阈值,触发报警,提醒工人。
3.算法原理—PNP透视投影
PnP(Perspective-n-Point)是求解 3D 到 2D 点对运动的方法。它描述了当我们知道n 个 3D 空间点以及它们的投影位置时,如何估计相机所在位姿的问题。如图所示,如果知道大于3对点在世界坐标系中3D点坐标和其在图像坐标系中对应的2D点坐标时,就可以估计相机运动。3D-2D 方法不需要使用对极约束,又可以在很少的匹配点中获得较好的运动估计,是最重要的一种姿态估计方法。
4.算法设计
相机进行标定,得到相机的内参系数K,自定义世界坐标系6个点。
Point3f center1=Point3f(0 ,30 ,490);
Point3f center2=Point3f(25.981, 15 ,490);
Point3f center3=Point3f(25.981, -15,490);
Point3f center4=Point3f(0, -30 ,490);
Point3f center5=Point3f(-25.981, -15, 490);
Point3f center6=Point3f(-25.981 ,15,490);
距离圆心30mm
内参矩阵(Mat_
(3,3)<<2062.281673430,0,1316.924373761,0,2061.800740149,996.245044127,0,0,1) 畸变系数(Mat_
(4,1)<<0.172651199,-0.322824460, -0.000679134, 0.000281738);
处理相机采集到的图片,图像上的坐标(像素坐标)图像检测获得,进行相机位姿计算和倾斜角度换算。
求取:R T,相机和标志物坐标系的距离
位姿Rodrigues(_PoseR,PoseR);
- 倾斜角度double aa;
- aa=PoseR.at
(2, 2); - dvalue=acos(aa)*180/3.1415926;
5.算法难点
- 预处理,提取出大致图像(红外相机 + 850 nm 红外光源)
- 在于正确识别出6个圆环中至少4个点。
- 同时能够区分出每个圆对应的编号
设计标靶
标靶检测算法
设计
:为了能够得到螺丝刀上大于三个特征点3D坐标和对应的2D坐标,需要设计标靶,并且需要保证标靶上的特征点顺序保持旋转不变性和部分遮挡不变性,本项目设计了如图所示的标靶,由4个实心圆和2个圆环组成,保证了使用过程中对应的点标号顺序不变。标靶由反光标志点组成,在红外光源的照射下,能够保证标靶点与周围环境有很高的对比度,方便提取各标靶点椭圆圆心的坐标。
方案
:由于螺丝刀顶部的电源线会对标靶点有一定的遮挡,本项目设计了如下的标靶编号算法,可以保证6个标靶点遮挡相邻的0-2个点时,仍能正确计算螺丝刀刀头的位姿。具体算法如下:
标靶编号算法流程:
- 使用atan2函数计算每个点相对于质心点的方位角,然后再计算出各个点的夹角。(以下夹角和编号都是顺时针,夹角都取角和补角中的小值)
Case1: 6个标志点均未被遮挡(size=8)
- 1)若夹角排列为120 120 60 60 ,则标号为 1356
- 2)若夹角排列为120 60 60 120,则标号为 3561
- 3)若夹角排列为60 60 120 120 ,则标号为 5613
- 4)若夹角排列为60 120 120 60,则标号为 6135
- 与1、3号夹角均为60度则是2号
- 遍历圆与2个圆环之间的夹角,如果均是60度,则是3号点,顺时针依次是45612
Case2: 1号标志点被遮挡(夹角排列为120 60 180或60 180 120或180 120 60)
- 1)若夹角排列为120 60 180,则标号为 356
- 2)若夹角排列为60 180 120,则标号为 563
- 3)若夹角排列为180 120 60 ,则标号为 635
- 与3、5号夹角均为60度则是4号,另一个同心圆则是2
- 遍历圆与2个圆环之间的夹角,如果均是60度,则是3号点,顺时针依次是4562
Case3: 5号标志点被遮挡(夹角排列为60 120 180或120 180 60或180 60 120)
- 1)若夹角排列为60 120 180,则标号为 613
- 2)若夹角排列为120 180 60,则标号为 136
- 3)若夹角排列为180 60 120 ,则标号为 361
- 与1、3号夹角均为60度则是2号,另一个同心圆则是4
- 遍历圆与2个圆环之间的夹角,如果均是60度,则是3号点,顺时针依次是4612
Case4: 3号标志点被遮挡(夹角排列为60 60 120或60 120 60或120 60 60)
- 1)若夹角排列为60 60 120,则标号为 561
- 2)若夹角排列为60 120 60,则标号为 615
- 3)若夹角排列为120 60 60 ,则标号为 156
- 与1号夹角180,与5号夹角60则是4,另一个同心圆则是2
- 遍历圆与2个圆环之间的夹角,如果均是120度,则是6号点,顺时针依次是1245
Case5: 6号标志点被遮挡(夹角排列为120 120 120)
- 此时夹角均为120,不能通过夹角来区分,稍复杂
- 1)若该点与两个圆环均为60度,则该点为3号点;
- 2)顺时针方向,3号点前面是2号,后面是4号;
- 3)若该点与4号角点夹角为60,且与2号环形点为180度,则该点为5号点
- 遍历圆与2个圆环之间的夹角,如果均是60度,则是3号点,顺时针依次是4512
- Case6:环形标志点被遮挡
- 按照Case1情况对圆形标志点标号,然后判断圆环是2还是4,与1号、3号夹角均为69度则是2,另一个则是4,反之取反。
- 1)若夹角排列为120 120 60 60 ,则标号为 1356
- 2)若夹角排列为120 60 60 120,则标号为 3561
- 3)若夹角排列为60 60 120 120 ,则标号为 5613
- 4)若夹角排列为60 120 120 60,则标号为 6135
- 与1、3号夹角均为60度则是2号
- Case7:相邻两个标志点被遮挡
- 1) 挡住1和2,与挡住1相同,此时识别到的标志点个数为4;
- 2) 挡住3和2 or挡住3和4,与挡住3相同,此时识别到的标志点个数为4;
- 1、若夹角排列为60 60 120,则标号为 561
- 2、若夹角排列为60 240 300,则标号为 615
- 3、若夹角排列为240 60 300 ,则标号为 156
- 判断圆环是2还是4的方法:与1的夹角为30-90°为2,否则为4
- 3) 挡住4和5,与挡住5相同,此时识别到的标志点个数为4;
- 4) 挡住5和6,则此时是 圆、环、圆、环,且圆和环的个数均为2
- 5) 挡住6和1,则此时是 环、圆、环、圆,且圆和环的个数均为2
6.硬件选型
- 1.树莓派3B+
- 2.PI Camera V2红外相机-800w像素
- 3.850 nm红外光源
7.实际工况