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

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:由于物体表面之间的黏性力而产生的摩擦力。比如关节与润滑油的摩擦,其摩擦力通常跟速度是非线性关系,只有物体的运动速度比较小的时候,就近似地看作其是关于速度线性的。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC-02

SpringMVC-02 SSM 框架集成与测试环境配置添加源代码 SSM 框架集成与测试 环境配置 IDEA 下创建项⽬ 创建Maven对应的Web项⽬ 配置 pom.xml 2.1. 修改 JDK 版本 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><mav…

【Matlab】如何使用MATLAB可视化二重积分(附完整MATLAB代码)

可视化二重积分 前言正文完整代码代码实现可视化结果 前言 二重积分是指在二维空间中对函数进行积分。二重积分的公式如下&#xff1a; ∫ a b ∫ c d f ( x , y ) d x d y ∫_a^b ∫_c^d f(x, y) dx dy ∫ab​∫cd​f(x,y)dxdy 其中&#xff0c; a a a 和 b b b 是 x x x…

maven打包插件maven-jar-plugin与spring-boot-maven-plugin

maven几种打包插件介绍 文章目录 &#x1f50a;1.spring-boot-maven-plugin打包后效果 &#x1f4d5;2.maven-jar-plugin打包后效果&#x1f58a;️最后总结 &#x1f50a;1.spring-boot-maven-plugin <plugins><plugin><groupId>org.springframework.boot&…

每日一题SQL

以下题目来源微信公众号【SQL数据库开发】 1、编写一个 SQL 查询来实现分数排名。如果两个分数相同&#xff0c;则两个分数排名&#xff08;Rank&#xff09;相同。请注意&#xff0c;平分后的下一个名次应该是下一个连续的整数值。换句话说&#xff0c;名次之间不应该有“间隔…

HTML5+CSS3+JS小实例:自适应瀑布流布局

实例:自适应瀑布流布局 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&quo…

九、 SpringBoot项目部署、项目打包、运行

5.5.1 项目打包 步骤1&#xff1a; 添加项目的pom.xml插件&#xff1b;在pom.xml要显式的加入插件spring-boot-maven-plugin&#xff0c;否则无法产生 jar 清单文件&#xff0c;导致打出来的 jar 无法使用命令运行&#xff1b; <build> <plugins> <!-- 打j…

2023 re:Invent使用 PartyRock 和 Amazon Bedrock 安全高效构建 AI 应用程序

前言 本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 “Your Data, Your AI, Your Future.&#xff08;你的数据&#xff0c;你的AI&…

接口自动化测试框架搭建

一、原理及特点 参数放在XML文件中进行管理用httpClient简单封装一个httpUtils工具类测试用例管理使用了testNg管理&#xff0c;使用了TestNG参数化测试&#xff0c;通过xml文件来执行case。测试报告这里用到第三方的包ReportNG 项目组织用Maven 二、准备 使用工具&#xff1…

2023-12-14 使用Qt画一条曲线(AI辅助)

点击 <C 语言编程核心突破> 快速C语言入门 使用Qt画一条曲线 前言一、Qchart简介二、代码总结 前言 要解决问题: 有一个函数, 生成一些点, 想画一条曲线. 想到的思路: 这个用Qchart比较简单. 其它的补充: 需要稍许配置 一、Qchart简介 QChart是Qt中的一个图表控件&a…

小白菜QQ云端机器人源码-去除解密授权

小白菜QQ云端机器人源码分享&#xff1a;解密授权学习版已去除 这款源码是专为群机器人爱好者设计的&#xff0c;它基于挂机宝机器人框架构建的网页站点。 用户可以通过网页登录QQ账号至挂机宝框架中&#xff0c;无需通过机器人实现登录。 而且&#xff0c;该源码解决了一个…

力扣 | 437. 路径总和 III

437. 路径总和 III mport java.util.ArrayList; import java.util.List;/*** int的取值范围&#xff1a;* -2^31 ~ 2^31-1* <p>* -2147483648 ~ 2147483647&#xff08;约等于10的9次方&#xff09;* <p>* long long的取值范围&#xff1a;* -2^63 ~ (2^63-1&…

HBase 详细图文介绍

目录 一、HBase 定义 二、HBase 数据模型 2.1 HBase 逻辑结构 2.2 HBase 物理存储结构 ​2.3 数据模型 2.3.1 Name Space 2.3.2 Table 2.3.3 Row 2.3.4 Column 2.3.5 Time Stamp 2.3.6 Cell 三、HBase 基本架构 架构角色 3.1 Master 3.2 Region Server 3.3 Zo…

弹性搜索引擎Elasticsearch:本地部署与远程访问指南

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装…

有教师资格证就可以当老师吗

我是一名在教育事业中摸爬滚打了多年的老鸟&#xff0c;最近看到很多人在讨论一个话题&#xff1a;有教师资格证就能当老师吗&#xff1f;今天我就来给大家科普一下。 我们得明白教师资格证是什么。教师资格证是国家教育部门为了规范教育行业&#xff0c;提高教育质量而设立的一…

详解—C++右值引用

目录 一、右值引用概念 二、 左值与右值 三、引用与右值引用比较 四、值的形式返回对象的缺陷 五、移动语义 六、右值引用引用左值 七、完美转发 八、右值引用作用 一、右值引用概念 C98中提出了引用的概念&#xff0c;引用即别名&#xff0c;引用变量与其引用实体公共…

多线程 (下) - 学习笔记

常见锁策略 乐观锁和悲观锁 悲观锁 总是假设最坏的情况, 每次去拿数据的时候都会认为会被别人修改, 因此会上锁, 防止数据在使用过程中被别的线程修改, 乐观锁 假设数据一般情况下不会产生并发冲突,因此在拿数据,操作数据的过程中不加锁, 而在数据进行提交更新的时候, 才会正…

react经验7:高亮关键字

预期效果&#xff1a; 实现原理 将需要高亮的关键词做成正则表达式 new RegExp((${word}), "gi")使用上述正则表达式切割目标字符串 origin.split(new RegExp((${word}), "gi"))切割结果会包含正则匹配到的词 过滤掉空字符&#xff0c;并对关键词包裹…

使用代理IP时的并发请求是什么意思?

很多做过数据采集的技术们应该都有所了解&#xff0c;在选择代理IP时会有一个并发请求的参数&#xff0c;这个参数是什么意思呢&#xff1f;可能有很多新手不是很了解&#xff0c;其实代理IP的并发请求就是指同时发送多个请求到目标服务器&#xff0c;以提高请求的效率和速度。…

LeetCode刷题--- 二叉树的所有路径

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 【 http://t.csdnimg.cn/yUl2I 】 【C】 【 http://t.csdnimg.cn/6AbpV 】 数据结构与算法 【 http://t.csdnimg.cn/hKh2l 】 前言&…

详解高精度数字模拟混合信号温度传感芯片的工作原理及应用

高精度温度传感芯片是利用物质各种物理性质随温度变化的规律把温度转换为电量的传感芯片。这些呈现规律性变化的物理性质主要有体。温度传感芯片是温度测量仪表的核心部分&#xff0c;品种繁多。按测量方式可分为接触式和非接触式两大类&#xff0c;按照传感器材料及电子元件特…