当前位置: 首页 > news >正文

机器人工具箱学习(三)

一、动力学方程

  机器人的动力学公式描述如下:
在这里插入图片描述
式中, τ \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]);

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

四、结语

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

相关文章:

机器人工具箱学习(三)

一、动力学方程 机器人的动力学公式描述如下: 式中, τ \boldsymbol{\tau} τ表示关节驱动力矩矢量; q , q ˙ , q \boldsymbol{q} ,\; \dot{\boldsymbol { q }} ,\; \ddot{\boldsymbol { q }} q,q˙​,q​分别为广义的关节位置、速度和加速…...

华为OD机试 - CPU算力分配(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试…...

web前端框架设计第八课-表单控件绑定

web前端框架设计第八课-表单控件绑定 一.预习笔记 1.v-model实现表单数据双向绑定 2.搜索数据的实现 3.全选案例实现1—JQ方法 4.单选案例实现 5.数据级联(二级级联) 6.v-model中的修饰符 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药&#xff0c…...

这三个网站我愿称之为制作答辩PPT的神

很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路,一窍不通。但这并不是你们的错,对于平时没接触过相关方面,第一次搞答辩PPT的人来说,这是很正常的一件事。一个好的答辩PPT可以根据以下分为以下几部分来写。 1.研究的背景和…...

flutter开发实战-实现多渠道打包及友盟统计(亲测有效)

flutter开发实战-实现多渠道打包及友盟统计(亲测有效) 最近开发过程中,需要引入友盟进行统计服务。友盟统计还需要区分不同渠道的打开应用的情况,所以需要处理多渠道打包的问题。 一、引入友盟统计 在工程的pubspec.yaml中引入…...

JavaScript-JSON对象

JSON格式 JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会的一个子集,采用完全独立于编程语言的文本格式来存储和表示…...

【C语言】自定义类型之---结构体超详解(结构体的定义使用、指针结构体,内存对齐,......代码详解)

目录 前言: 一:结构体 1.1:什么是结构体? 1.2:结构体类型的声明 1.3:结构体变量的定义 1.4:结构体的内存对齐 1.5:结构体传参 二:位段 2.1:位段是什…...

【完美恢复】修复计算机中丢失emp.dll的多个详细方法

最近,在尝试运行某款游戏时,我遭遇了一个令人头痛的问题——“emp.dll文件丢失”。这个错误通常意味着游戏的某个关键文件没有被正确加载或已损坏。以下是我解决问题的步骤和一些心得体会,希望对遇到类似问题的玩家们有所帮助。 emp.dll是一…...

暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略

暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略 暗黑破坏神4属于是暴雪旗下一款经典游戏IP,在全世界有着广泛的玩家群体,更是在今年暴雪国服宣布回归之后,吸引了一大批新玩家加入。今天小编就为大家带来暗黑4的详细搬砖教程。 现在我们…...

WLAN技术

冲突域:连接在同一传输线缆上的所有工作站的集合,或者说是同一物理网段上所有节点的集合共同竞争网络资源形成的域叫冲突域。 在OSI模型中,冲突域被看作是第一层的概念,连接同一冲突域的设备有中继器、集线器(hub&…...

维修AB罗克韦尔工控机 PanelView 900 2711-T9C8 SER C 触摸屏人机界面

可视化和 HMI 解决方案可帮助您满足生产力、创新和全球化需求。为电子操作员界面终端、分布式客户端/服务器 HMI 和信息软件提供了一致的外观和感觉。编程工具和高级软件应用程序包括远程访问和数据分析,可加速开发并提高效率。 图形终端 图形终端提供各种尺寸、操…...

334_C++_std::bind中使用shared_from_this()

std::bind(&HttpClient::getPwd, shared_from_this(), std::placeholders::_1, std::placeholders::_2);[ HttpClient继承自NetObj,NetObj是父类,NetObj受到std::shared_pt...

【Python】防御性编程入门

1. 前言 防御性编程指的是为了防止代码泄露后被竞品公司窃取技术,使用一种较高级的明文加密编程方式。也可以当做一种带解密性质的时间胶囊,锻炼程序员自己的记忆能力、读代码能力等。 2. 案例分析 2.1 import Import里面可以多取一些喜欢的名字&#…...

无线麦克风哪个品牌音质最好?热门无线麦克风品牌推荐

这段时间短视频行业兴起,很多人都开始尝试步入自媒体,不过想要自己的视频内容更出色、更吸引人,好的音频设备肯定是必不可少的,而麦克风就是其中的一种。麦克风的好坏也将决定了一个视频的质量与完整性等等,如果我们作…...

粒子奇观:用Processing创造宇宙级的动态效果

前言: 👋 今天,我们将一起探索宇宙的奥秘,不是在星空下,而是在Processing的代码世界中。这是我们的第八篇文章,我们将深入粒子系统的神奇领域,学习如何创造出令人惊叹的动态效果。 粒子系统:构建动态世界的基石 🔨 粒子系统是计算机图形学中用于模拟复杂自然现象…...

Filesystem Fragmentation on Modern Storage Systems——论文泛读

TOCS 2023 Paper 论文阅读笔记整理 问题 文件系统碎片是计算机系统随着时间的推移而变慢的主要原因之一。以前认为,碎片化对硬盘驱动器(HDD)等旋转存储设备有害,但不影响固态驱动器(SSD),因为…...

如何同步管理1000个设备的VLAN数据?

什么是VLAN? VLAN,也就是虚拟局域网,是通过为子网提供数据链路连接来抽象出局域网的概念。在企业网中,一个企业级交换机一般是24口或者是48口,连接这些接口的终端在物理上形成一个广播域。广播域过大,就会导…...

【谷粒商城】01-环境准备

1.下载和安装VirtualBox 地址:https://www.virtualbox.org/wiki/Downloads 傻瓜式安装VirtualBox 2.下载和安装Vagrant官方镜像 地址:https://app.vagrantup.com/boxes/search 傻瓜式安装 验证是否安装成功 打开CMD,输入vagrant命令,是否…...

2024深圳杯数学建模C题参考论文24页+完整代码数据解题

一、问题研究 24页参考论文: 【编译器识别】2024深圳杯C题24页参考论文1-3小问完整解题代码https://www.jdmm.cc/file/2710545/ 为了回答这些问题,我们需要进行一系列的编译实验、分析编译结果,并构建判别函数。以下是对这些问题的初步分析…...

用go语言写一个代码,加班就自动给老婆发信息,下班自动提醒的代码

文章推荐 1 作为程序员,开发用过最好用的AI工具有哪些? 2 Github Copilot正版的激活成功,终于可以chat了 3 idea,pycharm等的ai assistant已成功激活 4 新手如何拿捏 Github Copilot AI助手,帮助你提高写代码效率 5 Jetbrains的a…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

微信小程序之bind和catch

这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...