开放式激光振镜运动控制器:C++振镜矫正方法与实现

50 篇文章 11 订阅
48 篇文章 0 订阅

今天,正运动小助手给大家分享一下开放式激光振镜运动控制器ZMC408SCAN进行振镜矫正的方法与实现说明。

01 ZMC408SCAN控制器介绍

ZMC408SCAN是正运动技术新推出的一款支持EtherCAT总线的开放式激光振镜运动控制器,专为工业激光+振镜+运动控制方面的应用而设计。通过EtherCAT总线和脉冲轴接口能实现多轴联动运动控制。

ZMC408SCAN支持ETHERNET、EtherCAT、USB、CAN、RS485、RS232等通讯接口,通过CAN、EtherCAT总线可以连接各个扩展模块,从而扩展数字量、模拟量或运动轴。
在这里插入图片描述

(1)ZMC408SCAN内置高精度PSO位置同步输出功能,在加工圆角、曲线部分时即使进行了减速调整,在高速加工的场合,也能控制激光输出的间距保持恒定;

(2)支持激光振镜控制和振镜反馈,包含2个振镜接口,支持2D振镜和3D振镜,配合不带加减速的运动指令MOVESCAN,拐角处振镜加工自动延时,完成精准高效的激光控制,提高激光加工设备的产能;

(3)通过指令在运动中灵活的调节激光开光/关光延时,响应快,精确到us级别的控制,且设置过程简单,大大缩短了工程师的调参时间;

(4)自带LASER激光器控制接口,支持IPG、YLR、YLS等类型激光电源,还带一个EXIO扩展IO接口,通过定制转接板,灵活控制市场上主流的各种激光器;

(5)支持PC同时控制16个ZMC408SCAN控制器同时工作,形成一种振镜阵列的激光加工;

(6)板载4路高速差分脉冲输出,并带4路高速差分编码器反馈,支持EtherCAT总线驱动器的控制,支持5轴XYZAC轴的插补,支持振镜轴与运动轴混合插补;

(7)支持直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴设置等多种运动控制功能。

02 振镜控制

激光振镜是一种专门用于激光加工领域的特殊的运动器件,它靠两个振镜片反射激光, 形成XY平面的运动。

激光振镜不同于一般的电机,激光振镜具有非常小的惯量,且在运动的过程中负载非常小,系统的响应非常快,因此在振镜运动中可以不用考虑振镜加减速。

振镜一般分模拟振镜与数字振镜,模拟振镜就是振镜驱动板是接收模拟信号方式,常用的模拟振镜信号是直流电压-5伏到+5伏变化的信号,对应的是电机摆动的角度,比如-5V到+5V对应-10度到+10度的电机摆动角度。

数字振镜采用数字信号进行控制,数字信号则符合XY2-100协议。数字量-32768~32767对应电机的最大摆动角度。

正运动针对振镜轴控制提供来一种专用的运动指令,通过ZAux_Direct_MoveScanAbs或者ZAux_Direct_MoveScan实现振镜的快速响应。

Scan运动指令相比普通运动指令控制不带加减速规划,支持us级别的时间控制。通过ZAux_Direct_SetForceSpeed设置的速度与矢量距离直接计算出运行时间。

目前正运动SCAN控制器支持1-2路XY2-100数字振镜轴的控制。
在这里插入图片描述

一、振镜轴配置

正运动SCAN控制器支持1-2路振镜轴,不同控制器映射的轴号及支持的振镜轴功能不同,不同振镜组对应轴号如下图。

通过指令ZAux_Direct_SetAtype设置对应振镜轴类型,振镜轴类型分为三种:

  • 一种轴类型值为20(振镜类型,带振镜状态反馈,仅ZMC408SCAN支持);

  • 一种轴类型值为21(振镜轴控制类型);

  • 一种轴类型值为22(振镜类型,带振镜位置反馈,仅ZMC408SCAN支持)。

*表示不支持的功能。
在这里插入图片描述

二、振镜矫正

1.重点说明

激光振镜扫描系统如下图所示,可见振镜扫描的实际工作范围由振镜的最大偏转角度与工作高度决定。因此振镜轴偏转角度对应输出-32768~32767与实际工作范围做单位映射时需要按照根据测试长度做比例映射。

