(一)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参数、三自由度/四自由度逆运动学...相关推荐

  1. Matlab RoboticToolBox(一)Link参数、三自由度/四自由度逆运动学

    (一)Link参数 参考文章:MATLAB-Robot(2):标准DH和改进DH的区别 这是我看了这么多博文对于Link函数参数讲解得最明白的,为了备份一下,不得已转载该博主的核心图片. 对于标准DH ...

  2. MATLAB仿真Gough-Stewart并联机器人斯图尔特6自由度并联机器人逆运动学仿真 动力学控制pid控制

    MATLAB仿真Gough-Stewart并联机器人斯图尔特6自由度并联机器人逆运动学仿真 动力学控制pid控制 1.搭建了六自由度Stewart并联机器人simulink simscape仿真模型 ...

  3. 卫星伪距定位matlab,GPS卫星运动及定位matlab仿真.doc

    书山有路勤为径! PAGE GPS卫星运动及定位matlab仿真 摘要 全球定位系统是具有全球性.全能性.全天候优势的导航定位.定时和测速系统,现在在全球很多领域获得了应用. GPS卫星的定位是一个比 ...

  4. 柔性matlab机械臂运动空间代码,中正平和的机器人学笔记——2. 机械臂逆运动学(附MATAB代码)...

    0. 预备知识(别跳过呀) 上一篇我们讲了正运动学,也就是通过齐次变换矩阵,知晓关节角后求得机械臂末端的位姿,并表示在基座标系下.这一篇我们就来讲一讲逆运动学问题--已知工具坐标系{T}相对于固定坐标 ...

  5. 【机器人学习】三自由机器人正逆运动学分析+matlab代码+直线轨迹与圆轨迹

    下载链接:https://download.csdn.net/download/yjw0911/85111527 clc clear all close all M=300;l=150;L=50; t ...

  6. 怎么用matlab计算机械手运动,Matlab Robotics ToolBox 实战 -- 斯坦福机械手运动学建模及分析...

    这同样是<机器人技术基础>课程实验中的一个,题目比较开放,只要求对任一坐标形式的机械臂进行研究即可.下面是详细介绍: 一.选定建模对象 选定球坐标机器人--斯坦福机械手臂(参考<机器 ...

  7. matlab robotics工具箱(3)逆运动学

    之前一直想把vrep和matlab的robotics工具箱做个配合,因为工具箱的一些功能比vrep方便一些.最近有些空闲时间来试一试. %三.机器人的逆运动学 %3.1 使用解析解 %加载KR5模型 ...

  8. matlab与vrep联合仿真,基于MATLAB与V-REP的机器人加工轨迹生成与运动仿真.PDF

    基于MATLAB与V-REP的机器人加工轨迹生成与运动仿真 第 卷 第 期 ( ) 57 5 厦门大学学报 自然科学版 Vol.57 No.5 年 月 ( ) 2018 9 Se.2018 Journ ...

  9. 【运动学】基于matlab GUI三体运动模拟【含Matlab源码 871期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[运动学]基于matlab GUI三体运动模拟[含Matlab源码 871期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

最新文章

  1. ELK不香了!我用Graylog
  2. Effective C++ item01 尽量以const enum inline替换#define
  3. Quick BI助力云上大数据分析---深圳云栖大会
  4. Asp组件中级入门与精通系列之三
  5. 小米miuiVS华为鸿蒙,华为鸿蒙2.0 vs 小米MIUI 12.5
  6. Linux 系统应用编程——网络编程(TCP 协议三次握手过程)
  7. CCF201612-2 工资计算(100分)
  8. 给函数传递不定关键字的参数 和
  9. sharepoint修改密码
  10. Delft3D建模、水动力模拟方法及在地表水环境影响评价丨Delft3D标量输运、波浪、拉格朗日粒子及溢油模型
  11. c语言mac图形化界面编写,「分享」C语言如何编写图形界面
  12. tp5 admin.php,TP-admin即基于ThinkPHP5拿来即用高性能后台管理系统
  13. vue入门实例-输入行列,自定义表格
  14. 对敏捷管理模式核心价值的解读
  15. 魅蓝3卡插上显示无服务器,给魅蓝3插卡的方法步骤 _ 路由器设置|192.168.1.1|无线路由器设置|192.168.0.1 - 路饭网...
  16. php echo 后必须die,die 提示的消息都去哪了?
  17. 计算机维护专业自我鉴定,2016届计算机系统维护专业大学生毕业自我鉴定优秀范文...
  18. 五、C语言创建桌面程序:画笔和画刷
  19. 赛车游戏java_Java 赛车游戏
  20. 线性代数 --- 如何求解不可逆的mxn长方形矩阵Ax=0的通解Null(A)和Ax=b的通解

热门文章

  1. C语言实现单向循环链表
  2. CentOS7 安装code::Blocks
  3. 二叉树的前序遍历,二叉树的中序遍历,二叉树的后序遍历,二叉树的层序遍历
  4. 洛谷11月月赛(284pts rank85)
  5. Android P 性能优化:创建APP进程白名单,杀死白名单之外的进程
  6. 马斯克宣布成立xAI——引领开放人工智能时代的新纪元
  7. AI时代这些凉凉的行业就别去了
  8. 简单理解蒙特卡洛算法
  9. 如何成为入门程序员?
  10. 选择进口血糖仪的几个小建议,可收藏