技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 開放式激光振鏡運動控制器在Ubuntu+Qt下的激光振鏡校正

開放式激光振鏡運動控制器在Ubuntu+Qt下的激光振鏡校正

時間:2024-09-05 14:06:38來源:深圳市正運動技術(shù)有限公司

導(dǎo)語:?Ubuntu是一款免費且開源的操作系統(tǒng),基于強大的Linux內(nèi)核,它支持多用戶、多任務(wù)、多線程操作,擁有多CPU架構(gòu),可以簡化開發(fā)過程,具備出色的移植性。

  Ubuntu是一款免費且開源的操作系統(tǒng),基于強大的Linux內(nèi)核,它支持多用戶、多任務(wù)、多線程操作,擁有多CPU架構(gòu),可以簡化開發(fā)過程,具備出色的移植性。

  今天,正運動小助手給大家分享一下Ubuntu下基于QT的激光振鏡的校正。在正式學(xué)習(xí)之前,我們先了解一下正運動ZMC408SCAN-V22運動控制器,ZMC408SCAN-V22支持在Linux環(huán)境進行開發(fā)使用。

  01、ZMC408SCAN-V22硬件介紹

  ZMC408SCAN-V22是正運動技術(shù)推出的高性能雙振鏡運動控制器,集成了2個百兆以太網(wǎng)口,支持EtherCAT、EtherNET、CAN、RS232、RS485、24路通用數(shù)字輸入、20路通用數(shù)字輸出、2路通用模擬量輸出、2路通用模擬量輸入、4個本地差分脈沖軸接口、1個MPG手輪編碼器接口、2個帶反饋振鏡接口、1個LASER激光專用接口、1個FIBER激光器接口。開放式系統(tǒng)框圖如下所示:

正運動

  ZMC408SCAN-V22總線控制器支持EtherCAT總線連接,支持最快500μs的刷新周期,支持最多達16軸運動控制,支持直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸設(shè)置等;采用優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議可以實現(xiàn)實時的運動控制。

正運動

  ZMC408SCAN-V22通過CAN、EtherCAT總線可以連接各個擴展模塊,從而擴展數(shù)字量、模擬量或運動軸?梢栽赪indows,Linux,Mac,Android,Wince各種操作系統(tǒng)下開發(fā),提供vc,c#,vb.net,labview等各種環(huán)境的dll庫。上位機軟件編程參考《ZMotion PC函數(shù)庫編程手冊》。

正運動

  02、Linux下使用Ubuntu+Qt進行振鏡校正軟件的開發(fā)

  (一)振鏡校正的目的

  振鏡本身在制造過程中或者在長時間使用后可能會存在一些畸變,振鏡校正的一個主要目的就是檢測和修正這些畸變,以確保激光的精度。

  通過定期的校正和調(diào)整,可以有效地管理和糾正振鏡的畸變,從而提高激光系統(tǒng)的整體性能和穩(wěn)定性。

正運動

  未進行振鏡校正時標(biāo)刻的矩形

正運動

  振鏡校正后標(biāo)刻的矩形

  (二)新建Qt項目并添加函數(shù)庫

       1.在Qt Creator菜單選擇“File”→“New File or Project...”,打開創(chuàng)建項目向?qū)。選擇Application項目集,創(chuàng)建Qt Widgets Application項目,設(shè)置項目名稱和保存位置。

正運動

  2.導(dǎo)入廠家提供的相關(guān)函數(shù)庫及頭文件。

       (1)將zmotion.h和ZScancorrect.h頭文件、zmcaux.cpp和zmcaux.h以及l(fā)ibzmotion.so和libZScanCorrect.so庫復(fù)制到新建的項目文件夾中。

正運動

  (2)在Qt Creator選擇新建的Qt項目右擊選擇“Add Library...” → “External library”點擊next,將剛才復(fù)制到項目文件夾上的libzmotion.so和libZScanCorrect.so庫文件導(dǎo)入到項目中。

正運動

  (3)在Qt Creator下右擊新建的Qt項目,選擇“Add Existing Files...”,將之前復(fù)制到項目文件下的頭文件zmotion.h和ZScancorrect.h以及zmcaux.cpp和zmcaux.h添加到項目中。

正運動

  (4)函數(shù)庫添加成功后,打開pro文件可以看到相關(guān)的函數(shù)庫和頭文件信息。

正運動

  03、振鏡校正例程流程和相關(guān)函數(shù)介紹

  1.振鏡校正流程圖

正運動

  2.主要函數(shù)的介紹

       (1)取消校正

正運動

  (2)下載三次文件

正運動

  (3)多點迭代校正

正運動

  (4)保存校正數(shù)據(jù)到文件

正運動

  (5)讀取校正文件

正運動

  (6)使用校正文件進行校正

正運動

  (7)誤差補償后校正

正運動

  (8)相關(guān)錯誤碼

