openpnp - 吸嘴校正失败的opencv参数分析

文章目录

openpnp - 吸嘴校正失败的opencv参数分析

概述

在标定设备。

发现在底部相机高级校正结束后,自动归零后的吸嘴自动校验失败了。

好在,我对标定的每个重要节点都做了配置文件备份。

实现都是在一个时间段,不是外部光线照明变化的影响。

设备放那里,没磕没碰,不是机械部分变动的影响。

且用底部相机高级校正完成之前的备份配置,吸嘴是可以自动归零,自动校验成功的。

且用底部相机高级校正这个备份配置,已经会导致自动归零后,吸嘴自动校验失败。

那么可以肯定,一定是吸嘴校验参数不同的原因。

那就找找吸嘴参数到底哪里不同,在底部相机高级校正完成后,导致吸嘴校验失败。

笔记

阶段验证 - N2吸嘴校验完

将备份恢复到"N2吸嘴校验完"

归零,自动校验吸嘴成功。

打开NT1/NT2的pipeline edit, 记录参数

NT1

起作用的opencv命令一共3个


NT2

起作用的opencv命令一共3个


阶段验证 - 底部相机高级校验完

将备份恢复到"底部相机高级校验完"

归零,自动校验吸嘴失败。

打开NT1/NT2的pipeline edit, 记录参数

NT1

起作用的opencv命令一共3个


NT2

起作用的opencv命令一共3个


参数比对

打开该笔记的2份网页,分屏比对 "阶段验证 - N2吸嘴校验完"和"阶段验证 - 底部相机高级校验完"

发现参数一点都没变。

看来不是参数引起的问题。

那是底部相机高级校正后,拍摄的图像发生了变化?

保存 "阶段验证 - N2吸嘴校验完" 的NT1/NT2图像

也是在图像捕获之后,加入图像保存的命令。

现在就有了正常/错误的NT1/NT2的图片。

现在用单独启动的CvPipelineEditor看一下,同样的图像检测参数,对于这2组图片的检测效果有何不同?改如何调整图像检测参数?

重建参数检测环境

单独打开CvPipelineEditor

加入命令 ImageRead, 读入保存的图片

加入命令DetectCircularSymmetry, 检测吸嘴内壁

发现除了前3个参数,其余参数和设备配置中的吸嘴检测参数一致。

但是在设备配置中,这前3个参数是openpnp系统限制死的,不能改。

看一下设备配置中,这3个参数的值。

NT1ok的3个参数值



NT1err的3个参数值



NT2ok的3个参数值



NT2err的3个参数值



DetectCircularSymmetry前3个参数比对结果

nt1ok/nt2ok

minDiameter = 10, 14

maxDiameter = 20, 27

maxDistance = 122, 122

nt1err/nt2err

minDiameter = 2, 3

maxDiameter = 4, 6

maxDistance = 26, 26

可以看出, 正常版本的前3个值比较大,错误版本的前3个值比较小。

那么在单独的CvPipelineEditor中试试,看看前3个参数比较大容易检测正确?比较小就检测不到?

载入图片,加入DetectCircularSymmetry,勾选诊断选项

试过了,确实nt1err/nt2err的这3个参数是检测错误的,检测结果根本不在吸嘴内壁,而是离内壁很远。

将前3个值改为2,4,26时如下,检测失败。且检测结果和失败时的检测结果很像。

将前3个值改为10,20,122时如下,检测成功(虽然没有检测到吸嘴内壁,但是已经检测到了吸嘴外壁)。且检测结果和成功时的检测结果很像。

找一下这3个参数在哪里?

这3个参数一定是在配置文件里面,找一下,将较小的3个值(2,4,26),改为好使的3个大值(10,20,122)

在4个配置文件中找了一下,没有。应该是带着系数算出来的值。

那在源码中看看,这3个值是咋算出来的。

这3个属性是可覆盖的属性

CvStage.java

java 复制代码
        @Override
        public PropertyDescriptor[] getPropertyDescriptors() {
            PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor pd : pds) {
                String propertyName = pd.getName();
                Object overrideProperty = getPropertyOverride(propertyName); // !
                String description = CvStage.this.getDescription(propertyName);
                if (overrideProperty != null) { // !
                    try {
                        pd.setReadMethod(null);
                        pd.setWriteMethod(null);
                    }
                    catch (IntrospectionException e) {
                    }
                    description = "<strong color=\"red\">Controlled by pipeline caller: "+propertyName+"="+overrideProperty+"</strong>"
                            + "<br/><br/>"
                            +description; // !
                }
                pd.setShortDescription(description);
            }

