赞
踩
Robotics Toolbox - Peter Corke
在matlab中打开安装包:RTB.mltbx 将自动下载
注:最好下载R2021a或以上的最新版,R2016a示教会报错。
在命令行窗口输入rtbdemo 可打开自带的demo
>> rtbdemo
输入doc rotx,可查看旋转矩阵matrix函数的文档。旋转矩阵R=rotx(arg)中要填角度而不是弧度。
>> doc rotx
rotx(), roty(), rotz(),给定一个旋转角度就可得到一个旋转矩阵。
- r = rotx(90)
- %输出结果为
- r =
-
- 1 0 0
- 0 0 -1
- 0 1 0
eul2r() 为由欧拉角得到一个旋转矩阵,tr2eul() 为由旋转矩阵得欧拉角
- r1 = eul2r(90,60,30) %分别对应于绕自身坐标系Z、Y、Z轴的旋转。
- 输出结果为
- r =
-
- -0.5000 -0.8660 0
- 0.4330 -0.2500 0.8660
- -0.7500 0.4330 0.5000
- %等价于r1 = rotz(90)*roty(60)*rotz(30),旋转矩阵的右乘
rpy2r() 为由横滚-俯仰-偏航角得到旋转矩阵,tr2rpy() 为由旋转矩阵得到横滚-俯仰-偏航角
- r2 = rpy2r(90,60,30) %分别绕固定坐标系的XYZ旋转
- 输出结果为
- r2 =
-
- 0.4330 0.7500 0.5000
- 0.2500 0.4330 -0.8660
- -0.8660 0.5000 0
- %等价于 r2 = rotz(30)*roty(60)*rotx(90) 旋转矩阵的左乘
trotx(), troty(), trotz(),给定一个旋转角度就可得到一个变换矩阵。
- t = trotx(90)
- %输出结果为
- t =
-
- 1 0 0 0
- 0 0 -1 0
- 0 1 0 0
- 0 0 0 1
eul2tr() ,tr2eul() rpy2tr() ,tr2rpy() 与上相似
- T = transl(1.5,1,0.5)*trotx(30)*trotz(60);
- P = transl(T);
- R = t2r(T);
- 输出结果为
- T =
-
- 0.5000 -0.8660 0 1.5000
- 0.7500 0.4330 -0.5000 1.0000
- 0.4330 0.2500 0.8660 0.5000
- 0 0 0 1.0000 %最右一列为为一体,左上角3×3为旋转矩阵
-
- P =
-
- 1.5000
- 1.0000
- 0.5000 %位移
-
- R =
-
- 0.5000 -0.8660 0
- 0.7500 0.4330 -0.5000
- 0.4330 0.2500 0.8660 %旋转矩阵
类属性和类方法的详细介绍引用 http://t.csdn.cn/NP1N5
‘ revolute ‘为旋转关节,’d‘为连杆偏移量,’a'为连杆长度,‘alpha’为连杆扭角。
L = Link('revolute','d','0.216','a',0,'alpha',pi/2);
串联机械臂要用到SerialLink,SerialLink.teach为示教函数。
- bot = SerialLink(L, 'name', '5-dof') %将SerialLink赋值,定义给bot变量
- bot.teach %示教
SerialLink.plot动画,可给定一个m*n的矩阵,n为机械臂所含关节个数
- q = [0 0 0 0 0]; 1*n
- bot.plot(q); 五个关节都是初始位置
-
- 若给定m*n矩阵,则运行结果为一个动画
SerialLink.fkine正向运动学, 给一个关节变量,可以求出变换矩阵
- q0 = [pi/2 pi/2 0 0 0]; %5关节机器人的关节变量
- T = bot.fkine(q0);
- 输出结果为
- T =
- 0 1 0 0
- -1 0 0 -0.645
- 0 0 1 1.181
- 0 0 0 1
SerialLink.ikine和SerialLink.ikunc逆向运动学,给变换矩阵,不考虑关节限制求关节变量
- q1 = bot.ikine(T,'mask',[1 1 1 1 1 0]); %当关节数量小于6时,要用mask向量
- q2 = bot.ikunc(T); %不需考虑
- 输出结果(1.5708为pi/2)
- q1 =
-
- 1.5708 1.5708 -0.0000 0.0000 0
-
- q2 =
-
- 1.5708 1.5708 0.0000 0.0000 -0.0000
建立一个只在xoz平面运动的四关节机器人。其中Link.qlim给关节增加限制,让第一关节锁死。
- clear;
- clc;
- L(1) = Link('standard','d', 100, 'a', 0, 'alpha', pi/2,'offset',0,'qlim',[0,0]/180*pi);
- L(2) = Link('revolute','d', 0, 'a', 420, 'alpha', 0,'offset',pi/2,'qlim',[-90,90]/180*pi);
- L(3) = Link('revolute','d', 0, 'a', 480, 'alpha', 0,'offset',-pi/2,'qlim',[-90,130]/180*pi);
- L(4) = Link('revolute','d', 0, 'a', 840, 'alpha', 0,'offset',pi/2,'qlim',[-120,90]/180*pi);
-
- bot = SerialLink(L, 'name', '4-dof'); %
- bot.base = transl(0,0,1); %世界坐标系定为(0,0,1)
- bot.display(); %可查看D-H参数
-
- q = [0 0 0 0]; %初始关节角为0
- bot.plot(q); %SerialLink.plot动画,可给定一个m*n的矩阵,n为机械臂所含关节个数
- bot.teach %示教
-
- 输出结果为:
- bot =
-
- 4-dof:: 4 axis, RRRR, stdDH, slowRNE
- +---+-----------+-----------+-----------+-----------+-----------+
- | j | theta | d | a | alpha | offset |
- +---+-----------+-----------+-----------+-----------+-----------+
- | 1| q1| 100| 0| 1.5708| 0|
- | 2| q2| 0| 420| 0| 1.5708|
- | 3| q3| 0| 480| 0| -1.5708|
- | 4| q4| 0| 840| 0| 1.5708|
- +---+-----------+-----------+-----------+-----------+-----------+
- base: t = (0, 0, 1), RPY/xyz = (0, 0, 0) deg
运行结果如图
接下来我们让它动个位置。
- T1 = bot.fkine(q); %初始位置
- T2 = transl(0,0,1840); %变换位置
-
- q1 = bot.ikunc(T1);
- q2 = bot.ikunc(T2);
-
- pause %按下空格后继续运行
- bot.plot(q1);
- pause
- bot.plot(q2);
在之前的代码中添加以下代码,利用rand随机绘制30000个点。
- num = 30000;
- p = zeros(num,3);%先声明0矩阵可加快运行速度
- for i=1:num
- q1 = L(1).qlim(1) + rand * (L(1).qlim(2) - L(1).qlim(1));
- q2 = L(2).qlim(1) + rand * (L(2).qlim(2) - L(2).qlim(1));
- q3 = L(3).qlim(1) + rand * (L(3).qlim(2) - L(3).qlim(1));
- q4 = L(4).qlim(1) + rand * (L(4).qlim(2) - L(4).qlim(1));
-
- q = [q1 q2 q3 q4];
- T = bot.fkine(q); % SerialLink.fkine正向运动学, 给一个关节变量,可以求出变换矩阵
- P(i,:) = transl(T);
- end
- plot3( P(:,1), P(:,2), P(:,3),'b.','markersize',1); %在三维空间内绘制30000个点
-
- hold on; %添加新绘图的时候保留当前绘图
- grid on; %在画图的时候添加网格线
-
- view([45 45]);
- bot.plot([0 0 0 0]);
运行结果如图:
从当前位置移动到(0,0,1841),用末端执行器位置来规划会出现一些bug,采用关节角较为简单,关节角为[0,0,pi/2,-pi/2]。
- T1 = [0,0,0,0];
- T2 = [0,0,pi/2,-pi/2];
- step = 50; %插入50个值
- [q,qd,qdd] = jtraj(T1,T2,step); %五次多多项式关节空间轨迹规划
- bot.plot(q,'trail','b'); %运行后在命令行窗口再复制运行一次,trail轨迹,b蓝色
轨迹运行结果如图。引用链接http://t.csdn.cn/Wi0ce
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。