Matlab 沿X运动触发事件,Matlab RoboticToolBox(一)Link参数、三自由度/四自由度逆运动学...
(一)Link参数
参考文章:MATLAB-Robot(2):标准DH和改进DH的区别
这是我看了这么多博文对于Link函数参数讲解得最明白的,为了备份一下,不得已转载该博主的核心图片。
对于标准DH矩阵:
theta:绕Zi轴,从Xi旋转到Xi+1的角度
D:沿Zi轴,从Xi移动到Xi+1的距离
A:沿Xi轴,从Zi移动到Zi+1的距离
alpha:绕Xi+1轴,从Zi旋转到Zi+1的角度
(二)关于三轴(三自由度)/四轴(四自由度)的逆运动学
文章推荐:请问三自由度机器人在MATLAB机器人工具箱里面仿真,其反解是不是应该只能得到坐标,而得不到位姿呢?
有些讽刺的是,这不是一篇文章,而是一个问题。
找遍了各种博客,关于RoboticToolBox的逆运动学的文章基本都是从同一篇文章转载过来的,而这片文章中提到关于欠驱动的函数只提到只言片语:
其中ikine函数的调用格式:
Q = IKINE(ROBOT, T)
Q = IKINE(ROBOT, T, Q)
Q = IKINE(ROBOT, T, Q, M)
参数ROBOT为一个机器人对象,Q为初始猜测点(默认为0),T为要反解的变换矩阵。当反解的机器人对象的自由度少于6时,要用M进行忽略某个关节自由度。
这里面的“初始猜测点”是什么东西?M又是怎么使用?找了很久都没找到。真不知道一篇文章转来转去有什么意思?是想播点阅读量赢点下载积分吗?不真正去解决问题,把时间浪费在转载烂大街的文章上,百度一搜全都是这篇文章!
在matlab里面使用help命令(help ikine),再点击重载函数,找到如下线索:
In this case we specify the 'mask' option where the mask
vector (1x6) specifies the Cartesian DOF (in the wrist coordinate
frame) that will be ignored in reaching a solution. The mask vector
has six elements that correspond to translation in X, Y and Z, and rotation
about X, Y and Z respectively. The value should be 0 (for ignore) or 1.
The number of non-zero elements should equal the number of manipulator DOF.
For example when using a 3 DOF manipulator rotation orientation might be
unimportant in which case use the option: 'mask', [1 1 1 0 0 0].
For robots with 4 or 5 DOF this method is very difficult to use since
orientation is specified by T in world coordinates and the achievable
orientations are a function of the tool position.
原来mask是掩码,几轴就用几个1去掩住。
那么Q又是个什么东西?没找到。
无奈只好在百度不断地看这些重复来重复去的文章,终于在一个问题里面找到一些线索:robotics toolbox 里的逆解函数q = ikine(robot, T, q0, M)用法问题
按这里的来看Q似乎就是一个1x4的矩阵,对应于4-axis,意思是类似于数值计算逼近解的初始值吗?
我按照这个试了一下,依然不行,仍然报错。(这里可能是版本问题,以前的参数应该是这个,但我用的是10.2.0,可能改了)
然后找啊找,终于找到一开始推荐的那篇文章,里面的Q竟然是一个"mask"字符串?!
不对,应该是版本改了,本身这个函数原型就不是IKINE(ROBOT, T, Q, M)了!
源码
三轴
clear;
clc;
%建立机器人模型
% thetad a alpha offset
L1=Link([0 0.2 0 pi/2 0 ]); %定义连杆的D-H参数
L2=Link([0 0 0.2 0 0 ]);
L3=Link([0 0 0.2 0 0 ]);
L4=Link([0 0 0.2 0 0 ]);
% L5=Link([pi 0 0 pi/2 0 ]);
% L6=Link([0 0.08 0 0 0 ]);
% robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
robot=SerialLink([L1 L2 L3],'name','manman');
%robot.plot([0,pi/4,-pi/2,0]);%输出机器人模型,后面的六个角为输出时的theta姿态
%robot.display();
% teach(robot);
theta=[0,pi/6,pi/3]
figure(1)
robot.plot(theta); %输出机器人模型,后面的六个角为输出时的theta姿态
robot.display();
p=robot.fkine(theta) %fkine正解函数,根据关节角theta,求解出末端位姿p
mask = [1 1 0 0 0 0];
q=ikine(robot,p,'mask',mask) %ikine逆解函数,根据末端位姿p,求解出关节角q
figure(2)
robot.plot(q);%输出机器人模型,后面的六个角为输出时的theta姿态
robot.display();
输出:
theta =
0 0.5236 1.0472
robot =
manman:: 3 axis, RRR, stdDH, slowRNE
+---+-----------+-----------+-----------+-----------+-----------+
| j | theta | d | a | alpha | offset |
+---+-----------+-----------+-----------+-----------+-----------+
| 1| q1| 0.2| 0| 1.5708| 0|
| 2| q2| 0| 0.2| 0| 0|
| 3| q3| 0| 0.2| 0| 0|
+---+-----------+-----------+-----------+-----------+-----------+
p =
0 -1 0 0.1732
0 0 -1 0
1 0 0 0.5
0 0 0 1
q =
0.0000 0.5236 1.0472
theta和q完全相同。
四轴
clear;
clc;
%建立机器人模型
% thetad a alpha offset
L1=Link([0 0.2 0 pi/2 0 ]); %定义连杆的D-H参数
L2=Link([0 0 0.2 0 0 ]);
L3=Link([0 0 0.2 0 0 ]);
L4=Link([0 0 0.2 0 0 ]);
% L5=Link([pi 0 0 pi/2 0 ]);
% L6=Link([0 0.08 0 0 0 ]);
% robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
robot=SerialLink([L1 L2 L3 L4],'name','manman');
%robot.plot([0,pi/4,-pi/2,0]);%输出机器人模型,后面的六个角为输出时的theta姿态
%robot.display();
% teach(robot);
theta=[0,pi/6,-pi/4,2*pi/3]
figure(1)
robot.plot(theta);%输出机器人模型,后面的六个角为输出时的theta姿态
robot.display();
p=robot.fkine(theta) %fkine正解函数,根据关节角theta,求解出末端位姿p
mask = [1 1 1 1 0 0];
q=ikine(robot,p,'mask',mask) %ikine逆解函数,根据末端位姿p,求解出关节角q
figure(2)
robot.plot(q);%输出机器人模型,后面的六个角为输出时的theta姿态
robot.display();
输出:
theta =
0 0.5236 -0.7854 2.0944
robot =
manman:: 4 axis, RRRR, stdDH, slowRNE
+---+-----------+-----------+-----------+-----------+-----------+
| j | theta | d | a | alpha | offset |
+---+-----------+-----------+-----------+-----------+-----------+
| 1| q1| 0.2| 0| 1.5708| 0|
| 2| q2| 0| 0.2| 0| 0|
| 3| q3| 0| 0.2| 0| 0|
| 4| q4| 0| 0.2| 0| 0|
+---+-----------+-----------+-----------+-----------+-----------+
p =
-0.2588 -0.9659 0 0.3146
0 0 -1 0
0.9659 -0.2588 0 0.4414
0 0 0 1
q =
-0.0000 -0.2618 0.7854 1.3090
运行以下输出图像就可以看见,输出的姿态反了过来,这里涉及了一个多解的问题,三轴只有一个解,但四轴可以有两个解,五轴四个、六轴八个,但这些都是不涉及姿态的前提下,涉及姿态理应只有一个解。这可能跟逆解的掩码算法有什么关系,具体没有深入了解。
问题
需要注意的是,非完全自由机械臂(六轴以下)的数值解由于算法问题,很多角度是解不出来的,比如四轴用[0,pi/6,-pi/3,pi/6],迭代超过100次,视作解失败,输出空矩阵。
Matlab 沿X运动触发事件,Matlab RoboticToolBox(一)Link参数、三自由度/四自由度逆运动学...相关推荐
- Matlab RoboticToolBox(一)Link参数、三自由度/四自由度逆运动学
(一)Link参数 参考文章:MATLAB-Robot(2):标准DH和改进DH的区别 这是我看了这么多博文对于Link函数参数讲解得最明白的,为了备份一下,不得已转载该博主的核心图片. 对于标准DH ...
- MATLAB仿真Gough-Stewart并联机器人斯图尔特6自由度并联机器人逆运动学仿真 动力学控制pid控制
MATLAB仿真Gough-Stewart并联机器人斯图尔特6自由度并联机器人逆运动学仿真 动力学控制pid控制 1.搭建了六自由度Stewart并联机器人simulink simscape仿真模型 ...
- 卫星伪距定位matlab,GPS卫星运动及定位matlab仿真.doc
书山有路勤为径! PAGE GPS卫星运动及定位matlab仿真 摘要 全球定位系统是具有全球性.全能性.全天候优势的导航定位.定时和测速系统,现在在全球很多领域获得了应用. GPS卫星的定位是一个比 ...
- 柔性matlab机械臂运动空间代码,中正平和的机器人学笔记——2. 机械臂逆运动学(附MATAB代码)...
0. 预备知识(别跳过呀) 上一篇我们讲了正运动学,也就是通过齐次变换矩阵,知晓关节角后求得机械臂末端的位姿,并表示在基座标系下.这一篇我们就来讲一讲逆运动学问题--已知工具坐标系{T}相对于固定坐标 ...
- 【机器人学习】三自由机器人正逆运动学分析+matlab代码+直线轨迹与圆轨迹
下载链接:https://download.csdn.net/download/yjw0911/85111527 clc clear all close all M=300;l=150;L=50; t ...
- 怎么用matlab计算机械手运动,Matlab Robotics ToolBox 实战 -- 斯坦福机械手运动学建模及分析...
这同样是<机器人技术基础>课程实验中的一个,题目比较开放,只要求对任一坐标形式的机械臂进行研究即可.下面是详细介绍: 一.选定建模对象 选定球坐标机器人--斯坦福机械手臂(参考<机器 ...
- matlab robotics工具箱(3)逆运动学
之前一直想把vrep和matlab的robotics工具箱做个配合,因为工具箱的一些功能比vrep方便一些.最近有些空闲时间来试一试. %三.机器人的逆运动学 %3.1 使用解析解 %加载KR5模型 ...
- matlab与vrep联合仿真,基于MATLAB与V-REP的机器人加工轨迹生成与运动仿真.PDF
基于MATLAB与V-REP的机器人加工轨迹生成与运动仿真 第 卷 第 期 ( ) 57 5 厦门大学学报 自然科学版 Vol.57 No.5 年 月 ( ) 2018 9 Se.2018 Journ ...
- 【运动学】基于matlab GUI三体运动模拟【含Matlab源码 871期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[运动学]基于matlab GUI三体运动模拟[含Matlab源码 871期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...
最新文章
- ELK不香了!我用Graylog
- Effective C++ item01 尽量以const enum inline替换#define
- Quick BI助力云上大数据分析---深圳云栖大会
- Asp组件中级入门与精通系列之三
- 小米miuiVS华为鸿蒙,华为鸿蒙2.0 vs 小米MIUI 12.5
- Linux 系统应用编程——网络编程(TCP 协议三次握手过程)
- CCF201612-2 工资计算(100分)
- 给函数传递不定关键字的参数 和
- sharepoint修改密码
- Delft3D建模、水动力模拟方法及在地表水环境影响评价丨Delft3D标量输运、波浪、拉格朗日粒子及溢油模型
- c语言mac图形化界面编写,「分享」C语言如何编写图形界面
- tp5 admin.php,TP-admin即基于ThinkPHP5拿来即用高性能后台管理系统
- vue入门实例-输入行列,自定义表格
- 对敏捷管理模式核心价值的解读
- 魅蓝3卡插上显示无服务器,给魅蓝3插卡的方法步骤 _ 路由器设置|192.168.1.1|无线路由器设置|192.168.0.1 - 路饭网...
- php echo 后必须die,die 提示的消息都去哪了?
- 计算机维护专业自我鉴定,2016届计算机系统维护专业大学生毕业自我鉴定优秀范文...
- 五、C语言创建桌面程序:画笔和画刷
- 赛车游戏java_Java 赛车游戏
- 线性代数 --- 如何求解不可逆的mxn长方形矩阵Ax=0的通解Null(A)和Ax=b的通解