zoukankan      html  css  js  c++  java
  • 用基恩仕7060激光测试电池宽度信息

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

    • 基恩士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度则是平行关系.

     原创文章,出处 : http://www.cnblogs.com/hackpig/

  • 相关阅读:
    AjaxEvent、AjaxMethod和Listeners的区别
    chm 文档突然打不开了
    ComboBox实现联动时所遇问题,待解!
    Silverlight 3 中使用WCF上传文件 (简单进度条展示)
    Eclipse 使用ApacheAnt 小记
    ApacheAnt 基础知识
    EClipse + Jdk + ApacheAnt + jetty + GWT + MySQL(Navicat)
    限制文本框输入N个字符的使用
    JAVA编程经验汇总 (载)
    Visual Studio 2010: Addin 的目录设置及其项目模板位置
  • 原文地址:https://www.cnblogs.com/hackpig/p/5761850.html
Copyright © 2011-2022 走看看