Matlab Robotics ToolBox 实战 -- 七次多项式取放轨迹规划

    这是《机器人技术基础》个人课程实验之一,按照学号尾数不同分配给每人的取放轨迹规划方式也不同,包括3-4-3、4-3-4等三段轨迹规划方法,而我抽中的是七次多项式实现,不存在优劣之分,特地说明一下。下面是详细内容:

一、开发平台及工具

开发平台:Matlab
开发工具:Robotics ToolBox

二、过程记录
2.1 选定建模对象

    选择PUMA560作为建模对象:
2.2 选定转移过程点

    主要是确定起始位置(取点)、转移位置(抬起或离开点)、卸下位置(下降点)和目标位置(放置点);选定四个点位置坐标如下:

起始位置:aim0 = [0,-0.5,-0.5];
离开位置:aim1 = [0,-0.5,0.2];
下降位置:aim2 = [-0.5,0.5,0.2];
放置位置:aimx = [-0.5,0.5,-0.5];

2.3 整理边界条件

利用七次多项式进行轨迹规划:

(1)已知本地时间t = 0时,初始位置:
(2)已知本地时间t = 0时,初始速度:
(3)已知本地时间t = 0时,初始加速度:

(4)已知第一中间点位置:
(5)已知第二中间点位置:
(6)已知本地时间t = tm时,目标位置:
(7)已知本地时间t = tm时,目标速度:
(8)已知本地时间t = tm时,目标加速度:

    由(1)~(8)可以写成如下矩阵形式:

    或表示为:
    和
    通过计算 [M]-1 即可求出所有的未知系数,于是就求得了目标运动轨迹的运动方程,从而可以控制机器人使其经过给定的位置,同样的方法可用于其他关节求解。

2.4 求解转移过程点关节角

    利用Matlab Robotics Box 对四个位置点求逆解得到关节角度:

theta0 = p560.ikine6s(T0,'rdf');%左臂、手肘朝下、手腕翻转(旋转180度)
theta1 = p560.ikine6s(T1,'rdf');
theta2 = p560.ikine6s(T2,'rdf');
thetax = p560.ikine6s(Tx,'rdf');

    计算结果:
2.4 求解轨迹未知系数
%初始条件
theta0_ = [0 0 0 0 0 0];%初始位置速度
theta0__ = [0 0 0 0 0 0];%初始位置加速度
thetax_ = [0 0 0 0 0 0];%目标位置速度
thetax__ = [0 0 0 0 0 0];%目标位置加速度

Theta = [theta0' theta0_' theta0__' theta1' theta2' thetax' thetax_' thetax__']';
    
M = [1     0    0      0       0        0        0        0
     0     1    0      0       0        0        0        0
     0     0    2      0       0        0        0        0
     1     t1   t1^2   t1^3    t1^4     t1^5     t1^6     t1^7
     1     t2   t2^2   t2^3    t2^4     t2^5     t2^6     t2^7
     1     tm   tm^2   tm^3    tm^4     tm^5     tm^6     tm^7
     0     1    2*tm   3*tm^2  4*tm^3   5*tm^4   6*tm^5   7*tm^6
     0     0    2      6*tm    12*tm^2  20*tm^3  30*tm^4  42*tm^5];
 
 C = M^-1 * Theta;%第i列对应第i个关节的其次多项式系数

    各关节利用七次多项式进行轨迹规划的系数列表如下:
2.5 求解各关节相关运动指标

    计算关节的位置、速度及加速度轨迹函数:

