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

news2024/11/13 8:52:52

1、概述

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

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

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

2、动力学参数

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

startup_rvc
mdl_puma560
p560.dyn

Link 1::Revolute(std): theta=q, d=0, a=0, alpha=1.5708, offset=0
  m    = 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.792527

Link 2::Revolute(std): theta=q, d=0, a=0.4318, alpha=0, offset=0
  m    = 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.926991

Link 3::Revolute(std): theta=q, d=0.15005, a=0.0203, alpha=-1.5708, offset=0
  m    = 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.785398

Link 4::Revolute(std): theta=q, d=0.4318, a=0, alpha=1.5708, offset=0
  m    = 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.967060

Link 5::Revolute(std): theta=q, d=0, a=0, alpha=-1.5708, offset=0
  m    = 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.745329

Link 6::Revolute(std): theta=q, d=0, a=0, alpha=0, offset=0
  m    = 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.0000
    0.0016    0.0000    0.0000    0.1924    0.0000    0.0000
   -0.0004    0.0019    0.0019    0.0000    0.1713    0.0000
    0.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.coloradmin.cn/o/1304543.html

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

相关文章

ROB端口需求

对于一个 4-way 的超标量处理器来说,在重排序缓存(ROB)中每周期可以退休的指令个数应该是不小于四条的;如图给出的ROB,在那些最旧的指令中,有三条指令都已经变为了complete状态,那么在一个周期内就可以将这三条指令都退休。 要实现…

2023年【烟花爆竹储存】考试及烟花爆竹储存证考试

