柴 勇,劉福華
(西京學(xué)院 電子信息學(xué)院,陜西 西安 710123)
隨著由“中國(guó)制造”向“中國(guó)智造”的轉(zhuǎn)變,中國(guó)工業(yè)智能化時(shí)代正在快速到來(lái)。工業(yè)機(jī)械臂在智能制造領(lǐng)域中起著至關(guān)重要的作用,廣泛應(yīng)用于噴涂、焊接、巡檢、裝配、搬運(yùn)等各個(gè)行業(yè),尤其在自動(dòng)化焊接領(lǐng)域中的應(yīng)用得到了飛速發(fā)展。機(jī)械臂屬于機(jī)器人,是一種類似于人手的機(jī)械裝置,可以模仿人手臂的動(dòng)作并完成一些操作,機(jī)械臂在非標(biāo)自動(dòng)化過(guò)程中愈發(fā)突顯出巨大的作用,使得更多的行業(yè)實(shí)現(xiàn)了機(jī)械臂取代人工的過(guò)程。本文所要研究的機(jī)械臂主要應(yīng)用于焊接行業(yè),其主要作用是進(jìn)行焊縫的跟蹤,實(shí)現(xiàn)焊接的自動(dòng)化及智能化。
由于當(dāng)前機(jī)械臂模型的設(shè)計(jì)存在諸多問(wèn)題,例如:機(jī)械臂設(shè)計(jì)的自由度與實(shí)際應(yīng)用不匹配;整個(gè)機(jī)械臂活動(dòng)范圍過(guò)小;機(jī)械臂的關(guān)節(jié)角度過(guò)小;機(jī)械臂在運(yùn)動(dòng)過(guò)程中存在奇異點(diǎn)[1];機(jī)械臂在運(yùn)動(dòng)過(guò)程中會(huì)發(fā)生突變或長(zhǎng)時(shí)間停滯導(dǎo)致運(yùn)動(dòng)過(guò)程不平滑等。所以這就使得對(duì)機(jī)械臂進(jìn)行運(yùn)動(dòng)學(xué)仿真研究尤為重要。機(jī)械臂的研究涉及控制、機(jī)械等諸多學(xué)科,有必要對(duì)其進(jìn)行一般規(guī)律研究。利用MATLAB仿真工具箱Robotics Toolbox,不僅能夠?qū)C(jī)械臂的D-H模型進(jìn)行建模[2],而且對(duì)機(jī)械臂的運(yùn)動(dòng)仿真也十分方便,能夠較好地對(duì)機(jī)械臂的運(yùn)動(dòng)性能進(jìn)行仿真驗(yàn)證。本文對(duì)某四自由度的焊接機(jī)械臂進(jìn)行建模,對(duì)該模型的正逆運(yùn)動(dòng)學(xué)特性進(jìn)行分析,通過(guò)運(yùn)動(dòng)學(xué)軌跡規(guī)劃仿真研究進(jìn)一步驗(yàn)證了運(yùn)動(dòng)模型的可行性。為四軸焊縫跟蹤機(jī)械臂的設(shè)計(jì)及應(yīng)用提供了理論指導(dǎo)。
對(duì)機(jī)械臂模型建立D-H (Diffie-Hellman)參數(shù)坐標(biāo)系,D-H坐標(biāo)系如圖1所示。根據(jù)坐標(biāo)系變換步驟可以得到機(jī)械臂模型的D-H參數(shù),如表1所示[3]。
表1 機(jī)械臂D-H參數(shù)
圖1 機(jī)械臂模型D-H參數(shù)坐標(biāo)系
(2)
式(2)中矩陣是在式(1)中代入各連桿的D-H參數(shù)后得到的結(jié)果。本文設(shè)計(jì)的模型為PPPR(即有3個(gè)移動(dòng)關(guān)節(jié)和1個(gè)旋轉(zhuǎn)關(guān)節(jié)構(gòu)成),如圖3所示。
根據(jù)式(2)代入具體的D-H參數(shù)可求得關(guān)節(jié)之間的齊次變換矩陣,各個(gè)關(guān)節(jié)的齊次變換矩陣如下:
(6)
機(jī)械臂基座到機(jī)械臂末端的齊次變換矩陣為:
(7)
式(7)為即為機(jī)械臂正運(yùn)動(dòng)學(xué)方程,給定機(jī)械臂的各個(gè)關(guān)節(jié)變量,就可以求得機(jī)械臂末端的位姿[4-5]。
MATLAB 機(jī)器人工具包是專門用來(lái)做機(jī)器人模型建立和運(yùn)動(dòng)仿真的軟件包,機(jī)械臂構(gòu)建的重點(diǎn)主要在于各個(gè)關(guān)節(jié)的構(gòu)建,本文采用標(biāo)準(zhǔn)D-H參數(shù)法進(jìn)行模型建立。建立模型的部分源代碼如下。
clear;
clc;
th(1)=0; d(1)=0.2; a(1)=0; alp(1)=pi/2;
th(2)=pi/2; d(2)=0.2; a(2)=0; alp(2)=pi/2;
th(3)=pi/2; d(3)=0.2; a(3)=0; alp(3)=pi/2;
th(4)=pi/2; d(4)=0; a(4)=0; alp(4)=pi/2;
% DH parameters th d a alpha sigma
L1=Link([th(1), d(1), a(1), alp(1), 1], 'standard');L1.qlim=[0,2]
L2=Link([th(2), d(2), a(2), alp(2), 1], 'standard');L2.qlim=[0,4]
L3=Link([th(3), d(3), a(3), alp(3), 1], 'standard');L3.qlim=[0,2]
L4=Link([th(4), d(3), a(4), alp(4), 0], 'standard');L4.qlim=[-pi/4,pi/4]
robot=SerialLink([L1, L2, L3, L4]);
robot.name='焊縫跟蹤機(jī)械臂';
robot.display()
view(3);
robot.teach();
%Forward Pose Kinematics
pose_0=[1,2,1,0];
Q=robot.fkine(pose_0);
T=[0 0 -1 1;
-1 0 0 -2;
0 1 0 1.2;
0 0 0 1;];
M=[1 1 1 0 0 1];
K=ikine(robot,T,'mask',M);
代碼中robot.name(‘焊縫跟蹤機(jī)械臂’)是對(duì)機(jī)械臂生成一個(gè)名字,該機(jī)械臂是由SerialLink=([L1,L2,L3,L4])指令創(chuàng)建而成,該機(jī)械臂的名字為‘焊縫跟蹤機(jī)械臂’。robot.display()函數(shù)是對(duì)所建立的機(jī)械臂模型進(jìn)行顯示。robot.teach()函數(shù)是在建立的模型上增加示教功能,可以對(duì)模型的位置和姿態(tài)進(jìn)行設(shè)置。代碼生成的模型如圖2所示。
圖2 機(jī)械臂模型
通過(guò)拖動(dòng)模型中q1、q2、q3、q4橫條使該機(jī)械臂能夠?qū)崿F(xiàn)焊槍在X、Y、Z3個(gè)方向的直線移動(dòng)以及轉(zhuǎn)動(dòng),通過(guò)3個(gè)直線運(yùn)動(dòng)關(guān)節(jié)的插補(bǔ)運(yùn)動(dòng)在空間里達(dá)到跟隨焊縫的目的,能夠滿足實(shí)際應(yīng)用過(guò)程中大部分焊縫的跟蹤。通過(guò)R軸的轉(zhuǎn)動(dòng)可以隨時(shí)調(diào)整焊槍的姿態(tài),從而滿足各種角度的焊接,尤其在圓弧軌跡焊接時(shí)可以達(dá)到最佳的焊接效果。
機(jī)械臂的運(yùn)動(dòng)學(xué)分析包括正運(yùn)動(dòng)學(xué)和逆運(yùn)動(dòng)學(xué)分析[4]。正運(yùn)動(dòng)學(xué)分析是根據(jù)已知的各個(gè)關(guān)節(jié)旋轉(zhuǎn)角度或位移得到機(jī)械臂末端的位置和姿態(tài)。逆運(yùn)動(dòng)學(xué)分析是根據(jù)機(jī)械臂已知的位置和姿態(tài)來(lái)得到各個(gè)關(guān)節(jié)的角度或位移[5]。正運(yùn)動(dòng)學(xué)的求解能夠得到機(jī)械臂末端姿態(tài)的唯一解,而根據(jù)滿足特定數(shù)值的角度不僅有一個(gè)解這一情況,對(duì)逆運(yùn)動(dòng)學(xué)求解可以得到多組解。因此在應(yīng)用過(guò)程中要結(jié)合機(jī)械臂的實(shí)用場(chǎng)景根據(jù)關(guān)節(jié)的參數(shù)變量范圍來(lái)選取合適的解。
4個(gè)關(guān)節(jié)分別用q1、q2、q3、q4來(lái)表示,通過(guò)拉動(dòng)分別對(duì)應(yīng)的4個(gè)橫條可以改變這4個(gè)關(guān)節(jié)的不同參數(shù),從而得到不同的位置坐標(biāo)和位置姿態(tài)。根據(jù)各個(gè)關(guān)節(jié)的參數(shù)得到機(jī)械臂末端的位置和姿態(tài),首先來(lái)給定一組各個(gè)關(guān)節(jié)的參數(shù),在程序里機(jī)械臂各個(gè)關(guān)節(jié)的初始參數(shù)為pose_0=[1, 2, 1, 0],表示q1、q2、q3分別移動(dòng)的單位距離為1、2、1,q4沒(méi)有轉(zhuǎn)動(dòng)。調(diào)用Q=robot.fkine(pose_0)指令來(lái)實(shí)現(xiàn)機(jī)械臂末端位姿的求解,得到的是一個(gè)4×4矩陣,即為機(jī)械臂末端相對(duì)于參考坐標(biāo)系的位姿變換矩陣[5-7]。得到的位姿矩陣如圖3所示。
圖3 正運(yùn)動(dòng)位姿矩陣輸出值
在得到的矩陣Q中,最后一列表示機(jī)械臂的末端的位置,即X的坐標(biāo)為1,Y的坐標(biāo)-2,Z的坐標(biāo)1.2。為驗(yàn)證此解的正確性,在示教模式下分別拉動(dòng)q1、q2、q3改變關(guān)節(jié)變量,使得q1=1,q2=2,q3=1來(lái)看X、Y、Z3個(gè)軸的坐標(biāo),是否與所求的解一致。示教模式下改變關(guān)節(jié)變量后模型如圖4所示。結(jié)果表明,X的坐標(biāo)為1.000,Y的坐標(biāo)為-2.012,Z的坐標(biāo)為1.214,與所求正運(yùn)動(dòng)學(xué)的解的矩陣顯示的位置基本一致,存在少量誤差是因?yàn)閝1和q2在拖動(dòng)過(guò)程中不容易拖動(dòng)為整數(shù),q1和q2設(shè)置后分別為1.01和2.01,有小量誤差導(dǎo)致得到的解同樣也有小量誤差。
圖4 示教模式下機(jī)械臂模型
通過(guò)矩陣變換求解方程組得到機(jī)械臂各個(gè)關(guān)節(jié)的參數(shù)為逆向運(yùn)動(dòng)學(xué)的求解,在MATLAB中調(diào)用指令K=ikine(robot,T, 'mask',M)來(lái)得到機(jī)械臂的各個(gè)關(guān)節(jié)的位置或角度。即為得到的各個(gè)關(guān)節(jié)的參數(shù)變量,與之前代碼中設(shè)定的位姿pose_0=[1,2,1,0]基本一致,這3個(gè)值是機(jī)械臂逆運(yùn)動(dòng)學(xué)的解。上面代碼中指令M=[1 1 1 0 0 1]表示該模型的運(yùn)動(dòng)涉及的自由度信息,M指令中前3個(gè)參數(shù)為1表示該模型運(yùn)動(dòng)涉及沿X、Y、Z3個(gè)軸平移的自由度,后3個(gè)參數(shù)為0、0、1表示該模型運(yùn)動(dòng)僅涉及沿Z軸旋轉(zhuǎn)這一自由度,不涉及沿X軸和Y軸旋轉(zhuǎn)的自由度。fkine和ikine是一對(duì)功能相反的函數(shù),分別可以求出正逆運(yùn)動(dòng)學(xué)的解,可以很方便地對(duì)模型的正逆運(yùn)動(dòng)學(xué)進(jìn)行分析[7]。
機(jī)械臂的軌跡規(guī)劃是以機(jī)械臂的運(yùn)動(dòng)學(xué)和動(dòng)力學(xué)為基礎(chǔ)[8-10],探討在空間中機(jī)械臂運(yùn)動(dòng)的軌跡規(guī)劃和軌跡生成方法。一般空間軌跡規(guī)劃分為2種,一種是關(guān)節(jié)空間的軌跡規(guī)劃,另外一種是直角坐標(biāo)系空間,也就是笛卡爾空間的軌跡規(guī)劃[8-10]。這2種空間的軌跡規(guī)劃各有優(yōu)缺點(diǎn),關(guān)節(jié)空間的軌跡規(guī)劃相對(duì)來(lái)說(shuō)簡(jiǎn)單一點(diǎn),但不能描述出機(jī)械臂末端的運(yùn)動(dòng)軌跡,笛卡爾空間的軌跡規(guī)劃能夠比較直觀地呈現(xiàn)出機(jī)械臂末端的運(yùn)動(dòng)軌跡,但計(jì)算量比較大,而且在規(guī)劃的過(guò)程中很容易進(jìn)入機(jī)器人的奇異位形[11]。這里分別運(yùn)用MATLAB中的Robotic Toolbox進(jìn)行2種空間的軌跡規(guī)劃[12]。
2.3.1 關(guān)節(jié)空間規(guī)劃
本文選用5次多項(xiàng)式插值法來(lái)進(jìn)行軌跡規(guī)劃[13]。機(jī)械臂由初始位姿變換到目標(biāo)位姿,需要得到各個(gè)關(guān)節(jié)角隨時(shí)間變化的函數(shù)。
設(shè)關(guān)節(jié)的運(yùn)動(dòng)軌跡函數(shù)為:
θt=a0+a1t+a2t2+a3t3+a4t4+a5t5
(8)
在t0時(shí)刻為初始位姿,tf時(shí)刻為設(shè)定的目標(biāo)位姿,設(shè)t0時(shí)刻轉(zhuǎn)角為θ0,tf時(shí)刻轉(zhuǎn)角為θf(wàn)。
代入約束函數(shù)方程為:
θ0=a0
(9)
θf(wàn)=θ(tf)
(10)
(11)
(12)
上述方程組解為:
a0=θ0
(13)
a1=a2=0
(14)
(15)
(16)
(17)
插值機(jī)械臂末端從一個(gè)位置運(yùn)動(dòng)到另外一個(gè)位置,以這樣的運(yùn)動(dòng)方式實(shí)現(xiàn)機(jī)械臂末端的移動(dòng)。采用5次多項(xiàng)式進(jìn)行插值時(shí),求得各個(gè)關(guān)節(jié)的位置、速度、加速度曲線,如圖5所示。
圖5 關(guān)節(jié)的位置、速度、加速度變化曲線
仿真結(jié)果表明:機(jī)械臂各關(guān)節(jié)的速度和加速度都是先增加后減小,最后趨于0,速度曲線在中間位置取得最大值,加速度曲線在中間位置變?yōu)?,可以認(rèn)為從初始位置開始各個(gè)關(guān)節(jié)受到正向驅(qū)動(dòng)力矩,速度不斷增加,平穩(wěn)到達(dá)中間點(diǎn),從中間的這個(gè)點(diǎn)開始到最終位置,各個(gè)關(guān)節(jié)開始施加反向力矩,平穩(wěn)到達(dá)最終位置[14]。機(jī)械臂關(guān)節(jié)速度和加速度變化曲線比較平滑,沒(méi)有尖銳點(diǎn)和突變點(diǎn),說(shuō)明機(jī)械臂各個(gè)關(guān)節(jié)在運(yùn)動(dòng)過(guò)程中沒(méi)有突然的加減速、停滯等現(xiàn)象[15-16]。在實(shí)際應(yīng)用過(guò)程中運(yùn)動(dòng)平穩(wěn),振動(dòng)較小,而且運(yùn)動(dòng)過(guò)程中最大速度和最大加速度能夠滿足實(shí)際焊接的要求。
2.3.2 笛卡爾空間規(guī)劃
本文主要對(duì)直線軌跡規(guī)劃進(jìn)行分析、仿真。設(shè)v為要求的沿直線速度,t為插補(bǔ)時(shí)間的間隔,就能求出直線的長(zhǎng)度L,間隔時(shí)間t內(nèi)的距離d和插補(bǔ)數(shù)N如下。
(18)
d=vt
(19)
(20)
相鄰插補(bǔ)點(diǎn)的增量:
(21)
(22)
(23)
插補(bǔ)點(diǎn)的坐標(biāo):
xi+1=xi+iΔx
(24)
yi+1=yi+iΔy
(25)
zi+1=zi+iΔz
(26)
在這里i=0,1,2,…,N
通過(guò)仿真得到了機(jī)械臂末端從初始位姿到末端位姿坐標(biāo)系的平移變化;機(jī)械臂末端從初始位姿到末端位姿坐標(biāo)系旋轉(zhuǎn)的變化以及機(jī)械臂末端從初始位姿到終止位姿的空間軌跡規(guī)劃圖形投影到XOY坐標(biāo)軸內(nèi)的變化,顯示了機(jī)械臂末端在X、Y、Z坐標(biāo)內(nèi)隨時(shí)間變化的曲線,如圖6所示。
圖6 直線軌跡仿真結(jié)果
仿真結(jié)果表明:該運(yùn)動(dòng)軌跡符合四自由度機(jī)械臂的運(yùn)行要求,機(jī)械臂末端的運(yùn)動(dòng)情況符合開始設(shè)計(jì)的一段直線的要求。
本文根據(jù)D-H參數(shù)法對(duì)四軸焊縫跟蹤機(jī)械臂進(jìn)行建模,并通過(guò)MATLAB 機(jī)器人工具包對(duì)該機(jī)械臂進(jìn)行正逆運(yùn)動(dòng)學(xué)分析、軌跡規(guī)劃。MATLAB仿真進(jìn)一步驗(yàn)證了該機(jī)械臂能夠按照期望的軌跡運(yùn)動(dòng),沒(méi)有奇異點(diǎn)。在直線運(yùn)動(dòng)過(guò)程中,該機(jī)械臂的各個(gè)關(guān)節(jié)的位置、速度、加速度曲線比較平滑,沒(méi)有停滯和突變點(diǎn)。從多方面驗(yàn)證了機(jī)械臂設(shè)計(jì)的合理性,說(shuō)明該機(jī)械臂能滿足實(shí)際的焊接要求,具有實(shí)用意義。