机器人工具箱学习(三)

一、动力学方程

  机器人的动力学公式描述如下:
在这里插入图片描述
式中, τ \boldsymbol{\tau} τ表示关节驱动力矩矢量; q , q ˙ , q ¨ \boldsymbol{q} ,\; \dot{\boldsymbol { q }} ,\; \ddot{\boldsymbol { q }} q,q˙,q¨分别为广义的关节位置、速度和加速度; M \boldsymbol{M} M为关节的空间惯量矩阵; C \boldsymbol{C} C为科氏力和离心力耦合矩阵; G \boldsymbol{G} G为重力; F f \boldsymbol{F}_f Ff为关节摩擦力。

  机器人的动力学参数包括惯性参数和摩擦参数。
  (1)惯性参数有:连杆质量 m m m、相对于连杆坐标系的质心矢量 r \boldsymbol{r} r和转动惯量矩阵 I \boldsymbol{I} I。其中,质心矢量 r \boldsymbol{r} r可以表示为:
在这里插入图片描述
式中, r x r_x rx r y r_y ry r z r_z rz分别表示质心矢量 r \boldsymbol{r} r在连杆坐标系下三个坐标轴的分量。转动惯量矩阵 I \boldsymbol{I} I为包含六个独立元素的二维矩阵,表示为:
在这里插入图片描述
式中,主对角元素为惯性矩,非主对角元素为惯性积。

  (2)机器人动力学建模中常用的摩擦模型为库伦-粘滞摩擦模型,其表达式为:
在这里插入图片描述
式中, f c f_c fc f v f_v fv分别表示库伦摩擦系数和粘滞摩擦系数; v v v表示关节速度。注意:对于库伦摩擦系数的处理不同人有不同的处理,有的地方认为库伦摩擦是对称的,即当机器人关节正向旋转和反向旋转时,库伦摩擦力大小相等,方向相反,也即 f c + = f c − f_c^+ = f_c^- fc+=fc;也有的地方认为库伦摩擦是非对称的,即当机器人关节正向旋转和反向旋转时,库伦摩擦力大小不相等。

二、机器人工具箱描述动力学方程

2.1 动力学参数赋值

  在机器人工具箱中,提供了如下动力学参数输入接口:
  (1)Link.m:表示连杆的质量;
  (2)Link.r:表示连杆的质心矢量;
  (3)Link.I:表示连杆的惯量矩阵;
  (4)Link.Jm:表示驱动电机的转动惯量;
  (5)Link.B:表示粘滞摩擦系数;
  (6)Link.Tc:表示库伦摩擦系数;
  (7)Link.G:表示电机齿轮传动比(默认为1)

  这里仍然以3-DOF平面机械臂为例:

%% 动力学
% RRR机械臂
clear;
close all;
clc;%               theta(z)   d(z)     a(x)     alpha(x)  
RRR_L(1) = Link([  0       0        1        0    ],'standard');
RRR_L(2) = Link([  0       0      0.8        0    ],'standard');
RRR_L(3) = Link([  0       0      0.6        0    ],'standard');% 连杆1动力学参数
RRR_L(1).m = 4.0;
RRR_L(1).r = [0.12; 0.08; 0.31];
RRR_L(1).I = [0.32 0.01 0.02;0.01 0.12 0.11;0.02 0.11 0.41];
RRR_L(1).Jm = 0.0012;
RRR_L(1).B = 0.00148;
RRR_L(1).Tc = [+0.395, -0.435];
RRR_L(1).G = 1.2;% 连杆2动力学参数
RRR_L(2).m = 15.2;
RRR_L(2).r = [-0.475; 0.097; 0.06];
RRR_L(2).I = [1.21 0.21 0.32;0.21 0.52 0.11;0.32 0.11 0.51];
RRR_L(2).Jm = 0.0048;
RRR_L(2).B = 0.00329;
RRR_L(2).Tc = [+0.462; -0.561];
RRR_L(2).G = 1.4;% 连杆3动力学参数
RRR_L(3).m = 0.6;
RRR_L(3).r = [0.01; 0.097; 0.016];
RRR_L(3).I = [0.021 0.03 0.382;0.03 0.152 0.11;0.382 0.11 0.651];
RRR_L(3).Jm = 0.0061;
RRR_L(3).B = 0.00429;
RRR_L(3).Tc = [+0.262; -0.661];
RRR_L(3).G = 1.7;three_link = SerialLink(RRR_L, 'name', '3-DOF');

  采用dyn( )函数可以查看动力学参数,如图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 动力学方程中的各项表示

