700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > matlab如何求变换矩阵 如何用Matlab实现机器人的变换矩阵

matlab如何求变换矩阵 如何用Matlab实现机器人的变换矩阵

时间:2020-12-15 03:01:28

相关推荐

matlab如何求变换矩阵 如何用Matlab实现机器人的变换矩阵

如何用Matlab实现机器人的变换矩阵

如何用Matlab实现机器人的变换矩阵

前言

其中有些思路参考了这篇博客,有兴趣的同学可以看一下博客参考(关于位姿变换矩阵)

刚开始学工业机器人的时候,大家都先学到了其中的一些矩阵变换,但是计算过程还是不太熟悉,如果想要有较深的体验,可以从本文中获取一些经验,具体实例以我上一个博客中的两个三棱柱为主。

1.确定初始位姿

以我上一篇博客为例,那么初始位姿已经确定了代码如下

V1=[

-1,0,2;

-1,4,0;

-1,0,0;

1,0,2;

1,4,0;

1,0,0];

这里每一行是每一个顶点的x,y,z坐标值

2.矩阵方程

那么如果我要对这样一个点集做转换,就需要位移变换矩阵以及角度变换矩阵,所以这里做两个function,具体代码如下

function fx=Trans(a,b,c)

fx=[1,0,0,a;

0,1,0,b;

0,0,1,c;

0,0,0,1;];

end

function fx=Rot(a,b)

switch a

case 'X轴'

fx=[1,0,0,0;

0,cos(b),-sin(b),0;

0,sin(b),cos(b),0;

0,0,0,1];

case 'Y轴'

fx=[cos(b),0,sin(b),0;

0,1,0,0;

0,-sin(b),0,cos(b);

0,0,0,1];

case 'Z轴'

fx=[cos(b),-sin(b),0,0;

sin(b),cos(b),0,0;

0,0,1,0;

0,0,0,1]; %具体内容属于机器人学内容,这里不做赘述

end

于是后续可以直接调用该方程

3.最终变换过程

初始位姿如下图所示

而需求的最终的位姿如下图

所以具体实现代码如下

clc

clear

syms pi; %这里定义pi是为了使cos(pi)=0

V1=[-1,-1,-1,1,1,1;

0,0,4,4,0,0;

2,0,0,0,0,2;

1,1,1,1,1,1;];

%这里是设置了各个顶点的坐标,这里是每一个列值都是一个点的x,y,z坐标,而1是齐次坐标,这里不做赘述。

V2=Rot('Z轴',pi/2)*Rot('X轴',pi/2)*V1;

%这里是将初始矩阵,绕x轴逆时针旋转90°,再绕z轴逆时针旋转90°的操作

V3=V2([1 2 3 ],[1 2 3 4 5 6]);

%因为后续要进行画图操作,所以将齐次坐标去除了

V4=double(V2); %这里是为了将具体内容显示在工作区中

V5=double(V3);

V6=V5.'; %这里是将变换后的矩阵进行转置操作

F1=[

1,2,3,1;

1,2,5,6;

1,3,4,6;

3,2,5,4;

4,6,5,4];

patch('Faces',F1,'Vertices',V6,'FaceColor','none',...

'LineWidth',1,'EdgeColor','red');

grid minor;

axis([-2 2 -3 3 0 5]);

xlabel('x轴'); ylabel('y轴');zlabel('z轴');

set(gca,'XDir','reverse')

set(gca,'YDir','reverse')

4.附录

上接上一个博客的内容,设计了两个直三棱柱,并将这两个直三棱柱转换为一个立方体的过程。

最终参考代码如下:

clc

clear

syms pi;

V1=[-1,-1,-1,1,1,1;

0,0,4,4,0,0;

2,0,0,0,0,2;

1,1,1,1,1,1;];

V2=Rot('Z轴',pi/2)*Rot('X轴',pi/2)*V1;

V3=V2([1 2 3 ],[1 2 3 4 5 6]);

V4=double(V2);

V5=double(V3);

V6=V5.';

F1=[

1,2,3,1;

1,2,5,6;

1,3,4,6;

3,2,5,4;

4,6,5,4];

patch('Faces',F1,'Vertices',V6,'FaceColor','none',...

'LineWidth',1,'EdgeColor','red');

grid minor;

axis([-2 2 -3 3 0 5]);

xlabel('x轴'); ylabel('y轴');zlabel('z轴');

set(gca,'XDir','reverse')

set(gca,'YDir','reverse')

clc

clear

syms pi;

V1=[-1,-1,-1,1,1,1;

0,0,4,4,0,0;

2,0,0,0,0,2;

1,1,1,1,1,1;];