题库来源:安全生产模拟考试一点通公众号小程序 烟花爆竹储存考试参考答案及烟花爆竹储存考试试题解析是安全生产模拟考试一点通题库老师及烟花爆竹储存操作证已考过的学员汇总,相对有效帮助烟花爆竹储存证考试学员顺利通过考试。 1、【单选题】B级成品(…

Android---Kotlin 学习001

Kotlin 的诞生 2011年,JetBrains 宣布开发 Kotlin 编程语言,这门新语言可以用来编写在 Java 虚拟机上运行的代码,是 Java 和 Scale 语言之外的又一选择。2017年,Google 在赢得与 Oracle 的诉讼一年后,Google 宣布 Ko…

手动搭建koa+ts项目框架(基础篇)

文章目录 前言一、TS配置文件1、全局安装TypeScript2、项目根目录创建Typescript配置文件 二、项目初始化配置文件(package.json)1、初始化配置文件2、安装依赖 三、开启简单的服务API入口文件新增脚本 总结如有启发,可点赞收藏哟~ 前言 为什…

【玩转TableAgent数据智能分析】利用TableAgent进行教育数据分析

文章目录 前言九章云极(DataCanvas)介绍前期准备样例数据集体验1. 样例数据集-Airbnb民宿价格&评价 体验1.1 体验一1.2 体验二 教育数据的分析(TableAgent&ChatGLM对比)1. 上传文件2. 数据分析与对比2.1 分析一2.1.1 Tabl…

【腾讯云AI绘画】与AI绘画和解,和AI绘画共成长

前言 六月份的时候,买了腾讯AI绘画的资源包。可当通过API去使用AI绘画后,我顿时就被整破防了,于是写了一篇文章,算是无声控诉。被腾讯云AI绘画整破防了! 再回首,腾讯绘画不仅提供了API调用,还构…

伪原创API,一文快速了解伪原创API

伪原创API,听起来可能对许多人来说是一个陌生的术语。然而,在当今数字化时代,尤其是在内容创作和网络营销领域,伪原创API正逐渐崭露头角。在本文中,我将向您深入介绍伪原创API是什么,以及它如何在实际应用中…

中国大模型名录汇编(2023)

随着ChatGPT应用的现象级火爆,AI大模型正在迅速发展,引发了新一轮人工智能发展浪潮。大模型基座化趋势或将对人工智能产业链和全球市场竞争格局产生深刻影响。在技术方面,大模型在交互、理解和生成等方面表现出了显著的性能提升。在产业发展方…

Linux:符号和符号表

文章目录 什么是符号?什么是符号表?全局符号和本地符号1. 全局符号:symtab符号表 2. 本地符号: 符号在汇编阶段符号在链接阶段1.由模块 m 定义并能被其他模块引用的全局符号。2.由其他模块定义并被模块 m 引用的全局符号。3.只被模…

AI跨界学习,不再是梦!

大家好!今天给大家推荐的 GPTs 是【行业知识脉络】,帮助大家快速了解某个领域的脉络,并提供足够的学习资料和建议。 在AI时代,从小白到专家的1万小时定律即将失效,用少于1千小时掌握行业知识树和其核心概念是如何学习的…

Python Selenium3 自动化测试实战:构建高效测试项目

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 在当今软件开发领域,自动化测试成为…

310v转5v 1A 4G模块供电稳压芯片-AH8665

AH8665是一个高性能的稳压芯片,适用于将310V输入电压转换为5V 1A的输出电压,为4G模块提供稳定的电源供应。该芯片具有出色的稳定性能、高效转换效率和紧凑的外形尺寸,广泛应用于通信、物联网等领域。 AH8665芯片采用先进的低压差线性稳压器&…

【新手解答9】深入探索 C 语言:递归与循环的应用2

C语言的相关问题解答 写在最前面问题交流递归和循环if-else 和循环的结合 递归中的 if-else例子 递归是否形成循环?可以理解为特殊形式的循环递归示例:计算阶乘递归与循环的区别 结论 写在最前面 一位粉丝私信交流,回想起了当初的我C语言一题…

2012-12-12 下载ndk编译出so和可执行文件,放到android 真机运行,包含源码。

一、下载ndk链接NDK 下载 | Android NDK | Android Developers 二、解压ndk后得到下面的文件,里面包含ndk-build.cmd,这个是用来编译的。 三、Android.mk和C源码。完整源码下载路径https://download.csdn.net/download/qq_37858386/88622702 3.1 A…

SD-WAN是怎样实现SaaS性能优化的?

在数字化时代,SaaS应用已经成为许多企业不可或缺的核心业务工具。为实现高效的SaaS应用和卓越的用户体验,企业可考虑采用SD-WAN技术。通过就近访问、智能带宽管理、多路径冗余、高级安全和简化的管理监控,SD-WAN为企业带来显著价值。 1. 就近…

单域名https证书怎么申请

单域名https证书可以保护www和两个域名记录,如果保护的域名是子域名时,只能保护一个子域名。单域名https证书能够为网站提供加密的HTTPS连接,保护网站的数据安全。今天随SSL盾小编了解单域名https证书的申请。 1. 确定证书类型:根…

python自动下载网页中的文件,python 自动下载脚本

本篇文章给大家谈谈python自动下载文件 下载的不完整,以及python登录网站自动下载文件,希望对各位有所帮助,不要忘了收藏本站喔。 问题描述 Python自动下载文件,通用文件,包括但不限于压缩文件、图片等。 解决方法 一般…

隐语开源|周爱辉:隐语 TEE 技术解读与跨域管控实践

“隐语”是开源的可信隐私计算框架,内置 MPC、TEE、同态等多种密态计算虚拟设备供灵活选择,提供丰富的联邦学习算法和差分隐私机制 开源项目 github.com/secretflow gitee.com/secretflow 11月25日,「隐语开源社区 Meetup西安站」顺利举办&…

【动态规划】03斐波那契数列模型_最小花费爬楼梯_C++(easy1)

题目链接:leetcode使用最小花费爬楼梯 目录 题目解析: 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析: 题目让我们求达到楼梯顶部的最低花费. 由题可得: cost[i] 是从楼梯第 i 个…

【EMQX】通过EMQX webhook实现转发消息到Python web服务器

EMQX webhook消息转发Web服务器 一、前言二、实现1、EMQX服务器搭建EMQX下载、安装、启动 2、本地Web服务搭建创建Flask项目代码 3、EMQX中创建webhook数据桥接4、EMQX中创建数据转发规则 三、效果 一、前言 需求:获取设备通过mqtt协议发送过来的数据并将数据保存到…