在这里插入图片描述

振镜扫描系统建立的坐标系是一个非正交的坐标系,实际的扫描场会造成枕型失真。由于振镜本身扫描造成的枕型失真如图(左),另外由于F-Theta平面场镜的使用,会造成输出轮廓的桶型失真如图(中),叠加以后输出的图形具有桶型和枕型双重失真如图(右)。

在这里插入图片描述

为了使软件坐标与实际运行距离场地对应及输出轨迹不失真,则需要需要实时的对每一个数据点进行校正,通常采用查找表分段线性插值的方法进行位置校正,校正点越多实际输出位置越精准。

正运动SCAN控制器提供了BOX校正、多点校正等方法,不管是系数校正还是多点校正,校正点参数都是写到控制器内部系统数组TABLE寄存器的。因此在程序中有其他功能应用到TABLE寄存器时需要注意地址的合理分配。

(1)Box系数校正

系数校正指的是根据振镜输出图形枕/桶形失真、平行四边形失真、梯形失真、比例缩放几种情况进行系数调整校正。

通过调用ZScan_CorrectFactor进行系数校正。先控制振镜绘制出一个正方形校正图形,根据校正图形的失真按下图情况调整对应的系数参数,根据标刻长度与测量长度调整缩放系数,直到实际标刻的尺寸与设置一致时认为校正成功,校正系以是填写的变化量,通常以0值为参考基准变化。
在这里插入图片描述

(2)9点校正

9点校正指的是根据在工作范围内标刻3*3的表格,根据每个点的理论位置与实际位置来进行振镜校正。

先控制振镜预绘制出一个3*3校正表格图形,按下图所示P1-P9的顺序填入X坐标与Y坐标实际测量值,填入P1点的理论标刻与P9点的理论坐标,通过调用ZScan_Correct9进行9点校正。需重新标刻测试,直到实际标刻与理论值达到预期精度范围。

在这里插入图片描述

(3)25点校正

25点校正指的是根据在工作范围内标刻5*5的表格,校正过程与9点校正相同,通过调用ZScan_Correct25进行25点校正。校正点数越多校正精度也越高。

2.振镜指令介绍
在这里插入图片描述

(1)振镜轴9点矫正
在这里插入图片描述

(2)振镜轴25点矫正

在这里插入图片描述

(3)振镜轴系数矫正

在这里插入图片描述

(4)取消振镜矫正

在这里插入图片描述

03 程序展示

九点矫正与25点矫正过程相同,但25点矫正精度更高,可通过九点矫正例程改写25点矫正。

1.九点矫正程序如下

ZMC_HANDLE handle = NULL;      //连接句柄
int rtn = ZAux_OpenEth("192.168.0.11", &handle); //连接控制器
if(CheckError(rtn,"ZAux_OpenEth")) return;  //检查函数返回
for(int iAxis = 4;iAxis<6;iAxis++)
{
    rtn = ZAux_Direct_SetAtype(handle,iAxis,21); //设置轴为振镜轴
    if(CheckError(rtn,"ZAux_Direct_SetAtype")) return;
    rtn = ZAux_Direct_SetUnits(handle,iAxis,500);   //设置轴脉冲当量
    if(CheckError(rtn,"ZAux_Direct_SetUnits")) return;
}
rtn = ZScan_CancelCorrect(handle,0,-1,-1,200,1,1000);  //取消振镜校正if(CheckError(rtn,"ZScan_CancelCorrect")) return;
double m_dXMeasurePt[9] = {-51.5,0,49.5,-52.9,0,50.1,-51.8,0,49.0};
double m_dYMeasurePt[9] = {-51.5,-51.0,-53.0,0,0,0,51.9,51.5,53.9};
rtn = ZScan_Correct9(handle,0,m_dXMeasurePt,m_dYMeasurePt,0,21,500,-50,-50,50,50,1,1000); //振镜0 9点校正,校正数据存储在系统数组TABLE(1000 - 1004+21*21*2)
if(CheckError(rtn,"ZScan_CorrectFactor")) return;
rtn = ZAux_Close( handle);        //关闭连接,释放句柄
if(CheckError(rtn,"ZAux_Close")) return;
handle = NULL;

