如何用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, //必需,页码容器,请确保这个容器只用来

matlab如何求变换矩阵,如何用Matlab实现机器人的变换矩阵相关推荐

  1. matlab seed函数_如何用matlab生成随机数函数_matlab随机数生成函数

    如何用matlab生成随机数函数 1. MATLAB 函数 rand 产生在区间 (0, 1)的均匀随机数,它是平均分布在 (0,1)之间.一个称为seed的值则是用来控制产生随机数的次数.均匀随机数 ...

  2. 利用matlab处理表格数据,/如何用matlab处理多个excel表格中的数据

    excel最大可处理多少条数据 理论上可以处理59999条(行)数据 但是实际上同一个工作表中无法处理这么多数. Excel 怎样做一个客户多个数据的表 1.首先,简单描述问题,在如下的表格中想姓名一 ...

  3. matlab三元函数泰勒展开,如何用matlab绘制三元函数f(x,y,z)=x^2 y^3 z^4在[-1,1]x[-2,2]x[-3,3] 上的各...

    问题描述: 如何用matlab绘制三元函数f(x,y,z)=x^2 y^3 z^4在[-1,1]x[-2,2]x[-3,3] 上的各种切片图. 还有怎么绘制f(x,y,t)=10*exp(1-t)*s ...

  4. 用matlab s函数 阶梯,如何用matlab使用函数式M文件计算s=n!,要具体的步骤。谢谢...

    先写个2113m文件function s=qiuhe(n)s=sum(cumprod(1:n))end其中5261cumprod是求某数的阶乘,4102sum是求和调用输入1653qiuhe(10) ...

  5. 用matlab画出ex,如何用matlab画函数图形

    1.首先打开matlab应用程序,输入下方的代码:2.然后按确定会出现一张图,如下图所示,这就是 怎么用matlab画函数图形?请看下面方法. 方法 打开Matlab. r0=5;b=1;t0=2;s ...

  6. matlab波形相似系数,如何用matlab计算波形相似系数

    . 低通采样定理实验 1.1 实验目的 1.了解数字信号处理系统的一般构成: 2.掌握奈奎斯特抽样定理. 1.2 实验仪器 1.YBLD智能综合信号源测试仪 1台 2.双踪示波器 1台 3.MCOM- ...

  7. matlab中求虚数的模,matlab计算带有复数的函数,最后求复数函数的模,结果里面却有...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 matlab计算带有复数的函数,最后求复数函数的模,结果里面却有复数标志i,输入自变量,得到的结果确实是实数,不知道怎么回事; 代码如下: syms n2 ...

  8. matlab坐标污染物浓度,如何用MATLAB画粒子空间分布图,并以颜色的深浅表示浓度?...

    问题描述: 现有一组室内飞沫污染物的空间分布数据,由于飞沫个数很多,为了更加清晰准确的表示飞沫个数浓度(个/m³)的空间分布,将房间按0.4m×0.4m×0.4m划分成多个小立方体,并将这个小立方体内 ...

  9. 用matlab画出典型函数,如何用matlab画出函数曲线

    使用matlab绘制函数曲2113线的方法和操作步5261骤如下:1.首先,使用matlabc打开命令行窗口,然后4102直接输入相1653关内容,如下图所示.2.其次,完成上述步骤后,请根据实际情况 ...

最新文章

  1. go interface转int_图解go反射实现原理
  2. Win10开启Administrator超级管理员账户
  3. Java容器Stack
  4. 用nifi把hdfs数据导到hive
  5. linux p 参数,tar的-p参数解决方案
  6. 大型企业网络配置系列课程详解(六) --PPP链路的配置与相关概念的理解
  7. 一个必用的javascript框架:underscore.js - wine的思考 - ITeye技术网站
  8. Google earth
  9. 送给python初学者在简单编程练习题中的小技巧
  10. UG基础知识学习视频目录整理(制图篇)
  11. License information could not be obtained from Elasticsearch due to Error: Request Timeout after 300
  12. [生存志] 第101节 九歌道尽楚芳华
  13. 底物的分子描述符计算及 CYP450 酶-底物选择性技术研究
  14. react+antd搭建后台管理系统
  15. kettle入门(二) 之 kettle连接oracle报的坑爹错误 Error occured while trying to connect to the database 的几种情况
  16. 2019年全国大学生“TI杯”电子设计竞赛综合测评电路仿真
  17. 基于am5718的【ARM-Linux开发】wayland和weston的介绍
  18. 我的编程奋斗历程[四部曲之三]-成为金子篇
  19. UE4 Pak跨引擎版本错误记录
  20. 微信服务号开发之jssdk-微信充值、支付见解

热门文章

  1. 口袋网咖已有服务器在使用怎么注销,口袋网咖_口袋网咖常见问题_口袋网咖专区...
  2. 自动化测试的一些面试题分享
  3. SPSS_Logistic回归分析结果表中的英文字母意思
  4. 世界地球日 | 成功解锁首件烤仔时尚单品
  5. python linux apt,Linux Mint 19上的Python3.7“No module named apt_pkg”错误
  6. 笔记本连接苹果耳机的方法
  7. 抖音短视频开发项目跨入社交圈,头条实现社交梦?
  8. 面向服务的面向业务基础
  9. 论坛发文求助看法一二。
  10. 逻辑回归Logistics--简述