(1)空间惯量矩阵 M ( q ) \boldsymbol{M}(\boldsymbol{q}) M(q)
  机器人的空间惯量是机器人各关节的位姿的函数,在不同机器人位形时具有不同的值。机器人工具箱中可以调用robot.inertia(q)函数获得空间惯量矩阵。
  例如:当3-DOF平面机械臂三个关节角度为30°、45°和60°时,其空间惯量矩阵为:
在这里插入图片描述

(2)科氏力和离心力耦合矩阵 C ( q , q ˙ ) \boldsymbol{C}(\boldsymbol{q},\dot{\boldsymbol{q}}) C(q,q˙)
  科氏力和离心力耦合矩阵是关节位置和速度的函数。机器人工具箱中可以调用robot.coriolis(q, qd)函数获得该耦合矩阵。
  例如:当3-DOF平面机械臂三个关节角度为30°、45°和60°,三个关节速度为10°/s、20°/s和30°/s时,其科氏力和离心力耦合矩阵为:
在这里插入图片描述

(3)重力矩阵 G ( q ) \boldsymbol{G}(\boldsymbol{q}) G(q)
  重力矩阵与机器人的位形有关,是对各关节所受重力的描述,其值不受机器人的运动的影响。机器人工具箱中可以调用robot.gravload(q, grav)函数来获得重力矩阵,其中grav自定义重力加速度向量。
  例如:当3-DOF平面机械臂三个关节角度为30°、45°和60°,重力加速度向量为 y y y轴负向,即grav = [0; -9.8; 0]。重力矩阵为:
在这里插入图片描述

(4)摩擦力矩阵 F f ( q ˙ ) \boldsymbol{F}_f(\dot{\boldsymbol{q}}) Ff(q˙)
  摩擦力矩阵是由各关节的给定摩擦参数数值决定的,大小与各关节的速度有关。机器人工具箱中可以调用robot.friction(qd)函数来获得重力矩阵。
  例如:当3-DOF平面机械臂三个关节速度为10°/s、20°/s和30°/s时,其摩擦力矩阵为:
在这里插入图片描述

三、逆动力学分析

  机器人的逆动力学分析是在给定机器人关节位置、速度和加速度时,计算得到机器人各关节所需要的力和力矩大小。机器人工具箱中可以调用robot.rne(q, qd, qdd, grav)函数来计算逆动力学。其中,q, qd, qdd分别表示机器人关节位置、速度和加速度;grav表示自定义的重力加速度矢量。除此之外,还可以添加参数fext,表示末端执行器受到的外力和力矩 [ F x , F y , F z , τ x , τ y , τ z ] [F_x,\: F_y,\: F_z,\: \tau_x,\: \tau_y,\: \tau_z] [Fx,Fy,Fz,τx,τy,τz]
  例子:让3-DOF平面机械臂按照下图所示的轨迹运动。
在这里插入图片描述

代码:

