这是《机器人技术基础》个人课程实验之一,按照学号尾数不同分配给每人的取放轨迹规划方式也不同,包括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;

三、思考

由上图可以明显发现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;

matlab fkine,Matlab Robotics ToolBox 实战 -- 七次多项式取放轨迹规划相关推荐

  1. 【机器人技术基础】MATLAB Robotics Toolbox PUMA560 7次多项式取-放轨迹的规划

    实验3:取-放轨迹规划--7次多项式轨迹的规划 文末有本项目代码的Github链接 文章目录 一.实验目的和要求 1.1 目的 1.2 要求 二.实验手段 三.轨迹规划的推导过程(7次多项式) 3.1 ...

  2. matlab机器人自动分拣_YOLOv3 + Matlab Robotics ToolBox 实战 -- 软包装药品的机器人分拣系统设计与仿真...

    本项目为大三上<机器人技术基础>课程团队研讨课题之一,当时做这个研讨课题还花了挺多的时间,又觉得还比较有意思,因此放在博客中记录一下.不过当时班上很多大佬的成果更牛逼,我们就属于弟弟水平h ...

  3. 怎么用matlab计算机械手运动,Matlab Robotics ToolBox 实战 -- 斯坦福机械手运动学建模及分析...

    这同样是<机器人技术基础>课程实验中的一个,题目比较开放,只要求对任一坐标形式的机械臂进行研究即可.下面是详细介绍: 一.选定建模对象 选定球坐标机器人--斯坦福机械手臂(参考<机器 ...

  4. Matlab机器人工具箱Robotics ToolBox --rvctools安装 图文详解(附rvctools工具箱资源)

    rvctools工具箱资源地址分享: 链接:https://pan.baidu.com/s/1DqeCwS0F-P2DgQJQeL9boA 提取码:lmgp 首先找到你的Matlab安装位置,找到to ...

  5. Matlab Robotic Toolbox V9.10工具箱(三):轨迹规划

    利用matlab robotics 进行轨迹规划 轨迹规划有两个函数: (1).jtraj,已知初始和终止的关节角度,利用五次多项式来规划轨迹. [q,qd,qdd] = jtraj(q0, qf, ...

  6. MATLAB机器人工具箱Robotics Toolbox安装——以Win10环境下MATLAB2017b为例【个人学习笔记】

    MATLAB学习--经验与交流[个人学习笔记] 此处安装的机器人工具箱版本为10.4:MATLAB2017b. 安装包来源:机器人工具箱官网:https://petercorke.com/toolbo ...

  7. Matlab机器人工具箱(3-2):五自由度机械臂(轨迹规划)

    轨迹规划可以分为关节空间的轨迹规划和笛卡尔空间的轨迹规划 关节空间规划:用时小,计算量少 [q,qt,qtt]=jtraj(q1,q2,t); 返回关节的位置.速度.加速度 使用五次多项式插值 笛卡尔 ...

  8. matlab求系统根轨迹代码_广州数控GSK RH06六轴焊接机器人的轨迹规划

    技术参数 运动范围 任务点位置 问题:如实现上图中的 运动轨迹(以基坐标系为参照),请给出相关的轨迹规划算法及其实现方式(结合运动学及动力学方程进行相关的轨迹点选取及工程实现),其中各个点的坐标为A= ...

  9. matlab最优轨迹规划,matlab机器人轨迹规划

    运动仿真 $@ %" 运动仿真( ')在对上述规划轨迹进行仿真前, 先输入机器 人的参数, 并命名 -$.$/&&)" 命令如下: " @ A 连杆的前四 ...

最新文章

  1. linux系统最大支持多大硬盘容量,LINUX操作系统对硬件支持有上限么?最大多少内存?多大硬盘容量?...
  2. 设计模式之工厂模式和抽象工厂
  3. 论文笔记之:Instance-aware Semantic Segmentation via Multi-task Network Cascades
  4. 文巾解题 21. 合并两个有序链表
  5. VTK:PolyData之PointInsideObject
  6. linux下screen版本,在Linux (RHEL/CentOS 7/8 )中,如何使用4个简单步骤安装Screen命令
  7. mysql varchar 非空判断_工资从1万到3万,你还差mysql数据库优化之系列三
  8. LeetCode 1061. 按字典序排列最小的等效字符串(并查集)
  9. JVM 内存模型组成+经典总结
  10. 让服务器自动从HG版本库中下载代码
  11. 深度学习2.0-14.神经网络与全连接层之全连接层、输出方式、误差计算
  12. 深度学习常见的基本概念整理
  13. GIMP教程 3 扭曲变换工具 (瘦脸 瘦腿)
  14. JavaScript视频系统教程
  15. 学好Python的优秀资源推荐
  16. pdf格式转换成jpg转换器
  17. 型号不同的计算机内存条可以通用么,不同频率的内存条可以混用吗
  18. 在centos7上编译EDK2
  19. 利用ChatGPT,一分钟制作思维导图
  20. Java虚拟机部分知识点

热门文章

  1. 【人工智能】八数码问题:广度搜索、深度搜索
  2. 25. 答疑 - SAP OData 框架处理 Metadata 元数据请求的实现细节,前后端组件部署在同一台物理服务器
  3. 浅谈游戏数据分析------留存篇一---留存折损
  4. 如何批量将 bmp 格式图片转换为 png 格式
  5. DC故障,在使用缓存登录的错误理解的解释
  6. 618微信小程序电商销售数据出炉(附完整报告)
  7. 反光衣穿戴识别检测系统 OpenCV
  8. AI量化(代码):深度强化学习DRL应用于金融量化
  9. 市面上的数学规划求解器都有哪些?
  10. AR Camera开发记录(二) -- 3D人脸模型