2.系数矫正例程如下

ZMC_HANDLE handle = NULL;      //连接句柄
int rtn = ZAux_OpenEth("192.168.0.11", &handle); //连接控制器
if(CheckError(rtn,"ZAux_OpenEth")) return;  //检查函数返回
for(int iAxis = 4;iAxis<6;iAxis++)
{
    rtn = ZAux_Direct_SetAtype(handle,iAxis,21); //设置轴为振镜轴
    if(CheckError(rtn,"ZAux_Direct_SetAtype")) return;
    rtn = ZAux_Direct_SetUnits(handle,iAxis,500);   //设置轴脉冲当量
    if(CheckError(rtn,"ZAux_Direct_SetUnits")) return;
}
rtn = ZScan_CancelCorrect(handle,0,-1,-1,200,1,1000);  //取消振镜校正if(CheckError(rtn,"ZScan_CancelCorrect")) return;
double m_dMaxBox[2] = {131,131};  //最大校正区域
double m_dCorrectBox[] = {131,131};  //实际校正区域
double m_dOffset[2] = {0,0};   //偏移量   一般用于红光偏移
double m_pdFactor[2][4] = {{1,0,0,0},{1,0,0,0}};   //校正系数   缩放系数、桶型/枕型畸变系数、平行四边形畸变系数、梯形畸变系数
rtn = ZScan_CorrectFactor(handle,0,m_dMaxBox[0],m_dMaxBox[1],m_dCorrectBox[0],m_dCorrectBox[1],m_dOffset[0],m_dOffset[1],&m_pdFactor[0][0],&m_pdFactor[1][0],0,21,1,1,500,1,1000); //振镜0系数校正,校正数据存储在系统数组TABLE(1000 - 1004+21*21*2)
if(CheckError(rtn,"ZScan_CorrectFactor")) return;
rtn = ZAux_Close( handle);        //关闭连接,释放句柄
if(CheckError(rtn,"ZAux_Close")) return;
handle = NULL;

04 振镜矫正工具

振镜矫正工具包含了多种矫正方式,9点矫正、25点矫正、系数矫正、多点矫正、文件矫正。
在这里插入图片描述

参数设置界面机械参数:

先通过IP地址选择,连上对应控制器,然后设置机械参数选择激光器类型,设置好振镜号,将标刻图形的XY方向与软件显示的一致。

打标参数:

从上至下依次填写标刻速度、空移速度、轴类型、脉冲当量(运动指令与速度指令的基本单位,需要修改脉冲当量为振镜运动1mm的脉冲个数,修改过后标刻图形相较于预定尺寸相差较小就能开始测量矫正了,预校正标刻图形不完整或图形比预定尺寸大很多时,将此参数调小;反之则将参数调大)。

例如:

  • 开关延时:多点矫正圆中心的点深,调开关延时
  • 关光延时:最外圈不封口的情况调关光延时
  • 拐角延时:右边的线深,调拐角延时
  • 跳转延时:多点矫正圆点有小尾巴,调跳转延时
  • 结束延时:所有的运动结束后都加结束延时

激光能量控制:

(1)模拟量DA(04095对应010V电压)

(2)PWM(调机占空比,设置频率)

(3)IO组合

注:激光能量的控制参数,需要根据激光器能量功率的控制类型来进行修改,需参考激光器手册。
在这里插入图片描述

1.9点矫正和25点矫正

  • 设置矫正参数的table起始位置:这个地址不要与其他table地址位置冲突,约使用1000个数据,占用1000个table地址;
  • 红光游览:可用来矫正图形;
  • 预标刻尺寸:面积,标刻预校正图形使用此参数;
  • 预标刻出图形后将标刻图形取出测量:测量两点之间的距离,将两点之间的距离参数填入对应的框内;
  • 标刻预矫正:根据参数设置和预标刻尺寸开始标刻预矫正图形;
  • 仅矫正按钮:只进行振镜矫正,不标刻;
  • 标刻尺寸:面积,标刻预矫正图形使用此参数;
  • 矫正并标刻:根据标刻尺寸,开始矫正并标刻图形;
  • 保存到文件和保存到控制器:保存到文件是保存到电脑本地(保存文件可用于文件矫正和多点矫正),保存到控制器是保存到控制器的flash块(要确保不同的振镜轴号间用不同flash块,不能冲突);
  • 急停:标刻急停。

