机器人控制系列教程之动力学建模(2)

接昨天的推文:https://editor.csdn.net/md/?articleId=139991958 ,动力学的求解通常是个相对比较复杂的过程,但现在基本上不用人工来推算求解各种公式和求解过程了,大家只需要知道其中的步骤即可,现代对于动力学问题的求解大致可以分为:数字化建模、仿真软件建模。数字化建模是指通过编程软件,如:Python、MATLAB等,可以快速搭建机器人的数字化模型,也称为动态模型,该方法对于新手不是很友好,前期需要多编程语言有一定基础,但是可以建立较为精确的模型;对于后期设计对应的控制系统也比较友好,模型接口便于调用。仿真软件建模,多体动力学的仿真软件比较多,如:ADAMS、SAMCEF、RecurDyn、SIMPACK(笔者在读研期间曾开发了一套基于Adams的机器人仿真教程可见:,最近在做活动都比较优惠哟!),这类软件得益于良好的GUI交互界面,可以快速的建立动力学模型,只要设置好各个部件的动力学参数也可以搭建出较为精确的动力学模型,但是对于基于该模型的控制系统设计不是很友好,这种软件中的接口较少,往往需要借助其他软件进行,而两个软件的相结合就会出现不可预知的BUG。除此之外,像ANSYS这类软件,可以将机器人的各个构件材料参数更加的精细化,但也带来了计算量巨幅增加,普通电脑计算缓慢,容易出现求解结果不收敛现象,笔者不是很推荐。下面我将会以MATLAB的机器人工具箱Robotics Toolbox为例来搭建机器人动力学模型,Robotics Toolbox安装教程见:

MATLAB工具箱Link类说明

Link类将保存与机器人关节和链接相关的所有信息,如运动学、参数、刚体惯性参数、电机和传动参数。

构造函数

Link # 通用构造函数。
Prismatic #标准型D-H参数构建的平移副连杆
PrismaticMDH #改进D-H参数构建的平移副连杆。
Revolute #标准D-H参数构建的旋转副连杆。
RevoluteMDH #改进D-H参数构建的旋转副连杆

信息/显示方法

display #以可读的形式打印Link参数
dyn #显示Link的动态参数
type #关节类型:'R'或'P

属性

运动学参数
theta     #关节角度。
d         #链接偏移。
a         #连杆长度。
alpha     #连杆扭转角。
Jointtype #运动副类型,转动为R;平移为P。
mdh       #D-H参数类型,标准D-H为0,否则为1。
offset    #关节变量偏移。
qlim      #关节变量限制,[min max].
动力学参数
m  #质量       
r  #连杆重心位置
I  #转动惯量
B  #粘性摩擦系数(马达相关)
Tc #库仑摩擦系数
执行机构参数
G  #传动比
Jm #电机惯性

串联机器人动力学模型

各连杆D-H参数及动力学参数定义如下:

clear,clc,close all;
deg = pi/180;
%% 建立机器人DH参数,初始状态为竖直状态
L1=Link('d',0.16250,'a',0,'alpha',0,'modified',...
        'm',5.6431, ...
        'r',[0.0002 0.0002 0.1264], ...
        'I',[0.1183 -0.0001 0.0001; ...
            -0.0001 0.1182 0.0001; ...
            0.0001 0.0001 0.0140], ...
        'B',1.48e-3,...
        'Tc',[0.395 -0.435], ...
        'G',81, ...
        'Jm',2.2e-4, ...
        'qlim',[-180 180]*deg);

L2=Link('d',0,'a',0,'alpha',pi/2,'offset',pi/2,'modified',...
        'm',5.0478, ...
        'r',[0.0062 0.0001 0.1080], ...
        'I',[0.1183 -0.0001 0.0001; ...
            -0.0001 0.1182 0.0001; ...
            0.0001 0.0001 0.0140], ...
        'B',0.817e-3,...
        'Tc',[0.126 0.071], ...
        'G',121, ...
        'Jm',2.2e-4, ...
        'qlim',[-145,65]*deg);

L3=Link('d',0,'a',0.425,'alpha',0,'modified', ...
        'm',5.7542, ...
        'r',[-0.0131 0.0001 0.2402], ...
        'I',[0.4263 0.0000 -0.0072; ...
            0.0000 0.4334 0.0001; ...
            -0.0072 0.0001 0.0191], ...
        'B',1.38e-3,...
        'Tc',[0.132 -0.105], ...
        'G',81, ...
        'Jm',2.2e-4, ...
        'qlim',[-65,220]*deg);

L4=Link('d',0.12670+0.0066,'a',0.39225,'alpha',0,'offset',pi/2,'modified', ...
        'm',3.0870, ...
        'r',[-0.0850 0.0003 0.1540], ...
        'I',[0.0821 0.0000 -0.0314; ...
            0.0000 0.1257 0.0001; ...
            -0.0314 0.0001 0.1540], ...
        'B',71.2e-6,...
        'Tc',[11.2e-3 -16.9e-3], ...
        'G',81, ...
        'Jm',2.2e-4, ...
        'qlim',[-180,180]*deg);

