当前位置: 首页 > news >正文

机器人控制系列教程之动力学建模(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参数,从当前坐标系到后序坐标系。

往期推荐

在这里插入图片描述

相关文章:

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

接昨天的推文:https://editor.csdn.net/md/?articleId139991958 ,动力学的求解通常是个相对比较复杂的过程,但现在基本上不用人工来推算求解各种公式和求解过程了,大家只需要知道其中的步骤即可,现代对于动力学问题的…...

Golang | Leetcode Golang题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; func numIslands(grid [][]byte) int {res : 0for i : 0; i < len(grid); i {for j : 0; j < len(grid[i]); j {if grid[i][j] 1 {resdfs(grid, i, j)}}}return res }func dfs(grid [][]byte, r, c int) {h, w : len(grid), len(gri…...

Linux系统启动流程

init程序类型&#xff1a; ①、SysV&#xff1a;init&#xff0c;centos 5之前&#xff0c;配置文件/etc/init.d/ ②、Upstart: init&#xff0c;centos 6&#xff0c;配置文件/etc/init.d/ /etc/init/ ③、Systemd:Systemd&#xff0c;centos 7&#xff0c;配置文件/usr/li…...

Vue 学习之 axios

目录 执行安装命令&#xff1a;npm install axios 使用的时候导入 axios以data&#xff0c;params&#xff0c;headers传参方式的区别 axios封装 是一个基于 promise 的 网络请求库&#xff0c;作用于浏览器和 node.js 中。使用Axios可以在前端项目中发送各种方式的HTTP请求…...

Python学习笔记17 -- 猜数字小游戏2

目录 一、功能函数 1、说明函数 -- 对游戏玩法及设置进行说明 2、答案函数 -- 生成答案 3、猜测函数 -- 让玩家进行猜测 4、对照函数 -- 将答案和猜测进行对照 4.1 A函数 4.2 B函数 5、结果函数 -- 判断得到结果或继续猜测 6、时间函数 -- 判断一局游戏所用时间 7、打…...

【系统架构设计师】七、信息安全技术基础知识(信息安全的概念|信息安全系统的组成框架|信息加解密技术)

目录 一、信息安全的概念 1.1 信息安全的基本要素和范围 1.2 信息存储安全 1.3 网络安全 二、信息安全系统的组成框架 2.1 技术体系 2.2 组织机构体系 2.3 管理体系 三、 信息加解密技术 3.1 数据加密 3.2 对称加密技术 3.3 非对称加密算法 3.4 数字信封 3.5 信…...

CMMM Plus+ Calculus Update 超级游戏大作 游戏说明

资源链接 Scratch超级生命模拟游戏&#xff1a;CMMMPlusCalculusUpdate.sb3资源-CSDN文库 关卡编辑器 ◽️使用 WASD 移动视图。 ◽️LMB 放置单元格。 ◽️Space LMB 删除单元格。Ctrl Space LMB 删除所有相同类型的单元格。 ◽️Q / E 旋转单元格。 ◽️Z / X 在单元格类…...

Java OA系统任务协作模块

以下是一篇关于构建高效且功能丰富的OA系统任务协作模块的博客文章&#xff0c;采用了Spring Boot、Spring Data JPA和React等主流技术。文章不仅展示了项目的基本实现&#xff0c;还介绍了如何优化代码和增加新的功能&#xff0c;以提升系统的性能和用户体验。 --- ## 构建高…...

深入解析Maven常用命令

目录 什么是 MavenMaven 的安装与配置Maven 项目结构Maven 常用命令 mvn cleanmvn compilemvn testmvn packagemvn installmvn deploymvn sitemvn dependencymvn help 总结 什么是 Maven Maven 是由 Apache 软件基金会开发的一个项目管理和构建工具。它基于项目对象模型&…...

【Docker】镜像

目录 1. 镜像拉取 2. 镜像查询 3. 镜像导出 4. 镜像上传 5. 镜像打标签 6. 镜像上推 7. 镜像删除 8. 镜像运行及修改 8.1 在registry 节点运行 mariadb 镜像&#xff0c;将宿主机 13306 端口作为容器3306 端口映射 8.2 查看容器ID 8.3 进入容器 8.4 创建数据库xd_d…...

力扣最新详解5道题:两数之和三数之和四数之和

目录 一、查找总价格为目标值的两个商品 题目 题解 方法一&#xff1a;暴力枚举 方法二&#xff1a;对撞指针 二、两数之和 题目 题解 方法一&#xff1a;暴力枚举 方法二&#xff1a;哈希表法 三、三数之和 题目 题解 方法一&#xff1a;排序暴力枚举set去重 …...

通讯:单片机串口和电脑通讯

目录 1.串口输出数据到电脑 硬件部分 串口输出数据到电脑的软件软件部分&#xff1a; 相关问题&#xff1a; 2.单片机串口--485--485转USB--电脑 串口&#xff0c;芯片&#xff0c;转换器&#xff0c;设备之间的通讯的接线&#xff0c;都是要TX--RX, RX--TX 交叉连接。 单…...

ubuntu22.04 设置双屏

一 概述 最近把ubuntu18.04 升级到 22.04 双屏显示出来问题&#xff0c;在此记录下解决问题方案。二 解决方案 1 使用命令查看能检测到显示器 xrandr根据输出的信息&#xff0c;我们可以知道 HDMI-0 与 DP-0 是connected 。检测到两个显示器 2 设置输出显示器分辨率 由于我…...

【FPGA-常见问题及解决方案】

1、VIVADO的License无法加载&#xff1a;license文件必须在英文路径&#xff1b; 2、例程代码路径不能过长&#xff0c;也不允许有中文路径&#xff01;&#xff01;&#xff01; 3、明明加载了license&#xff0c;license也正确&#xff0c;例程无法完成综合&#xff1a;这种情…...

【第3章】MyBatis-Plus持久层接口之Service Interface(上)

文章目录 前言一、save1. 示例&#xff08;save&#xff09;2. 示例&#xff08;saveBatch&#xff09;3. 示例&#xff08;saveBatch 指定批次大小&#xff09; 二、saveOrUpdate1.示例&#xff08;saveOrUpdate&#xff09;2.示例&#xff08;saveOrUpdateBatch&#xff09;3…...

Nodemon的入门及使用

nodemon 是一个工具&#xff0c;通过在检测到目录中的文件更改时自动重新启动 Node.js 应用程序来帮助开发基于 Node.js 的应用程序。它非常适合在开发环境中使用。以前&#xff0c;我们开发一个 Node 后端服务时&#xff0c;每次更改文件&#xff0c;都需要手动重启服务才能生…...

cesium 实现三维无人机航拍过程实景效果

需求背景 需要实现一个动态的三维无人机航拍过程实景效果 代码开发中&#xff0c;迭代功能待续... 解决效果 cesium 实现三维无人机航拍过程实景效果 index.vue <template><div><el-button class"btn" click"start">开始</el-butt…...

Rust:使用 Warp 框架编写基于 HTTPS 的 RESTful API

在 Rust 中使用 Warp 框架编写基于 HTTPS 的 RESTful API&#xff0c;你需要首先设置好 TLS/SSL 证书以启用 HTTPS。以下是一个基本的步骤指南&#xff1a; 步骤 1: 安装 Rust 和 Cargo 确保你已经安装了 Rust 和 Cargo。你可以从 Rust 官网 下载并安装 Rust。 步骤 2: 创建…...

测试开发工程师需要掌握什么技能?

测试开发工程师是软件开发中至关重要的角色之一。他们负责编写、维护和执行自动化测试脚本、开发测试工具和框架&#xff0c;以确保软件的质量和稳定性。为了成为一名优秀的测试开发工程师&#xff0c;你需要掌握以下技能&#xff1a; 1. 编程技能&#xff1a; 作为测试开发工…...

SpelExpressionParser评估SpEL(Spring Expression Language)表达式的解析器

是Spring中用于解析和评估SpEL(Spring Expression Language)表达式的解析器,SpEL是一种强大且灵活的表达式语言,广泛用于Spring框架中,以便在运行时解析和评估表达式 主要功能 1.解析和评估表达式:spelExpressionParser可以解析复杂的表达式,并在运行时对其进行评估; 2.访问…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...