正運動

  04、振鏡校正例程的實現(xiàn)及原理

  1.預(yù)校正并標(biāo)刻

  原理:預(yù)校正通過標(biāo)刻圖形得到實際的標(biāo)刻大小,通過實際的大小計算出與目標(biāo)標(biāo)刻尺寸的縮放比例,當(dāng)預(yù)校正的實際大小和目標(biāo)標(biāo)刻的大小一致時,可以進行采點操作。

  ·

  void MainWindow::on_beforeCheck_mark_clicked(){ if( 0 == g_handle) { QMessageBox::warning(this,"提示","控制器未連接!"); return; } dataRenew(); //更新獲取頁面數(shù)據(jù) ZScan_CancelCorrect(g_handle, ui->scan_list->currentIndex(), ui->Units->text().toDouble(), 1.0, tableStartNum); // 先取消校正 int RowNum = sqrt(countRow());//獲取當(dāng)前選擇的校正點數(shù) QString strFile3 = CreateMakingString(RealCorrectSizeX, RealCorrectSizeY, RowNum, XLineLenght, YLineLenght); // 生成三次文件字符串 Down3File(strFile3); // 下載三次文件到控制器中 // 刷新列表,將列表數(shù)據(jù)插入為標(biāo)準(zhǔn)點坐標(biāo) model->removeRows(0, model->rowCount()); ZPoint *tmp = pointData(RowNum,dScanSize); for (int i = 0; i < RowNum * RowNum; i++) { QListrowItems; 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;//標(biāo)記為預(yù)校正}

  2.多點迭代校正的方式進行振鏡校正

  原理:多點迭代校正,通過實際測量得到標(biāo)刻點數(shù)據(jù),和標(biāo)準(zhǔn)點數(shù)據(jù)比較可以直觀的看到誤差,振鏡校正函數(shù)通過實際點數(shù)據(jù)對振鏡進行校正,在經(jīng)過多次迭代校正后可以明顯看出實際點位數(shù)據(jù)和標(biāo)準(zhǔn)點數(shù)據(jù)的誤差減小。

  ·

  bool MainWindow::ScanCorrection(int MakingRowNum){ //通過點數(shù)數(shù)據(jù),進行振鏡校正 memset(PointDataX, 0, MakingRowNum); memset(PointDataY, 0, MakingRowNum); int cur_item = model->rowCount(); // 檢查當(dāng)前數(shù)據(jù)項數(shù)量是否正確 if (cur_item != MakingRowNum) { QMessageBox::critical(this, "錯誤", "數(shù)據(jù)錯誤"); return false; } for (int row = 0; row < MakingRowNum; ++row)//將所有點數(shù)據(jù)取出,進行多點校正 { 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; } // 檢測數(shù)據(jù)是否正確 if (!CheckCorrectData(MakingRowNum,PointDataX,PointDataY)) { if (QMessageBox::question(this, "警告", "數(shù)據(jù)可能不正確,請檢查數(shù)據(jù)\r\nyes表示退出校正\r\nno表示繼續(xù)校正", QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { return false; } } double x1 = -RealCorrectSizeX / 2; double y1 = -RealCorrectSizeY / 2; double x2 = RealCorrectSizeX / 2; double y2 = RealCorrectSizeY / 2; // 調(diào)用 ZScan_CorrectMorePtIter 函數(shù),傳遞適當(dāng)?shù)膮?shù) 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.根據(jù)校正文件進行振鏡校正

  原理:校正文件本質(zhì)上是通過多點迭代校正生成的,將校正點數(shù)據(jù)都存儲在文件中,通過讀取校正文件,將數(shù)據(jù)讀出,對振鏡進行校正,若文件校正完存在輕微誤差可以通過文件補償?shù)U姆绞教岣咝U取?/p>

  ·

  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) { // 設(shè)置 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方向設(shè)置失敗 錯誤碼:%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方向設(shè)置失敗 錯誤碼:%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, "信息", "文件校正完成"); }}

  05、通過振鏡校正例程對激光振鏡進行校正

  1.多點迭代校正方式進行振鏡校正

  (1)連接到控制器,并進行工藝參數(shù)設(shè)置,根據(jù)實際激光器類型和IO參數(shù)以及標(biāo)刻參數(shù)進行設(shè)置。

正運動

  (2)輸入需要實際標(biāo)刻的尺寸,進行預(yù)校正標(biāo)刻,使用預(yù)校正標(biāo)刻的實際XY測量值來計算縮放比例,可以進行多次預(yù)校正標(biāo)刻和測量,計算出較為精準(zhǔn)的比例,這里的誤差越小,后續(xù)校正的次數(shù)將會減少。

正運動

  (3)通過導(dǎo)入點數(shù)據(jù)或者手動填入點數(shù)據(jù),進行標(biāo)刻并校正,可以通過與標(biāo)準(zhǔn)點坐標(biāo)數(shù)據(jù)對比,直觀看到誤差。

正運動

  (4)繼續(xù)測量標(biāo)刻點的數(shù)據(jù),導(dǎo)入點數(shù)據(jù)或手動添加到程序中,重復(fù)步驟二三提高校正精度。若精度還是達不到要求,可以繼續(xù)加點迭代校正來提高精度,若已達到精度則可以將校正數(shù)據(jù)保存到校正文件中,方便后續(xù)直接使用文件校正。

正運動

  2.文件校正方式進行振鏡校正

  (1)選擇校正文件進行振鏡校正

正運動

  (2)進行實際測量,若測量數(shù)據(jù)無誤,則校正完成。若出現(xiàn)點位誤差可采取坐標(biāo)補償?shù)姆绞竭M行補償校正,將補償值填入,進行校正并標(biāo)刻,重新測量數(shù)據(jù),可多次進行補償操作,若誤差過大,或者較多點位存在問題,需要使用多點疊加迭代校正的方式進行振鏡校正。

正運動

完整代碼獲取地址

正運動

  本次,正運動技術(shù)開放式激光振鏡運動控制器在Ubuntu+Qt下的激光振鏡校正,就分享到這里。

  更多精彩內(nèi)容請關(guān)注“正運動小助手”公眾號,需要相關(guān)開發(fā)環(huán)境與例程代碼,請咨詢正運動技術(shù)銷售工程師:400-089-8936。

  本文由正運動技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國智能制造水平。文章版權(quán)歸正運動技術(shù)所有,如有轉(zhuǎn)載請注明文章來源。

標(biāo)簽: 正運動

點贊

分享到:

上一篇:如何判斷電源管理芯片的好壞...

下一篇:電纜案例 | 適用于高強度自動...

中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(treenowplaneincome.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責(zé)任。

網(wǎng)站簡介|會員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號