码迷,mamicode.com
首页 > 其他好文 > 详细

用基恩仕7060激光测试电池宽度信息

时间:2016-08-18 14:17:02      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:

 通过这个实验, 触及到了下面的知识点:

  • 基恩士7060蓝色激光的基本操作
  • halcon算子, FitLineContourXld, 使它们用点拟合出直线

 

需求描述

最近一个需求测量电池顶凸起面的边线到冶具边缘的宽度, 且需要得到边线的信息, 主要是它的角度信息.

 

产品外形轮廓如下图所示:

技术分享

3D曲面显示,是下面的样子

技术分享

 

我们让激光从凸起面的边上, 采样若干个点, 这个点取凸起面与其连接弧线之间的"弯曲点".(如下图圈所示的点)

最后使用这若干个"弯曲点" 的信息, 我们拟合出一条直线, 这条直线可以用以反映出凸起面的边相对冶具边的夹角(冶具边的永远固定的).

技术分享

 

 

基恩士7060蓝色激光的基本操作

 

进入实时设定功能.

技术分享

 

比较重要的是"拍摄设定", "注册主控","out测量设定"

技术分享

 

在拍摄设定中, "曝光时间"非常重要, 决定了成像图像的质量, 直接影响测量的结果或者测量轮廓稳定性.

 技术分享

 通过调节曝光大小, 画面上的红色轮廓周围如果没有白色的噪波点, 为最优, 否则请调节曝光大小.

下图的红色轮廓线是最优的效果.

技术分享

感光灵敏度选度,也可以尝试和曝光一起来调节.

技术分享

 

在OUT测量设定功能中, 我们输出out1, 点击设定按钮, 将会选择测量类型.

 技术分享

 对于本实验, 我选择宽度.  也就是两点间垂直投影的距离了.

技术分享

 

由于是宽度测试, 画面上的紫色与桔色范围框就可以各自调节, 把它们的宽度拉得足够大. 这个以适应电池的最大可活动范围为需求.

两个测量点的类型, 这里我选择弯曲点.

技术分享

 

最后我的调节效果见下图.

注意图中灰色区域是由功能"轮廓屏蔽"添加上去的, 这个灰色区域不参加"弯曲点"的计算.

之所以如此, 是因为电池旋转一定角度时轮廓线上其它的弯曲点会进入到紫色范围内, 我们要排除这种情况.

技术分享

 

 设置成功后, 可以看到OUT1的输出结果了.

技术分享

 拟合直线用了halcon的算子FitLineContourXld

 1   private void fitLine(HTuple Rows, HTuple Cols, out HTuple lineValue, out HTuple angle)
 2         {
 3             lineValue = new HTuple();
 4             HTuple Nr, Nc, Dist, Row1, Col1, Row2, Col2, Phi;
 5             HObject contour = new HObject();
 6             HOperatorSet.GenEmptyObj(out contour);
 7 
 8             HOperatorSet.GenContourPolygonXld(out contour, Rows, Cols);
 9             HOperatorSet.FitLineContourXld(contour, "tukey", -1, 0, 5, 2, out Row1, out Col1
10                 , out Row2, out Col2, out Nr, out Nc, out Dist);
11 
12             lineValue = lineValue.TupleConcat(Row1);
13             lineValue = lineValue.TupleConcat(Col1);
14             lineValue = lineValue.TupleConcat(Row2);
15             lineValue = lineValue.TupleConcat(Col2);
16 
17             HOperatorSet.AngleLl(Row1, Col1, Row2, Col2, 0, 1000, 0, 0, out Phi);
18             angle = (new HTuple(Phi)).TupleDeg();
19             
20             contour.Dispose();
21         }

调用方法

 1   HTuple X = new HTuple();
 2             HTuple Y = new HTuple();
 3             int js = 0;
 4             foreach (var m in lbValue.Items)
 5             {
 6                 X = X.TupleConcat(double.Parse(m.ToString()));
 7                 Y = Y.TupleConcat(js++);
 8             }
 9             HTuple res=new HTuple(), angle;
10             fitLine(Y, X, out res, out angle);
11             double angleTmp=0f;
12             double.TryParse(angle.ToString(),out angleTmp);
13             rtbMsg.AppendText(180+angleTmp + Environment.NewLine);

 我在产品轮廓上每隔0.5毫米取一个点,取了11个点的数据, 由上面的拟合直线函数算出来结果为90.45度.

这个结果可以反映出物料的边缘相对于夹具边缘是不是倾斜了, 如果为90度则是平行关系.

技术分享

 

用基恩仕7060激光测试电池宽度信息

标签:

原文地址:http://www.cnblogs.com/hackpig/p/5761850.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!