当前位置: 首页 > article >正文

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

文章目录

    • openpnp - 吸嘴校正失败的opencv参数分析
    • 概述
    • 笔记
    • 阶段验证 - N2吸嘴校验完
      • NT1
      • NT2
    • 阶段验证 - 底部相机高级校验完
      • NT1
      • NT2
    • 参数比对
    • 保存 “阶段验证 - N2吸嘴校验完” 的NT1/NT2图像
    • 重建参数检测环境
      • NT1ok的3个参数值
      • NT1err的3个参数值
      • NT2ok的3个参数值
      • NT2err的3个参数值
    • DetectCircularSymmetry前3个参数比对结果
    • 找一下这3个参数在哪里?
      • 这3个属性是可覆盖的属性
    • 总结
    • 怎么办?
    • 备注
    • 补充
    • END

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

        @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)是比较大的正常值。

END


http://www.kler.cn/news/331305.html

相关文章:

  • C题(四)水仙花数
  • 基于SSM的列车订票管理系统(含源码+sql+视频导入教程+文档+PPT)
  • TypeScript 设计模式之【观察者模式】
  • Linux高级编程_27_系统调用
  • VS Code 图形化合并工具
  • 2409vim,vim写文件有问题
  • 使用高模烘焙贴图为低模添加细节:详细教程
  • 嵌入式外设应用(代码)
  • DBT hook 实战教程
  • 蓝桥杯-财务管理
  • 【小程序】小tips:微信小程序登录后返回登录前的页面继续操作(保留参数)
  • 计算机视觉与深度学习 | 从激光雷达数据中提取地面点和非地面点(附matlab代码)
  • 初识Linux · 进程终止
  • Mybatis框架梳理
  • Netty从入门到精通:高性能网络编程的进阶之路
  • (11)MATLAB莱斯(Rician)衰落信道仿真2
  • VS与VSCode的区别
  • Linux基础(五):linux文件种类与扩展名
  • 车辆重识别(2020NIPS去噪扩散概率模型)论文阅读2024/9/27
  • C++《string》