Matlab Robotic Toolbox工具箱学习笔记28102Word文档下载推荐.docx
《Matlab Robotic Toolbox工具箱学习笔记28102Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Matlab Robotic Toolbox工具箱学习笔记28102Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
clear;
clc;
p0=-1;
%定义初始点及终点位置
p1=2;
p=tpoly(p0,p1,50);
%取步长为50
figure
(1);
plot(p);
%绘图,可以看到在初始点及终点的一、二阶导均为零
[p,pd,pdd]=tpoly(p0,p1,50);
%得到位置、速度、加速度
%p为五阶多项式,速度、加速度均在一定范围内
figure
(2);
subplot(3,1,1);
plot(p);
xlabel('
Time'
ylabel('
p'
subplot(3,1,2);
plot(pd);
pd'
subplot(3,1,3);
plot(pdd);
pdd'
%另外一种方法:
[p,pd,pdd]=lspb(p0,p1,50);
figure(3);
%可以看到速度是呈梯形
%三维的情况:
p=mtraj(@tpoly,[012],[210],50);
figure(4);
plot(p)
%对于齐次变换矩阵的情况
T0=transl(0.4,0.2,0)*trotx(pi);
%定义初始点和目标点的位姿
T1=transl(-0.4,-0.2,0.3)*troty(pi/2)*trotz(-pi/2);
T=ctraj(T0,T1,50);
first=T(:
:
1);
%初始位姿矩阵
tenth=T(:
10);
%第十个位姿矩阵
figure(5);
tranimate(T);
%动画演示坐标系自初始点运动到目标点的过程
MatlabRoboticToolbox工具箱学习笔记
(二)
Arm/Robots
机器人是由多个连杆连接而成的,机器人关节分为旋转关节和移动关节。
创建机器人的两个最重要的函数是:
Link和SerialLink。
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
测试机器人是否有球腕关节
测试机器人是否抵达关节极限
fkine
前向运动学求解
ikine6s
6旋转轴球腕关节机器人的逆向运动学求解
ikine3
3旋转轴机器人的逆向运动学求解
ikine
采用迭代方法的逆向运动学求解
jacob0
在世界坐标系描述的雅克比矩阵
jacobn
在工具坐标系描述的雅克比矩阵
maniplty
可操纵性度
jtraj
关节空间轨迹
accel
关节加速度
coriolis
关节柯氏力
显示连杆的动力学属性
fdyn
关节运动
gravload
关节重力
inertia
关节惯性矩阵
设置摩擦力为0
rne
关节的力/力矩
payload
在末端坐标系增加负载
perturb
随机扰动连杆的动力学参数
属性:
links
连杆向量(1xN)
gravity
重力的方向[gxgygz]
base
机器人基座的位姿(4x4)
tool
机器人的工具变换矩阵[T6totooltip](4x4)
关节范围[qminqmax](Nx2)
偏置(Nx1)
name
机器人名字(在图形中显示)
manuf
注释,制造商名
comment
注释,总评
plotopt
optionsforplot()method(cellarray)
n
关节数
config
机器人结构字符串,
例如'
RRRRRR'
运动学中约定的布尔数(0=DH,1=MDH)
怎样创建一个机器人?
%Link调用格式:
%{
(1)L=Link()创建一个带默认参数的连杆
(2)L=Link(L1)复制连杆L1
(3)L=Link(OPTIONS)创建一个指定运动学、动力学参数的连杆
OPTIONS可以是:
%'
theta'
TH
jointangle,ifnotspecifiedjointisrevolute
d'
D
jointextension,ifnotspecifiedjointisprismatic
a'
A
jointoffset(default0)
alpha'
jointtwist(default0)
standard'
definedusingstandardD&
Hparameters(default).
modified'
definedusingmodifiedD&
Hparameters.
offset'
O
jointvariableoffset(default0)
qlim'
L
jointlimit(default[])
I'
I
linkinertiamatrix(3x1,6x1or3x3)
r'
R
linkcentreofgravity(3x1)
m'
M
linkmass(1x1)
G'
G
motorgearratio(default0)
B'
B
jointfriction,motorreferenced(default0)
Jm'
J
motorinertia,motorreferenced(default0)
Tc'
T
Coulombfriction,motorreferenced(1x1or2x1),(default[00])
revolute'
forarevolutejoint(default)
prismatic'
foraprismaticjoint'
forstandardD&
formodifiedD&
sym'
considerallparametervaluesassymbolicnotnumeric
注:
不能同时指定“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([R1R2...],OPTIONS)机器人连接,将R2的基座连接到R1的末端.
(5)R=SerialLink(R1,options)复制机器人R1
L1=Link('
0,'
1,'
pi/2);
%定义连杆1,没有写theta说明theta为关节变量
L1.a;
%查看a的值
L1.d;
%查看d的值
%还可以L1.RP,L1.display,L1.mdh,L1.isprismatic,L1.isrevolute等等,这样就可以查看一些默认值
L2=Link('
0);
bot=SerialLink([L1L2],'
'
myrobot'
bot.n;
%查看连杆数目
bot.fkine([0.10.2]);
%前向运动学
bot.plot([0.10.2]);
%绘制机器人
定义完连杆和机器人便可以求机器人前和逆向运动学、动力学等等。
L1.参数或属性():
查看连杆的参数或属性
L1.操作函数(参数):
操作连杆参数
bot.属性():
查看机器人的属性
bot.操作函数(参数):
操作机器人,可以进行前向、逆向运动学求解等
实例:
StanfordManipulator
D-H参数表:
-pi/2);
%定义连杆
L3=Link('
L4=Link('
L5=Link('
L6=Link('
bot=SerialLink([L1L2L3L4L5L6]);
%连接连杆
bot.display();
%显示D-H参数表
forward_kinematics=bot.fkine([-0.20.1100.112])%前向运动学
求出末端的齐次变换矩阵:
-pi/2,'
d2'
pi/2,'
0,'
d6'
symstheta1theta2d3theta4theta5theta6;
forward_kinematics=bot.fkine([theta1theta2d3theta4theta5theta6])%前向运动学
Stanfordarm的运动学逆解:
clearL
th
alpha
L
(1)=Link([0
0
-pi/2
0]);
L
(2)=Link([0
1
pi/2
L(3)=Link([0
1]);
L(4)=Link([0
L(5)=Link([0
L(6)=Link([0
bot=SerialLink(L,'
Stanfordarm'
T=transl(1,2,3)*trotz(60,'
)*troty(30,'
)*trotz(90,'
)
inverse_kinematics=bot.ikine(T,'
pinv'
%逆向运动学
theta1=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([theta1theta2d3theta4theta5theta6])%前向运动学,验证结果的准确性.
%求解结果为T与forward_kinematics一致。
正确。
求解Stanfordarm在世界坐标系描述的雅克比矩阵
J0=vpa(bot.jacob0([theta1theta2d3theta4theta5theta6]),4)
求平面二自由度机器人在世界坐标系描述的雅克比矩阵
L
(1)=Link('
0,'
'
a1'
L
(2)=Link('
a2'
Planar2-dofrobot'
symstheta1theta2;
J0=bot.jacob0([theta1theta2]);
J0=simplify(J0)
求得:
J0=
[-a2*sin(theta1+theta2)-a1*sin(theta1),-a2*sin(theta1+theta2)]
[
a2*cos(theta1+theta2)+a1*cos(theta1),
a2*cos(theta1+theta2)]
0,
0]
1,
1]