毛潤,張珈龍
(成都大學(xué) 電子信息與電氣工程學(xué)院,四川成都,610106)
隨著社會(huì)信息化技術(shù)的發(fā)展,工業(yè)、農(nóng)業(yè)、科研、國防等各個(gè)領(lǐng)域越來越需要高性能的自動(dòng)化系統(tǒng)。機(jī)械臂能模仿手臂的某些動(dòng)作功能,用以按固定程序抓取、搬運(yùn)物件或操作工具的自動(dòng)操作裝置[1~3]。它可代替人的繁重勞動(dòng)以實(shí)現(xiàn)生產(chǎn)的機(jī)械化和自動(dòng)化,能在有害環(huán)境下操作以保護(hù)人身安全,因而廣泛應(yīng)用于機(jī)械制造、冶金、電子、輕工和原子能等部門,智能機(jī)械臂是具有感知、思維和行動(dòng)的機(jī)器人,可獲取、處理和識(shí)別多種信息,自主完成較為復(fù)雜的操作任務(wù)[4~5]。
在后疫情時(shí)代,很多應(yīng)用場(chǎng)景需要員工減少人與人之間的互動(dòng),例如機(jī)場(chǎng)、地鐵等人流量特別大的地方,這些場(chǎng)所又需要員工與客人進(jìn)行近距離接觸,還需要員工幫助客人進(jìn)行行李的搬運(yùn),這無疑會(huì)使疫情的風(fēng)險(xiǎn)更大,并且搬運(yùn)行李也是有一定勞動(dòng)強(qiáng)度,將機(jī)械臂運(yùn)用于這些場(chǎng)所,可以一定程度上減少人與人之間的交互和節(jié)省勞動(dòng)力[6~8]。
本設(shè)計(jì)采用雙控制器方案,控制器2 為QT 控制器(ARM處理器),其運(yùn)行服務(wù)器代碼實(shí)現(xiàn)用戶賬號(hào)登錄注冊(cè)、機(jī)械臂控制信號(hào)接收以及打包發(fā)送功能。機(jī)械臂的硬件構(gòu)造主要分為核心驅(qū)動(dòng)模塊和舵機(jī)模塊兩個(gè)部分,機(jī)械臂核心驅(qū)動(dòng)模塊主要由控制器1(STM32F103C8T6 單片機(jī))來控制,控制器1 為一個(gè)機(jī)械臂控制器,舵機(jī)模塊包含六個(gè)自由度,每個(gè)舵機(jī)通過相應(yīng)的PWM 的占空比脈沖信號(hào)加以控制[9]。兩控制器合作完成賬號(hào)登錄注冊(cè)以及機(jī)械臂手動(dòng)和自動(dòng)搬運(yùn)系統(tǒng)的設(shè)計(jì)。
QT 上位機(jī)控制界面的設(shè)計(jì),包括賬號(hào)注冊(cè)登錄、機(jī)械臂控制界面;QT 控制器運(yùn)行多線程服務(wù)器代碼,使用三個(gè)線程分別負(fù)責(zé)各個(gè)功能;機(jī)械臂控制器對(duì)機(jī)械臂控制信息進(jìn)行解析處理,通過控制信息對(duì)PWM 占空比進(jìn)行控制從而實(shí)現(xiàn)舵機(jī)轉(zhuǎn)動(dòng),最終實(shí)現(xiàn)機(jī)械臂的手動(dòng)和自動(dòng)搬運(yùn)系統(tǒng)的設(shè)計(jì)。
圖1 是一個(gè)基于雙控制器的民航機(jī)場(chǎng)行李自動(dòng)搬運(yùn)系統(tǒng)設(shè)計(jì)的硬件框架圖。這里的控制器1 為STM32F103C8T6 單片機(jī),其是作為一個(gè)機(jī)械臂控制器,而控制器2 為FS4412開發(fā)板的核心模塊,其為一個(gè)QT 控制器。程序沒有開始前,QT 控制器的源代碼都是存放在SD 卡中,機(jī)械臂控制器的源代碼存放在Flash 中,上電后,程序啟動(dòng),QT 控制器運(yùn)行服務(wù)器代碼,用戶登錄客戶端進(jìn)入到賬號(hào)登錄界面,然后輸入賬號(hào)信息后會(huì)通過網(wǎng)口傳輸發(fā)送到QT 控制器,賬號(hào)與QT控制器上的數(shù)據(jù)庫進(jìn)行對(duì)比,比對(duì)成功后再通過網(wǎng)口傳輸回客戶端進(jìn)行登錄,登錄成功后進(jìn)入到機(jī)械臂操作,客戶端發(fā)出機(jī)械臂控制信息后,控制信息會(huì)通過網(wǎng)口傳遞給QT控制器,然后封裝成協(xié)議包通過串口傳遞給機(jī)械臂控制器進(jìn)行解析,解析出機(jī)械臂控制信息后,進(jìn)行舵機(jī)控制。