V2=Rot('Z轴',pi/2)*Rot('X轴',pi/2)*V1;

V3=V2([1 2 3 ],[1 2 3 4 5 6]);

V4=double(V2);

V5=double(V3);

V6=V5.';

V7=[-1,-1,-1,1,1,1;

5,5,9,9,5,5;

2,0,0,0,0,2;

1,1,1,1,1,1;];

V8=Trans(0,0,4)*Trans(2,0,0)*Rot('Z轴',pi/2)*Rot('X轴',-pi/2)*Trans(0,-5,0)*V7;

V9=V8([1 2 3],[1,2,3,4,5,6]);

V10=double(V8);

V11=double(V9);

V12=V11.';

F1=[

1,2,3,1;

1,2,5,6;

1,3,4,6;

3,2,5,4;

4,6,5,4];

F2=[

1,2,3,1;

1,2,5,6;

1,3,4,6;

3,2,5,4;

4,6,5,4];

patch('Faces',F1,'Vertices',V6,'FaceColor','none',...

'LineWidth',1,'EdgeColor','red');

patch('Faces',F2,'Vertices',V12,'FaceColor','none',...

'LineWidth',1,'EdgeColor','red');

grid minor;

axis([-2 2 -3 3 0 5]);

xlabel('x轴'); ylabel('y轴');zlabel('z轴');

set(gca,'XDir','reverse')

set(gca,'YDir','reverse')

初始位姿如图

最终位姿如图

我的上一个博客参考

如何用Matlab实现机器人的变换矩阵相关教程

[ STK ](八)使用 Matlab,在 STK 中建立卫星间连线

[ STK ](八)使用 Matlab,在 STK 中建立卫星间连线 星间距离小于 3e+07 时建立卫星间连线 星间距离是动态变化的,所以连线也是 每分钟建立一次完整连接,但是建立一次完整连接就需要218秒,就有点,, 开始建立连接,连接数目逐渐增多 一次完整连接,如下图

Echarts实战案例代码(44):同时渲染折线图实现和虚线渲染实现已

Echarts实战案例代码(44):同时渲染折线图实现和虚线渲染实现已发生和预测趋势的解决方案 实线和虚线,都是折线图lineStyle固有的属性; 分成同样数据的两组series,一段为实线,一段为虚线; option = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'W

剑指offer编程题----Java实现

剑指offer编程题----Java实现 剑指offer编程题----Java实现 JZ37 数字在升序数组中出现的次数 JZ57 二叉树的下一个结点 JZ37 数字在升序数组中出现的次数 题目描述 统计一个数字在升序数组中出现的次数。 题解 1. 类似双指针的方法 1.1 分析 传入的参数是:有

CentOS7安装MyCli实现MySQL自动补齐与语法高亮

CentOS7安装MyCli实现MySQL自动补齐与语法高亮 MyCli是一款命令行模式下实现MySQL语法高亮和自动补齐的工具 最近百度安装方法时发现前几页基于Python2.7的安装方法均已失效,所以写一篇新的分享出来供大家参考,理论上复制粘贴可以100%成功,遇到问题可以留言,解

实现点击微信链接自动跳转外部浏览器

实现点击微信链接自动跳转外部浏览器 正常情况下在微信中打开链接会有各种各样的限制,无法在微信内打开常用下载软件,APP等,链接发到微信中,微信会判断是不是可以让你从里面打开,识别是否合法,网上流传的各种微信打开下载链接,微信一更新基本失效。下面给大

剑指 Offer 09.用两个栈实现队列

剑指 Offer 09.用两个栈实现队列 这道题其实我有点蒙,只看题干信息的话,回答这个问题不难,可是我搞不清楚测试数据的输入输出QAQ 思路 用两个栈来实现队列功能,栈可以逆转数据的顺序,两次逆转就会变回来。 准备两个栈,一个作为中间过渡栈,“入栈”;一

使用springMVC实现图片上传

使用springMVC实现图片上传 在添加学生的时候添加图片 addStu.jsp添加图片代码 form action=../addStuResult method=post enctype=multipart/form-data table tr td学生编号/td tdinput type=text name=snum/td /tr tr td学生姓名/td tdinput type=text name=

【SpringBoot+Mybatis】bootstrap/sematic UI与pagehelper实现分

【SpringBoot+Mybatis】bootstrap/sematic UI与pagehelper实现分页 1.引入paging.js //分页,页码导航,要求参数为一个对象function createPageNav(opt) { opt= opt || {}; var $container = opt.$container || null, //必需,页码容器,请确保这个容器只用来

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。