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

news2024/11/18 14:56:57

接昨天的推文: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参数,从当前坐标系到后序坐标系。

往期推荐

在这里插入图片描述

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

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

相关文章

51单片机STC8H8K64U通过RA8889/RA8876如何控制彩屏(源码下载)

【硬件部份】 一、硬件连接实物: STC8H系列单片机不需要外部晶振和外部复位,在相同的工作频率下,速度比传统的8051单片机要快12倍,具有高可靠抗干扰的优秀特性,与瑞佑的RA8889/RA8876控制芯片刚好可以完美搭配用于工…

java易错题型(复习必看)

java易错题型: 下列符号中,哪个用于分隔throws关键字抛出的多个异常 逗号, Java中用来声明一个方法可能抛出某种异常的关键字是throw 对于catch子句的排列,下列哪种是正确的:子类异常在先,父类异常在后&a…

鸿蒙NEXT开发知识:工具常用命令—ohpm config

设置ohpm用户级配置项。 命令格式 ohpm config set <key> <value> ohpm config get <key> ohpm config delete <key> ohpm config list 说明 配置文件中信息以键值对<key> <value>形式存在。 功能描述 ohpm 从命令行和 .ohpmrc 文件中…

Android SurfaceFlinger——动画进程销毁(十七)

在动画播放完成后&#xff0c;对动画相关资源释放的同时还需要销毁动画进程。这里我们就来分析一下动画进程的销毁流程。 一、动画进程销毁 动画进程的销毁一般是在桌面进程准备显示的时候&#xff0c;而桌面准备显示是在桌面 Activity 的 Resume 生命周期&#xff0c;我们来看…

江科大—读写内部闪存FLASH读取芯片ID

读写内部闪存FLASH 右下角是OLED&#xff0c;然后左上角在PB1和PB11两个引脚&#xff0c;插上两个按键用于控制。下一个代码读取芯片ID&#xff0c;这个也是接上一个OLED&#xff0c;能显示测试数据就可以了。 STM32-STLINK Utility 本节的代码调试&#xff0c;使用辅助软件…

Sparse4Dv2

Sparse4D: Multi-view 3D Object Detection with Sparse Spatial-Temporal Fusion 相关内容&#xff1a;总览&#xff0c;Sparse4D v1&#xff0c;Sparse4D v3&#xff0c; 单位&#xff1a;地平线(Sparse4D v1 原班人马) GitHub&#xff1a;https://github.com/HorizonRobo…

计算机网络之数据通信原理(中)

上节内容传送口&#xff1a;数据通信原理基础 1.数据传输方式 1.1并行传输 并行传输: 字符编码的各个比特同时传输 特点&#xff1a; 一个比特时间内可传输一个字符&#xff0c;传输速度快&#xff0c;每个比特传输要求一个单独的信道支持&#xff0c;通信成本高&#xf…

基于单片机和 Arduino 平台的六自由度可控机械手臂

摘 要 : 为了降低机械手臂的设计开发难度 &#xff0c; 并使之尽早地投入应用 &#xff0c; 设计一种基于单片机和 Arduino 平台的六自由度可控机械手臂 。提出六自由度可控机械手臂的控制方案&#xff0c; 给出机械手臂控制系统的结构框图 。 详细设计六自由度可控机械手臂…

《UDS协议从入门到精通》系列——图解0x35:请求上传

《UDS协议从入门到精通》系列——图解0x35&#xff1a;请求上传 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 三、通信示例 Tip&#x1f4cc;&#xff1a;本文描述中但凡涉及到其他UDS服务的&#xff0c;将陆续提供链接跳转方式以便快…

Power BI可视化表格矩阵如何保持样式导出数据?

故事背景&#xff1a; 有朋友留言询问&#xff1a;自己从Power BI可视化矩阵表格中导出数据时&#xff0c;导出的表格样式会发生改变&#xff0c;需要线下再手动调整&#xff0c;重新进行透视组合成自己想要的格式。 有没有什么办法让表格导出来跟可视化一样&#xff1f; Po…

