文章目录
- openpnp - 底部相机高级校正的参数设置
- 概述
- 笔记
- 修改 “Radial Lines Per Calibration Z” 的方法
- 不同 “Radial Lines Per Calibration Z”的校验结果
- 不同 “Radial Lines Per Calibration Z”的设备校验动作的比较
- 总结
- 备注
- END
openpnp - 底部相机高级校正的参数设置
概述
将X轴丝杠的平行度调整了(openpnp - 丝杠安装调整的总结).
这次X轴的调整后的平行度(X轴丝杠和轴导轨),用起来丝滑,从左到右,力道一致,洁癖患者表示满意和开心。
因为设备的机械部分被动了,所以设备必须重新标定。
我用的自己修改的版本(主要是修改了西门子飞达的通讯超时问题(openpnp - SlotSchultzFeeder source code bugfix))
走到最后一步,进行底部相机高级校正,过不去。
主要是如下参数设置的不合适,主要影响校验是否能通过的参数为"Radial Lines Per Calibration Z(Z方向校验时的径向线数量)"
“Radial Lines Per Calibration Z” 默认是32.
当相机是官方推荐的100W的摄像头时,这个值为32是没问题的。openpnp的研发估计也是按照默认值来测试的.
当摄像头是更高像素时(e.g. 我现在用的是1600W像素/2320x1744/30FPS/MJPG的摄像头),这个参数为32就无法通过底部相机高级校验。
当“Radial Lines Per Calibration Z” 默认是32,报错提示说,校验结果重合度比预期值差的太多,需要将 “Radial Lines Per Calibration Z” 的值设置的更大些再试试。具体要设置大到哪里,提示中没说。
笔记
修改 “Radial Lines Per Calibration Z” 的方法
找到底部相机参数页
切到高级校正页
先勾选第一行的 "Enable"复选框,这样,下面的“Radial Lines Per Calibration Z”就可以改了。
改好“Radial Lines Per Calibration Z”值后,再去掉第一行的"enable"的勾,这样就可以进行底部相机高级校正了。
底部相机高级叫正时的值,就按照我们填写的值来。
不同 “Radial Lines Per Calibration Z”的校验结果
尝试将 “Radial Lines Per Calibration Z” 改为64,报错,提示为"扭曲度太大,请将扭曲度清0".
我去,这咋清除? 我只是openpnp的用户啊…
尝试将“Radial Lines Per Calibration Z” 改为16,报错,提示为"坐标不可达",一看那个坐标,120xxmm, 早已经不在设备的可用坐标内。
“Radial Lines Per Calibration Z”根据提示,肯定要改大的,改成64就太大了。
观察了一下“Radial Lines Per Calibration Z”的默认值32,这是8的倍数啊。
那尝试将默认值加个8,改为40试试。
试了一下, OK.
不同 “Radial Lines Per Calibration Z”的设备校验动作的比较
底部相机高级校验原理 - 通过在底部相机可视范围内,移动NT1,NT2, 得到Z轴和NT1,NT2的垂直度补偿。
如果底部相机高级校验时的分步动作导致NT1,NT2都不在底部相机可视范围内,这动作就失去了效果。
“Radial Lines Per Calibration Z”的默认值32,NT1,NT2的移动,大部分都在底部相机的可视范围内,有少许操作移动后,不在底部相机视野内。
“Radial Lines Per Calibration Z”的值 = 64,NT1,NT2的移动,全部都在底部相机的可视范围内,明显NT1,NT2的校验移动范围很小。
“Radial Lines Per Calibration Z”的值 = 16,NT1,NT2的移动,大部分都不在底部相机的可视范围内,明显NT1,NT2的校验移动范围超大,大部分操作都无法得到底部相机中的NT1,NT2移动后的图像(这明显是校验操作无效了)。
“Radial Lines Per Calibration Z”的值 = 40,NT1,NT2的移动,全部都在底部相机的可视范围内,且NT1,NT2的校验移动范围比较大。
总结
“Radial Lines Per Calibration Z”是用来控制NT1,NT2在底部相机视野中移动范围大小的值。
要选择一个合适的“Radial Lines Per Calibration Z”值,使NT1,NT2的校验活动范围在底部相机视野内,又能使NT1,NT2有效移动范围最大。
这样才能产生底部相机高级校正需要的有效数据。
“Radial Lines Per Calibration Z”的合适值和底部相机的像素有关,要根据自己采用的摄像头的像素值来选择。
如果“Radial Lines Per Calibration Z”默认的32不能通过底部相机高级校正,那就需要自己改“Radial Lines Per Calibration Z”到一个合适值。
如果底部相机像素低(e.g. 100W, 200W),“Radial Lines Per Calibration Z”的值就加的少一点。
如果底部相机像素高(e.g. 800W, 1600W),“Radial Lines Per Calibration Z”的值就加的多一点。
每次调整的值别太大,不要超过8. 如果校验通不过,再尝试调整一个新值。
但是底部相机高级校正的时间是真的长,只能干等着,真是熬人…
如果自己设备通过了校验,最好将“Radial Lines Per Calibration Z”记录备份下来,谁能保证这台设备不需要下一次标定呢?
大家一般都是openpnp的用户,很少有同学去用代码单步调试吧? 作为程序员的我们都知道,如果自己不是设计者,目标工程中的很多知识点和设计思路缺失,不好弄啊,有点改不动(即使只是想看看问题的原因,大概率也找不出来,如果想找出来,需要投入时间,达到作者在目标工程中表现出的水平才行。主要是看有没有刚需,如果有刚需,那就当自己是openpnp的研发,按部就班的按照计划搞就行)。
so 一般情况下,只能通过实验来猜测一些怪里怪气的问题背后的原因, 只要肯实验和肯思考,一般都能解决这种软件的使用性问题。
备注
"底部相机高级矫正"感觉有bug.
虽然通过了底部相机高级矫正,但是归零后,自动归零和吸嘴校验(NT1, NT2)大概率会失败。
如果重新做底部相机和NT1的偏移设置,就要取消掉“底不相机高级矫正”的使能, 那"底部相机高级矫正"不白忙活了么?
且重新做底部相机和NT1的偏移设置,因为不在对应的设置阶段,好像不咋对啊。
好多同学标定设备时,都不做底部相机高级矫正,直接相信自己设备机械安装精度符合要求,挺无奈的。
设备标定过程中的每个进化阶段,我对.openpnp2目录都做了备份。
琢磨了一会,算了,我贴板子的openpnp配置版本,也不做底部相机高级矫正了,得不偿失。
好像底部相机高级矫正后,很多参数都不对了。