那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

開放式激光振鏡運動控制器在Ubuntu+Qt下的文本標刻

正運動技術 ? 來源:正運動技術 ? 作者:正運動技術 ? 2024-09-10 10:37 ? 次閱讀

上節課程我們講述了如何通過Ubuntu+Qt進行振鏡校正(詳情點擊→開放式激光振鏡運動控制器在Ubuntu+Qt下的激光振鏡校正),本節文本標刻是在振鏡校正的前提下實現的。

在正式學習之前,我們先了解一下正運動技術的ZMC408SCAN-V22運動控制器,ZMC408SCAN-V22支持在Linux環境進行開發使用。

01ZMC408SCAN-V22硬件介紹

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

wKgaombfpdeAf5SGAAU4kUz62ps844.png

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

wKgZombfpfSANO7eAAK5fw3AGQs899.png

ZMC408SCAN-V22支持ETHERNET、EtherCAT、USB、CAN、RS485、RS232等通訊接口,通過CAN、EtherCAT總線可以連接各個擴展模塊,從而擴展數字量、模擬量或運動軸。可以在windows,linux,Mac,Android,wince各種操作系統下開發,提供vc,c#,vb.net,labview等各種環境的dll庫,如下圖。上位機軟件編程參考《ZMotion PC函數庫編程手冊》。

wKgaomagX2SAGZXJAAFWXI2sSnE360.png

02Ubuntu+Qt進行文本標刻項目的開發

(一)新建Qt項目并添加函數庫

1.在Qt Creator菜單選擇“文件”→“新建文件或項目...”,打開創建項目向導。選擇Application項目集,創建Qt Widgets Application項目,設置項目名稱和保存位置。

wKgZombfpiSAIlh4AAEDip0m3pk159.png

2.導入廠家提供的相關函數庫及頭文件。

(1)將zmotion.h和zmcaux.h、zmcaux.cpp以及libzmotion.so庫復制到新建的項目文件夾中。

wKgaombfpmCAdkBlAABhH3DFOe0682.png

(2)在Qt Creator選擇新建的Qt項目右擊選擇“添加庫...”→“外部庫”點擊下一步,將剛才復制到項目文件夾上的libzmotion.so庫文件導入到項目中。

wKgZombfpn6AXl3yAAC1k09_sWQ972.png

(3)在Qt Creator下右擊新建的Qt項目,選擇“添加現有文件...”,將之前復制到項目文件下的libzmotion.so、zmotion.h、zmcaux.cpp以及zmcaux.h添加到項目中。

wKgaombfpoyAeXuyAAGYGuHxHrc149.png

(4)函數庫添加成功后,打開pro文件可以看到相關的函數庫和頭文件信息。此時已經將例程需要用到的函數庫和頭文件都加入到項目中了,接下來開始實現例程。

wKgZombfppmAQcA7AACNoL8pSOo079.png

(二)安裝Linux下字體引擎庫

1.FreeType字體引擎庫的安裝

字體引擎庫有很多,在例程中我們選擇使用FreeType字體引擎庫來進行字符輪廓解析。首先我們需要在Ubuntu環境中下載FreeType庫,在終端命令行中輸入sudo apt-get update和sudo apt-get install libfreetype6 libfreetype6-dev命令在線安裝FreeType庫,如下圖所示:

wKgaombfpraANYj-AAENE9ijikM843.png

安裝完成后只需要在使用時引入#include 頭文件即可。實現文本標刻的例程必須安裝字體引擎庫來解析字符,否則無法得到字符的關鍵點坐標,就無法完成標刻和繪制。

2.設置字體文件

FreeType庫沒有掃描系統字體庫文件的功能,在進行輪廓解析時,需要將字體文件傳入。所以在正式開始例程前,需要把提前下載好的字體文件放在項目文件下,方便解析字體時直接使用。在當前項目下新建一個字體文件夾,將提前下載好的字體復制到文件夾中,如下圖所示:

wKgaombfptKAHY-aAACaN4rPVxo674.png

03文本標刻流程以及相關函數介紹

(一).文本繪制流程

文本的處理首先是需要將文本輪廓進行解析,對輪廓信息進行分解,輪廓信息中包含輪廓的類型,文本輪廓分為線段、二次貝塞爾曲線、三次貝塞爾曲線,對于貝塞爾曲線類型需要將曲線分解為小線段進行處理,可以控制分解的精度,將所有的輪廓線處理完即代表已經完成當前字符的繪制。

wKgZombfpwWADQptAAFYyOlCsrs309.png

(二).相關函數接口介紹

1.加載和初始化字體文件

wKgZombfpy-AeKtLAAEsR9nA-kE933.png

