時間:2024-09-10 16:29:11來源:深圳市正運動技術有限公司
上節(jié)課程我們講述了如何通過Ubuntu+Qt進行振鏡校正(詳情點擊→開放式激光振鏡運動控制器在Ubuntu+Qt下的激光振鏡校正),本節(jié)文本標刻是在振鏡校正的前提下實現的。
在正式學習之前,我們先了解一下正運動技術的ZMC408SCAN-V22運動控制器,ZMC408SCAN-V22支持在Linux環(huán)境進行開發(fā)使用。
01ZMC408SCAN-V22硬件介紹
ZMC408SCAN-V22是正運動技術推出的高性能雙振鏡運動控制器,集成了2個百兆以太網口,支持EtherCAT、EtherNET、CAN、RS232、RS485、24路通用數字輸入、20路通用數字輸出、2路通用模擬量輸出、2路通用模擬量輸入、4個本地差分脈沖軸接口、1個MPG手輪編碼器接口、2個帶反饋振鏡接口、1個LASER激光專用接口、1個FIBER激光器接口。開放式系統框圖如下所示:
ZMC408SCAN-V22總線控制器支持EtherCAT總線連接,支持最快500μs的刷新周期,支持最多達16軸運動控制,支持直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸設置等;采用優(yōu)化的網絡通訊協議可以實現實時的運動控制。
ZMC408SCAN-V22支持ETHERNET、EtherCAT、USB、CAN、RS485、RS232等通訊接口,通過CAN、EtherCAT總線可以連接各個擴展模塊,從而擴展數字量、模擬量或運動軸??梢栽趙indows,linux,Mac,Android,wince各種操作系統下開發(fā),提供vc,c#,vb.net,labview等各種環(huán)境的dll庫,如下圖。上位機軟件編程參考《ZMotion PC函數庫編程手冊》。
02Ubuntu+Qt進行文本標刻項目的開發(fā)
(一)新建Qt項目并添加函數庫1.在Qt Creator菜單選擇“文件”→“新建文件或項目...”,打開創(chuàng)建項目向導。選擇Application項目集,創(chuàng)建Qt Widgets Application項目,設置項目名稱和保存位置。
2.導入廠家提供的相關函數庫及頭文件。
(1)將zmotion.h和zmcaux.h、zmcaux.cpp以及l(fā)ibzmotion.so庫復制到新建的項目文件夾中。
(2)在Qt Creator選擇新建的Qt項目右擊選擇“添加庫...”→“外部庫”點擊下一步,將剛才復制到項目文件夾上的libzmotion.so庫文件導入到項目中。
(3)在Qt Creator下右擊新建的Qt項目,選擇“添加現有文件...”,將之前復制到項目文件下的libzmotion.so、zmotion.h、zmcaux.cpp以及zmcaux.h添加到項目中。
(4)函數庫添加成功后,打開pro文件可以看到相關的函數庫和頭文件信息。此時已經將例程需要用到的函數庫和頭文件都加入到項目中了,接下來開始實現例程。
(二)安裝Linux下字體引擎庫
1.FreeType字體引擎庫的安裝
字體引擎庫有很多,在例程中我們選擇使用FreeType字體引擎庫來進行字符輪廓解析。首先我們需要在Ubuntu環(huán)境中下載FreeType庫,在終端命令行中輸入sudo apt-get update和sudo apt-get install libfreetype6 libfreetype6-dev命令在線安裝FreeType庫,如下圖所示:
安裝完成后只需要在使用時引入#include 頭文件即可。實現文本標刻的例程必須安裝字體引擎庫來解析字符,否則無法得到字符的關鍵點坐標,就無法完成標刻和繪制。
2.設置字體文件
FreeType庫沒有掃描系統字體庫文件的功能,在進行輪廓解析時,需要將字體文件傳入。所以在正式開始例程前,需要把提前下載好的字體文件放在項目文件下,方便解析字體時直接使用。在當前項目下新建一個字體文件夾,將提前下載好的字體復制到文件夾中,如下圖所示:
03文本標刻流程以及相關函數介紹
1.文本繪制流程
文本的處理首先是需要將文本輪廓進行解析,對輪廓信息進行分解,輪廓信息中包含輪廓的類型,文本輪廓分為線段、二次貝塞爾曲線、三次貝塞爾曲線,對于貝塞爾曲線類型需要將曲線分解為小線段進行處理,可以控制分解的精度,將所有的輪廓線處理完即代表已經完成當前字符的繪制。
2.相關函數接口介紹
(1)加載和初始化字體文件
(2)計算貝塞爾曲線的二次項系數
貝塞爾曲線是通過控制點來定義的一種曲線形狀,貝塞爾曲線的一個關鍵性質是它是由一組控制點和二項式基函數組合而成的。二項式系數確定了每個控制點在貝塞爾曲線中的權重。在計算貝塞爾曲線上的點時,每個控制點的貢獻由其對應的二項式系數乘以相應的基函數得出。貝塞爾曲線通過調整控制點的位置和二項式系數來實現各種復雜的曲線形狀。
(3)獲取貝塞爾曲線的點坐標
(4)三次文件初始化
(5)生成空移字符串
(6)生成開光字符串
(7)生成關光字符串
(8)生成標刻點字符串
(9)下載三次文件
(10)通用命令執(zhí)行接口
04文本標刻的實現例程
文本標刻例程首先需要獲取到文本數據,獲取到外部輸入文本后,將文本進行單個解析,生成字符輪廓數據,接下來的處理就是對輪廓數據進行轉換,將貝塞爾曲線數據全部轉換為小線段來處理,最后將小線段相連接,生成三次文件字符串,下載到控制器中,執(zhí)行標刻命令即可完成文本的標刻。
(1)將文本解析為輪廓數據,FreeType庫解析文本時需要對字符進行單個處理,將每個字符都進行解析輪廓。
·
//初始化輪廓數據FT_Init_FreeType(&library);const char* fontFilePath = gainFontFilePath(text_data.type);FT_New_Face(library, fontFilePath, 0, &face);// 獲取字符的索引FT_UInt glyphIndex = FT_Get_Char_Index(face, charCode);// 加載字符的輪廓信息FT_Int32 loadFlags = FT_LOAD_DEFAULT | FT_LOAD_NO_BITMAP;FT_Load_Glyph(face, glyphIndex, loadFlags);// 獲取字形槽FT_GlyphSlot glyphSlot = face->glyph;// 獲取字形的輪廓信息FT_Outline* outline = &glyphSlot->outline;
(2)將輪廓數據轉換為小線段生成三次文件字符串,對于線段數據可以直接通過坐標位置生成三次文件字符串,對于貝塞爾曲線數據,需要循環(huán)遍歷,將所有曲線數據轉換為小線段數據,最后生成三次文件字符串。
·
//將所有輪廓數據遍歷,對不同類型的數據進行不同的處理for(int n=0;n < outline->n_contours;n++){ LaserScan_z3p_EmptyMove(strFile3,startX,startY,markPara.JumpSpeed,corrJumpDelay);//空移到起點 LaserScan_z3p_OpenLight(strFile3,markPara.Io_value.emit_io,markPara.OpenDelay,markPara.MarkSpeed);//開光 tag = FT_CURVE_TAG(tags[0]); //判斷當前輪廓數據的類型 switch(tag) { case FT_CURVE_TAG_ON: //線段 { LaserScan_z3p_Mark(strFile3,markPara.CorDelay,line,2); } case FT_CURVE_TAG_CONIC: //兩次貝塞爾曲線 { ZPointF *pointData = new ZPointF[myVector.size()]; for (unsigned long i = 0; i <= myVector.size() - 1; ++i) { pointData[i] = myVector[i]; } LaserScan_z3p_Mark(strFile3,markPara.CorDelay,pointData,myVector.size());//標刻 } default: //三次貝塞爾曲線 { ZPointF *pointData = new ZPointF[myVector.size()]; for (unsigned long i = 0; i <= myVector.size() - 1; ++i) { pointData[i] = myVector[i]; } LaserScan_z3p_Mark(strFile3,markPara.CorDelay,pointData,myVector.size());//標刻 } } LaserScan_z3p_CloseLight(strFile3,markPara.Io_value.emit_io,markPara.CloseDelay,corrJumpDelay);//關光}
(3)使用Free Type庫解析生成的輪廓坐標點,是按照內部矩陣的像素位置決定,暫時沒有相關的函數來調整起始點坐標位置,但是在使用文本標刻時,必須要確定標刻的起點位置,所以在例程中的實現方法是將解析出的的坐標位置進行比較,得到最小的X和Y坐標,將所有的輪廓坐標偏移最小坐標位置,保證起始點是在原點位置開始,后續(xù)可以通過更改起點位置來確定相對位置。
(4)三次文件字符串追加完成后,將三次文件下載到控制器中,進行文本標刻。
·
//初始化三次文件字符串LaserScan_z3p_Init();//生成文本標刻字符串Z3p_process();//回原點,打開急停信號,關閉激光器使能LaserScan_z3p_EmptyMove(strFile3,0,0,markPara.JumpSpeed,corrJumpDelay);//空移到原點//將三次文件字符串下載到控制器中ZMC_DownMem3File(g_handle,strFile3.toLatin1().data(),strFile3.length(),"Zmc_text.z3p");QString filePath = "Zmc_text.z3p";QFile file(filePath);//在當前項目下生成三次文件if (file.open(QIODevice::WriteOnly | QIODevice::Text)){ QTextStream stream(&file); stream << strFile3; file.close(); QMessageBox::warning(this,"提示","3次文件生成成功!");}
05文本標刻的實現效果
1.建立控制器連接,設置激光器參數和工藝參數。
2.輸入需要標刻的文本,可以根據需要設置相關的文字屬性,下面是輸入文字通過QPaint繪制的文本。
3.可以更改字體,文本開始位置以及設置傾斜屬性,下面是設置后的效果。
4.點擊生成三次文件,選擇標刻圖形,下圖是通過示波器抓取的標刻數據。
完整代碼獲取地址
▼
本次,正運動技術開放式激光振鏡運動控制器在Ubuntu+Qt下的文本標刻,就分享到這里。
更多精彩內容請關注“正運動小助手”公眾號,需要相關開發(fā)環(huán)境與例程代碼,請咨詢正運動技術銷售工程師:400-089-8936。
本文由正運動技術原創(chuàng),歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。
上一篇:鋰電池防水防塵測試辦法
下一篇:如何為應用設計選擇合適的電...
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.wangxinlc.cn)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業(yè)內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-04-30
2025-04-11
2025-04-08
2025-03-31
應用案例 | 使用宏集TELE監(jiān)控繼電器監(jiān)控...
2025-03-26
2025-03-20