The value of Zmotion is to bring customers more success!

Ubuntu是一款免费且开源的操作系统,基于强大的Linux内核,它支持多用户、多任务、多线程操作,拥有多CPU架构,可以简化开发过程,具备出色的移植性。



(一) 振镜校正的目的
振镜本身在制造过程中或者在长时间使用后可能会存在一些畸变,振镜校正的一个主要目的就是检测和修正这些畸变,以确保激光的精度。
通过定期的校正和调整,可以有效地管理和纠正振镜的畸变,从而提高激光系统的整体性能和稳定性。

未进行振镜校正时标刻的矩形

振镜校正后标刻的矩形





1.振镜校正流程图








(8)相关错误码
1.预校正并标刻
void MainWindow::on_beforeCheck_mark_clicked()
{
if( 0 == g_handle)
{
QMessageBox::warning(this,"提示","控制器未连接!");
return;
}
dataRenew(); //更新获取页面数据
ZScan_CancelCorrect(g_handle, ui->scan_list->currentIndex(), ui->Units->text().toDouble(), 1.0, tableStartNum); // 先取消校正
int RowNum = sqrt(countRow());//获取当前选择的校正点数
QString strFile3 = CreateMakingString(RealCorrectSizeX, RealCorrectSizeY, RowNum, XLineLenght, YLineLenght); // 生成三次文件字符串
Down3File(strFile3); // 下载三次文件到控制器中
// 刷新列表,将列表数据插入为标准点坐标
model->removeRows(0, model->rowCount());
ZPoint *tmp = pointData(RowNum,dScanSize);
for (int i = 0; i < RowNum * RowNum; i++)
{
QList rowItems;
rowItems << new QStandardItem(QString::number(tmp[i].x,'f',3))<< new QStandardItem(QString::number(tmp[i].x,'f',3))<< new QStandardItem(0,'f',3))<< new QStandardItem(0,'f',3);
model->insertRow(i, rowItems);
}
delete [] tmp;
PreCorrectFlag = 0;//标记为预校正
}2.多点迭代校正的方式进行振镜校正
原理:
多点迭代校正,通过实际测量得到标刻点数据,和标准点数据比较可以直观的看到误差,振镜校正函数通过实际点数据对振镜进行校正,在经过多次迭代校正后可以明显看出实际点位数据和标准点数据的误差减小。
bool MainWindow::ScanCorrection(int MakingRowNum)
{
//通过点数数据,进行振镜校正
memset(PointDataX, 0, MakingRowNum);
memset(PointDataY, 0, MakingRowNum);
int cur_item = model->rowCount(); // 检查当前数据项数量是否正确
if (cur_item != MakingRowNum)
{
QMessageBox::critical(this, "错误", "数据错误");
return false;
}
for (int row = 0; row < MakingRowNum; ++row)//将所有点数据取出,进行多点校正
{
QStandardItem *item = model->item(row, 2);
PointDataX[row] = item ? item->text().toDouble() : 0.0;
item = model->item(row, 3);
PointDataY[row] = item ? item->text().toDouble() : 0.0;
}
// 检测数据是否正确
if (!CheckCorrectData(MakingRowNum,PointDataX,PointDataY))
{
if (QMessageBox::question(this, "警告", "数据可能不正确,请检查数据\r\nyes表示退出校正\r\nno表示继续校正", QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
{
return false;
}
}
double x1 = -RealCorrectSizeX / 2;
double y1 = -RealCorrectSizeY / 2;
double x2 = RealCorrectSizeX / 2;
double y2 = RealCorrectSizeY / 2;
// 调用 ZScan_CorrectMorePtIter 函数,传递适当的参数
int ret = ZScan_CorrectMorePtIter(g_handle, ui->scan_list->currentIndex(), PointDataX, PointDataY, ui->checkBox->isChecked(), sqrt(countRow()), ui->Units->text().toDouble(),x1, y1, x2, y2, ui->mark_Size->text().toDouble(), 1.0, tableStartNum, PreCorrectFlag);
if (CheckError(ret, "ZScan_CorrectMorePtIter"))
return false;
PreCorrectFlag = 1;
return true;
}3.根据校正文件进行振镜校正
void MainWindow::on_but_Check_clicked()
{
if( 0 == g_handle)
{
QMessageBox::warning(this,"提示","控制器未连接!");
return;
}
QString fileName = QString::fromStdString(ui->file_Route->text()
.toLatin1().data());
if (fileName.isEmpty())
{
QMessageBox::critical(this, "错误", "请先选择矫正文件!");
return;
}
if (ChangeDirMode == 1)
{
// 设置 X 和 Y 方向的步进比例
int ret = 0;
if (ui->x_Dir->text().toInt() == -1)
{
ret = ZAux_Direct_StepRatio(g_handle, markpara.AxisList[0], 1, -1);
}
else
{
ret = ZAux_Direct_StepRatio(g_handle, markpara.AxisList[0], 1, 1);
}
if (ret != 0)
{
QMessageBox::critical(this, "错误", QString("文件校正失败 X方向设置失败 错误码:%1").arg(ret));
return;
}
if (ui->y_Dir->text().toInt() == -1)
{
ret = ZAux_Direct_StepRatio(g_handle, markpara.AxisList[1], 1, -1);
}
else
{
ret = ZAux_Direct_StepRatio(g_handle, markpara.AxisList[1], 1, 1);
}
if (ret != 0)
{
QMessageBox::critical(this, "错误", QString("文件校正失败 Y方向设置失败 错误码:%1").arg(ret));
return;
}
}
int rest = ZScan_CorrectFromFile(g_handle, fileName.toLatin1().data(), scanNum, tableStartNum);//使用校正文件进行振镜校正
if (rest != 0)
{
QMessageBox::critical(this, "错误", QString("文件校正错误 错误码:%1").arg(rest));
}
else
{
QMessageBox::information(this, "信息", "文件校正完成");
}
}1.多点迭代校正方式进行振镜校正



(4)继续测量标刻点的数据,导入点数据或手动添加到程序中,重复步骤二三提高校正精度。 若精度还是达不到要求,可以继续加点迭代校正来提高精度,若已达到精度则可以将校正数据保存到校正文件中,方便后续直接使用文件校正。

2.文件校正方式进行振镜校正



完整代码获取地址

本次,正运动技术开放式激光振镜运动控制器在Ubuntu+Qt下的激光振镜校正,就分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。

正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。主要业务有:运动控制卡_运动控制器_EtherCAT运动控制卡_EtherCAT控制器_运动控制系统_视觉控制器__运动控制PLC_运动控制_机器人控制器_视觉定位_XPCIe/XPCI系列运动控制卡等等。