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

前言

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

一、工具箱介绍及安装

1. 功能介绍

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

2. 安装教程

  • 下载工具箱文件夹:下载地址:Robotics Toolbox
    在这里插入图片描述

  • 解压文件并放置于指定文件夹

  • 将该文件夹路径添加到MATALB路径中:
    在这里插入图片描述

  • 打开MATLAB命令行:窗口输入指令

startup_rvc

二、运动学常用函数


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

1)参数介绍:

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

2)代码示例:

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

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

1)参数介绍:

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

2)代码示例:

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

3)输出窗口:

在这里插入图片描述


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

1)代码示例:

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

2)可视化界面:

在这里插入图片描述

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

1)使用方法:

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

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

2)代码示例:

	% 运动学正解验证
	q1 = 30*pi/180;
	q2 = 30*pi/180;
	q3 = -60*pi/180;
	qn = [q1 q2 q3 0];
	T = robot.fkine(qn)

	% 运动学逆解验证
	%           theta   d   a   alpha  sigma
	L(1) = Link([ 0     0   10     0     0 ]);
	L(2) = Link([ 0     0   20     0     0 ]);
	% 正运动学解算,得到机器人末端的齐次变换矩阵
	init = [0 pi/4];
	targ = [pi/2 pi];
	T0=robot.fkine(init);
	TF=robot.fkine(targ);
	% 得到机器人在变换过程中每一步(step)的齐次变换矩阵
	step = 200;
	TC=ctraj(T0,TF,step);
	% 逆运动学计算
	qq=robot.ikine(TC,'mask',[1 1 1 0 0 0]);

5. 轨迹规划:Jtraj函数

1)参数分析:

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

2)代码示例:

	% 五项式轨迹规划动态
	% 设定位姿为(0.4,0.1,-0.1 -- 0.4,0.1,0.1)
	%根据起始点位姿,得到起始点关节角
	q1=[-14.036*pi/180 46.76*pi/180 -60*pi/180 0];
	%根据终止点位姿,得到终止点关节角
	q2=[-14.036*pi/180 13.24*pi/180 -60*pi/180 0];
	%五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数
	[q ,qd, qdd]=jtraj(q1,q2,50); 
	grid on
	%根据插值,得到末端执行器位姿
	T=robot.fkine(q);
	nT=T.T; 
	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=60
trailL绘制机器人末端的轨迹,L的值表示轨迹颜色L=‘r’
movieM保存成动画到当前文件夹,M是文件名M=‘test.gif’
scaleS关节大小的比例因子S=0.5
viewVV=[az el],通过方位角az和el来调整视角L=[45,25]
robot.plot(q,'workspace',[-40 40 -40 40 -40 40],'delay',0.001,'fps',120,'trail','b','view',[30,50]);
% 注:在实际的简单操作中可以直接使用默认options,故只输入关节角度即可

2)代码示例:

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

3)动画界面:

在这里插入图片描述

7. 其余函数介绍

  • jacob函数:求解雅克比矩阵
    在这里插入图片描述

  • ctraj函数:计算在每一步(step)变换时的末端相对于首端的齐次变换矩阵;

  • transl函数:将齐次变换矩阵转换为坐标值;

  • isrevolute函数:测试关节是否可以转动

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

clear ALL
close ALL

% startup_rvc
% theta表示关节角,d为偏置距离,a为杆长,alpha为杆扭角,sigma为0表示旋转关节
%        theta     d       a        alpha     sigma    连杆的DH参数 
L1 = Link([0     84.72   41.04       pi/2       0]);
L2 = Link([0       0      200         0         0]);
L3 = Link([0       0     214.8        0         0]);
 
% 限制转动角度
L1.qlim = [deg2rad(-170) deg2rad(170)];
L2.qlim = [deg2rad(-60) deg2rad(85)];
L3.qlim = [deg2rad(-90) deg2rad(10)];

mrbt = SerialLink([L1 L2 L3], 'name', '机械臂仿真');