新手,调用关系看不出。

总结

openpnp-2022-0801版本的底部相机高级矫正有问题,根据相机的像素不同,大概率会引起问题(在底部相机高级矫正之前的版本,可以自动校验吸嘴。在底部相机高级矫正之后,进行吸嘴检测时,大概率会检测失败)

原因 :给opencv用的检测参数算错了。这3个参数(DetectCircularSymmetry - minDiameter, minDiameter, maxDistance)不该动的,因为图像没变啊。.就是说,就是这3个参数算错了,导致吸嘴校验失败。

怎么办?

  1. 还是使用openpnp-2022-0801版本,进行完顶部相机高级矫正后,就算是标定完成。不过这么做,对于重度洁癖患者心里很隔应。
  2. 使用开发版本 openpnp-dev-2024-0208(实际的版本是 openpnp-dev-2023_0211), 对CVPipeline做了很多改进。看看底部相机高级矫正完成后,吸嘴自动检测是否能成功。

先试试备份的版本,确认一下顶部相机高级校正的备份是否可用。作为最后可用的配置备份。

然后换openpnp-dev-2024-0208,在每个重要的操作点备份配置, 走过底部相机高级矫正,看看吸嘴检测是否正常。

备注

openpnp的官方推荐摄像头都是100W像素的,他们自己测试估计也是用100W摄像头的环境。所以没发现问题。

所以开源软件的硬件,还是用官方推荐的好些。要不好多坑得掉进去。

补充

想进一步确认离"底部相机高级校正"最近的节点,是否能自动校验吸嘴成功?

离"底部相机高级校正"备份最近的节点是"顶部相机高级校正",试过了,"顶部相机高级校正"通过之后的配置备份,是可以正常机械归零,自动校验吸嘴成功的。

特意看了"顶部相机高级校正"过了之后的吸嘴校验配置,(DetectCircularSymmetry - minDiameter, minDiameter, maxDistance)是比较大的正常值。

补充 - 如果吸嘴自动校验失败,可以在UI上改吸嘴校验尺寸

我现在用的openpnp-dev-2024-0208版本(自己编译的),已经做过了顶部相机/底部相机高级校正。

在新增吸嘴时,发现CvPipeline的头3个参数是死的,无法配置参数,这3个参数是受控的。

因为新增的吸嘴(e.g. 原来标定设备时,上了2个503)如果不能正确校验同心度,那根本没办法用。

想想,openpnp的研发不能这样吧?

回到吸嘴校正的主界面上观察,发现可以直接设置吸嘴校正时的视觉尺寸,设置完这个尺寸,再去CvPipeline中去看,可以看到前3个参数还是不能改,但是已经变为合理值了。

从这可以看出,CvPipeline的前3个参数,是受控于吸嘴校验的视觉尺寸的。
所以,新增吸嘴/或者已有的吸嘴同心度校验不过,只需要改变"吸嘴同心度校验"页面中的"吸嘴尖端视觉尺寸"即可。

因为我设备已经校验好了,就没有回到openpnp-dev-2022-0801版本去实验。

现在感觉openpnp-dev-2024-0208版本挺好用的,只是以前是小白,不会用引起的误会。

官方发布的openpnp-dev的最新版本比较旧版增加了许多特性,用起来还是挺稳定的。

END

相关推荐
LostSpeed2 个月前
openpnp - 在openpnp中单独测试相机
openpnp
LostSpeed2 个月前
openpnp - 手工修改配置文件(元件高度,size,吸嘴)
openpnp
LostSpeed2 个月前
openpnp - 解决“底部相机高级校正成功后, 开机归零时,吸嘴自动校验失败的问题“
openpnp
LostSpeed2 个月前
openpnp - 底部相机视觉识别CvPipeLine的参数bug修正
openpnp
LostSpeed2 个月前
openpnp - bug - 散料飞达至少定义2个物料
openpnp
LostSpeed3 个月前
openpnp - 图像传送方向要在高级校正之前设置好
openpnp
LostSpeed3 个月前
openpnp - juki吸嘴尺寸
openpnp
LostSpeed3 个月前
openpnp - 底部相机高级校正的参数设置
openpnp
LostSpeed1 年前
openpnp - 给底部相机加防尘罩
openpnp