L5=Link('d',0.09970,'a',0,'alpha',pi/2,'modified', ...
        'm',2.0459, ...
        'r',[0.0001,0.0002,0.0982], ...
        'I',[0.0235,0.0000,-0.0002; ...
             0.0000,0.0253,0.0000; ...
             -0.0002,0.0000,0.0045], ...
        'B',82.6e-3,...
        'Tc',[9.26e-3, -14.5e-3], ...
        'G',81, ...
        'Jm',2.2e-4, ...
        'qlim',[-135,135]*deg);

L6=Link('d',0.09960-0.0045,'a',0,'alpha',-pi/2,'modified', ...
        'm',2.6317, ...
        'r',[-0.0111,-0.0003,0.1366], ...
        'I',[0.0684,0.0000,0.0001; ...
             0.0000,0.0696,-0.0001; ...
             0.0001,-0.0001,0.0047], ...
        'B',36.7e-6,...
        'Tc',[3.96e-3, -10.5e-3], ...
        'G',51, ...
        'Jm',2.2e-4, ...
        'qlim',[-180,180]*deg);

robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','TechM');

模拟机器人关节空间从初始状态运动到[pi/2 -pi/2 pi/6 pi/12 0 0],相关关节空间的轨迹规划请见:

qz = [0 0 0 0 0 0];    %初始位姿
qn = [pi/2 -pi/2 pi/6 pi/12 0 0];    %末端位姿
% 轨迹规划
t=[0:0.01:2];
g=jtraj(qz,qn,t);
[q,qd,qdd]=jtraj(qz,qn,t);
plot(robot,q,'trail','b-')    %图形演示

figure
i=1:6;
subplot(2,2,1);
qplot(q(:,i));grid on;title('位置');ylabel('角度(rad)');%绘制每个关节位置
subplot(2,2,2);
qplot(qd(:,i));grid on;title('速度');ylabel('角速度(rad/s)');%绘制每个关节速度
subplot(2,2,3);
qplot(qdd(:,i));grid on;title('加速度');ylabel('角加速度(rad/s2)');%绘制每个关节加速度
Q = robot.rne(q,qd,qdd);%获得每个时间点所需要的关节力矩
subplot(2,2,4)
qplot(t,Q);grid on;title('力矩');ylabel('力矩(N*m)');

规划动画

各个关节的角度、速度、角加速度的变化情况如下:

Link其他常见使用方法

显示Link运动学参数
robot.links(1).dyn

显示Link动力学参数
robot.display()

Link的变换矩阵
robot.links(1).A(pi/6)


链路变换矩阵T = L.A(Q)是一个SE3对象,表示当链路变量Q为Denavit-Hartenberg参数THETA(转动)或D(移动)时链路帧之间的变换。

  • 标准D-H参数,从前序坐标系转换到当前坐标系。
  • 改进D-H参数,从当前坐标系到后序坐标系。

往期推荐

在这里插入图片描述

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

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

相关文章

uni-app (通过HBuilderX 和 VS Code 开发)详细连接过程教学。

使用 HBuilderX 创建 uni-app 项目 并编译到微信开发者工具。 uni-app 支持两种方式创建项目: 通过 HBuilderX 创建 通过命令行创建 首先我们需要先下载HBuilderX 下载链接地址:DCloud - HBuilder、HBuilderX、uni-app、uniapp、5、5plus、mui、wap2…

postman忘记密码发邮件,久久收不到怎么办?

根本原因是需要FQ!!! 重置密码的链接: https://identity.getpostman.com/trouble-signing-in 找个平台或者软件,访问这个链接即可完成修改密码后续操作,不用再傻傻等着验证码了。 有需要协助的朋友也可私信…

uniapp标题水平对齐微信小程序胶囊按钮及适配

uniapp标题水平对齐微信小程序胶囊按钮及适配 状态栏高度胶囊按钮的信息计算顶部边距模板样式 标签加样式加动态计算实现效果 t是胶囊按钮距离的top h是胶囊按钮的高度 s是状态栏高度 大概是这样 状态栏高度 获取系统信息里的状态栏高度 const statusBarHeight uni.getSy…

开源“卖货主播”AI大模型——拳打李佳琦、脚踢小杨哥、人人都能当销冠?

开源“卖货主播”AI大模型——拳打李佳琦、脚踢小杨哥、人人都能当销冠? 刚刚在知名同性交友平台发现了一个或许能让你致富的开源项目——“Streamer-Sales 销冠”。 正如其名字所言,这是一个卖货主播LLM大模型,旨在让你成为销冠。 https:/…

换新手机了,旧手机的微信聊天记录怎么办?两个方法,轻松迁移

618买的新手机终于到手,但你是否在为旧手机上的微信聊天记录感到困扰?不用担心,迁移过程其实非常便捷! 在本文中,我将为你展示2个简单的步骤,让你轻松迁移微信聊天记录。无论你更换新手机的原因是什么&…

财务RPA案例研究——分析成功的财务RPA实施案例

