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