pd虚拟机 Parallels Desktop 19 for Mac 破解版小白安装使用指南

Parallels Desktop 19 for Mac 乃是一款适配于 Mac 的虚拟化软件。它能让您在 Mac 计算机上同时运行多个操作系统。您可借此创建虚拟机&#xff0c;并于其中装设不同的操作系统&#xff0c;如 Windows、Linux 或 macOS。使用 Parallels Desktop 19 mac 版时&#xff0c;您可在 …

编译正则表达式模式re.compile

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 编译正则表达式模式 re.compile [太阳]选择题 根据给定的Python代码&#xff0c;哪个选项是正确的&#xff1f; import re pattern re.compile(r\d) print(f"【显示】pattern{patter…

eBPF 如何塑造 Linux 和平台工程的未来

当Docker 于 2013 年突然出现时&#xff0c;Linux 容器似乎一夜成名。但容器&#xff08;以及微服务和Kubernetes&#xff09;的演变实际上是基于 Linux 操作系统中的内核原语而进行的&#xff0c;历时数十年。 Docker 使用这些原语&#xff08;即 cgroups 和命名空间&#xf…

前端框架中的前端安全性(Front-end Security)

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端框架中的前端安全性&#xff08;Front-end Security&#xff09;1. 引言2. 常见的前端安全威胁2.1 跨站脚本攻击&#xff08;XSS&#xff09;2.1.1 防御措施 2.2 跨站请求伪造&#xff08;CSRF&#xff09;2.2.1 防御措施 2.3 …

YOLOv8改进 | 添加注意力篇 | 结合Mamba注意力机制MLLA助力YOLOv8有效涨点(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是结合号称超越Transformer架构的Mamba架构的最新注意力机制MLLA&#xff0c;本文将其和我们YOLOv8进行结合&#xff0c;MLLA&#xff08;Mamba-Like Linear Attention&#xff09;的原理是通过将Mamba模型的一些核心设计融入线性注意力…

【毛毛虫案例-拖拽 Objective-C语言】

一、这个毛毛虫案例啊,是这个样子的, 1.首先,你这个脑袋,这个蓝色的脑袋,它是可以拽起来的, 下面的红色球,一个一个中心点之间,相互去附着, 其他的红色球,是拖不起来的, 只有这个蓝色的东西,可以拽起来,这个蓝色的View,还有重力, 这个蓝色的View,我在拖动它…

Spring底层原理之proxyBeanMenthod实例 动态代理 反射 Bean的拦截

proxyBeanMenthod 假设我们要进行一个系统的二次开发 然后第一次开发我们实用的是XML声明bean 二次开发的时候要用注解 我们如何把bean都加载上来呢 我们首先创建一个全新的配置类 package com.bigdata1421.config;public class SpringConfig32 { } 我们创建一个APP 加载…

R语言数据分析案例37-旅游景点聚类分析

一、研究背景 近年来&#xff0c;随着旅游业的迅猛发展&#xff0c;旅游景点的竞争日益激烈。如何在众多景点中脱颖而出&#xff0c;吸引更多游客&#xff0c;成为各大景点管理者关注的焦点。通过对旅游景点进行深入的数据分析&#xff0c;可以帮助管理者更好地了解景点的优势…

HashMap第5讲——resize方法扩容源码分析及细节

put方法的源码和相关的细节已经介绍完了&#xff0c;下面我们进入扩容功能的讲解。 一、为什么需要扩容 这个也比较好理解。假设现在HashMap里的元素已经很多了&#xff0c;但是链化比较严重&#xff0c;即便树化了&#xff0c;查询效率也是O(logN)&#xff0c;肯定没有O(1)好…

最新MDYS14源码影视视频网站模板/苹果CMS系统/附搭建教程

最新MDYS14源码影视视频网站模板/苹果CMS系统/附搭建教程 基本介绍&#xff1a; 1、后台增加自定义参数&#xff0c;对应会员升级页面&#xff0c;以及积分充值 2、视频&#xff0c;演员&#xff0c;专题&#xff0c;收藏&#xff0c;会员系统模块齐全&#xff0c;支持子分类…