MATLAB六轴机械臂机器人的动力学分析

1、概述

动力学以牛顿第二定律为核心,这个定律指出了力、加速度、质量三者间的关系。
质点动力学有两类基本问题:
一是已知作用于质点上的力,求质点的运动,这个就是正动力学。
二是已知质点的运动,求作用于质点上的力,这个属于逆动力学。

​求解第一类问题时只要对质点的运动方程取二阶导数,得到质点的加速度,代入牛顿第二定律即可求得力
求解第二类问题时需要求解质点运动微分方程或求积分。所谓质点运动微分方程就是把运动第二定律写为包含质点的坐标对时间的导数的方程。

这节主要是通过Matlab来熟悉动力学在机器人领域的实际应用。

2、动力学参数

以p560机械臂为例,我们来查看下它的动力学参数
首先还是运行机器人工具包,如果没有安装这个包的可以查阅:MATLAB的rvctools工具箱熟悉运动学【机械臂机器人示例】
接下来我们将机器人加载进来,有很多自带的机器人,这里我们选择使用p560机器人,看下这个机器人有哪些动力学相关的属性参数,通过 dyn 函数我们可以得到以下各个关节的惯性属性:

startup_rvc
mdl_puma560
p560.dynLink 1::Revolute(std): theta=q, d=0, a=0, alpha=1.5708, offset=0m    = 0          r    = 0           0           0          I    = | 0           0           0           || 0           0.35        0           || 0           0           0           |Jm   = 0.0002     Bm   = 0.00148    Tc   = 0.395      (+) -0.435     (-)G    = -62.61     qlim = -2.792527 to 2.792527Link 2::Revolute(std): theta=q, d=0, a=0.4318, alpha=0, offset=0m    = 17.4       r    = -0.3638     0.006       0.2275     I    = | 0.13        0           0           || 0           0.524       0           || 0           0           0.539       |Jm   = 0.0002     Bm   = 0.000817   Tc   = 0.126      (+) -0.071     (-)G    = 107.8      qlim = -0.785398 to 3.926991Link 3::Revolute(std): theta=q, d=0.15005, a=0.0203, alpha=-1.5708, offset=0m    = 4.8        r    = -0.0203     -0.0141     0.07       I    = | 0.066       0           0           || 0           0.086       0           || 0           0           0.0125      |Jm   = 0.0002     Bm   = 0.00138    Tc   = 0.132      (+) -0.105     (-)G    = -53.71     qlim = -3.926991 to 0.785398Link 4::Revolute(std): theta=q, d=0.4318, a=0, alpha=1.5708, offset=0m    = 0.82       r    = 0           0.019       0          I    = | 0.0018      0           0           || 0           0.0013      0           || 0           0           0.0018      |Jm   = 3.3e-05    Bm   = 7.12e-05   Tc   = 0.0112     (+) -0.0169    (-)G    = 76.04      qlim = -1.919862 to 2.967060Link 5::Revolute(std): theta=q, d=0, a=0, alpha=-1.5708, offset=0m    = 0.34       r    = 0           0           0          I    = | 0.0003      0           0           || 0           0.0004      0           || 0           0           0.0003      |Jm   = 3.3e-05    Bm   = 8.26e-05   Tc   = 0.00926    (+) -0.0145    (-)G    = 71.92      qlim = -1.745329 to 1.745329Link 6::Revolute(std): theta=q, d=0, a=0, alpha=0, offset=0m    = 0.09       r    = 0           0           0.032      I    = | 0.00015     0           0           || 0           0.00015     0           || 0           0           4e-05       |Jm   = 3.3e-05    Bm   = 3.67e-05   Tc   = 0.00396    (+) -0.0105    (-)G    = 76.69      qlim = -4.642576 to 4.642576

这里将6个关节的参数属性都给显示出来了,我们也可以查看单个关节的参数,比如第二个关节:p560.dyn(2)或者p560.links(2).dyn,这些属性分别说明如下:

m:关节的质量
r:关节齿轮向量,或叫质心
I:3x3的对称惯性矩阵(对称矩阵是其转置是它本身)。惯性矩阵是刚体在不同坐标轴上的转动惯量,通过对称矩阵的特征值和特征向量,可以得到刚体的主轴和转动惯量。
Jm:电机惯性
Bm:粘性摩擦力
Tc:库仑摩擦力(当然如果说忽略库仑摩擦力的情况:p560.nofriction().dyn,这样Tc都为0,没有库仑摩擦力了)
G:齿轮传动比(主动轮转速/从动轮转速 或者 从动轮齿数/主动轮齿数)比值小于1,是增速;大于1,是减速。打个比方,变速自行车,爬坡的时候,就是小齿轮带大齿轮,属于减速,这样踩起来就比较省力,轻松,但是需要多踩很多圈,需要注意的是,省力,但是不会省功。
qlim:关节转动的最大范围