圖1 硬件架構(gòu)圖
本設(shè)計(jì)使用六軸機(jī)械臂,硬件連接實(shí)物圖如圖2 所示。六軸機(jī)械臂主要包含六個(gè)自由度,分別由六個(gè)舵機(jī)分別來進(jìn)行控制,每一個(gè)舵機(jī)關(guān)節(jié)都可以轉(zhuǎn)動(dòng)180°,而舵機(jī)一般是由舵盤、減速齒輪組、位置反饋電位計(jì)、直流電機(jī)、控制電路幾部分組成。機(jī)械臂的六個(gè)舵機(jī)分別連接STM32 上的M4(TIM3_CH4)、M5(TIM3_CH3)、M6(TIM3_CH2)、M7(TIM3_CH1)、M8(TIM4_CH4)、M9(TIM4_CH3)時(shí)鐘引腳,舵機(jī)通過輸入線接收控制系統(tǒng)發(fā)出的PWM 波從而控制電機(jī)轉(zhuǎn)動(dòng),電機(jī)帶動(dòng)一系列減速齒輪組,減速后傳動(dòng)至輸出舵盤,舵機(jī)的輸出軸帶動(dòng)位置反饋電位器,電位器將相應(yīng)角度的輸出電壓信號(hào)與到控制電路板的PWM控制信號(hào)進(jìn)行比較,然后控制電路板根據(jù)所在位置決定電機(jī)轉(zhuǎn)動(dòng)的方向和角度。其工作原理就是將脈沖信號(hào)轉(zhuǎn)換為角位移,閉環(huán)控制電機(jī)轉(zhuǎn)動(dòng)。步進(jìn)電機(jī)由單片機(jī)控制,控制信號(hào)為數(shù)字信號(hào),不用經(jīng)過A/D 數(shù)模轉(zhuǎn)換,具有快速啟/停功能,迅速地實(shí)現(xiàn)啟動(dòng)或停止,且步距角越小、延時(shí)越短,定位越準(zhǔn)確,旋轉(zhuǎn)精度越高。其工作流程為:控制信號(hào)→控制電路板→電機(jī)轉(zhuǎn)動(dòng)→齒輪組減速→舵盤轉(zhuǎn)動(dòng)→位置反饋電位計(jì)→控制電路板反饋[10]。

圖2 硬件實(shí)物圖
軟件設(shè)計(jì)的主進(jìn)程如圖3 所示,首先通過QT 設(shè)計(jì)一個(gè)用戶登錄的界面,用戶進(jìn)入到賬號(hào)登錄界面,然后輸入賬號(hào)與密碼,成功登錄后會(huì)進(jìn)入到用戶操作界面,程序同時(shí)通過線程執(zhí)行,互不干擾,它們的控制界面都顯示在QT 界面上,用戶可以通過其來進(jìn)行機(jī)械臂手動(dòng)和自動(dòng)控制。