% 模式1,控制关节角拖动变化
view(3);
mrbt.teach()        %调出figure界面模拟控制关节角

% % 模式2,直线规划测试
% T1 = transl(300,220,40);	%起点
% T2 = transl(320,-50,220);	%终点
% %ctraj 利用匀加速匀减速规划轨迹
% T = ctraj(T1,T2,50);
% Tj = transl(T);
% %输出末端轨迹
% plot3(Tj(:,1),Tj(:,2),Tj(:,3));
% grid on;
% 
% %当反解的机器人对象的自由度少于6时,要用mask vector减少自由度
% %无法直接调用ikine作为运动学反解函数
% q = mrbt.ikine(T,'mask',[1 1 1 0 0 0]);
% 
% %调整了一下角度,方便观察
% view(113,23);
% mrbt.plot(q,'tilesize',500);

% % 模式3,定义圆
% N = (0:0.5:100)'; 
% center = [275 150 50];
% radius = 50;
% theta = ( N/N(end) )*2*pi;
% points = (center + radius*[cos(theta) sin(theta) zeros(size(theta))])';  
% plot3(points(1,:),points(2,:),points(3,:),'r');
% % 
% % pionts矩阵是“横着”的,取其转置矩阵,进一步得到其齐次变换矩阵
% T = transl(points');
% % 
% % 当反解的机器人对象的自由度少于6时,要用mask vector进行忽略某个关节自由度
% q = mrbt.ikine(T,'mask',[1 1 1 0 0 0]);
% hold on;
% % 调整了一下角度,方便观察
% view(153,23)
% mrbt.plot(q,'tilesize',500);
  • 52
    点赞
  • 472
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
如果你想要使用 MATLABRobotics Toolbox 工具箱和 Link 函数来实现运动学仿真模型,可以按照以下步骤进行操作: 1. 首先,确保已经安装了 Robotics Toolbox 工具箱。你可以从 MathWorks 官方网站下载并安装它。 2. 在 MATLAB 中创建一个机器人对象,可以使用 Robotics Toolbox 的 `SerialLink` 函数。该函数需要一个由 `Link` 对象组成的向量作为输入参数。 3. 使用 `Link` 函数来定义每个关节的参数,包括长度、旋转轴和偏移量等。创建一个 `Link` 对象需要提供这些参数。 4. 将所有 `Link` 对象组成一个向量,并将该向量作为输入参数传递给 `SerialLink` 函数来创建机器人对象。 以下是一个示例代码: ```matlab % 导入 Robotics Toolbox addpath('路径/到/Robotics Toolbox文件夹'); % 创建 Link 对象 L1 = Link([0, 0.5, 0.5, 0], 'standard'); L2 = Link([0, pi/2, 0, 0], 'standard'); L3 = Link([0, 0, 0, 0.5], 'standard'); L4 = Link([0, 0, 0, 0.1], 'standard'); % 创建 SerialLink 对象 robot = SerialLink([L1, L2, L3, L4]); % 设置机器人名称 robot.name = 'MyRobot'; % 显示机器人模型 robot.plot([0, 0, 0, 0]); % 计算正运动学 joint_angles = [pi/6, pi/4, pi/3, pi/2]; end_effector_pose = robot.fkine(joint_angles); % 输出末端坐标 disp('末端坐标:'); disp(end_effector_pose(1:3,4)); ``` 在这个示例中,我们首先导入 Robotics Toolbox 工具箱,并设置它的路径。然后,我们使用 `Link` 函数创建了四个关节对象 `L1`、`L2`、`L3` 和 `L4`,并指定了它们的 D-H 参数。接下来,我们使用这些关节对象创建了一个机器人对象 `robot`。我们还可以为机器人对象设置一个名称,并使用 `plot` 函数显示机器人模型。 最后,我们可以使用 `fkine` 函数计算机器人的正运动学,并输出末端坐标。 请注意,这只是一个简单的示例代码,你可以根据你具体的机器人参数和需求进行修改和扩展。希望对你有所帮助!如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生如昭诩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值