现代社会正加速向数字时代转型,数字技术以崭新的模式全面融入各行业领域。为顺应新一轮科技革命和产业变革趋势,越来越多的企业不断深化应用大数据、云计算、人工智能等新一代信息技术,积极迎接数字化转型,而RPA技术由于能够以自动…

SuperMap GIS基础产品FAQ集锦(20240627)

一、SuperMap iDesktopX 问题1:请问桌面端二三维数据对接处理,尤其是三维数据,处理自动化有没有已有的模型或者是效果示例? 11.2.0 【解决办法】【三维数据】-【流程操作】里有三维数据处理自动化的算子 问题2:请问…

LSTM理解

目录 一、LSTM的本质 二、LSTM的原理 三、LSTM的应用 本文将从LSTM的本质、LSTM的原理、LSTM的应用三个方面,带您一文搞懂长短期记忆网络Long Short Term Memory | LSTM。 一、LSTM的本质 RNN 面临问题:RNN(递归神经网络)在处理…

【网络安全的神秘世界】SQL注入漏洞(上)

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 本章知识使用的靶场:DVWA 一、漏洞简介 SQL:结构化查询语言,是一种特殊的编程语言&#…

项目经理必读:三步走实现项目高效管理

一个项目的成功往往取决于项目管理能力的高低。若管理不当,易导致团队成员间的推诿和抱怨,且项目团队还可能面临成员对目标不明确、信息不透明、进度难以跟踪等问题。作为项目经理,掌握有效的项目管理策略至关重要。 一、精细化的目标拆解 …

瑶池数据库SQL-问题二的解决方案

瑶池数据库SQL-问题二的解决方案 为什么选问题二问题二准备工作解决方案第一步第二步初步尝试再次尝试主表自关联查询满足条件数据 解题感受 为什么选问题二 个人没有详细的看三个题目的具体内容,只是看了三个题目的题目名称, 最后觉得问题二比较有意思…

本安防爆手机为什么能在石油化工行业使用

本安防爆手机专为石油化工行业等易燃易爆环境设计,具备严格的防爆安全标准和环境适应性,确保在石油化工厂的作业安全使用。这些手机不仅具备普通手机的通讯功能,更能有效防止电火花等潜在点火源的产生,为石油化工工作人员提供可靠…

阿里1688商家数据采集软件

大镜山阿里1688商家数据采集一款采集阿里巴巴1688.com商家数据的软件,采集的数据包括店铺名称、联系人姓名、手机号码等。 一、大镜山阿里1688商家数据采集特色 — 大镜山阿里1688商家数据采集一款采集阿里巴巴1688.com商家数据的软件,采集的数据包括店…

【JavaScript】一键入门

目录 一、JS起源 二、JS特点 三、JS组成部分 四、JS引入方式 一、JS起源 Java Script是由网景公司的Live Script发展而来的一种运行在客户端浏览器上的脚本语言,可以实现网页如文本内容、数据动态变化和动画特效等即浏览器与用户交互的这种体验。 二、JS特点 …

强化学习详解:理论基础与核心算法解析

本文详细介绍了强化学习的基础知识和基本算法,包括动态规划、蒙特卡洛方法和时序差分学习,解析了其核心概念、算法步骤及实现细节。 关注TechLead,复旦AI博士,分享AI领域全维度知识与研究。拥有10年AI领域研究经验、复旦机器人智能…

MySQL的安装与配置

MySQL提供安装包和压缩包两种安装方式,安装包是以.msi作为后缀名的二进制分发文件,压缩包是以.zip为后缀的压缩文件。安装包的安装只要双击安装文件,然后按照提示一步步安装就可以了,属于“傻瓜”式安装;压缩包的安装需…

成都百洲文化传媒有限公司专业电商服务的典范

在电商风起云涌的时代,成都百洲文化传媒有限公司凭借其深厚的行业经验和独特的创新思维,成为了众多品牌电商之路上的得力助手。今天,就让我们一起走进成都百洲文化传媒,看看他们是如何在电商领域乘风破浪,助力品牌实现…

新能源、新智造、新技术、新未来​ 2024常州国际新能源汽车产业博览会​ 9月20-22日盛大举行!

深入贯彻党的二十大关于制造强国建设、推动汽车产业高端化、制造化、绿色化发展的战略部署,构建新发展格局、推动高质量发展的内在要求。在“双碳”政策背景下,常州市紧扣“国际化智造名城、长三角中轴枢纽”城市定位,奋力推进“532”发展战略…

MyBatis源码分析--一级缓存、二级缓存原理

前言: 有点项目经验的朋友都知道缓存的重要性是不言而喻的,不仅仅我们在开发项目业务功能的时候使用了各种缓存,框架在设计的时候也有框架层面的缓存,尤其在查询多的场景下,缓存可以大大的减少数据库访问,…

valgrind调试c/c++内存问题:非法地址访问_内存泄漏_越界访问

1.valgrind命令 调试内存问题: valgrind --leak-checkfull 更新详细的显示: valgrind --leak-checkfull --show-leak-kindsall valgrind提示信息汇总 内存泄漏 lost in loss record 丢失记录 , 内存泄漏实例[[#2.内存泄漏–不完全释放内存|实例链接]]段错误 Process termina…