【RT-Thread作品秀】寫字機(jī)器人
作者:喬城陽
概述(說明應(yīng)用產(chǎn)生的背景、實(shí)現(xiàn)功能)
寫字機(jī)器人在實(shí)際生產(chǎn)線上由于效率趕不上打印機(jī),應(yīng)用不是很廣,然而由于其結(jié)構(gòu)簡單,成本低,并且符合人手寫風(fēng)格,在學(xué)習(xí)階段很有價(jià)值。寫字機(jī)器人設(shè)計(jì)上包含了路徑規(guī)劃、直線插補(bǔ)、加減速控制等常用電機(jī)運(yùn)動(dòng)控制算法,在軟件上也會(huì)用到DXF文件解析、openCV圖像處理等G代碼生成工具,對后期深入研究激光切割機(jī)、雕刻機(jī)、3D打印機(jī)等大型設(shè)備有很好的鋪墊作用。因此我的作品以寫字機(jī)器人為題目分享我的制作過程和學(xué)習(xí)體驗(yàn),希望對各位小伙伴的學(xué)習(xí)有所幫助。
開發(fā)環(huán)境(所采用的軟、硬件方案)
硬件:ART-PI、arduino、TM4C123GXL
RT-Thread版本:3.14
開發(fā)工具及版本:MDK-ARM5.31、VSCode
RT-Thread使用情況概述(簡要總結(jié)下應(yīng)用中RT-Thread使用情況:內(nèi)核部分、組件部分、軟件包部分、內(nèi)核、其他)
內(nèi)核部分:線程調(diào)度,資源分配、同步通信、設(shè)備驅(qū)動(dòng)框架
組件:DFS文件系統(tǒng)、UART串行異步通信、CAN通信
其他:UDP通信、cJSON編解碼
硬件框架(概述應(yīng)用所采用的硬件方案框圖,并對核心部分做介紹)
軟件框架說明(介紹應(yīng)用所采用的軟件方案框圖、流程圖等,并加以解說)
在寫字機(jī)器人設(shè)計(jì)上我將其分為三個(gè)部分:
圖像處理模塊 |
運(yùn)動(dòng)控制模塊 |
G代碼生成模塊 |
圖像處理模塊負(fù)責(zé)把文本圖像和照片等圖像文件做預(yù)處理,去除雜點(diǎn),然后以合適的算法將圖像二值化,突現(xiàn)主要信息,然后提取輪廓骨架以適合機(jī)器書寫。
G代碼生成模塊將圖像輪廓序列化后進(jìn)行路徑規(guī)劃,選取一個(gè)適合的加工精度,然后按數(shù)控加工常用的G代碼規(guī)范生成NC加工文件。另外對于標(biāo)準(zhǔn)的DXF文件則通過文件解析的方法生成G代碼。
運(yùn)動(dòng)控制模塊是寫字機(jī)器人中最雜的一個(gè)模塊,負(fù)責(zé)各個(gè)運(yùn)動(dòng)機(jī)構(gòu)的精準(zhǔn)快速移動(dòng)。收到G代碼指令后需要結(jié)合前后指令信息生成當(dāng)前指令的合適初速度、最大運(yùn)行速度,根據(jù)運(yùn)動(dòng)軌跡進(jìn)行直線插補(bǔ)點(diǎn),最后按SPTA梯形加減速算法向電機(jī)發(fā)出脈沖。
軟件模塊說明(介紹應(yīng)用軟件關(guān)鍵部分的邏輯、采用的實(shí)現(xiàn)方式等)
Grbl是一種高性能低成本的開源CNC控制器,基于ATmega328型芯片輸出高速精準(zhǔn)的電機(jī)控制脈沖,完美支持各種標(biāo)準(zhǔn)G代碼,并包含了完整的前瞻性加速控制,可以實(shí)現(xiàn)平穩(wěn)的加速和無沖擊的轉(zhuǎn)彎動(dòng)作。
正是由于grbl的前瞻性速度控制功能,所以要保證grbl控制器內(nèi)一直保持著16-20個(gè)G代碼指令。這需要ART-PI通過讀取grbl控制器緩沖區(qū)狀態(tài),及時(shí)發(fā)送G代碼指令,避免出現(xiàn)緩沖溢出和緩沖區(qū)為空等現(xiàn)象出現(xiàn)。
因此需要運(yùn)行RT-thread實(shí)時(shí)操作系統(tǒng),通讀讀取SD卡上的NC文件,并與grbl控制器通信,控制設(shè)備正常運(yùn)行。另外RT-thread也可提供豐富的人機(jī)交互功能,將設(shè)備工作路徑、進(jìn)度等狀態(tài)實(shí)時(shí)顯示在屏幕上,也可以增加暫停續(xù)寫等功能。
演示效果(演示效果請采用3張高清圖片,并錄制一段不少于1min視頻解說應(yīng)用所實(shí)現(xiàn)的效果,視頻上傳至B站或者騰訊視頻或其他視頻平臺(tái),給出鏈接即可)
演示視頻
比賽感悟
同樣是C代碼,為什么別人寫得那么好,這次比賽用到兩個(gè)開源軟件,一個(gè)是RT-thread,負(fù)責(zé)人機(jī)交互和發(fā)送控制指令,另一個(gè)是grbl,用來完成運(yùn)動(dòng)控制。兩款軟件都設(shè)計(jì)的非常精巧,只需在2kB大小的RAM上運(yùn)行,而功能卻又非常強(qiáng)大,實(shí)現(xiàn)了很多復(fù)雜的功能,所有的代碼封裝的很好,模塊啟用只需打開對應(yīng)的宏定義即可。這次專門去圖書館借閱了RTT相關(guān)的圖書,了解線程是如何調(diào)度,設(shè)備驅(qū)動(dòng)應(yīng)該怎么實(shí)現(xiàn),但是內(nèi)部還是有很多內(nèi)容不理解,后期需要繼續(xù)不斷充實(shí)自己。運(yùn)動(dòng)控制一直是我的興趣所在,這次也終于有機(jī)會(huì)把它實(shí)現(xiàn),看著電機(jī)在一行行指令的控制下乖乖地轉(zhuǎn)動(dòng),聽著不斷變化著頻率的電機(jī)聲音,真正體會(huì)到了伺服servo的含義,非常開心~