机器视觉与图像处理
多功能和易用运动控制框架
支持图像模板深度学习

4 图形化编程

智能设备面临多产品,多品种的场所,经常需要换产,图形化编程提供所见即所得编辑功能,能极大减少转产时间。

4.1 加工路径类

加工路径类的头文件和库文件在Tabxlibs目录下。头文件在cncuc子目录。库文件(dll, lib)在bug子目录。

CCncObj类

CCncObj类是所有加工路径类的基类,该类定义了所有类的基本操作。该类定义与图形一致的顶点机械坐标,并提供图像坐标与机械坐标的转换 除此以外,还可以设置加工工艺参数如加工方向,是否提刀,移动方式等,也提供计算坐标单MARK或双MARK进行平移或旋转补偿。

根据加工路径几何形状的不同,TABX提供7个用于加工不同形状的子类。这些子类除了运动路径形状不一样外,控制点数量也不一样。

控制点是图形化编程时控制加工路径形状和大小的点,一般以像素为单位,图像坐标。与此对应,还有一个机械坐标。有多少个控制点,就有多少对图像坐标和机械坐标。

现有加工路径类

类名 说明
CDrill 钻孔
CCutLine 沿直线加工
CCutArc 沿圆弧加工
CCutPolyline 沿多段线加工
CCutShapeL 沿L形加工
CCutShapeU 沿U形加工
CCutCircle 沿圆弧加工

CCncObj类从RVB库的KFC类继承,已经实现了文件存储功能和复制功能,这样极大减少应用程序的开发工作量。

CCncObj类提供成员变量保存工艺参数。如下表:

变量 数据类型 说明
m_nSpeed double 速度
m_nAcc double 加速度
m_extra union 该参数不保存。不同设备表示的意思不一样,如扭力、点胶频率等
m_nCamWorkPos double Z轴上的相机工作位置
m_nToolWorkPos double Z轴上的工具工作位置
m_nMotionType int 移动类型
m_cutRadius double 刀具半径

控制点读写

加工路径类的控制点分为图像坐标点和对应的机械坐标点, 图像坐标点根据KFC类的访问方式进行访问。机械坐标按照统一的函数接口进行访问。

CCncObj* pCo = new CCutLine;

for(int i=0; iGetMacPosCount(); i++){

RvPoint_f64 pt = pCo->GetOrientedMacPosAt(i) ;

//…

}

delete pCo;

加工路径有起始点和结束点。如:

RvPoint_f64 st = pCo->GetStartMacPos() ;

RvPoint_f64 en = pCo->GetEndMacPos() ;

可以对加工路径对象进行移动一定距离,如:

pCo->MoveMac(100, 1000, FALSE);

或者以起始坐标位参考位置,将加工类移动到某个具体机械位置。如:

pCo-> MoveMacTo(59, 39, TRUE); //同时更新对应的图像坐标

坐标转换

图像坐标与机械坐标的转换通常分两种。一种是在知道机械坐标与图像坐标比例的情况下直接转换,这种方法应用场所比较小。另一种是根据手眼标定的结果,对坐标进行转换。

直接比例转换时,图像坐标转机械。如:

//修改图像坐标。通常在编辑器里面拖拉操作。

pCo-> m_nCcType = CCncObj::CC_DEF;

pCo->m_scalar.val[0] = 16.f;

pCo->m_scalar.val[1] = 16.f;

pCo-> UpdateMacPos();

手眼标定转换坐标需要指定已经标定的类对象,还要将标定类型设置为CC_RSM或RSM_E1。 如下:

CRobotSpaceMapE1 g_rsm;

//标定g_rsm

pCo-> m_nCcType = CCncObj:: CC_RSM_E1;

pCo-> m_ m_pRsmE1=& g_rsm;

pCo-> UpdateMacPos();

如果要从机械坐标转换成图像坐标,只需要调用UpdateCamPos函数即可。如:

//设定每个顶点的机械坐标,然后更新图像坐标

pCo-> m_nCcType = CCncObj:: CC_RSM_E1;

pCo-> m_ m_pRsmE1=& g_rsm;

pCo-> UpdateCamPos ();

路径补偿

路径补偿有单MARK或双MARK补偿。单MARK仅补偿平面偏差,双MARK可以补偿平面和旋转偏差。CCncObj提供多个函数完成坐标偏移补偿。

参考点位置一般有MARK定位工具获得,对单MARK补偿时,当个的路径加工对象补偿的基本过程如下:

RvOffset_f64 offs = CCncObj::CalcAlignCoefs( referPos , targetPos);

pCo-> MoveMac(offs.dx, offs.dy, FALSE);

双MARK点补偿方法类似,首先需要调用函数获得平面偏移量和角度偏差。如:

double angle = 0;

RvPoint_f64 center={0, 0};

RvOffset_f64 offs = CCncObj::CalcAlignCoefs( referPos1, referPos2, \ targetPos1, targetPos2, \ ¢er, &angle);

pCo->AlignMac(offs.dx, offs.dy, center.x, center.y, angle, FALSE);

CMarkLocater类

CMarkLocater也是一个标准的KFC类,从CShapeMatch类继承而来。除了保存了图像模板特征外, 还提供了保存对应的机械坐标,以及学习时的模板图像功能。

模板学习

模板学习可以先在编辑器设置合适的模板区域和所搜区。然后采集一帧图像进行学习,学习过程非常简单。如:

CMarkLocater mark;

//cam为相机对象, image图像的格式与相机要一致

cam.Fetch(image, NULL);

mark. Learn(image, NULL) ;

如果要保留当前的图像模板用于后续查看,调用如下语句:

mark.LogLearnedImage(image, FALSE);

当然,MARK学习以后一般也需要当前相机所在位置的机械坐标。

mark.SetMacPos(77, 88);

模板识别

在需要定位MARK的时候,一般将相机移动到学习模板的位置,然后拍照,与模板学习流程基本一致,最后调用模板识别函数完成。如:

mark.Recognize(image, NULL);

4.2 编辑视图类

加工路径类的头文件和库文件在Tabxlibs目录下。头文件在TabKits子目录。库文件(dll, lib)在bug子目录。

CAxisView移动视场类

CAxisView封装安装在(Z轴)主轴上的相机拍摄的视场。移动视场类可以工作在不同的模式下,这些模式用在各种不一样的作业场景下。

模式 说明
SM_DEFAULT 默认模式
SM_LEARN_MARK MARK点学习
SM_RUNTIME 生产运行
SM_CALL_SLANT CNC对象校准
SM_TRAY_OFFSET 托盘偏移补偿
SM_SIMULATE 模拟运行
SM_MATRIX_COPY CNC对象阵列复制

CAxisView类从KFC的CRealView继承,所有操作与该类基本一样。具体操作请参考相关文档。

CTrayView全景视场类

CTrayView封装全局相机视场(不移动),对整个作业位进行拍照。全景视场类也可以工作在不同模式下。

模式 说明
SM_DEFAULT 默认模式,适用于全局导航
SM_EDIT 编辑模式
SM_RUN 生产运行模式

CTrayView类从KFC的CRealView间接继承,所有操作与该类基本一样。具体操作请参考相关文档。



抖音视频号: 第一感机器视觉
微信公众号: 精浦科技
深圳市软云动力科技有限公司
东莞办事处: 广东省东莞市松湖智谷B6栋225b
公司地址: 广东省深圳市南山区桃园路金桃园大厦2191

二维码1 二维码2 二维码3


深圳市软云动力科技有限公司 版权所有  鄂ICP备2022015826号-2   

统计显示 ▼