圖3 主程序設(shè)計(jì)
用戶在客戶端的操作界面按下手動(dòng)控制按鈕后,控制六根滑桿即可控制6 個(gè)舵機(jī)的轉(zhuǎn)動(dòng),最終實(shí)現(xiàn)手動(dòng)控制,手動(dòng)控制的程序框圖如圖4 所示。首先進(jìn)行時(shí)鐘初始化、機(jī)械臂初始化、串口初始化。初始化完成后,從用戶界面選擇控制方式,客戶端將進(jìn)行手動(dòng)控制的信號(hào)發(fā)送給QT 控制器的服務(wù)器,QT 控制器再通過串口將控制信號(hào)發(fā)送給機(jī)械臂控制器,機(jī)械臂控制器接收到該手動(dòng)控制信號(hào),進(jìn)入手動(dòng)控制模式。用戶控制指定舵機(jī)旋轉(zhuǎn)。舵機(jī)的控制信息從用戶界面?zhèn)鬏斀oQT 控制器,并被打包成協(xié)議包通過串口發(fā)送給機(jī)械臂控制器,此時(shí)機(jī)械臂控制器會(huì)檢測(cè)到有數(shù)據(jù)在串口通道中,產(chǎn)生串口中斷,機(jī)械臂控制器接收該控制協(xié)議包。機(jī)械臂控制器接收到數(shù)據(jù)協(xié)議包后進(jìn)行數(shù)據(jù)驗(yàn)證,通過協(xié)議頭和協(xié)議尾來判斷是否為需要的控制信息,如果不正確,重新進(jìn)行接收。當(dāng)確認(rèn)為需要的控制信息后,按照信息中所提供的舵機(jī)號(hào)和旋轉(zhuǎn)角度,進(jìn)行改變相應(yīng)舵機(jī)的占空比,實(shí)現(xiàn)指定舵機(jī)的旋轉(zhuǎn)。最后通過串口中斷接收用戶的控制信息,實(shí)現(xiàn)各個(gè)舵機(jī)的旋轉(zhuǎn),最終實(shí)現(xiàn)機(jī)械臂的手動(dòng)控制。

圖4 手動(dòng)控制流程圖
用戶按下自動(dòng)控制按鈕后,進(jìn)入到機(jī)械臂自動(dòng)控制模式,機(jī)械臂會(huì)自動(dòng)完成貨物搬運(yùn)的操作,自動(dòng)控制的程序框圖如圖5 所示。首先進(jìn)行時(shí)鐘、舵機(jī)、串口的初始化,初始化完成后進(jìn)行控制方式的選擇。進(jìn)入自動(dòng)模式后,調(diào)用運(yùn)動(dòng)軌跡點(diǎn)位,QT 控制器將點(diǎn)位信息逐一放入串口通道中。機(jī)械臂控制器檢測(cè)到串口中有數(shù)據(jù)信息,將該數(shù)據(jù)信息取出進(jìn)行解析和校驗(yàn),確定為正確信息后,通過改變對(duì)應(yīng)舵機(jī)進(jìn)行旋轉(zhuǎn)。當(dāng)運(yùn)動(dòng)軌跡點(diǎn)位都傳輸完成后,完成自動(dòng)控制。

圖5 自動(dòng)控制流程圖
QT 控制器的程序中有著一套完整的運(yùn)動(dòng)軌跡代碼(即從固定點(diǎn)位將物體搬運(yùn)到另一個(gè)固定點(diǎn)位的集合),每一次通過串口傳輸一個(gè)點(diǎn)位信息給機(jī)械臂控制器,機(jī)械臂控制器通過串口接收到該信息后,進(jìn)行解析驗(yàn)證,數(shù)據(jù)正確后改變舵機(jī)的占空比從而實(shí)現(xiàn)一個(gè)點(diǎn)位的運(yùn)行,隨后將第二個(gè)點(diǎn)位信息放入到串口通道中,讓機(jī)械臂控制器進(jìn)行讀取和解析,按照控制信息再次控制對(duì)應(yīng)舵機(jī)運(yùn)行,如此重復(fù),直到機(jī)械臂完成所有設(shè)置好的運(yùn)動(dòng)軌跡點(diǎn)位,機(jī)械臂就完成了一個(gè)自動(dòng)搬運(yùn)的過程。
由于QT 控制器沒有屏幕,所以使用PC 機(jī)的超級(jí)終端來模擬QT 控制器的操作界面,作為其“顯示器”方便用戶進(jìn)行調(diào)試和使用。進(jìn)入到LINUX 操作界面后直接運(yùn)行服務(wù)器代碼,即可啟動(dòng)服務(wù)器,服務(wù)器程序運(yùn)行后,打開客戶端程序,在終端界面上出現(xiàn)了客戶端的IP 和端口號(hào)意味著服務(wù)器和客戶端連接成功,如圖6 所示。