%计算关节各函数
 tmietick = 0.1;
 T = 0: tmietick:9;
 %角度
 Q = [ones(int16(9/tmietick)+1,1)   T'    (T.^2)'   (T.^3)'   (T.^4)'   (T.^5)'   (T.^6)'  (T.^7)']*C;
 %速度
 Qv =[zeros(int16(9/tmietick)+1,1)  ones(int16(9/tmietick)+1,1) 2* T' 3*(T.^2)' 4*(T.^3)' 5*(T.^4)' 6*(T.^5)' 7*(T.^6)']*C;
 %加速度
 Qa =[zeros(int16(9/tmietick)+1,1)  zeros(int16(9/tmietick)+1,1) 2*ones(int16(9/tmietick)+1,1) 6*T' 12*(T.^2)' 20*(T.^3)' 30*(T.^4)' 42*(T.^5)']*C;

    各关节运动位置、速度及加速度轨迹曲线绘制如下:
2.6 绘制运动轨迹
%正运动学分析
 Txy=p560.fkine(Q);
 %画轨迹
 Tjtraj1=transl(Txy);
 x = Tjtraj1(:,1);
 y = Tjtraj1(:,2);
 z = Tjtraj1(:,3);
 figure
 waitforbuttonpress;
 plot3(x,y,z,'b');%轨迹图像
 hold on;
 %画出四个过程点
[x0,y0,z0]  = ellipsoid(aim0(1),aim0(2),aim0(3),0.05,0.05,0.05);
[x1,y1,z1]  = ellipsoid(aim1(1),aim1(2),aim1(3),0.05,0.05,0.05);
[x2,y2,z2]  = ellipsoid(aim2(1),aim2(2),aim2(3),0.05,0.05,0.05);
[xx,yx,zx]  = ellipsoid(aimx(1),aimx(2),aimx(3),0.05,0.05,0.05);
surf(x0,y0,z0) %画起始点
surf(x1,y1,z1) %画提升点
surf(x2,y2,z2) %画下降点
surf(xx,yx,zx) %画目标点
hold on;

    运动轨迹如蓝线曲线所示,完整视频B站传送门:https://www.bilibili.com/video/av88855623

三、思考

    由上图可以明显发现7次多项式进行拟合规划的轨迹为一空间不规则曲线,原因在于我们是对机械臂6个关节进行独立的7次多项式轨迹规划,已知条件只有初末位置的关节位置、速度及加速度以及两个中间点的关节位置共8个参数,同时由于4个位置点的各关节角度值是由ikine6s进行运动学逆解求解得到,虽然在计算时限制了手臂、手肘以及手腕的状态,但是这样得到逆解并一定能满足我们的实际需求,因此在仅存在这些已知条件的情况下,我们没有办法对整个长距离的机器人的运动状态进行精确控制。因此,要想机器人的运动状态足够精确,我必须引入更多的条件,比如增加中间点的数量或者各时刻的关节速度等等。

四、附源码
close all;
clc;
mdl_puma560
t0 = 0;%开始时刻
t1 = 2;%提升结束时刻
t2 = t1 + 4;%平移结束时刻
tm = t2 + 3;%下降结束时刻

t0_1 = 0:0.2:2;%上升时间
t1_2 = 0:0.5:4;%平移时间
t2_x = 0:0.3:3;%下降时间

aim0 = [0,-0.5,-0.5];%取货点
aim1 = [0,-0.5,0.2];%提升点
aim2 = [-0.5,0.5,0.2];%下落点
aimx = [-0.5,0.5,-0.5];%存货点
    

T0 = transl(aim0);
T1 = transl(aim1);
T2 = transl(aim2);
Tx = transl(aimx);

theta0 = p560.ikine6s(T0,'rdf');%左臂、手肘朝下、手腕翻转(旋转180度)
theta1 = p560.ikine6s(T1,'rdf');
theta2 = p560.ikine6s(T2,'rdf');
thetax = p560.ikine6s(Tx,'rdf');

%初始条件
theta0_ = [0 0 0 0 0 0];%初始位置速度
theta0__ = [0 0 0 0 0 0];%初始位置加速度
thetax_ = [0 0 0 0 0 0];%目标位置速度
thetax__ = [0 0 0 0 0 0];%目标位置加速度

Theta = [theta0' theta0_' theta0__' theta1' theta2' thetax' thetax_' thetax__']';
    
M = [1     0    0      0       0        0        0        0
     0     1    0      0       0        0        0        0
     0     0    2      0       0        0        0        0
     1     t1   t1^2   t1^3    t1^4     t1^5     t1^6     t1^7
     1     t2   t2^2   t2^3    t2^4     t2^5     t2^6     t2^7
     1     tm   tm^2   tm^3    tm^4     tm^5     tm^6     tm^7
     0     1    2*tm   3*tm^2  4*tm^3   5*tm^4   6*tm^5   7*tm^6
     0     0    2      6*tm    12*tm^2  20*tm^3  30*tm^4  42*tm^5];
 
 C = M^-1 * Theta;%第i列对应第i个关节的其次多项式系数
 
 %计算关节各函数
 tmietick = 0.1;
 T = 0: tmietick:9;
 %角度
 Q = [ones(int16(9/tmietick)+1,1)   T'    (T.^2)'   (T.^3)'   (T.^4)'   (T.^5)'   (T.^6)'  (T.^7)']*C;
 %速度
 Qv =[zeros(int16(9/tmietick)+1,1)  ones(int16(9/tmietick)+1,1) 2* T' 3*(T.^2)' 4*(T.^3)' 5*(T.^4)' 6*(T.^5)' 7*(T.^6)']*C;
 %加速度
 Qa =[zeros(int16(9/tmietick)+1,1)  zeros(int16(9/tmietick)+1,1) 2*ones(int16(9/tmietick)+1,1) 6*T' 12*(T.^2)' 20*(T.^3)' 30*(T.^4)' 42*(T.^5)']*C;

 %正运动学分析
 Txy=p560.fkine(Q);
 %画轨迹
 Tjtraj1=transl(Txy);
 x = Tjtraj1(:,1);
 y = Tjtraj1(:,2);
 z = Tjtraj1(:,3);
 figure
 waitforbuttonpress;
 plot3(x,y,z,'b');%轨迹图像
 hold on;
 %画出四个过程点
[x0,y0,z0]  = ellipsoid(aim0(1),aim0(2),aim0(3),0.05,0.05,0.05);
[x1,y1,z1]  = ellipsoid(aim1(1),aim1(2),aim1(3),0.05,0.05,0.05);
[x2,y2,z2]  = ellipsoid(aim2(1),aim2(2),aim2(3),0.05,0.05,0.05);
[xx,yx,zx]  = ellipsoid(aimx(1),aimx(2),aimx(3),0.05,0.05,0.05);
surf(x0,y0,z0) %画起始点
surf(x1,y1,z1) %画提升点
surf(x2,y2,z2) %画下降点
surf(xx,yx,zx) %画目标点
hold on;
%画轨迹图
p560.plot(Q);
%画关节位置、速度、加速度曲线
figure
subplot(3,1,1);
% plot(T,Q(:,1));
plot(T,Q);
title('关节位移');
xlabel('时间t/s');
ylabel('位移s/rad');
legend('关节1','关节2','关节3','关节4','关节5','关节6','location','northeastoutside' );
str=[ '\leftarrow' '(' num2str(t1) ',' num2str(theta1(1)) ')'];
text(t1,theta1(1),cellstr(str));
str=[ '\leftarrow' '(' num2str(t2) ',' num2str(theta2(1)) ')'];
text(t2,theta2(1),cellstr(str));
grid on;
subplot(3,1,2);
plot(T,Qv);
title('关节速度');
xlabel('时间t/s');
ylabel('速度v/(rad/s)');
legend('关节1','关节2','关节3','关节4','关节5','关节6','location','northeastoutside' );
grid on;
subplot(3,1,3);
plot(T,Qa);
title('关节加速度');
xlabel('时间t/s');
ylabel('加速度a/(rad/s^2)');
legend('关节1','关节2','关节3','关节4','关节5','关节6','location','northeastoutside' );
grid on;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 基于学生学习共同体培育语文生态课堂文化的研究 近年来,随着现代教育理念的不断深入与...
    火车头123阅读 1,983评论 0 8
  • 01. 颅脑CT扫描采用的听眶线是()。 (1.0 分) A. 外耳孔与外眼眦的连线 B. 外耳孔上缘与眶下缘的连...
    我们村我最帅阅读 3,175评论 0 6
  • 1. 关于诊断X线机准直器的作用,错误的是()。 (6.0 分) A. 显示照射野 B. 显示中心线 C. 屏蔽多...
    我们村我最帅阅读 10,340评论 0 5
  •     本项目为大三上《机器人技术基础》课程团队研讨课题之一,当时做这个研讨课题还花了挺多的时间,又觉得还比较有意...
    _贝塔_阅读 1,786评论 0 4
  • 今天外甥的女朋友一家三口来看家,我们陪客。亲家是爽快人,酒喝得也爽。有点醉意,但很高兴,姐姐姐夫心里的一桩大事...
    许生说阅读 228评论 0 1