获取这些属性的方法如下:

p560.links(2).m
17.4000
p560.links(1).G
-62.6111
%其他类似...

3、正动力学Forward dynamics

正动力学也叫前向动力学,根据受力情况,求出角速度、角加速度的过程。
模拟Puma 560在零角度静止状态下的运动,关节力矩为零,通过 fdyn(TMAX,FTFUN) 函数,会对机器人在0~TMAX的时间内的动力学进行积分,这样可以获取到时间T,关节位置q,关节速度qd

p560=p560.nofriction( );
tic
[T,q,qd]=p560.fdyn(10,[],qz);
toc
%时间已过 1.366665 秒。

也可以自行设置力矩来获取位置与速度:

torqfun = [1 2 3 4 5 6]; 
[T,q,qd]=p560.fdyn(10,[],torqfun);

由此产生的运动,我们将其角速度随着时间绘制出来:

set(gcf,'Position',[10,10, 800, 1000]);
subplot(6,1,1); plot(T,qd(:,1)); xlabel('Time (s)'); ylabel('Joint 1 (rad)')
subplot(6,1,2); plot(T,qd(:,2)); xlabel('Time (s)'); ylabel('Joint 2 (rad)')
subplot(6,1,3); plot(T,qd(:,3)); xlabel('Time (s)'); ylabel('Joint 3 (rad)')
subplot(6,1,4); plot(T,qd(:,4)); xlabel('Time (s)'); ylabel('Joint 4 (rad)')
subplot(6,1,5); plot(T,qd(:,5)); xlabel('Time (s)'); ylabel('Joint 5 (rad)')
subplot(6,1,6); plot(T,qd(:,6)); xlabel('Time (s)'); ylabel('Joint 6 (rad)')

或者这样画图,更直观,我这里就选1~4个关节的速度:

figure('Position', [10, 10, 800, 1000]);
plot(T,qd(:,1:4));
legend('q1','q2','q3','q4');
text(0.9,0.28,'\leftarrow q1');
legend('q1','q2','q3','q4');
grid on

不管习惯哪种画图,我们可以看到速度最终随着时间都变成了0,也就是机器人的机械臂在自身重力作用下都垂直向下静止了。 

关节的角加速度

通过输入位姿、角速度、力矩来求角加速度
我们来看下各个关节的角加速度在qz位姿以及角速度和力矩为0的结果如下:

p560.accel(qz, zeros(1,6), zeros(1,6))
%结果分别为-0.2462,-8.682,3.146,0.002,0.0603,0.0001

我们来演示下在重力作用下的机械臂的情况(这种保存动画更简单,而且可以将轨迹画出):

p560.plot(q,'trail','b-','movie','r.gif')

动图(由于超出5M大小,只能截图,最后静止状态)如下:

4、逆动力学Inverse dynamics

逆动力学,是根据物体所要达到的一定运动状态,求解作用在物体上的外力的方向和大小的学科。已知角度、角速度、角加速度等值,求解各关节所需提供的力。
关节力矩
力矩是力的大小乘以力臂的长度(牛顿*米),所以我们拿扳手拧螺母的时候,扳手的力臂越长越轻松,因为力矩越大。

q1 = qn;%关节位姿
qd = [5 1 0 0 0 0];  %关节角速度
qdd = [0 0 0 0 0 0]; %关节角加速度
TAU = p560.rne(q1,qd,qdd);%求解逆向动力学
TAU =22.1585   56.8861   -3.3693   -0.0018    0.0283    0.0002

rne的参数选项
“gravity”G,指的是地心引力也就是重力加速度(默认[0,0,9.81])。所以上面默认是:TAU = p560.rne(q,qd,qdd,[0,0,9.81]);
“fext”,W, 指定作用于末端执行器的扳手 W=[Fx Fy Fz Mx My Mz]
“slow”:不使用MEX文件

其余一些属性的求解如下 :