2.計算貝塞爾曲線的二次項系數

貝塞爾曲線是通過控制點來定義的一種曲線形狀,貝塞爾曲線的一個關鍵性質是它是由一組控制點和二項式基函數組合而成的。二項式系數確定了每個控制點在貝塞爾曲線中的權重。在計算貝塞爾曲線上的點時,每個控制點的貢獻由其對應的二項式系數乘以相應的基函數得出。貝塞爾曲線通過調整控制點的位置和二項式系數來實現各種復雜的曲線形狀。

wKgZombfp0eAfoTNAAC5FCvIQpk268.png

3.獲取貝塞爾曲線的點坐標

wKgaombfp1iARlKAAADyQ-2YetU190.png

4.三次文件初始化

wKgZombfp2SATnnxAACbUqw7KlQ191.png

5.生成空移字符串

wKgaombfp3KAKIxDAAEH0dnuqbQ412.png

6.生成開光字符串

wKgaombfp3-AOvvUAADtS1pewhs506.png

7.生成關光字符串

wKgZombfp4uABzdGAADSJkceiXU880.png

8.生成標刻點字符串

wKgZombfp6qAOD6oAADsqVf16Q8511.png

9.下載三次文件

wKgaombfp7aACswEAAERMb8Wdo8876.png

10.通用命令執行接口

wKgaombfp8CAJdBYAAE0PooJUeM552.png

04文本標刻的實現例程

文本標刻例程首先需要獲取到文本數據,獲取到外部輸入文本后,將文本進行單個解析,生成字符輪廓數據,接下來的處理就是對輪廓數據進行轉換,將貝塞爾曲線數據全部轉換為小線段來處理,最后將小線段相連接,生成三次文件字符串,下載到控制器中,執行標刻命令即可完成文本的標刻。

(1)將文本解析為輪廓數據,FreeType庫解析文本時需要對字符進行單個處理,將每個字符都進行解析輪廓。

//初始化輪廓數據
FT_Init_FreeType(&library);
constchar*fontFilePath=gainFontFilePath(text_data.type);
FT_New_Face(library,fontFilePath,0,&face);
//獲取字符的索引
FT_UIntglyphIndex=FT_Get_Char_Index(face,charCode);
//加載字符的輪廓信息
FT_Int32loadFlags=FT_LOAD_DEFAULT|FT_LOAD_NO_BITMAP;
FT_Load_Glyph(face,glyphIndex,loadFlags);
//獲取字形槽
FT_GlyphSlotglyphSlot=face->glyph;
//獲取字形的輪廓信息
FT_Outline*outline=&glyphSlot->outline;

(2)將輪廓數據轉換為小線段生成三次文件字符串,對于線段數據可以直接通過坐標位置生成三次文件字符串,對于貝塞爾曲線數據,需要循環遍歷,將所有曲線數據轉換為小線段數據,最后生成三次文件字符串。

