0


基于Matlab的Robotics Toolbox工具箱的机器人仿真函数介绍(运动学)

前言

在这里插入图片描述
随着我们了解到机器人如何建立运动学模型和动力学模型之后,我们可以使用Matlab中的仿真工具箱内来对模型的准确性进行验证,并且可以通过内置的函数进行简单的轨迹规划和可视化观察,本节涉及到的工具箱是MATLAB自带的Robotics Toolbox工具箱。

一、工具箱介绍及安装

1. 功能介绍

  • Robotics Toolbox:MATLAB自带的工具箱,常用于实现有关于机械臂的仿真,包含齐次变换求解、正逆运动学求解、雅可比矩阵、动力学仿真以及轨迹规划等功能。
  • 作用:由于高自由度机器人的运动学和动力学模型较为复杂,容易产生计算错误,通过使用相应的封装函数可以极大的提高计算效率,验证模型正确性,并通过MATLAB强大的可视化功能,对机器人的实际机理有更加清晰的认识。
  • 常用函数:Link、SerialLink、display、fkine和Jtraj函数,分别对应机器人的连杆配置、机器人连接、可视化演示、运动学正解和给定位置的轨迹规划

2. 安装教程

  • 下载工具箱文件夹:下载地址:Robotics Toolbox在这里插入图片描述
  • 解压文件并放置于指定文件夹
  • 将该文件夹路径添加到MATALB路径中:在这里插入图片描述
  • 打开MATLAB命令行:窗口输入指令
  1. startup_rvc

二、运动学常用函数

1. 设置机器人连杆:Link函数

1)参数介绍:

alphaAthetaDsigmaconvention关节扭角连杆长度关节角度关节偏置区分转动关节(0)和移动关节(1)区分modified和standard两种DH模型

2)代码示例:

  1. % 各连杆参数(虚拟)
  2. l1=0.08;
  3. l2=0.2;
  4. l3=0.2;% 基本偏置参数
  5. thetaVal =zeROS(4,1);% 定义各个连杆以及关节类型,默认为转动关节
  6. % theta d a alpha
  7. % 连杆偏距d 连杆长度 关节偏角alpha
  8. L1=Link([0000],'modified');%[四个DH参数], options
  9. L2=Link([00 l1 -pi/2],'modified');
  10. L3=Link([00 l2 0],'modified');
  11. L4=Link([0,0 l3 0],'modified');

2. 连接连杆构成机械臂:SerialLink函数

1)参数介绍:

nameoffset机器人名称各连杆偏置参数

2)代码示例:

  1. % 将连杆组成机械臂
  2. robot=SerialLink([L1,L2,L3,L4]);
  3. robot.name='singleLeg';
  4. robot.offset=thetaVal;

3)输出窗口:

在这里插入图片描述

3. 3D演示与示教:display和teach函数

1)代码示例:

  1. % 基本演示
  2. robot.display();view(3);% 解决robot.teach()和plot的索引超出报错
  3. robot.teach();

2)可视化界面:

在这里插入图片描述

4. 正逆运动学求解:fkine和ikine函数

1)使用方法:

函数输入输出备注fkine各关节变量值齐次变换矩阵默认弧度,输入为1*N矩阵ikine齐次变换矩阵、初始值各关节变量值默认计算6自由度以上的机械臂,需要mask通知

注:在实际过程中较少使用ikine函数,可自行编写运动学反解函数;

2)代码示例:

  1. % 运动学正解验证
  2. q1 = 30*pi/180;
  3. q2 = 30*pi/180;
  4. q3 = -60*pi/180;
  5. qn = [q1 q2 q3 0];
  6. T = robot.fkine(qn)
  7. % 运动学逆解验证
  8. % theta d a alpha sigma
  9. L(1) = Link([ 0 0 10 0 0 ]);
  10. L(2) = Link([ 0 0 20 0 0 ]);
  11. % 正运动学解算,得到机器人末端的齐次变换矩阵
  12. init = [0 pi/4];
  13. targ = [pi/2 pi];
  14. T0=robot.fkine(init);
  15. TF=robot.fkine(targ);
  16. % 得到机器人在变换过程中每一步(step)的齐次变换矩阵
  17. step = 200
  18. TC=ctraj(T0,TF,step);
  19. % 逆运动学计算
  20. qq=robot.ikine(TC,'mask',[1 1 1 0 0 0]);

5. 轨迹规划:Jtraj函数

1)参数分析:

输入始终点位姿、采样点个数位姿:1*N弧度值输出各关节角度、角速度、角加速度单位:弧度

2)代码示例:

  1. % 五项式轨迹规划动态
  2. % 设定位姿为(0.4,0.1,-0.1 -- 0.4,0.1,0.1
  3. %根据起始点位姿,得到起始点关节角
  4. q1=[-14.036*pi/180 46.76*pi/180 -60*pi/180 0];
  5. %根据终止点位姿,得到终止点关节角
  6. q2=[-14.036*pi/180 13.24*pi/180 -60*pi/180 0];
  7. %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数
  8. [q ,qd, qdd]=jtraj(q1,q2,50);
  9. grid on
  10. %根据插值,得到末端执行器位姿
  11. T=robot.fkine(q);
  12. nT=T.T;
  13. plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));