%关节负载:
p560.gravload(q1)
ans =-0.0000   31.6399    6.0351    0.0000    0.0283         0
%空间惯性矩阵:
p560.inertia(qz)
ans =3.9611   -0.1627   -0.1389    0.0016   -0.0004    0.0000-0.1627    4.4566    0.3727    0.0000    0.0019    0.0000-0.1389    0.3727    0.9387    0.0000    0.0019    0.00000.0016    0.0000    0.0000    0.1924    0.0000    0.0000-0.0004    0.0019    0.0019    0.0000    0.1713    0.00000.0000    0.0000    0.0000    0.0000    0.0000    0.1941
%科氏力:
qd = [0.1 0.1 0.1 0.1 0.1 0.1];
p560.coriolis(qn,qd)
%增加载荷质量:
R.payload(M, P) %在位置P增加一个质点为M的有效载荷
R.payload(0) %删除添加的有效载荷
%我们测试下:
p560.payload(1,[0 0.1 0.2])%惯性矩阵:p560.inertia(qz)
ans =4.1476   -0.1880   -0.1643   -0.0034   -0.0100   -0.0050-0.1880    5.0224    0.7609    0.0632    0.1269    0.0632-0.1643    0.7609    1.3188    0.0632    0.1269    0.0632-0.0034    0.0632    0.0632    0.2024    0.0200    0.0100-0.0100    0.1269    0.1269    0.0200    0.2113    0.0200-0.0050    0.0632    0.0632    0.0100    0.0200    0.2041

对比前面的惯性矩阵,我们可以看到矩阵的值在有外力的作用下发生了变化。

5、小结

关于摩擦力有几个简单解释下:
静摩擦力Static friction,Fs:静止时的摩擦力
库仑摩擦力Coulomb friction,Fc:静摩擦力+动摩擦力
黏性摩擦力Viscous friction,Fv:由于物体表面之间的黏性力而产生的摩擦力。比如关节与润滑油的摩擦,其摩擦力通常跟速度是非线性关系,只有物体的运动速度比较小的时候,就近似地看作其是关于速度线性的。

这里可以看到动力学跟运动学是有很大区别的,动力学是跟力有关系,使用的是牛顿三定律,根据受力分析可以得到物体的运动情况,或者反过来根据运动的情况来分析各种力的情况。而运动学是不考虑这些因素的,主要是运动的几何性质,空间变化。

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

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

相关文章

ubantu22.04.3 安装4080驱动

新电脑安装驱动网卡EX211只适配22.04的内核,其他系统升级内核易出问题不推荐。 安装系统为系统盘安装制作Ubuntu22.04启动盘_ubuntu下制作pe启动盘-CSDN博客,参考此作者,选择系统为22.04.3 其他版本不推荐因前面用22.04安装显卡后出现兼容性…

GEM5 McPAT NoC教程: xml设置汇总-2023版

简介 McPAT的xml有一些参数需要设置,noc的部分很多Gem5ToMcpatparser没有设置,也没有给出如何设置的条件。尤其是和活动相关的total access,不知道具体怎么设置,也不知道如何从gem5 stats.txt中导出。本文提供了2023年的收集到ge…

EasyExcel读取Excel数据(含多种方式)

目录 EasyExcel简介 使用EasyExcel进行读数据 引入依赖: EasyExcel提供了两种读取模式 使用 监听器 读取模式 1.创建一个实体类 2.创建监听器 代码 使用 同步读 读取模式 1.创建一个实体类 2.代码 添加导入数据库的逻辑 其实官方文档讲得很清楚&#xff…

用友NC word.docx任意文件读取漏洞

文章目录 产品简介漏洞概述指纹识别漏洞利用修复建议 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数…

代码随想录第三十三天(一刷C语言)|斐波那契数爬楼梯使用最小花费爬楼梯

创作目的:为了方便自己后续复习重点,以及养成写博客的习惯。 动态规划步骤: 确定dp数组以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 一、斐波那契数 思路:参考carl文档 1、dp[i]的定义为&#xff…

JMeter逻辑控制器

JMeter逻辑控制器 一、IF控制器1、作用2、步骤 二、循环控制器1、作用2、步骤3、线程组和循环控制器的区别? 三、ForEach控制器1、作用2、步骤 一、IF控制器 1、作用 **控制下面的测试元素是否执行**2、步骤 添加线程组用户定义的变量添加if控制器,判断…

动态内存管理,malloc和calloc以及realloc函数用法