在这里插入图片描述

(1)9点矫正标刻预矫正效果图
在这里插入图片描述

在这里插入图片描述

(2)矫正并标刻效果图
在这里插入图片描述

在这里插入图片描述

(3)25点矫正同9点矫正相同,只是点数更多,矫正精度更高。
在这里插入图片描述

2.系数矫正

系数矫正和9点矫正等差不多,只是多了一个原点偏移和XY的缩放比。
在这里插入图片描述

3.多点矫正

(1)矫正大小:同上;

(2)标刻点半径:标刻圆(点)半径;

(3)标刻点数量:可选99、1717、3333、6565,目前开发99、1717,更多点数矫正请联系正运动技术支持工程师;

(4)填充点间距:同心圆半径差;

(5)完整图形:标刻完整图形(扫描仪可以完整扫描出整张图片);

(6)左边/右边图形:标刻左/右图形;(图形较大时,使用扫描仪无法一次将所有图形全部扫描,请使用左右分别标刻,分别扫描,导入两张图片);

(7)急停:标刻急停;

(8)点处理:

  • 模式:单张图片、两张图片:根据扫描标刻后的矫正图纸是否分两次扫描,或分左右标刻
  • 极性:白背景黑点、黑背景白点
  • 阈值方式:自动、手动阈值:(阈值参数范围0~255)黑白照片白色为255,黑色为0,处于低阈值至高阈值之间之间的像素处理为 255,否则为
    0,用于处理扫描标刻后的图像处理
  • 低阈值:0~255
  • 高阈值:0~255 应设置为大于等于低阈值数据
  • 最大面积/最小面积:通过筛选原点面积过滤图像噪点(杂点)
  • 详见Zvision帮助

(9)寻入9点矫正文件:导入9点矫正文件(多点矫正需要9点矫正中“保存矫正数据到文件”的文件)。
在这里插入图片描述

4.文件矫正

功能:导入9/25/多点矫正“保存矫正数据到文件”保存的文件,更新参数至矫正界面、仅矫正或矫正并标刻等。
在这里插入图片描述

5.视频演示

开放式激光振镜运动控制器:C++振镜矫正方法与实现

本次,正运动技术开放式激光振镜运动控制器:C++振镜矫正方法与实现,就分享到这里。

本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
振镜校正是一种应用于计算机视觉的技术,常用于图像处理和机视觉任务中。OpenCV是一个开源的计算机视觉库,其中包含了一些用于振镜校正的函数和工具。 振镜校正是指通过使用振镜的特性来校正图像中的畸变。振镜是一种呈弧形的物体,常用于相机镜头的设计中。当图像通过相机镜头时,由于振镜的存在,会产生一些畸变,如鱼眼效果或畸变图像的边缘。这种畸变会影响图像的准确度和质量,振镜校正可以帮助恢复图像的真实形状和边缘。 OpenCV提供了一些用于振镜校正的函数,如cv::undistort()和cv::initUndistortRectifyMap()。这些函数根据摄像机的校正矩阵以及镜头的畸变系数进行图像畸变的校正。校正后的图像会更加真实和准确,有助于提高后续图像处理任务的效果。 在使用OpenCV进行振镜校正时,我们需要先获取摄像机的内参矩阵和畸变系数。内参矩阵包含了镜头的焦距、主点位置和图像的尺寸等信息,畸变系数包括径向畸变和切向畸变。根据这些参数,我们可以使用cv::calibrateCamera()函数来得到校正矩阵和畸变系数。 接下来,我们可以使用cv::initUndistortRectifyMap()函数来生成校正映射矩阵。这个矩阵描述了如何将输入图像映射到校正后的图像上。最后,我们可以使用cv::remap()函数来应用这个校正映射矩阵,将图像进行振镜校正。 振镜校正是一个重要的图像处理步骤,可以提高图像处理和机视觉任务的准确性和稳定性。OpenCV提供了方便的函数和工具,使得振镜校正变得简单和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正运动技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值