MATLAB机器人工具箱【3】—— 动力学相关函数及用法
本文在参考B站up主刘海涛大佬的视频分享基础上,结合自己学习的机器人学知识,利用MATLAB机器人工具箱加深理解和运用,机器人工具箱安装教程见Robotic toolbox 工具箱的安装和初步了解,安装了工具箱后就可以用来愉快的学习啦。
1. 查看机器人动力学参数


mdl_puma560;
p560.dyn;%查看puma560机械臂所有连杆的动力学参数
p560.dyn(2);%查看puma560机械臂第二连杆的动力学参数
p560.links(2).dyn;%查看puma560机械臂第二连杆的动力学参数
2. 逆动力学
已知关节速度、加速度、角加速度求出各关节所需提供的关节力矩。
tau = R.rne(q, qd, qdd)是机器人R达到指定关节位置q(1xN),速度qd(1XN),加速度qdd(1XN)所需要的各个关节的关节力矩,其中N为关节个数。
如果机器人末端受到力的作用 fext ,则可用以下形式:
tau = R.rne(q, qd, qdd, grav, fext)
其中,grav 是重力加速度,默认值是[0,0,9.81];fext=[Fx Fy Fz Mx My Mz]。
>> mdl_puma560;
>> A = p560.rne(qn,qz,qz)%当关节角为[0 0.7854 3.1416 0 0.7854 0],关节速度、关节加速度为零,重力加速度为9.81时所需的关节力矩
A =
-0.0000 31.6399 6.0351 0.0000 0.0283 0
3. 正动力学
已知各个关节上电机提供的力/力矩,在此力矩作用下,关节如何运动,求对应各个关节角度、角速度、角加速度。

[T,q,qd] = R.fdyn(T, torqfun)
T 表示时间间隔,就是采样时间。根据给定的力矩函数 torqfun,求各关节的 q,qd,默认初始位置q和速度qd为零。
也可以设定关节角度、角速度的初值,并且确定力矩函数中所含的参数,如下:
[T,q,qd] = R.fdyn(T, torqfun, q0, qd0, ARG1, ARG2, …)
mdl_puma560;
torqfun = [1 2 3 4 5 6];
p560 = p560.nofriction();%为了加快求解速度,选择使用不考虑摩擦的动力学模型
[T,q,qd] = p560.fdyn(1,torqfun);
for kk = 1:65
qdd(kk,:) = p560.accel(q(kk,:),qd(kk,:),torqfun);
end
4. 机器人动力学方程


>> mdl_puma560;
>> p560.gravload([1 2 3 4 5 6])%给定关节角度,求解出重力载荷
ans =
0.0000 -7.9683 8.4581 -0.0197 0.0027 0
>> mdl_puma560;
>> p560.inertia([1 2 3 4 5 6])%给定关节角度,求解出关节空间惯性矩阵
ans =
2.6152 -0.6550 -0.0363 0.0001 0.0010 0.0000
-0.6550 4.3038 0.2953 -0.0008 -0.0017 0.0000
-0.0363 0.2953 0.9366 -0.0009 -0.0006 0.0000
0.0001 -0.0008 -0.0009 0.1926 0.0000 0.0000
0.0010 -0.0017 -0.0006 0.0000 0.1713 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.1941
>> mdl_puma560;
>> qd = [0.1 0.1 0.1 0.1 0.1 0.1];%给定关节速度
>> C = p560.coriolis(qn,qd)%给定关节角度、关节速度,计算科式力和向心力的耦合矩阵
C =
-0.0267 -0.1291 0.0170 -0.0000 -0.0003 0.0000
0.0627 0.0386 0.0771 -0.0002 -0.0000 -0.0000
-0.0361 -0.0387 -0.0001 -0.0001 -0.0003 -0.0000
0.0000 0.0001 -0.0000 0.0000 0.0000 -0.0000
-0.0000 0.0001 0.0002 -0.0000 -0.0000 -0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0
有效载荷,顾名思义就是机械手末端的载荷,施不施加有效载荷会影响到关节空间惯性矩阵的值
>> mdl_puma560;
>> p560.inertia([1 2 3 4 5 6])%没有施加有效载荷时的惯性矩阵
ans =
2.6152 -0.6550 -0.0363 0.0001 0.0010 0.0000
-0.6550 4.3038 0.2953 -0.0008 -0.0017 0.0000
-0.0363 0.2953 0.9366 -0.0009 -0.0006 0.0000
0.0001 -0.0008 -0.0009 0.1926 0.0000 0.0000
0.0010 -0.0017 -0.0006 0.0000 0.1713 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.1941
>> p560.payload(1,[0,0.1,0.2])%施加有效载荷
>> p560.inertia([1 2 3 4 5 6])%施加有效载荷后的惯性矩阵
ans =
2.8033 -0.8506 -0.0951 0.0079 0.0778 0.0368
-0.8506 4.6513 0.4828 -0.0858 -0.1011 -0.0584
-0.0951 0.4828 1.1338 -0.0988 -0.0169 -0.0214
0.0079 -0.0858 -0.0988 0.2416 0.0029 0.0082
0.0778 -0.1011 -0.0169 0.0029 0.2120 0.0192
0.0368 -0.0584 -0.0214 0.0082 0.0192 0.2041
5. 赋予机器人动力学参数

注意:所赋的值是固定量,如动力学方程中的惯性矩阵等会随着角度的变化而变化,这种量是不能给赋值的,在属性中也没有该项。
版权声明:本文为huangjunsheng123原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。