//將所有輪廓數據遍歷,對不同類型的數據進行不同的處理
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=newZPointF[myVector.size()]; 
			for(unsignedlongi=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坐標,將所有的輪廓坐標偏移最小坐標位置,保證起始點是在原點位置開始,后續可以通過更改起點位置來確定相對位置。

(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 

05文本標刻的實現效果

1.建立控制器連接,設置激光器參數和工藝參數。

wKgaombfriuALGDkAAFTid3kb-M290.png

2.輸入需要標刻的文本,可以根據需要設置相關的文字屬性,下面是輸入文字通過QPaint繪制的文本。

wKgaombfrj2ABm_XAAGAqfrR6JQ923.png

3.可以更改字體,文本開始位置以及設置傾斜屬性,下面是設置后的效果。

wKgaombfrkWAU-AQAAGCW-cfr94221.png

4.點擊生成三次文件,選擇標刻圖形,下圖是通過示波器抓取的標刻數據。

wKgZombfrlGAUkp0AABLo85snZU736.png


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 運動控制器
    +關注

    關注

    2

    文章

    408

    瀏覽量

    24809
  • Ubuntu
    +關注

    關注

    5

    文章

    566

    瀏覽量

    30035
  • 開放式
    +關注

    關注

    0

    文章

    24

    瀏覽量

    9226
  • 激光振鏡
    +關注

    關注

    1

    文章

    19

    瀏覽量

    3331
收藏 人收藏

    評論

    相關推薦

    激光焊接中的擺動原理

    激光錫焊是非常高效的一種焊接方式,通過的擺動來對焊接的區域進行掃描、松盛光電來分享激光
    的頭像 發表于 01-17 14:02 ?146次閱讀
    <b class='flag-5'>激光</b>焊接中<b class='flag-5'>振</b><b class='flag-5'>鏡</b>的擺動原理

    激光運動控制器智能激光打砂機應用

    智能集觸屏交互和語音控制于一身,是智能家居的科技產物之一。其生產涉及剝漆、磨砂等工藝。傳統工藝復雜,無法滿足消費者的個性化需求;現代技術采用激光去除漆層和打砂,不產生廢料且環保,無需掩膜,操作簡便,成型快,精度高,適合生產大幅
    的頭像 發表于 12-14 11:41 ?205次閱讀
    <b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運動</b><b class='flag-5'>控制器</b><b class='flag-5'>在</b>智能<b class='flag-5'>鏡</b><b class='flag-5'>激光</b>打砂機應用

    喜訊!正運動榮獲激光星銳獎“最佳激光設備配套產品技術創新獎”

    運動控制控制激光控制一站
    的頭像 發表于 11-29 14:24 ?246次閱讀
    喜訊!正<b class='flag-5'>運動</b>榮獲<b class='flag-5'>激光</b>星銳獎“最佳<b class='flag-5'>激光</b>設備配套產品技術創新獎”

    開放式激光運動控制器Ubuntu+Qt下自定義圖形

    開放式激光運動控制器
    的頭像 發表于 10-08 10:45 ?718次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運動</b><b class='flag-5'>控制器</b><b class='flag-5'>在</b><b class='flag-5'>Ubuntu+Qt</b>下自定義圖形<b class='flag-5'>標</b><b class='flag-5'>刻</b>

    開放式激光運動控制器Ubuntu+QtCAD圖形

    開放式激光運動控制器Ubuntu+Qt
    的頭像 發表于 09-18 15:12 ?371次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運動</b><b class='flag-5'>控制器</b><b class='flag-5'>在</b><b class='flag-5'>Ubuntu+Qt</b><b class='flag-5'>下</b>CAD圖形<b class='flag-5'>標</b><b class='flag-5'>刻</b>

    開放式激光運動控制器激光清洗應用

    開放式激光運動控制器激光清洗解決方案。
    的頭像 發表于 07-18 09:44 ?411次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運動</b><b class='flag-5'>控制器</b>的<b class='flag-5'>激光</b>清洗應用

    開放式激光運動控制器的視覺校正精度解決方案

    想知道怎么實現自動校正嗎?快來點擊正運動精囊!
    的頭像 發表于 04-26 14:36 ?906次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運動</b><b class='flag-5'>控制器</b>的視覺校正<b class='flag-5'>振</b><b class='flag-5'>鏡</b>精度解決方案

    2024上海慕尼黑開放式激光運動控制器解決方案

    運動(E2.0602)與您不見不散!
    的頭像 發表于 03-20 10:34 ?625次閱讀
    2024上海慕尼黑<b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運動</b><b class='flag-5'>控制器</b>解決方案

    開放式高實時高性能PLC控制器解決方案-基于米爾電子STM32MP135

    實時高性能需求尤其突出。面對以上挑戰,合作伙伴翌控科技基于米爾STM32MP135開發板發布開放式高實時高性能PLC控制器解決方案,將高精準數據采集、預處理、存儲、通信與高實時控制融為一體,為
    發表于 03-07 20:06
    利博娱乐城开户| 澳门百家乐官网公试打法| 中华百家乐官网娱乐城| 百家乐实时赌博| 百家乐娱乐场真人娱乐场| 炸金花棋牌游戏| 星期8百家乐官网的玩法技巧和规则 | 百家乐官网注册送彩金平台| 网上玩百家乐会出签吗| 百家乐官网实战案例| 百家乐补牌规律| 皇冠网赌球安全吗| 百家乐网站新全讯网| 林甸县| 百家乐注码技术打法| 博九百家乐官网娱乐城| 百家乐必胜赌| 百家乐官网如何洗吗| 水果机遥控器多少钱| 无锡百家乐官网的玩法技巧和规则| 大发888下载| 百家乐官网游戏策略| 百家乐高命中打法| 百家乐官网书籍| 威尼斯人娱乐场官网| 百家乐官网小揽| bet365 网址| 真人百家乐作假视频| 百家乐官网闲单开多少| 百家乐最好投| 包赢百家乐官网的玩法技巧和规则| 一路发| 百家乐大轮转| 百家乐官网双筹码怎么出千| 大发888投注网| 百家乐长路投注法| 彩会百家乐官网游戏| 传奇百家乐的玩法技巧和规则| 百家乐官网深圳广告| 菲律宾沙龙国际| 玩百家乐官网怎么能赢吗|