MatlabRoboticToolbo工具箱学习笔记.docx
《MatlabRoboticToolbo工具箱学习笔记.docx》由会员分享,可在线阅读,更多相关《MatlabRoboticToolbo工具箱学习笔记.docx(18页珍藏版)》请在冰豆网上搜索。
MatlabRoboticToolbo工具箱学习笔记
MatlabRoboticToolboxZC具箱学习笔记
(一)
软件:
matlab2013a
工具箱:
MatlabRoboticToolboxv9.8
MatlabRoboticToolboxT具箱学习笔记根据RobotToolboxdemonstrations目录,将分三大部分阐述:
1、General(Rotations,Transformations,Trajectory)
2、Arm(Robot,Animation,Forwarwkinematics,Inversekinematics,Jacobians,Inversedynamics,Forwarddynamics,Symbolic,Codegeneration)
3、Mobile(Drivingtoa
pose,Quadrotor,Braitenberg,Bug,D*,PRNI,SLAM,Particlefilter)
General/Rotations
%绕X轴旋转pi/2得到的旋转矩阵
(1)r二rotx(pi/2);
%matlab默认的角度单位为弧度,这里可以用度数作为单位
(2)R=rotx(30,'deg')*roty(50,'deg')*rotz(10,'deg');
%求出R等效的任意旋转变换的旋转轴矢量vec和转角theta
(3)[theta,vec]=tr2angvec(R);
%旋转矩阵用欧拉角表示,R=rotz(a)*roty(b)*rotz(c)
(4)eul二tr2eul(R);
%旋转矩阵用roll-pitch-yaw角表示,R二rotx(r)*roty(p)*rotz(y)
(5)rpy=tr2rpy(R);
%旋转矩阵用四元数表示
一个有固定点的刚体通过绕该点的某个轴转过特定角度可达到任何姿态
转轴的方向可以表示成一个单位矢量:
n=cosa•i+cos0•j+cos/•k
则描述该转动的四元数可以表示成:
3
q—cos—+sin—•n
220®e_
=cos—sin—cos•z+sin—cosp•j4-sin—cosy・Ic
2222
四元数既反映了转动的方向又反映了转动的幅值.
四元数的表示:
q=
e
COS——H
2
9
fsin—cosa
2
•i+
.e
sin一cos(32
■j+
esin一cos丫
2
2
片
均
今=2+PJ+PJ+Pgk
2标量部分
卩"+PJ+戸我~…矢量部分
包括一个实数单位1和三个虚数单位i,j,k
另一种表示法:
9=(儿尸),P代表矢量部分
(6)q=Quaternion(R);
%将四元数转化为旋转矩阵
⑺q.R;
%界面,可以是“rpy”,“eluer”角度单位为度。
(8)tripleangle('rpy');
General/Transformations
%沿x轴平移0.5,绕y轴旋转pi/2,绕z轴旋转-pi/2
(1)t=transl(0.5,0.0,0.0)*troty(pi/2)*trotz(-pi/2)
%将齐次变换矩阵转化为欧拉角
(2)tr2eul(t)
%将齐次变换矩阵转化为roll、pitch>yaw角
(3)tr2rpy(t)
General/Trajectory
clear;
clc;
pO二T;%定义初始点及终点位置
Pl二2;
p=tpoly(pO,pl,50);%取步长为50figure(l);
plot(p);%绘图,可以看到在初始点及终点的一、二阶导均为零[p,pd,pdd]=tpoly(pO,pl,50);%得到位置、速度、加速度
那为五阶多项式,速度、加速度均在一定围
figure
(2);
subplot(3,1,1);
subplot(3,1,2);
plot(p);xlabel(,Time");ylabel('p‘);
plot(pd);xlabel('Time");ylabelCpd‘);
%另外一种方法:
[p,pd,pdd]=lspb(pO,pl,50);
figure(3);
subplot(3,1,1);plot(p);xlabel(?
Time');ylabel('p');
subplot(3,1,2);plot(pd);xlabel(?
Time*);ylabel('pd');%可以看到速度是呈梯形
subplot(3,1,3);plot(pdd);xlabel('Time*);ylabel('pdd');
102025304045SO
%三维的情况:
p=mtraj(tpoly,[012],[210],50);
figure(4);
plot(p)
%对于齐次变换矩阵的情况
TO=transl(O.4,0.2,0)*trotx(pi);%定义初始点和目标点的位姿
Tl=transl(-0.4,-0.2,0.3)*troty(pi/2)*trotz(~pi/2);
T=ctraj(TO,Tl,50);
first二T(:
:
1);%初始位姿矩阵
tenth二T(:
:
10);%第十个位姿矩阵
figure(5);
tranimate(T);%动画演示坐标系自初始点运动到目标点的过程
MatlabRoboticToolbox工具箱学习笔记
(二)
Arm/Robots
机器人是山多个连杆连接而成的,机器人关节分为旋转关节和移动关节。
创建机器人的两个最重要的函数是:
Link和SerialLinko
1、
Link类
一个Link包含了机器人的运动学参数、动力学参数、刚体惯性矩参数、电机和
传动参数。
操作函数:
%A
连杆变换矩阵
%
RP
关节类型:
'R'或'P'
%
friction
摩擦力
%
nofriction
摩擦力忽略
%
dyn
显示动力学参数
%
islimit
测试关节是否超出软限制
%
isrevolute
测试是否为旋转关节
%
isprismatic
测试是否为移动关节
%
display
连杆参数以表格形式显示
%
char
转为字符串
运动学参数:
%
theta
关节角度
%
d
连杆偏移量
%
a
连杆长度
%
alpha
连杆扭角
%
sigma
旋转关节为0,移动关节为1
%
mdh
标准的D&H为0,否则为1
%
offset
关节变量偏移量
%
qlim
关节变量围[minmax]
动力学参数:
%m连杆质量
%r连杆相对于坐标系的质心位置3x1
%I连杆的惯性矩阵(关于连杆重心)3x3
%B粘性摩擦力(对于电机)1x1或2x1
%Tc库仑摩擦力1x1或2x1
电机和传动参数:
%G齿轮传动比
%Jm电机惯性矩(对于电机)
2、SerialLink类
操作函数:
%plot
%teach
%isspherical
%islimit
%fkine
%ikine6s
%ikine3
%ikine
%jacobO
%jacobn
%maniplty
%jtraj
%accel
%coriolis
%dyn
%fdyn
%friction
%gravload
%inertia
%nofriction
%rne
%payload
%perturb
属性:
%links
%gravity
%base
%tool
以图形形式显示机器人
驱动机器人测试机器人是否有球腕关节测试机器人是否抵达关节极限
前向运动学求解
6旋转轴球腕关节机器人的逆向运动学求解
3旋转轴机器人的逆向运动学求解
釆用迭代方法的逆向运动学求解
在世界坐标系描述的雅克比矩阵
在工具坐标系描述的雅克比矩阵
可操纵性度
关节空间轨迹
关节加速度
关节柯氏力
显示连杆的动力学属性
关节运动
摩擦力
关节重力
关节惯性矩阵
设置摩擦力为0
关节的力/力矩
在末端坐标系增加负载随机扰动连杆的动力学参数
连杆向量(lxN)
重力的方向[gxgygz]
机器人基座的位姿(4x4)
机器人的工具变换矩阵】T6totooltip](4x4)
%qlim
%offset
%name
%manuf
%comment
%plotopt
%n
%config
%mdh
关节1^1[qminqmax.(Nx2)
偏置(Nxl)
机器人名字(在图形中显示)
注释,制造商名注释,总评optionsforplot()method(cellarray)关节数
机器人结构字符串,例如'RRRRRR'运动学中约定的布尔数(0二DH,1二MDH)
怎样创建一个机器人?
%Link调用格式:
%{
(1)L=LinkO创建一个带默认参数的连杆
(2)L=Link(L1)复制连杆L1
(3)L=Link(OPTIONS)创建一个指定运动学、动力学参数的连杆
OPTIONS可以是:
%'theta,TH
jointangle,ifnotspecifiedjoint
isrevolute
%?
d\D
jointextension,ifnot
specifiedjoint
isprismatic
%?
a\A
jointoffset(default0)
%,alpha*,A
jointtwist(default0)
%'standard,
definedusingstandardD&Hparameters
(default)・
%'modified'
definedusingmodifiedD&H
parameters・
%'offset,,0
jointvariableoffset(default0)
%'qlinf,L
jointlimit(default[])
%'I',I
linkinertiamatrix(3x1,6x1or
3x3)
%?
r\R
linkcentreofgravity(3x1)
%J,M
linkmass(lxl)
%JG\G
motorgearratio(default0)
%JB\B
jointfriction,motorreferenced
(default0)
%*Jm*,J
motorinertia,motorreferenced
(default0)
%JTc\T
Coulombfriction,motor
referenced(lxl
or2x1),(default[00])
%'revolute,
forarevolutejoint(default)
%'prismatic'
foraprismaticjoint'p‘
%'standard'
forstandardD&Hparameters
(default)・
%'modified'
formodifiedD&Hparameters・
symbolicnotnumeric
%'sym'
considerallparametervaluesas
注:
不能同时指定“theta”和“d”
连杆的惯性矩阵(3x3)是对称矩阵,可以写成3x3矩阵,也可以是[IxxIyyIzzIxyIyzIxz]
所有摩擦均针对电机而不是负载
齿轮传动比只用于传递电机的摩擦力和惯性矩给连杆坐标系。
%}
%SerialLink调用格式:
%{
(1)R=SerialLink(LINKS,OPTIONS),OPTIONS可以是:
'name'、
'comment'、'manufacturer'
'base’、'tool'、’gravity*、’plotopt*
(2)R=SerialLink(DH,OPTIONS),矩阵DH的构成:
每个关节一行,
每一彳亍为[thetadaalpha]
(默认为旋转关节),第五列(sigma)为可选列,sigma=0(默认)为旋转关节,sigma二1为移动关节
(3)R=SerialLink(OPTIONS)没有连杆的机器人
(4)R=SerialLink([RlR2...],OPTIONS)机器人连接,将R2的基座连接到R1的末端.
(5)R=SerialLink(Rl,options)复制机器人Rl
%}
LI=Link('d',0,'a',1,,alpha',pi/2);%定义连杆1,没有写theta说明theta为关节变量
Ll.a;%查看d的值
Ll.d;%查看d的值
%还可以Ll.RP,LI.display,LI.mdh,LI.isprismatic,LI.isrevolute等等,这样就可以查看一些默认值
L2=Link(,d,,0,'a',1,'alpha,,0);
bot=SerialLink([LIL2],'name','myrobot');
bot.n;%查看连杆数目
bot.fkine([0.10.2]);%前向运动学
bot.plot([0.10.2]);%绘制机器人
定义完连杆和机器人便可以求机器人询和逆向运动学、动力学等等。
L1•参数或属性():
查看连杆的参数或属性
L1.操作函数(参数):
操作连杆参数
bot.属性():
查看机器人的属性
bot.操作函数(参数):
操作机器人,可以进行前向、逆向运动学求解等
实例:
StanfordManipulator
D-H参数表:
Link
a.
1
0
0
—90
沪
2
血
0
+90
3
d*
0
0
0
4
0
0
-90
沪
5
0
0
+90
0*
6
0
0
clear;
clc;
LI=Link('d‘,0,'a',0,*alpha*,-pi/2):
%定义连杆
L2=Link('d',1,'a',0,'alpha',pi/2);
L3=Link('theta',0,'a',0,'alpha',0):
L4=Link('d',0,'a',0,*alpha*,-pi/2):
L5=Link('d',0,'a',0,'alpha',pi/2);
L6=Link('d',1,'a',0,*alpha*,0):
bot=SerialLink([LlL2L3L4L5L6]);%连接连杆
bot.display();%显示D~H参数表
forward_kinematics=bot.fkine([-0.20.1100.112])%前向运动学
bot=
robot(6axis,RRPRRR,stdDH)
+・
1
1
j1
丄
+theta|
•一一一一一一一一丄一一■■
+
d1
+・
a1
■一■■■■—丄■一■
alpha
1
1
1|
■■■■■■■■十—qll
•一
0|
■■■■■■■十
0|
-1.571
1
2|
q2|
1|
0|
1.571
1
3|
0|
q3|
0|
0
1
4|
q4|
0|
0|
-1.571
1
5|
q5|
0|
0|
丄・571
1
6|
q6|
0|
0
+——++++
grav=0
base=1
000
tool=
1
0
0
0
0
0
100
0
1
0
0
9.81
0
010
0
0
1
0
0
001
0
0
0
1
forward_kinematics=
-0.0971
-0.4533
0.8860
2.0631
0.9199
-0.3806
-0.0939
0.6878
0.3798
0.8060
0・4540
10.4041
0
0
0
1.0000
求出末端的齐次变换矩阵:
clear;
clc;
Ll=Link('d',0,'a',0,'alpha',-pi/2,'sym');%定义连杆L2二Link('d','d2','a',0,*alpha1,pi/2,'sym');
L3=Link”theta1,0,Ja",0,Jalpha1,0,'sym');
L4=Link(,d‘,0,1a,0,'alpha',-pi/2,'sym,);
L5=Link('d',0,'a',0,'alpha',pi/2,'sym');
L6=Link('d','d6','a',0,'alpha',0,'sym');
bot=SerialLink([LlL2L3L4L5L6]);%连接连杆
symsthetaltheta2d3theta4thetadtheta6;
forward_kinematics=bot・fkine([thetaltheta2d3theta4thetaotheta6])%前向运动学
Stanfordarm的运动学逆解:
clear;
clc;
clearL
%
thda
alpha
L(l)二Link([0
00-pi/2
0]);%定
义连杆
L
(2)=Link([0
10pi/2
01);
L(3)=
Link([00
00
1]);
L(4)=Link([0
00-pi/2
0]);
L(5)=Link([0
00pi/2
0]);
L(6)=
Link([01
00
0]);
bot=SerialLink(L,
'name',Stanfordarm');%连接连杆
T^transl(1,2,3)*trotz(60,'deg')*troty(30,'deg')*trotz(90,'deg')inverse_kinematics=bot.ikine(T,'pinv'):
%逆向运动学thetal=inverse_kinematics
(1);
theta2=inverse_kinematics
(2);d3=inverse_kinematics(3);
theta4=inverse_kinematics(4);theta5=inverse_kinematics(5);
theta6=inverse_kinematics(6);
forward_kinematics=bot・fkine([thetaltheta2d3theta4thetaothetaG])'%前向运动学,验证结果的准确性.
%求解结果为T与forward_kinematics—致。
正确。
求解Stanfordarm在世界坐标系描述的雅克比矩阵
clear;
clc;
clearL
%
thda
alpha
L(l)=Link([0
00-pi/2
0]);%定
义连杆
L
(2)二Link([0
10pi/2
0]);
L(3)=
Link([00
00
1]);
0
0
0
name,,'Stanford
0-pi/2
0pi/2
0
arm);%连接连杆
symsthetaltheta2d3theta4thetaotheta6;
J0=vpa(bot・jacob0([thetaltheta2d3theta4thetaotheta6J),4)
求平面二自由度机器人在世界坐标系描述的雅克比矩阵
D-H参数表:
Link
1
«1
0
0
2
«2
0
0
clear;
clc;
clearL
L(l)=Link(,d',0,'a','al','alpha',0,'sym,);%定义连杆L
(2)=Link('d',0,'a','a2','alpha',0,'sym');
bot=SerialLink(L,'name',,Planar2-dofrobot,);%连接连杆symsthetaltheta2;
JO=bot.jacobO([thetaltheta2]);
JO=simplify(JO)
求得:
JO=
[-a2*sin(thetal+theta2)-al*sin(thetal),-a2*sin(thetal+theta2)]
[a2*cos(thetal+theta2)+al*cos(thetal),
cos(thetal+
theta2)]
[
0,
0]
[
0,
0]
[
0,
0]
[
1,
1]