%% 动力学
% RRR机械臂
clear;
close all;
clc;%               theta(z)   d(z)     a(x)     alpha(x)  
RRR_L(1) = Link([  0       0        1        0    ],'standard');
RRR_L(2) = Link([  0       0      0.8        0    ],'standard');
RRR_L(3) = Link([  0       0      0.6        0    ],'standard');% 连杆1动力学参数
RRR_L(1).m = 4.0;
RRR_L(1).r = [0.12; 0.08; 0.31];
RRR_L(1).I = [0.32 0.01 0.02;0.01 0.12 0.11;0.02 0.11 0.41];
RRR_L(1).Jm = 0.0012;
RRR_L(1).B = 0.00148;
RRR_L(1).Tc = [+0.395, -0.435];
RRR_L(1).G = 1.2;% 连杆2动力学参数
RRR_L(2).m = 15.2;
RRR_L(2).r = [-0.475; 0.097; 0.06];
RRR_L(2).I = [1.21 0.21 0.32;0.21 0.52 0.11;0.32 0.11 0.51];
RRR_L(2).Jm = 0.0048;
RRR_L(2).B = 0.00329;
RRR_L(2).Tc = [+0.462; -0.561];
RRR_L(2).G = 1.4;% 连杆3动力学参数
RRR_L(3).m = 5.6;
RRR_L(3).r = [0.01; 0.097; 0.016];
RRR_L(3).I = [0.921 0.03 0.382;0.03 0.252 0.11;0.382 0.11 1.251];
RRR_L(3).Jm = 0.0061;
RRR_L(3).B = 0.00429;
RRR_L(3).Tc = [+0.262; -0.661];
RRR_L(3).G = 1.7;three_link = SerialLink(RRR_L, 'name', '3-DOF');delta_t = 0.02;
t = 0:delta_t:4;
m = length(t);theta1 = 60*sin(4*pi*t/4);
theta2 = 60*sin(2*pi*t/4);
theta3 = 30*sin(2*pi*t/4);theta1_d = 60*pi*cos(4*pi*t/4);
theta2_d = 30*pi*cos(2*pi*t/4);
theta3_d = 15*pi*cos(2*pi*t/4);theta1_dd = -60*pi*pi*sin(4*pi*t/4);
theta2_dd = -15*pi*pi*sin(2*pi*t/4);
theta3_dd = -7.5*pi*pi*sin(2*pi*t/4);q = [theta1;theta2;theta3]'*pi/180;
qd = [theta1_d;theta2_d;theta3_d]'*pi/180;
qdd = [theta1_dd;theta2_dd;theta3_dd]'*pi/180;% 关节位置、速度、加速度绘图
figure(1)
subplot(3,1,1)
plot(t, q(:,1)*180/pi, 'b')
hold on
plot(t, q(:,2)*180/pi, 'r--')
hold on
plot(t, q(:,3)*180/pi, 'm')
xlabel('time (s)', 'Interpreter', 'latex')
ylabel('$\theta$ (deg)', 'Interpreter', 'latex')
legend('$\theta_1$','$\theta_2$','$\theta_3$', 'Interpreter', 'latex')
set(gca, 'FontName','Times New Roman')subplot(3,1,2)
plot(t, qd(:,1)*180/pi, 'b')
hold on
plot(t, qd(:,2)*180/pi, 'r--')
hold on
plot(t, qd(:,3)*180/pi, 'm')
xlabel('time (s)', 'Interpreter', 'latex')
ylabel('$\dot{\theta}$ (deg)', 'Interpreter', 'latex')
legend('$\dot{\theta_1}$','$\dot{\theta_2}$','$\dot{\theta_3}$', 'Interpreter', 'latex')
set(gca, 'FontName','Times New Roman')subplot(3,1,3)
plot(t, qdd(:,1)*180/pi, 'b')
hold on
plot(t, qdd(:,2)*180/pi, 'r--')
hold on
plot(t, qdd(:,3)*180/pi, 'm')
xlabel('time (s)', 'Interpreter', 'latex')
ylabel('$\ddot{\theta}$ (deg)', 'Interpreter', 'latex')
legend('$\ddot{\theta_1}$','$\ddot{\theta_2}$','$\ddot{\theta_3}$', 'Interpreter', 'latex')
set(gca, 'FontName','Times New Roman')set(gcf, 'color',[1 1 1]);% 运动示意
figure(2)
three_link.plot(q,'trail','b');% 逆动力学
grav = [0; -9.8; 0];
tau = three_link.rne(q, qd, qdd, grav);% 关节驱动力矩
figure(3)
plot(t,tau(:,1), 'b')
hold on
plot(t, tau(:,2), 'r--')
hold on
plot(t, tau(:,3), 'm')
xlabel('time (s)', 'Interpreter', 'latex')
ylabel('$\tau$ (N/m)', 'Interpreter', 'latex')
legend('$\tau_1$','$\tau_2$','$\tau_3$', 'Interpreter', 'latex')
set(gca, 'FontName','Times New Roman')
set(gcf, 'color',[1 1 1]);

运行结果:
在这里插入图片描述
在这里插入图片描述

四、结语

  机器人工具箱还有其他的一些应用,譬如正动力学分析、视觉相关应用等,不过笔者对这些没有接触过,就不误导大家了。
  我是木头人,以上全是个人见解,有问题请大家评论区指出,大家共同进步!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/703160.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【019】基于SSM+JSP实现的进销存管理系统

项目介绍 进销存管理系统是对企业生产经营中物料流、资金流进行条码全程跟踪管理,从接获订单合同开始,进入物料采购、入库、领用到产品完工入库、交货、回收货款、支付原材料款等,每一步都为您提供详尽准确的数据。有效辅助企业解决业务管理…

前端通知组件封装