圖6 連接界面
進(jìn)入到操作界面后,會(huì)出現(xiàn)六根滑桿,通過滑動(dòng)滑桿完成對(duì)六個(gè)舵機(jī)的旋轉(zhuǎn)控制。用戶需要通過六根滑桿逐一對(duì)0到5 號(hào)舵機(jī)進(jìn)行控制,每一次選擇滑動(dòng)一根滑桿就可控制一個(gè)關(guān)節(jié)進(jìn)行旋轉(zhuǎn),逐漸控制6 個(gè)關(guān)節(jié)去合作實(shí)現(xiàn)搬運(yùn)物品的運(yùn)動(dòng)軌跡,最終就實(shí)現(xiàn)了手動(dòng)搬運(yùn)。在這之前首先要按下操作界面上的自動(dòng)/手動(dòng)轉(zhuǎn)換按鈕,當(dāng)按鈕顯示為手動(dòng)時(shí),即可以進(jìn)行手動(dòng)測(cè)試。
如圖7(a)所示,機(jī)械臂進(jìn)行初始化后所有舵機(jī)都是旋轉(zhuǎn)0°,此時(shí)滑動(dòng)客戶端界面的6根滑桿進(jìn)行相應(yīng)舵機(jī)的操作。首先讓0 號(hào)舵機(jī)旋轉(zhuǎn)至對(duì)向瓶子,并控制1 號(hào)舵機(jī)使機(jī)械臂彎向瓶子,再控制2 號(hào)和3 號(hào)舵機(jī)將機(jī)械臂前端夾子移動(dòng)至瓶子上方和讓5 號(hào)舵機(jī)將夾子張開,然后控制1 號(hào)舵機(jī)使前端夾子下降至能夾起瓶子處,此時(shí)機(jī)械臂已完成夾起前的工作,隨后控制5 號(hào)舵機(jī)使夾子夾緊,成功夾住瓶子,此圖表示瓶子已經(jīng)成功被夾住。