目录 一.malloc函数的介绍 malloc的用法 举个例子 注意点 浅谈数据结构里的动态分配空间 二.calloc函数的介绍 三.realloc函数的介绍 四.柔性数组的介绍 为什么有些时候动态内存函数头文件是malloc.h,有些时候却是stdlib.h 一.malloc函数的介绍 malloc其实就是动态开辟…

老卫带你学---leetcode刷题(29. 两数相除)

29. 两数相除 问题 给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 &…

云原生之深入解析Kubernetes中服务的性能

一、Pyroscope 简介 ① 什么是 Pyroscope? 开发人员通常需要查看生产应用程序中的性能瓶颈以确定问题的原因,为此通常需要可以通过日志和代码工具收集的信息。不幸的是,这种方法通常很耗时,并且不能提供有关潜在问题的足够详细信…

论文解读:Medical Transformer论文创新点解读

这篇文章其实就是基于Axial-DeepLab: Stand-Alone Axial-Attention forPanoptic Segmentation论文上进行的一些小创新 Stand-Alone Axial-Attention forPanoptic Segmentation论文解读: 论文解读:Axial-DeepLab: Stand-Alone Axial-Attention forPanop…

【TES720D-KIT】基于国内某厂商FMQL20S400全国产化ARM开发套件(核心板+底板)

板卡概述 TES720D-KIT是专门针对我司TES720D(基于国内某厂商FMQL20S400的全国产化ARM核心板)的一套开发套件,它包含1个TES720D核心板,加上一个TES720D-EXT扩展底板。 FMQL20S400是国内某厂商电子研制的全可编程融合芯片&#xf…

使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题

文章目录 一、 篇头二、 操作步骤2.1 编译AOSP AS工程文件2.2 将AOSP导入Android Studio2.3 切到Project试图2.4 等待index结束2.5 下载缺失的JDK 1.82.6 导入完成 三、 导入AS的好处3.1 本文案例演示源码编译错误AS对比同文件其余地方的调用AS错误提示依赖AS做错误修正 一、 篇…

逆向经历回顾总结

逆向经历回顾总结 一、前言 将自己的逆向经验做个总结,希望新手对逆向大方向能快速了解。高手有啥不一样的经验也可以讨论讨论。 二、个人经历 本人入行逆向全因一部韩剧“幽灵”,里面涉及渗透、病毒分析、取证的攻防对抗,我觉得对新手来说…

图片转HTML-screenshot-to-code

Github地址 https://github.com/abi/screenshot-to-code 在线站 Screenshot to Code 简介 这是一个基于GPT4开发的一个工具站,它可以基于截图生成站点代码,生成速度快且准确。

SpringBoot 究竟是如何跑起来的

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《SpringBoot》。🎯🎯 &…

【MySQL 索引】InooDB 索引实现

1 索引定义 维基百科对数据库索引的定义: 数据库索引是数据库管理系统(DBMS)中的一个排序数据结构, 以协助快速查询和更新数据库表中的数据。 MongoDB对索引的定义: 索引是一种特殊的数据结构, 以有序和便于遍历的形式存储数据集合中特定字段或一组字段…

基于ssm服装定制系统源码和论文

idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 环境: jdk8 tomcat8.5 开发技术 ssm 基于ssm服装定制系统源码和论文751 1.1项目研究的背景 困扰管理层的许多问题当中,服装定制将是广大用户们不可忽视的一块。但是管理好服装定制又面临很多麻…

EasyV易知微助力智慧城市未来趋势发展——数字孪生城市

“智慧城市的未来趋势就是数字孪生”——《基于数字孪生的智慧城市》 城市数字化管理、智慧城市和数字孪生城市的发展是相互促进、逐步深化的过程。 城市数字化管理作为起点,奠定了信息化、数据化的基础;而智慧城市则将数字城市管理进一步升级&#xff…

RabbitMQ死信队列详解

什么是死信队列 由于特定的**原因导致 Queue 中的某些消息无法被消费,**这类消费异常的数据将会保存在死信队列中防止消息丢失,例如用户在商城下单成功并点击支付后,在指定时间未支付时的订单自动失效死信队列只不过是绑定在死信交换机上的队…

Springboot集成支付宝支付---完整详细步骤

网页操作步骤 1.进入支付宝开发平台—沙箱环境 使用开发者账号登录开放平台控制平台 2.点击沙箱进入沙箱环境 说明:沙箱环境支持的产品,可以在沙箱控制台 沙箱应用 > 产品列表 中查看。 3.进入沙箱,配置接口加签方式 在沙箱进行调试前…