背景 实现如上图效果&#xff1a;点击小铃铛&#xff0c;从右侧展示通知&#xff0c;点击其中一条跳&#xff0c;转到一个新页面&#xff1b;小铃铛数目减少&#xff1b; 实现 index.vue <template><el-drawerv-if"visible":visible.sync"visible&…

国产操作系统下Chrome的命令行使用 _ 统信 _ 麒麟

原文链接&#xff1a;国产操作系统下Chrome的命令行使用 | 统信 | 麒麟 Hello&#xff0c;大家好啊&#xff01;今天我们来聊聊如何在国产操作系统上使用命令行操作Google Chrome。无论是进行自动化测试、网页截图还是网页数据抓取&#xff0c;使用命令行操作Google Chrome都能…

线上3D博物馆搭建简单吗?有何优势?有哪些应用场景?

随着科技的飞速发展&#xff0c;传统的博物馆参观方式正在经历一场前所未有的变革&#xff0c;在科技的“加持”下&#xff0c;不少博物馆凭借强大的技术、创意和美学实践&#xff0c;频频“出圈”&#xff0c;线上3D博物馆逐渐崛起&#xff0c;这不仅丰富了人们的文化体验&…

【PDF技巧】PDF如何解密?

PDF文件设置了加密&#xff0c;需要密码才能够打开文件或者编辑文件&#xff0c;那么如何解密PDF密码&#xff1f;今天我们来一起学习一下。 首先是在已知密码的情况下&#xff0c;PDF文件中的打开密码或者是限制编辑&#xff0c;想要解密PDF密码&#xff0c;我们只需要在PDF编…

(Java面试题——基础版)JVM、JRE和JDK的关系

JVM Java Virtual Machine是Java虚拟机 &#xff0c;Java程序需要运行在虚拟机上 &#xff0c;不同的平台有自己的虚拟机 &#xff0c;因此Java语言可以 实现跨平台。JVM 负责将 Java 字节码&#xff08;即编译后的 .class 文件&#xff09;翻译成特定平台上的机器码&#xff0…

python与anaconda 的对应关系

不能下载好anaconda 后才能知道python吧 python10。2023年3月 python11 2023年7月 具体请看官方说明 Anaconda 2023.09-0 — Anaconda documentation 示例如下&#xff0c;绿色框&#xff0c;有的在包的列表中搜python就可以找到

嵌入式文件系统

嵌入式文件系统 文件系统简介 在计算机系统中&#xff0c; 需要用到大量的程序和数据&#xff0c; 它们大部分以文件的形式存放在外部存储当中&#xff0c; 根据需要可随时调入内存使用 如果用户直接管理外存文件所面临的问题&#xff1a; 必须熟悉外存的物理特性了解各种存…

永磁同步电机的脉振高频注入无速度传感器simulink仿真模型

整理了永磁同步电机的脉振高频注入无速度传感器simulink仿真模型&#xff0c;该模型高频注入仿真pmsm&#xff0c;无感控制&#xff0c;解决0速转矩输出问题&#xff0c;插入式永磁同步电机&#xff0c;凸极&#xff0c;高频注入。MATLAB/simulink仿真&#xff0c;适合研究学习…

近几年上门按摩市场为何如此火爆,有哪些功能?

近几年上门预约推拿按摩市场为何如此火爆&#xff0c;这个融合了休闲、保健与养生的行业&#xff0c;其消费频率高且受众广泛&#xff0c;不受任何限制。 而在按摩服务类系统平台中&#xff0c;小程序以其轻便与易用性脱颖而出。用户只需轻松一扫&#xff0c;便能迅速进入应用&…

【初阶数据结构】栈

目录 栈的概念及结构栈的实现栈的结构栈的初始化栈的销毁入栈出栈取栈顶元素判断栈是否为空取栈中元素个数代码测试 完整代码Stack.hStack.ctest.c 栈的概念及结构 栈&#xff1a;是一种特殊的线性表&#xff0c;它只允许在固定的一端进行插入和删除元素的操作。   栈顶&…

Elasticsearch:向量相似度技术和评分

作者&#xff1a;来自 Elastic Valentin Crettaz 当需要搜索自由文本并且 CtrlF / CmdF 不再有效时&#xff0c;使用词法搜索引擎通常是你想到的下一个合理选择。 词汇搜索引擎擅长分析要搜索的文本并将其标记为可在搜索时匹配的术语&#xff0c;但在理解和理解被索引和搜索的…