圖7 手動(dòng)控制結(jié)果
如圖7(b)所示,夾起瓶子后,控制1 號(hào)舵機(jī)使機(jī)械臂將瓶子抬起脫離桌面,然后控制0 號(hào)舵機(jī)將瓶子移動(dòng)至目標(biāo)位置上方,此圖表示瓶子已被移動(dòng)至目標(biāo)位置上方。
如圖7(c)所示,此時(shí)機(jī)械臂已經(jīng)將瓶子移動(dòng)到了目標(biāo)位置上方,用戶控制1 號(hào)舵機(jī)將瓶子放置桌面上,此時(shí)機(jī)械臂仍夾著瓶子,然后控制5 號(hào)舵機(jī)使夾子松開瓶子,再控制1 號(hào)舵機(jī)使機(jī)械臂脫離瓶子,此圖表示機(jī)械臂已經(jīng)完成了瓶子搬運(yùn),并且使夾子脫離了瓶子口。
自動(dòng)抓取是在手動(dòng)抓取的基礎(chǔ)上,事先將實(shí)現(xiàn)自動(dòng)搬運(yùn)的運(yùn)動(dòng)軌跡點(diǎn)位代碼寫入程序中。在用戶控制界面按下自動(dòng)/手動(dòng)切換按鈕后,切換到自動(dòng)抓取模式,自動(dòng)抓取信號(hào)就會(huì)發(fā)送給QT 控制器,它再將信息發(fā)送給機(jī)械臂控制器,然后機(jī)械臂控制器控制機(jī)械臂執(zhí)行事先寫進(jìn)程序的運(yùn)動(dòng)軌跡點(diǎn)位程序,從而實(shí)現(xiàn)機(jī)械臂自動(dòng)抓取。
再進(jìn)行使用機(jī)械臂調(diào)試器工具進(jìn)行調(diào)試時(shí),需要調(diào)試一號(hào)舵機(jī),就需要給ID 為1 的選擇框打鉤,然后在后面的數(shù)據(jù)一欄填寫想要舵機(jī)旋轉(zhuǎn)的度數(shù),通過發(fā)送給機(jī)械臂控制器,機(jī)械臂的1 號(hào)舵機(jī)就會(huì)旋轉(zhuǎn)相應(yīng)的度數(shù)。
通過對(duì)各個(gè)舵機(jī)點(diǎn)位調(diào)試后,成功確認(rèn)了點(diǎn)位,并將點(diǎn)位寫進(jìn)程序進(jìn)行調(diào)試。
①初始位置:0 號(hào)到5 號(hào)舵機(jī)都是旋轉(zhuǎn)0°。
②就位:將機(jī)械臂旋轉(zhuǎn)到準(zhǔn)備抓取物品的位置,需要將1 號(hào)舵機(jī)旋轉(zhuǎn)35°,2 號(hào)舵機(jī)旋轉(zhuǎn)-34°,3 號(hào)舵機(jī)旋轉(zhuǎn)39°,4 號(hào)舵機(jī)旋轉(zhuǎn)60°,5 號(hào)舵機(jī)旋轉(zhuǎn)-30°。
③抓取:機(jī)械臂進(jìn)行抓取物品,需要將1 號(hào)舵機(jī)旋轉(zhuǎn)43°,5 號(hào)舵機(jī)旋轉(zhuǎn)28°。
④抬起:將物品抓起離開桌面,只需將2 號(hào)舵機(jī)旋轉(zhuǎn)至25°。
⑤偏轉(zhuǎn):抬起物品后,旋轉(zhuǎn)至目標(biāo)位置,使0 號(hào)舵機(jī)旋轉(zhuǎn)40°,1 號(hào)舵機(jī)旋轉(zhuǎn)15°。
⑥放下:將物品放下,使1 號(hào)舵機(jī)旋轉(zhuǎn)30°,5 號(hào)舵機(jī)旋轉(zhuǎn)-30°。
將這些點(diǎn)位按順序?qū)懭氲皆闯绦虍?dāng)中,并且在每個(gè)動(dòng)作之間加入了延遲函數(shù),這樣串口接收數(shù)據(jù)時(shí)才能完整接收。自動(dòng)模式下可以抓取放置在固定位置的物體,并且將其放到固定位置去,實(shí)現(xiàn)物品的自動(dòng)搬運(yùn)。因?yàn)橹噶顐鬏斶^快會(huì)導(dǎo)致數(shù)據(jù)丟失,所以各個(gè)關(guān)節(jié)指令間加入一秒的延遲,所以自動(dòng)模式下機(jī)械臂動(dòng)作稍微有些卡頓,成功實(shí)現(xiàn)機(jī)械臂自動(dòng)控制。
基于雙控制器的六軸機(jī)械臂的設(shè)計(jì),最終實(shí)現(xiàn)了機(jī)械臂手動(dòng)抓取、自動(dòng)抓取貨物等功能,文章具體研究內(nèi)容如下:
(1)用戶能夠進(jìn)行登錄注冊(cè)賬號(hào)的功能。用戶在客戶端輸入賬號(hào)和密碼然后通過網(wǎng)絡(luò)傳輸給服務(wù)器中,服務(wù)器調(diào)用數(shù)據(jù)庫信息進(jìn)行賬號(hào)密碼對(duì)比,對(duì)比正確則成功登錄。
(2)用戶可以通過六個(gè)滑桿來手動(dòng)控制機(jī)械臂進(jìn)行手動(dòng)抓取物品的功能。每一個(gè)滑桿代表著六軸機(jī)械臂的0 到5號(hào)舵機(jī),通過滑動(dòng)滑桿即可控制機(jī)械臂相應(yīng)舵機(jī)旋轉(zhuǎn)的角度。
(3)機(jī)械臂能夠自動(dòng)抓取物品放到目標(biāo)位置的功能,實(shí)現(xiàn)了自動(dòng)抓取。