張興華 肖仕馳


摘要:本文用Matlab實現六軸機器人的建模和實現軌跡規劃。講解如何寫正逆解以及軌跡插補的程序。程序是基于Matlab2 01 6a,工具箱版本為Robotic Toolbox9.10。
關鍵詞:六軸機器人建模Matlab
1 D-H建模
三個兩兩相互垂直的XYZ軸構成歐幾里得空間,存在六個自由度:沿XYZ平移的三個自由度,繞XYZ旋轉的三個自由度。在歐幾里得空間中任意線性變換都可以通過這六個自由度完成。
Denavit-Hartenberg提出的D-H參數模型能滿足機器人學中的最小線性表示約定,用4個參數就能描述坐標變換:繞X軸平移距離a;繞X軸旋轉角度alpha;繞Z軸平移距離d;繞Z軸旋轉角度theta。
2標準D-H模型和改進D-H模型
對比來看參數并沒有改變,標準的D-H模型是將連桿的坐標系固定在該連桿的輸出端(下一關節),也即坐標系i 1與關節l對齊;改進的D-H模型則是將坐標系固定在該連桿的輸入端(上一關節),也即坐標系i-l與關節對齊i-l。
3利用Matlab Robotic Toolbox建立機器人模型
alpha:連桿扭角;a:連桿長度;theta:關節轉角;d:關節距離offset:偏移
clear;clc;%建立機器人模型
%theta d
a
alpha
offset
Ll=Link([0
0.
25 p1/2
0
】);%定義連桿的D-H參數
L2=Link([p1/2
0
0.56
0
0
】);
L3=Link([0
0
0.035
p1/2
0
]);
L4=Link([0
0.515
0 p1/2
0
]);
L5=Link([pi
0
0
p1/2
0
]);
L6=Link([0
0.08
0
0
0
]);
robot=SeriaILink([Ll L2 L3 L4 L5 L61,1namel,manman);%連接連桿,機器人取名manman
robot.plot([0,p1/2,0,O,pi.O]);%輸出機器人模型,后面的六個角為輸出時的theta姿態
robot.display();
其中表格為D-H參數,grav為重力加速度矢量base為基坐標系的齊次矩陣,tool為工具坐標系和末端連桿的坐標系之間的變換矩陣。在代碼段l的后面加入teach指令,則可調整各個關節角度。
teach(robot);
4運動學正逆解
運動學正解:根據6個關節角結算出末端位姿。
運動學逆解:根據末端位姿結算出關節角,這里會存在8組逆解,本文中用的反解函數會智能輸出最優的一組解。
正解程序:
clear;clc;%建立機器人模型
%theta d
a
alpha
offset
Ll=Link([0
0.
25 p1/2
0
]);%定義連桿的D-H參數
L2=Link([p1/2
0
0.56
0
0
】);
L3=Link([0
0
0.035 p1/2
0
]);
L4=Link([0
0.515
0
p1/2
0
】);
L5=Link([pi
O
pl/2
0
]);
L6=Link([0
0.08
0
0
]);
robot=SerialLink([Ll L2 L3 L4 L5 L6],namel,manman);%連接連桿,機器人取名manman
theta=LO,O,O,0,O,0];%指定的關節角
p=robot.fkine(theta)%fkine正解函數,根據給定的關節角theta,求解出末端位姿p
q=roloot.ikine(p)%ikine逆解函數,根據給定的末端位姿p,求解出關節角q
可以查看p和q,對比theta和q,發現是一致的
5軌跡規劃
在實際應用中,我們一般都是知道末端的軌跡,然后使機器人動作。本文的例子是根據給定兩個點的值,得到末端位姿,根據末端位姿再來規劃軌跡。
clear;clc;%建立機器人模型
%theta
d
a
alpha
offset
Ll=Link([0
0.4
0.025 p1/2
0
]);%定義連桿的D-H參數
L2=Link([p1/2
0
0.56
0
0
]);
L3=Link([0
0
0.035 p1/2
0
]);
L4=Link([0
0.515
0
p1/2
0
]);
L5=Link([pi
0
0
p1/2
0
]);
L6=Link([0
0.08
0
0
]);
robot=SeriaILink([Ll L2 L3 L4 L5 L61,1namel,manman);%連接連桿,機器人取名manman
Tl=transl(0.5,O,0);%根據給定起始點,得到起始點位姿
T2=transl(0,0.5,0);%根據給定終止點,得到終止點位姿
ql=roloot.ikine(Tl);%根據起始點位姿,得到起始點關節角
q2=roloot.ikine(T2);%根據終止點位姿,得到終止點關節角
【q,qd,qddl=jtraj(ql,q2,50);%五次多項式軌跡,得到關節角度,角速度,角加速度,50為采樣點個數
grid on
T=robot.fkine(q);%根據插值,得到末端執行器位姿
plot3(squeeze(T(1,4,:》,squeeze(T(2,4,i》,squeeze(T(3.4,:)));%輸出末端軌跡
hold on
robot.plot(q);%動畫演示
參考文獻
[1]王永志.基于LinuxCNC的六軸機器人軟件控制系統及運動算法研究[D].華南理工大學,2018.
[2]郭小羽,六軸機器人控制器底層軟件設計及其算法仿真研究[D].深圳大學,2017.