畢忠梁,單家正,趙夫超
(安慶職業(yè)技術(shù)學(xué)院 機(jī)電工程學(xué)院,安徽 安慶 246003)
以增材制造為背景的3D打印技術(shù)目前已經(jīng)廣泛運(yùn)用在智能制造行業(yè)中,3D 打印機(jī)種類很多,主要分為桌面級和工業(yè)級兩大類。其中桌面級3D打印機(jī)主要以笛卡爾坐標(biāo)系XYZ機(jī)型為主,控制部分大多采用源代碼開放的Marlin固件。而采用雙臂結(jié)構(gòu)的3D打印機(jī)還是較為少見[1]。
桌面級3D打印機(jī)如果采用XYZ結(jié)構(gòu)則一般體積較大,結(jié)構(gòu)呆板,不便于移動和攜帶。機(jī)械臂型3D打印機(jī)具有體積小以及移動速度快等優(yōu)點(diǎn),但是一般SCARA型機(jī)械臂為單臂結(jié)構(gòu),末端承載能力不強(qiáng),不便于安裝3D打印噴嘴。本文設(shè)計(jì)一種雙臂結(jié)構(gòu)打印機(jī),增加末端剛性,提高打印精度,同時(shí)雙臂可折疊,便于設(shè)備攜帶,此改進(jìn)不失為一種創(chuàng)新。
由于雙臂SCARA運(yùn)動軌跡規(guī)劃算法比較復(fù)雜,目前市面上3D打印機(jī)固件多為AVR開發(fā),其運(yùn)算能力無法滿足要求。本設(shè)計(jì)采用Smoothieware固件控制,32位ARM處理器,將雙臂SCARA型機(jī)械臂運(yùn)動軌跡算法融入固件中,使其能夠滿足打印需求[2]。
雙臂SCARA型機(jī)械結(jié)構(gòu)不同于單臂SCARA,單臂SCARA的大臂和小臂分別由一個(gè)電機(jī)驅(qū)動,兩個(gè)臂分別繞大臂的兩個(gè)端點(diǎn)旋轉(zhuǎn)運(yùn)動。雙臂SCARA機(jī)械臂兩個(gè)電機(jī)分別驅(qū)動左右兩組大臂,而小臂在末端鉸鏈,實(shí)現(xiàn)機(jī)械臂的末端執(zhí)行器在XY二維平面內(nèi)定位,雙臂SCARA比單臂SCARA的剛性更好,控制精度更高。
圖1 雙臂SCARA型機(jī)械臂結(jié)構(gòu)示意圖
如圖1所示,雙臂SCARA型機(jī)械臂在水平面上只有兩個(gè)自由度,采用四桿等臂長結(jié)構(gòu)關(guān)節(jié)臂。其主要機(jī)構(gòu)由底座,左大臂、左小臂、右大臂、右小臂,直線升降滑臺,3D打印噴頭等部分組成。底座固定支撐整個(gè)機(jī)構(gòu),底座的下方安裝打印熱床。直線升降滑臺豎直安裝,可帶動整個(gè)機(jī)械臂沿著Z方向做升降的直線運(yùn)動。左右兩組關(guān)節(jié)臂分別由上下兩個(gè)精密諧波減速電機(jī)驅(qū)動,左右兩組機(jī)械臂均繞同一個(gè)樞軸做旋轉(zhuǎn)運(yùn)動,兩組關(guān)節(jié)臂在末端鉸連合成運(yùn)動[3]。不用的時(shí)候打印臂可以折疊向后收起,減少空間占用。
要研究雙臂SCARA的控制系統(tǒng),并修改Smoothieware固件軌跡規(guī)劃算法,就必須先建立雙臂SCARA的運(yùn)動學(xué)模型,求出運(yùn)動學(xué)正解和逆解。運(yùn)動學(xué)正解是將各個(gè)關(guān)節(jié)之間角度轉(zhuǎn)化為末端的笛卡爾直角坐標(biāo)系的坐標(biāo)值,運(yùn)動學(xué)逆解是已知末端的笛卡爾直角坐標(biāo)系的坐標(biāo)值,求解各個(gè)關(guān)節(jié)的角度,從而驅(qū)動電機(jī)旋轉(zhuǎn)。單臂SCARA的機(jī)械臂是由兩個(gè)連桿通過旋轉(zhuǎn)的關(guān)節(jié)串聯(lián)而成,大臂與小臂的夾角決定了末端的位置,雙臂SCARA不同的是由兩組4個(gè)等臂連桿并聯(lián)組成,兩組大臂的夾角決定末端位置,情況比單臂SCARA要復(fù)雜很多。
雙臂SCARA的運(yùn)動學(xué)正解是在已知所有連桿臂長和驅(qū)動電機(jī)關(guān)節(jié)角度的情況下,計(jì)算出機(jī)械臂末端的位置和姿態(tài)。雙臂SCARA的平面運(yùn)動如圖2所示,在平面直角坐標(biāo)系XOY下,兩組機(jī)械臂四桿采用等臂長連桿,左右兩組機(jī)械臂OB和OD均繞O點(diǎn)旋轉(zhuǎn),由上下兩個(gè)諧波減速電機(jī)驅(qū)動,將O點(diǎn)設(shè)置為坐標(biāo)系原點(diǎn)。左大臂、左小臂、右大臂和右小臂設(shè)計(jì)為等臂長結(jié)構(gòu),長度均為L,左大臂OB由上諧波電機(jī)驅(qū)動,與基礎(chǔ)坐標(biāo)系夾角為α2,右大臂OD由下諧波電機(jī)驅(qū)動,與基礎(chǔ)坐標(biāo)系的夾角為α1。左小臂和右小臂在A點(diǎn)鉸鏈,A點(diǎn)即為末端執(zhí)行器位置,其在平面坐標(biāo)系中坐標(biāo)設(shè)置為(Xa,Ya)。
通過簡單的平面幾何計(jì)算得到,末端A的X坐標(biāo)為向量OB與向量AB在X軸上投影之和,末端A的Y坐標(biāo)為向量OB與向量AB在Y軸上投影之和[4],所以末端A點(diǎn)在平面坐標(biāo)系中的位置坐標(biāo)表達(dá)式為:
圖2 運(yùn)動學(xué)正解示意圖
雙臂SCARA的運(yùn)動學(xué)逆解是在已知機(jī)械臂末端A點(diǎn)在平面坐標(biāo)系中的位置坐標(biāo)(Xa,Ya)和四桿等臂長L,計(jì)算出左大臂OB和右大臂OD的關(guān)節(jié)角度α1、α2。由于雙臂SCARA的運(yùn)動學(xué)逆解不是唯一的,因此求解比正解要復(fù)雜。如圖3所示,同樣是等臂長四桿結(jié)構(gòu)臂長為L,連接OA過A點(diǎn)做OC垂直O(jiān)B相交與C點(diǎn)。對于三角形ΔOBA,由余弦定理可得:
設(shè)k1=cosβ2,式(1)可寫成:
設(shè)k2=sinβ2,由式⑵可得,k2有兩個(gè)解:
當(dāng)K2為正值時(shí),機(jī)械臂處于一二象限,打印區(qū)間為機(jī)器正面區(qū)域;當(dāng)K2為負(fù)值時(shí),機(jī)械臂處于三四象限,運(yùn)動方向?yàn)闄C(jī)器背面區(qū)域,由于機(jī)器設(shè)計(jì)時(shí)打印區(qū)間均在機(jī)器正面,所以K2始終為正。當(dāng)K2=0時(shí),機(jī)械臂處于奇異點(diǎn),即末端位置在機(jī)械臂伸長最遠(yuǎn)端和機(jī)械臂收縮的最近端,當(dāng)處于奇異點(diǎn)時(shí)β1=kπ(K∈Z)[5]。由于大臂小臂設(shè)計(jì)時(shí)無法重疊,因此K2不能為0,綜上K2∈(0,1]。
由式⑵和⑶可得:
對于ΔOAE,可得:
對于ΔOAC,設(shè)|OA|=R,則:
由式(6)和(7)可得:
至此分別求出左大臂OB和右大臂OD的關(guān)節(jié)角度α1、α2:
在這里,無論是求解α1還是α2,均采用雙變量反正切函數(shù)atan2計(jì)算,而沒有采用反正/余弦函數(shù)asin/acos,這是因?yàn)閍tan2(Y,X)的值域?yàn)閇-π,π],雙臂SCARA機(jī)械臂無論是左大臂OB還是右大臂OD,其關(guān)節(jié)角的取值范圍也都在此之間,因此采用atan2(Y,X)更加的直觀和方便,也避免了額外的角度范圍判斷。另一方面atan2(Y,X)相對于asin(X)或者acos(X)而言,計(jì)算精度也更高。因?yàn)閷?shí)際機(jī)器人的臂長、零點(diǎn)、減速比等運(yùn)動學(xué)參數(shù)有誤差,asin(X)或者acos(X)會使誤差放大,逆解精度均勻性比atan2(Y,X)差,綜上所述在求解機(jī)器人運(yùn)動學(xué)逆解時(shí)采用atan2(Y,X)來計(jì)算[6]。
目前市面上的桌面級3D打印機(jī)大多采用的是基于AVR開發(fā)的Marlin固件,雙臂SCARA機(jī)型不同于普通笛卡爾坐標(biāo)系結(jié)構(gòu),其運(yùn)動軌跡算法計(jì)算復(fù)雜,而且采用諧波減速電機(jī)驅(qū)動,為滿足定位精度,電機(jī)步距角選擇很小,脈沖的細(xì)分倍數(shù)較高,對處理器性能要求比較高,使用Marlin固件存在卡頓現(xiàn)象[7]。因此為了滿足使用的要求,本設(shè)計(jì)采用Smoothieware固件。Smoothieware是一款面向LPC17xx微控制器(ARM Cortex M3體系結(jié)構(gòu))的基于C++編寫的開源固件,可以在mBed、LPCXpresso、SmoothieBoard、R2C2或任何其他基于LPC17xx的控制卡上運(yùn)行。采用的是32位Cortex M3主控芯片,100MHZ的主頻,運(yùn)算能力很強(qiáng),完全可以滿足雙臂SCARA機(jī)型的性能要求。Smoothieware固件已經(jīng)集成了單臂SCARA的算法,要使其能控制雙臂SCARA需要編寫其運(yùn)動控制部分算法,其運(yùn)動學(xué)逆解部分程序代碼如下:
void dual_armSCARASolution::cartesian_to_actuator( float cartesian_mm[], float actuator_mm[] ) ∥笛卡爾坐標(biāo)轉(zhuǎn)換為關(guān)節(jié)坐標(biāo)
{
float SCARA[X_AXIS],SCARA[Y_AXIS];∥末端噴頭的平面坐標(biāo)系坐標(biāo)值
SCARA_COS;∥cosβ2值
SCARA_SIN;∥cosβ2值
SCARA_T1;∥|OC|值
SCARA_T2;∥|AC|值
SCARA_a2;∥左關(guān)節(jié)OB與基礎(chǔ)坐標(biāo)系夾角為α2
SCARA_a1;∥右關(guān)節(jié)OD與基礎(chǔ)坐標(biāo)系夾角為α1
SCARA_COS=(SQ(SCARA[X_AXIS])+SQ(SCARA[Y_AXIS])-2.0f*SQ(this->arm_length)) / (2.0f * SQ(this->arm_length));∥arm_length為配置文件中設(shè)置機(jī)械臂的臂長
if (SCARA_COS > 0.99f)
SCARA_COS = 0.99f;∥避開機(jī)械臂處于奇異點(diǎn)的位置
else if (SCARA_COS <-0.99f)
SCARA_COS = -0.99f;∥避開機(jī)械臂處于奇異點(diǎn)的位置
SCARA_SIN = sqrtf(1.0f-SQ(SCARA_COS ));
SCARA_T1 = this->arm_length+this->arm_length*SCARA_COS;
SCARA_T2 = this->arm_length*SCARA_SIN;
SCARA_a2 = (atan2f(SCARA_T1, SCARA_T2)+atan2f(SCARA[X_AXIS],SCARA[Y_AXIS]));
SCARA_a1= (atan2f(SCARA_T1,SCARA_T2))-(atan2f(SCARA[X_AXIS],SCARA[Y_AXIS]);
actuator_mm[ALPHA_STEPPER] = to_degrees(SCARA_a2);∥將α2弧度換算為上電機(jī)角度
actuator_mm[BETA_STEPPER ] = to_degrees(SCARA_a1); ∥將α1弧度換算為下電機(jī)角度
}
將修改好的固件重新刷入控制卡,經(jīng)過調(diào)試系統(tǒng)運(yùn)行正常,測試打印精度較高。
本文設(shè)計(jì)并試制出的這種具有雙臂機(jī)構(gòu)的SCARA3D打印機(jī),相比于傳統(tǒng)的桌面級3D打印機(jī)具有體積小、剛性好以及移動速度快等優(yōu)點(diǎn)。但是此結(jié)構(gòu)3D打印機(jī)也存在一些不足,主要是連桿的加工裝配精度對機(jī)械臂運(yùn)行軌跡的影響較大,同時(shí)原點(diǎn)的初始角度值也會影響打印精度,后期還需要進(jìn)一步優(yōu)化。