1、機械手臂模組化
要建立PUMA560的機器人對象,首先我們要了解PUMA560的D-H參數,之後我們可以利用Robotics Toolbox工具箱中的link和robot函數來建立PUMA560的機器人對象。
其中link函數的調用格式:
L = LINK([alpha A theta D])
L =LINK([alpha A theta D sigma])
L =LINK([alpha A theta D sigma offset])
L =LINK([alpha A theta D], CONVENTION)
L =LINK([alpha A theta D sigma], CONVENTION)
L =LINK([alpha A theta D sigma offset], CONVENTION)
參數CONVENTION可以取‘standard’和‘modified’,其中‘standard’代表采用标準的D-H參數,‘modified’代表采用改進的D-H參數。參數‘alpha’代表扭轉角 ,參數‘A’代表杆件長度,參數‘theta’代表關節角,參數‘D’代表橫距,參數‘sigma’代表關節類型:0代表旋轉關節,非0代表移動關節。另外LINK還有一些資料域:
LINK.alpha %傳回扭轉角
LINK.A %傳回杆件長度
LINK.theta %傳回關節角
LINK.D %傳回橫距
LINK.sigma %傳回關節類型
LINK.RP %傳回‘R’(旋轉)或‘P’(移動)
LINK.mdh %若為标準D-H參數傳回0,否則傳回1
LINK.offset %傳回關節變量偏移
LINK.qlim %傳回關節變量的上下限 [min max]
LINK.islimit(q) %如果關節變量超限,傳回 -1, 0, +1
LINK.I %傳回一個3×3對稱慣性矩陣
LINK.m %傳回關節品質
LINK.r %傳回3×1的關節齒輪向量
LINK.G %傳回齒輪的傳動比
LINK.Jm %傳回電機慣性
LINK.B %傳回粘性摩擦
LINK.Tc %傳回庫侖摩擦
LINK.dh return legacy DH row
LINK.dyn return legacy DYN row
其中robot函數的調用格式:
ROBOT %建立一個空的機器人對象
ROBOT(robot) %建立robot的一個副本
ROBOT(robot, LINK) %用LINK來建立新機器人對象來代替robot
ROBOT(LINK, ...) %用LINK來建立一個機器人對象
ROBOT(DH, ...) %用D-H矩陣來建立一個機器人對象
ROBOT(DYN, ...) %用DYN矩陣來建立一個機器人對象
2、矩陣變換
利用MATLAB中Robotics Toolbox工具箱中的transl、rotx、roty和rotz可以實作用齊次變換矩陣表示平移變換和旋轉變換。下面舉例來說明:
A機器人在x軸方向平移了0.5米,那麼我們可以用下面的方法來求取平移變換後的齊次矩陣:
>> transl(0.5,0,0)
ans =
1.0000 0 0 0.5000
0 1.0000 0 0
0 0 1.0000 0
0 0 0 1.0000
B機器人繞x軸旋轉45度,那麼可以用rotx來求取旋轉後的齊次矩陣:
>> rotx(pi/4)
ans =
1.0000 0 0 0
0 0.7071 -0.7071 0
0 0.7071 0.7071 0
0 0 0 1.0000
C機器人繞y軸旋轉90度,那麼可以用roty來求取旋轉後的齊次矩陣:
>> roty(pi/2)
ans =
0.0000 0 1.0000 0
0 1.0000 0 0
-1.0000 0 0.0000 0
0 0 0 1.0000
D機器人繞z軸旋轉-90度,那麼可以用rotz來求取旋轉後的齊次矩陣:
>> rotz(-pi/2)
ans =
0.0000 1.0000 0 0
-1.0000 0.0000 0 0
0 0 1.0000 0
0 0 0 1.0000
當然,如果有多次旋轉和平移變換,我們隻需要多次調用函數在組合就可以了。另外,可以和我們學習的平移矩陣和旋轉矩陣做個對比,相信是一緻的。
3軌迹規劃
利用Robotics Toolbox提供的ctraj、jtraj和trinterp函數可以實作笛卡爾規劃、關節空間規劃和變換插值。
其中ctraj函數的調用格式:
TC = CTRAJ(T0, T1, N)
TC = CTRAJ(T0, T1, R)
參數TC為從T0到T1的笛卡爾規劃軌迹,N為點的數量,R為給定路徑距離向量,R的每個值必須在0到1之間。
其中jtraj函數的調用格式:
[Q QD QDD] = JTRAJ(Q0, Q1, N)
[Q QD QDD] = JTRAJ(Q0, Q1, N, QD0, QD1)
[Q QD QDD] = JTRAJ(Q0, Q1, T)
[Q QD QDD] = JTRAJ(Q0, Q1, T, QD0, QD1)
參數Q為從狀态Q0到Q1的關節空間規劃軌迹,N為規劃的點數,T為給定的時間向量的長度,速度非零邊界可以用QD0和QD1來指定。QD和QDD為傳回的規劃軌迹的速度和加速度。
其中trinterp函數的調用格式:
TR = TRINTERP(T0, T1, R)
參數TR為在T0和T1之間的坐标變化插值,R需在0和1之間。
要實作軌迹規劃,首先我們要建立一個時間向量,假設在兩秒内完成某個動作,采樣間隔是56ms,那麼可以用如下的指令來實作多項式軌迹規劃:t=0:0.056:2; [q,qd,qdd]=jtraj(qz,qr,t);
其中t為時間向量,qz為機器人的初始位姿,qr為機器人的最終位姿,q為經過的路徑點,qd為運動的速度,qdd為運動的加速度。其中q、qd、qdd都是六列的矩陣,每列代表每個關節的位置、速度和加速度。如q(:,3)代表關節3的位置,qd(:,3)代表關節3的速度,qdd(:,3)代表關節3的加速度。
4、運動學的正問題
利用Robotics Toolbox中的fkine函數可以實作機器人運動學正問題的求解。
其中fkine函數的調用格式:
TR = FKINE(ROBOT, Q)
參數ROBOT為一個機器人對象,TR為由Q定義的每個前向運動學的正解。
以PUMA560為例,定義關節坐标系的零點qz=[0 0 0 0 0 0],那麼fkine(p560,qz)将傳回最後一個關節的平移的齊次變換矩陣。如果有了關節的軌迹規劃之後,我們也可以用fkine來進行運動學的正解。比如:
t=0:0.056:2; q=jtraj(qz,qr,t); T=fkine(p560,q);
傳回的矩陣T是一個三維的矩陣,前兩維是4×4的矩陣代表坐标變化,第三維是時間。
5運動學的逆問題
利用Robotics Toolbox中的ikine函數可以實作機器人運動學逆問題的求解。
其中ikine函數的調用格式:
Q = IKINE(ROBOT, T)
Q = IKINE(ROBOT, T, Q)
Q = IKINE(ROBOT, T, Q, M)
參數ROBOT為一個機器人對象,Q為初始猜測點(預設為0),T為要反解的變換矩陣。當反解的機器人對象的自由度少于6時,要用M進行忽略某個關節自由度。
有了關節的軌迹規劃之後,我們也可以用ikine函數來進行運動學逆問題的求解。比如:
t=0:0.056:2; T1=transl(0.6,-0.5,0); T2=transl(0.4,0.5,0.2); T=ctraj(T1,T2,length(t)); q=ikine(p560,T);
我們也可以嘗試先進行正解,再進行逆解,看看能否還原。
Q=[0 –pi/4 –pi/4 0 pi/8 0]; T=fkine(p560,q); qi=ikine(p560,T);