机器人控制系列教程之动力学建模(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题岛屿数量
题目: 题解: 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程序类型: ①、SysV:init,centos 5之前,配置文件/etc/init.d/ ②、Upstart: init,centos 6,配置文件/etc/init.d/ /etc/init/ ③、Systemd:Systemd,centos 7,配置文件/usr/li…...
Vue 学习之 axios
目录 执行安装命令:npm install axios 使用的时候导入 axios以data,params,headers传参方式的区别 axios封装 是一个基于 promise 的 网络请求库,作用于浏览器和 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超级生命模拟游戏:CMMMPlusCalculusUpdate.sb3资源-CSDN文库 关卡编辑器 ◽️使用 WASD 移动视图。 ◽️LMB 放置单元格。 ◽️Space LMB 删除单元格。Ctrl Space LMB 删除所有相同类型的单元格。 ◽️Q / E 旋转单元格。 ◽️Z / X 在单元格类…...
Java OA系统任务协作模块
以下是一篇关于构建高效且功能丰富的OA系统任务协作模块的博客文章,采用了Spring Boot、Spring Data JPA和React等主流技术。文章不仅展示了项目的基本实现,还介绍了如何优化代码和增加新的功能,以提升系统的性能和用户体验。 --- ## 构建高…...
深入解析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 镜像,将宿主机 13306 端口作为容器3306 端口映射 8.2 查看容器ID 8.3 进入容器 8.4 创建数据库xd_d…...
力扣最新详解5道题:两数之和三数之和四数之和
目录 一、查找总价格为目标值的两个商品 题目 题解 方法一:暴力枚举 方法二:对撞指针 二、两数之和 题目 题解 方法一:暴力枚举 方法二:哈希表法 三、三数之和 题目 题解 方法一:排序暴力枚举set去重 …...
通讯:单片机串口和电脑通讯
目录 1.串口输出数据到电脑 硬件部分 串口输出数据到电脑的软件软件部分: 相关问题: 2.单片机串口--485--485转USB--电脑 串口,芯片,转换器,设备之间的通讯的接线,都是要TX--RX, RX--TX 交叉连接。 单…...
ubuntu22.04 设置双屏
一 概述 最近把ubuntu18.04 升级到 22.04 双屏显示出来问题,在此记录下解决问题方案。二 解决方案 1 使用命令查看能检测到显示器 xrandr根据输出的信息,我们可以知道 HDMI-0 与 DP-0 是connected 。检测到两个显示器 2 设置输出显示器分辨率 由于我…...
【FPGA-常见问题及解决方案】
1、VIVADO的License无法加载:license文件必须在英文路径; 2、例程代码路径不能过长,也不允许有中文路径!!! 3、明明加载了license,license也正确,例程无法完成综合:这种情…...
【第3章】MyBatis-Plus持久层接口之Service Interface(上)
文章目录 前言一、save1. 示例(save)2. 示例(saveBatch)3. 示例(saveBatch 指定批次大小) 二、saveOrUpdate1.示例(saveOrUpdate)2.示例(saveOrUpdateBatch)3…...
Nodemon的入门及使用
nodemon 是一个工具,通过在检测到目录中的文件更改时自动重新启动 Node.js 应用程序来帮助开发基于 Node.js 的应用程序。它非常适合在开发环境中使用。以前,我们开发一个 Node 后端服务时,每次更改文件,都需要手动重启服务才能生…...
cesium 实现三维无人机航拍过程实景效果
需求背景 需要实现一个动态的三维无人机航拍过程实景效果 代码开发中,迭代功能待续... 解决效果 cesium 实现三维无人机航拍过程实景效果 index.vue <template><div><el-button class"btn" click"start">开始</el-butt…...
Rust:使用 Warp 框架编写基于 HTTPS 的 RESTful API
在 Rust 中使用 Warp 框架编写基于 HTTPS 的 RESTful API,你需要首先设置好 TLS/SSL 证书以启用 HTTPS。以下是一个基本的步骤指南: 步骤 1: 安装 Rust 和 Cargo 确保你已经安装了 Rust 和 Cargo。你可以从 Rust 官网 下载并安装 Rust。 步骤 2: 创建…...
测试开发工程师需要掌握什么技能?
测试开发工程师是软件开发中至关重要的角色之一。他们负责编写、维护和执行自动化测试脚本、开发测试工具和框架,以确保软件的质量和稳定性。为了成为一名优秀的测试开发工程师,你需要掌握以下技能: 1. 编程技能: 作为测试开发工…...
SpelExpressionParser评估SpEL(Spring Expression Language)表达式的解析器
是Spring中用于解析和评估SpEL(Spring Expression Language)表达式的解析器,SpEL是一种强大且灵活的表达式语言,广泛用于Spring框架中,以便在运行时解析和评估表达式 主要功能 1.解析和评估表达式:spelExpressionParser可以解析复杂的表达式,并在运行时对其进行评估; 2.访问…...
4步攻克Python代码执行可视化:开发者调试效率提升指南
4步攻克Python代码执行可视化:开发者调试效率提升指南 【免费下载链接】viztracer VizTracer is a low-overhead logging/debugging/profiling tool that can trace and visualize your python code execution. 项目地址: https://gitcode.com/gh_mirrors/vi/vizt…...
Wan2.2-I2V-A14B极限测试:高分辨率与长视频生成的稳定性挑战
Wan2.2-I2V-A14B极限测试:高分辨率与长视频生成的稳定性挑战 1. 开场白:当AI视频生成遇上极限挑战 最近在测试Wan2.2-I2V-A14B模型时,我突发奇想:这个在常规场景下表现优秀的视频生成模型,如果被推到极限会怎样&…...
s2-pro GPU算力适配实战:显存优化部署让语音合成延迟降低40%
s2-pro GPU算力适配实战:显存优化部署让语音合成延迟降低40% 1. 专业语音合成新选择 s2-pro是Fish Audio开源的专业级语音合成模型镜像,它让高质量的文本转语音变得触手可及。与普通语音合成工具不同,s2-pro支持通过参考音频复用音色&#…...
VBench评测基准全面解析:如何精准评估视频生成模型性能
1. VBench评测基准:视频生成模型的"体检中心" 想象一下你去医院做全身体检,医生会用不同仪器检查你的视力、听力、心肺功能等各项指标。VBench就是给视频生成模型做全面体检的"三甲医院",它能从16个维度给模型打分&#…...
s2-pro部署实操:CSDN平台GPU资源监控与s2-pro服务性能关联分析
s2-pro部署实操:CSDN平台GPU资源监控与s2-pro服务性能关联分析 1. 专业语音合成工具s2-pro简介 s2-pro是Fish Audio开源的专业级语音合成模型镜像,它能够将文本转换为自然流畅的语音,并支持通过参考音频来复用特定音色。这个工具特别适合需…...
三层架构破解小红书数据采集难题:Appium+MitmProxy双引擎实战
三层架构破解小红书数据采集难题:AppiumMitmProxy双引擎实战 【免费下载链接】XiaohongshuSpider 小红书爬取 项目地址: https://gitcode.com/gh_mirrors/xia/XiaohongshuSpider 在小红书内容生态快速发展的今天,数据工程师和产品分析师面临着内容…...
建行江门市分行:量身定制金融策 陈皮产业绽新姿
“前期承包土地、购买柑苗已投入大量资金,后续还要设法购买化肥。”眼看资金接续不上,前期投入面临打水漂,流动资金短缺让江门新会某陈皮庄园负责人老李一筹莫展。 获悉老李困境后,建行广东江门分行网点客户经理驱车前往果园实地走…...
24/7运行指南:OpenClaw+GLM-4-7-Flash树莓派部署与看门狗配置
24/7运行指南:OpenClawGLM-4-7-Flash树莓派部署与看门狗配置 1. 为什么选择树莓派作为OpenClaw的宿主设备? 去年冬天,当我第一次尝试让OpenClaw在我的主力开发机上24小时运行时,遭遇了严重的资源冲突问题。半夜运行的自动化任务…...
从零部署RK3588 MPP:硬编解码环境搭建与核心工具解析
1. RK3588 MPP硬编解码环境搭建全流程 第一次在ArmSoM-W3开发板上折腾RK3588的MPP硬编解码环境时,我踩了不少坑。这里把完整搭建过程拆解成可复现的步骤,用最直白的语言分享给各位开发者朋友。 MPP(Media Process Platform)是瑞芯…...
利用快马ai快速生成c语言语法学习原型,直观掌握编程基础
今天想和大家分享一个特别实用的C语言学习小技巧。作为一个编程新手,我最近发现用InsCode(快马)平台可以快速搭建C语言学习原型,把抽象的概念变成看得见、能运行的代码,学习效果特别好。 为什么要用原型学习法 刚开始学C语言时,最…...
