双臂Matlab仿真建模:正运动学
双臂Matlab仿真建模
文章目录
- 双臂Matlab仿真建模
- 写在前面
- 学习代码都记录在[个人github](https://github.com/xuuyann/RobotLearningCode)上,欢迎关注~
- 知乎:[OpenRobotSL](https://www.zhihu.com/people/OpenRobotSL)
- PUMA560构型双臂
- UR构型双臂
- 如何进行轨迹仿真
- Matlab正运动学建模
- PUMA560构型
- UR构型
- 最后就可以愉快的画轨迹了~(当然 过程挺艰辛)
写在前面
学习代码都记录在个人github上,欢迎关注~
知乎:OpenRobotSL
PUMA560构型双臂
熟悉Peter大神工具箱的都知道,该工具箱使用dh连杆建模,建立双臂模型,需要建立腰关节连杆,并将两个单机械臂组合到腰关节上。如下图所示,本文针对puma560构型双臂采用改进DH建模(具体建模步骤见博客机器人学回炉重造(1):正运动学、标准D-H法与改进D-H法的区别与应用(附ABB机械臂运动学建模matlab代码)),此时腰关节连杆坐标系就是基坐标系X0Y0Z0,此时的肩关节坐标系X2Y2Z2就是单臂机器人的基坐标系,然后就从肩关节坐标系开始建立单臂的DH坐标系,也可以认为是单独的腰关节连杆坐标系+单臂的DH坐标系,需要注意的是建立整体DH坐标系时腰关节与肩关节之间需要加-pi/2角度偏置,目的是将puma560构型的机械臂垂下去,下图中的虚线X2即为不加偏置的肩关节坐标系,实线X2即为加了偏置角度后的肩关节坐标系,d=肩宽/2。
对应的matlab正运动学仿真如下所示:
腰关节与肩关节之间也可以不加偏置角度,这样的话,两个坐标系之间的转换就可以画成如下所示。
对应的matlab正运动学仿真如下所示:
UR构型双臂
本文UR采用标准DH建模,建模过程全网可搜,标准DH坐标系建立如下。
分析上图,黑色坐标系X0Y0Z0是世界坐标系,也可认为这是腰关节坐标系,红色虚线坐标系X1Y1Z1是肩关节坐标系(也就是UR的基坐标系{0}),此时腰关节与肩关节不存在角度偏置,matlab仿真建模就是如下所示
亮蓝色实线坐标系X1Y1Z1是加了pi/2偏置角度后的肩关节坐标系,matlab建模仿真如下所示
如何进行轨迹仿真
进行轨迹仿真的最重要一点就是,如何将世界(全局坐标系)坐标系下(也为腰关节坐标系)的轨迹映射到肩关节坐标系(机械臂的基坐标系)下,弄明白这一点,使用matlab进行双臂轨迹算法验证就简单很多了~
以PUMA560腰关节与肩关节有-pi/2角度偏置的双臂构型为例,如下图所示,
世界(全局,也为腰关节)坐标系下的位姿表示为n0T^0_{n}Tn0T,这就是我们算法验证时所给定的轨迹位姿,都是相对于世界坐标系的;现在的问题就是,将轨迹位姿映射到肩关节(机械臂基坐标系)下,也就是求n2T^2_{n}Tn2T。这个就很简单了,即n2T=inv(20T)∗n0T^2_{n}T=inv(^0_{2}T)*^0_{n}Tn2T=inv(20T)∗n0T。20T^0_{2}T20T即为单臂基坐标系相对于腰关节坐标系的姿态变换矩阵,根据腰关节和肩关节之间的坐标变换,可以分析得出,腰关节坐标系先绕X1轴(自己的)旋转pi/2,再绕动轴Z1旋转-pi/2,最后再沿着动轴Z1移动d长度,故20T=trotx(90)∗trotz(−90)∗transz(d)^0_{2}T=trotx(90)*trotz(-90)*transz(d)20T=trotx(90)∗trotz(−90)∗transz(d)。按照上述步骤即可将全局坐标系下的位姿映射到单臂局部坐标系下了。
同理,UR也可如此。
Matlab正运动学建模
PUMA560构型
clear all;
clc;
% 双臂 每个单臂是puma560构型
L(1)=Link([0 -0.25 0 pi/2 0 -pi/2 ],'modified'); % 关节1这里的最后一个量偏置-pi/2设置是为了将puma560构型的臂垂直下去
L(2)=Link([0 0 0 -pi/2 0 0 ],'modified');
L(3)=Link([0 0 0.2 0 0 -pi/2 ],'modified');
L(4)=Link([0 0.248 0 -pi/2 0 ],'modified');
L(5)=Link([0 0 0 -pi/2 0 ],'modified');
L(6)=Link([0 0 0 pi/2 0 ],'modified');
% 0.262
p560L=SerialLink(L,'name','LEFT');
p560L.tool=[0 -1 0 0;1 0 0 0;0 0 1 0.262 ;0 0 0 1;]; R(1)=Link([0 0.25 0 pi/2 0 -pi/2 ],'modified'); % 关节1这里的最后一个量偏置-pi/2设置是为了将puma560构型的臂垂直下去
R(2)=Link([0 0 0 -pi/2 0 0 ],'modified');
R(3)=Link([0 0 0.2 0 0 -pi/2],'modified');
R(4)=Link([0 0.248 0 -pi/2 0 ],'modified');
R(5)=Link([0 0 0 -pi/2 0 ],'modified');
R(6)=Link([0 0 0 pi/2 0 ],'modified');
% 0.262
p560R=SerialLink(R,'name','RIGHT');
p560R.tool=[0 -1 0 0;1 0 0 0;0 0 1 0.262 ;0 0 0 1;];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% platformplatform=SerialLink([0 0 0 0],'name','platform','modified');%腰部关节
platform.base=[1 0 0 0;0 1 0 0;0 0 1 0 ;0 0 0 1;]; %基座高度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% RpR=SerialLink([platform,p560R],'name','R'); % 单独右臂模型,加装底座view(3)
hold on
grid on
axis([-1.2, 1.2, -1.2, 1.2, -1.2, 1.2])pR.plot([0 0 0 0 0 0 0]) % 第一个量固定为0,目的是为了模拟腰关节,左臂下同
hold on%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% L
pL=SerialLink([platform,p560L],'name','L'); % 单独左臂模型,加装底座pL.plot([0 0 0 0 0 0 0])
hold on
UR构型
clear all;
clc;
% 双臂 每个单臂是UR构型
figure(2)
dis_shoulder = 0.2;
% theta d ,a , alpha
L(1)=Link([0 0.0891+dis_shoulder 0 pi/2 0 pi/2 ]); % 关节1这里的最后一个量偏置
L(2)=Link([0 0 -0.425 0 0 0]);
L(3)=Link([0 0 -0.392 0 0 0 ]);
L(4)=Link([0 0.1091 0 pi/2 0 -pi/2]);
L(5)=Link([0 0.0946 0 -pi/2 0 0]);
L(6)=Link([0 0.0823 0 0 0 0]);
% 0.262
urL=SerialLink(L,'name','LEFT');
% urL.tool=[0 -1 0 0;
% 1 0 0 0;
% 0 0 1 0.262 ;
% 0 0 0 1;]; R(1)=Link([0 -0.0891-dis_shoulder 0 pi/2 0 pi/2 ]); % 关节1这里的最后一个量偏置
R(2)=Link([0 0 -0.425 0 0 0]);
R(3)=Link([0 0 -0.392 0 0 0 ]);
R(4)=Link([0 0.1091 0 pi/2 0 -pi/2]);
R(5)=Link([0 0.0946 0 -pi/2 0 0]);
R(6)=Link([0 0.0823 0 0 0 0]);
% 0.262
urR=SerialLink(R,'name','RIGHT');
% urR.tool=[0 -1 0 0;
% 1 0 0 0;
% 0 0 1 0.262 ;
% 0 0 0 1;];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% platform
offset_ang = 0;
dis_waist = 0;
platform=SerialLink([0 dis_waist 0 pi/2+offset_ang 0 0],'name','platform');%腰部关节
platform.base=[1 0 0 0;0 1 0 0;0 0 1 0 ;0 0 0 1;]; %基座高度%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% R
pR=SerialLink([platform,urR],'name','R'); % 单独右臂模型,加装底座view(3)
hold on
grid on
axis([-1.5, 1.5, -1.5, 1.5, -1.5, 1.5])pR.plot([0 0 0 0 0 0 0]) % 第一个量固定为0,目的是为了模拟腰关节,左臂下同
hold on%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% L
pL=SerialLink([platform, urL],'name','L'); % 单独左臂模型,加装底座pL.plot([0 0 0 0 0 0 0])
hold on
最后就可以愉快的画轨迹了~(当然 过程挺艰辛)
也可以做双臂协同
双臂Matlab仿真建模:正运动学相关推荐
- 正余弦函数的matlab仿真,实现正余弦信号的算法比较
实现正余弦函数的几种算法记录 1.几种算法的理论推导与matlab仿真 (1)Taylor级数逼近正余弦函数的推导 精度要求为20bit,其对应误差为9.536e-7,所以泰勒函数逼近的误差值要小于9 ...
- svpwm仿真_【好物推荐】《现代永磁同步电机控制原理及MATLAB仿真》
为什么推荐这本书? 学习FOC已经学习了有一段时间了,期间了记录了挺多笔记,有些整理了发了出来,可以查看我的主页,有些暂时没有发,经验点还需要完善.说实话,电机是挺难的,尤其是期间有很多次遇到问题无从 ...
- MATLAB机器人机械臂运动学正逆解、动力学建模仿真与轨迹规划
MATLAB机器人机械臂运动学正逆解.动力学建模仿真与轨迹规划,雅克比矩阵求解.蒙特卡洛采样画出末端执行器工作空间 基于时间最优的改进粒子群优化算法机械臂轨迹规划设计 ID:4610679190520 ...
- 三自由度机器人运动学matlab仿真实验报告,3自由度机器人的正运动学建模研究...
. 3 MATLAB构建机器人仿真模型 机器人学工具箱(Robotics Toolbox for MATLAB) 是MATLAB中专门用于机器人仿真的工具箱,在机器人建模.轨迹规划.控制.可视化方面使 ...
- 【机器人1】基于POE公式的UR5机械臂正运动学建模求解与matlab仿真
基于PoE公式的UR5机械臂正运动学建模求解与matlab仿真 基于PoE公式的UR5机械臂正运动学分析 1.1 运动旋量的螺旋释义(理论基础) 1.2 基于PoE公式的UR5机械臂正运动学模型 1. ...
- 多自由度机械臂运动学正-逆解|空间轨迹规划控制|MATLAB仿真+实际机器调试
多自由度机械臂运动学正-逆解|空间轨迹规划控制|MATLAB仿真+实际机器调试 ) DH建模法可以参考这个博客: 还有<机器人>这本书,一定要理论实践相结合,理解后可以用几何法建模也可以用 ...
- 六自由度机器人(机械臂)运动学建模及运动规划系列(三)——机器人建模及运动学分析的Matlab仿真
在完成机器人的建模以及运动学分析之后,可以利用Matlab中的Robotics工具箱进行仿真. 本篇目录 一.工具箱下载 二.机器人建模仿真 三.机器人运动学计算仿真 四.小结 一.工具箱下载 要在M ...
- MATLAB机器人工具箱【1】——建模+正逆运动学+雅克比矩阵
MATLAB机器人工具箱[1]-- 机械臂建模+正逆运动学+雅克比矩阵 1. 二维空间位姿描述 2. 三维空间位姿描述 3. 建立机器人模型 3.1 Link 类 3.2 SerialLink 类 3 ...
- 1,matlab仿真正运动学
正运动学 使用其次变换矩阵进行运动学仿真,最后使用matlab画出图形 clc clear close all%%%% 定义连杆参数 %%%% l1 = 1; l2 = 1; theta1 = 0.3 ...
- matlab mdh模型,6轴机器人DH建模、仿真、正逆解代码
一.模型 二.MDH模型 使用修改DH模型.改进DH模型与标准DH模型主要区别在于末端,改进DH并没有建到工具坐标系,这里将4.5.6轴的坐标系都建在同一点,因此机器人连杆的参数只需要4个值a1.a2 ...
最新文章
- Debian 陷入尴尬,社区或群龙无首
- Error when loading the SDK:发现了含有元素 'd:skin' 开头的无效内容
- 盖瑞解剖学: 临床实践的解剖学基础 Gray‘s Anatomy: The Anatomical Basis of Clinical Practice 高清英文原版
- 每日程序C语言7-将一个正整数分解质因数
- mysql show 命令_mysql show 相关命令
- 潜水员(信息学奥赛一本通-T1271)
- qlv格式怎么打开,把qlv格式转换成mp4的方法
- GPU显卡服务器有什么作用,可应用哪些方面呢
- ipad/iphone内存管理三之NoAutorelease和Autorelease详细解说
- 认识Excel的第三天(字数满格自动换行、插入一行/列单元格、修改边框样式)
- urllib2 解析
- C++习题--求余数
- sql select 基础用法
- # MAC备份/导出IDEA配置
- 【LeetCode 459 】重复的子字符串
- 联想A798T刷机包 基于百度云V6 集成RE3.1.7美化版 精简冗余文件
- python 路由转发_python 洋葱路由列表创建
- 计算机stem项目计划书,钟声学校STEM教育计划书1617-1718.PDF
- loli的测试——搜索
- AI人才招聘:年薪最高近百万,独角兽公司招算法工程师
热门文章
- (附源码)spring boot记账微信小程序 毕业设计 180815
- Python暴力破解WIFI(超详细破解教程+UI设计教程+步步解析)
- 转:施炜:铁军组织是怎样炼成的?高能组织=人×管理体系×数字标准
- Qt QML应用框架
- Python菜鸟教程,带你十分钟入门!
- python批量查询高德地图经纬度(支持xlxs)
- cpp的vector初始化方法
- 怎么提高c语言编程能力,如何才能提高用C语言编程的能力
- 一周成python大神_2个月把你变成selenium+Python大神,上海悠悠带你飞!
- window 搜索占用进程 资源监视器