openpnp - Camera model failed to converge. Try increasing the number of Radial Lines Per Cal Z.
设备收拾完了. 在做最后一次标定.因为设备在调试中, 设备标定自己也做了很多次. 头一次遇到这个错误.比较硬件的变化, 和相机有关的部分.我这次将顶部相机和底部相机, 都换成了1600W像素的USB相机. 只要曝光小于-6, 测速时, 都可以达到30FPS.正好报错也是和相机有关.虽然现在已经在用自己修正源码后编译的输出, 但是也不想就直接去看源码, 没心情.根据提示, 尝试在底部相机设置中, 增
文章目录
openpnp - Camera model failed to converge. Try increasing the number of Radial Lines Per Cal Z.
概述
设备收拾完了. 在做最后一次标定.
在底部相机高级矫正时, 弹框报错如下:
Camera model failed to converge. Try increasing the number of Radial Lines Per Cal Z.
因为设备在调试中, 设备标定自己也做了很多次. 头一次遇到这个错误.
比较硬件的变化, 和相机有关的部分.
我这次将顶部相机和底部相机, 都换成了1600W像素的USB相机. 只要曝光小于-6, 测速时, 都可以达到30FPS.
正好报错也是和相机有关.
虽然现在已经在用自己修正源码后编译的输出, 但是也不想就直接去看源码, 没心情.
根据提示, 尝试在底部相机设置中, 增加Z轴径向线的数量, 默认是32, 改成64, 再次进行底部相机高级矫正, 成功了.
修改底部相机默认的径向线数量
此图是底部相机高级矫正完成时的截图.
在未作底部相机高级矫正或者底部相机高级矫正失败时, 第1步的勾没勾, 也就改不了Z轴默认的径向线数量.
操作:
- 先勾选第1步的勾, 这时, 就可以编辑Z轴径向线了.
- 将径向线数量由32改为64
- 去掉第1步的勾
- 在向导中运行底部相机高级矫正, 此时应用的底部相机Z轴的径向线已经为64.
- 等待底部相机高级矫正成功完成.
报错猜测
可能采用像素更高的底部相机硬件, 需要的Z轴径向线就要越多.
以前用官方推荐的100W像素USB相机时, 用默认的32条Z轴径向线, 从没见过这个报错.
看看代码, 报错提示在哪里?
public static double computeBestCameraParameters(double[][][] testPattern3dPoints,
double[][][] testPatternImagePoints, double[][][] modeledImagePoints,
List<Integer> outlierPointList, double[] parameters, int flags) throws Exception {
numberOfTestPatterns = testPattern3dPoints.length;
// ...
try {
optimum = optimizer.optimize(lsp);
}
catch (TooManyEvaluationsException e) {
throw(new Exception("Camera model failed to converge. Try increasing the number of "
+ "Radial Lines Per Cal Z.")); // error at here
}
去看看 optimizer.optimize
public Optimum optimize(final LeastSquaresProblem problem) {
// ...
// tests for termination and stringent tolerances
if (FastMath.abs(actRed) <= TWO_EPS &&
preRed <= TWO_EPS &&
ratio <= 2.0) {
throw new ConvergenceException(LocalizedFormats.TOO_SMALL_COST_RELATIVE_TOLERANCE,
costRelativeTolerance);
} else if (delta <= TWO_EPS * xNorm) {
throw new ConvergenceException(LocalizedFormats.TOO_SMALL_PARAMETERS_RELATIVE_TOLERANCE,
parRelativeTolerance);
} else if (maxCosine <= TWO_EPS) {
throw new ConvergenceException(LocalizedFormats.TOO_SMALL_ORTHOGONALITY_TOLERANCE,
orthoTolerance);
}
从上面实现可以看出, 相机像素大了之后, 如果还采用默认分割的份数, 图像的精度判断, 就不满足条件了.
没单步调试或者日志打印调试. 能大概看出, 图像越大, 要分割的份数要越多, 否则用于判断的精度就不满条件.
备注
底部相机高级矫正用的时间是真长.
不过底部相机高级矫正, 是修正底部相机机械安装的垂直度用的, 能给出补偿. 谁又能保证相机安装的绝对垂直呢?
设备在生产前, 或者底部相机变动后(更换了底部相机, 拆卸了底部相机, 导致底部相机中心点变了, 镜头高度变了), 就必须重新进行一次底部相机高级矫正.
备注
出现这个报错,主要原因是相机的视野不够。
根本处理方法是,去调整相机和目标(吸嘴(板子高度),或者主基准点)中间的距离。
最好还是用默认的32线的设置。
END
更多推荐
所有评论(0)