6. 实时运动动画:plot函数

  • 输入参数:关节角度和设置参数,下面简要介绍参数

名称值说明实例workplaceWW为1×6的行向量,用来表示视野的xyz轴范围w=[-20 20 -20 20 -20 20]floorlevelL楼板的z坐标值(目前咱不了解)delayD动画帧之间的延迟(单位:s),用这个可以用来控制动画中机器人动作的快慢D=0.01[no]loop是否永远在轨道上循环fpsfps每秒钟帧率,使用fps时候delay不起作用fps=60trailL绘制机器人末端的轨迹,L的值表示轨迹颜色L=‘r’movieM保存成动画到当前文件夹,M是文件名M=‘test.gif’scaleS关节大小的比例因子S=0.5viewVV=[az el],通过方位角az和el来调整视角L=[45,25]

  1. robot.plot(q,'workspace',[-40 40 -40 40 -40 40],'delay',0.001,'fps',120,'trail','b','view',[30,50]);
  2. % 注:在实际的简单操作中可以直接使用默认options,故只输入关节角度即可

2)代码示例:

  1. [q ,qd, qdd]=jtraj(q1,q2,50);
  2. grid on
  3. %根据插值,得到末端执行器位姿
  4. T=robot.fkine(q);
  5. nT=T.T;
  6. plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));
  7. %输出末端轨迹
  8. hold on
  9. %动画演示
  10. robot.plot(q);

3)动画界面:

在这里插入图片描述

7. 其余函数介绍

  • jacob函数:求解雅克比矩阵在这里插入图片描述
  • ctraj函数:计算在每一步(step)变换时的末端相对于首端的齐次变换矩阵;
  • transl函数:将齐次变换矩阵转换为坐标值;
  • isrevolute函数:测试关节是否可以转动

直线规划、圆规划测试代码:

  1. clear ALL
  2. close ALL
  3. % startup_rvc
  4. % theta表示关节角,d为偏置距离,a为杆长,alpha为杆扭角,sigma0表示旋转关节
  5. % theta d a alpha sigma 连杆的DH参数
  6. L1 = Link([0 84.72 41.04 pi/2 0]);
  7. L2 = Link([0 0 200 0 0]);
  8. L3 = Link([0 0 214.8 0 0]);
  9. % 限制转动角度
  10. L1.qlim = [deg2rad(-170) deg2rad(170)];
  11. L2.qlim = [deg2rad(-60) deg2rad(85)];
  12. L3.qlim = [deg2rad(-90) deg2rad(10)];
  13. mrbt = SerialLink([L1 L2 L3], 'name', '机械臂仿真');
  14. % 模式1,控制关节角拖动变化
  15. view(3);
  16. mrbt.teach() %调出figure界面模拟控制关节角
  17. % % 模式2,直线规划测试
  18. % T1 = transl(300,220,40); %起点
  19. % T2 = transl(320,-50,220); %终点
  20. % %ctraj 利用匀加速匀减速规划轨迹
  21. % T = ctraj(T1,T2,50);
  22. % Tj = transl(T);
  23. % %输出末端轨迹
  24. % plot3(Tj(:,1),Tj(:,2),Tj(:,3));
  25. % grid on;
  26. %
  27. % %当反解的机器人对象的自由度少于6时,要用mask vector减少自由度
  28. % %无法直接调用ikine作为运动学反解函数
  29. % q = mrbt.ikine(T,'mask',[1 1 1 0 0 0]);
  30. %
  31. % %调整了一下角度,方便观察
  32. % view(113,23);
  33. % mrbt.plot(q,'tilesize',500);
  34. % % 模式3,定义圆
  35. % N = (0:0.5:100)';
  36. % center = [275 150 50];
  37. % radius = 50;
  38. % theta = ( N/N(end) )*2*pi;
  39. % points = (center + radius*[cos(theta) sin(theta) zeros(size(theta))])';
  40. % plot3(points(1,:),points(2,:),points(3,:),'r');
  41. % %
  42. % % pionts矩阵是“横着”的,取其转置矩阵,进一步得到其齐次变换矩阵
  43. % T = transl(points');
  44. % %
  45. % % 当反解的机器人对象的自由度少于6时,要用mask vector进行忽略某个关节自由度
  46. % q = mrbt.ikine(T,'mask',[1 1 1 0 0 0]);
  47. % hold on;
  48. % % 调整了一下角度,方便观察
  49. % view(153,23)
  50. % mrbt.plot(q,'tilesize',500);

本文转载自: https://blog.csdn.net/lc1852109/article/details/125661893
版权归原作者 生如昭诩 所有, 如有侵权,请联系我们删除。

“基于Matlab的Robotics Toolbox工具箱的机器人仿真函数介绍(运动学)”的评论:

还没有评论