0. 预备知识(别跳过呀)

上一篇我们讲了正运动学,也就是通过齐次变换矩阵,知晓关节角后求得机械臂末端的位姿,并表示在基座标系下。这一篇我们就来讲一讲逆运动学问题——已知工具坐标系{T}相对于固定坐标系{S}的期望位姿,如何计算一系列满足期望要求的关节角?

0.1 求解的难度

这是一个难度更大的问题,因为求解操作臂运动学方程是一个非线性问题。譬如六自由度的机械臂Puma560,回顾最后求得的运动学方程,

这里我们一共有12个方程,6个未知数。旋转部分3×3的矩阵由于每一列都是单位矢量,两两正交,因此这9个方程只有3个是独立的。再加上第四列前三行位置矢量的三个方程,6个方程对应6个未知数,应当是有解的。但是其中含有sin和cos,是非线性超越方程,求解难度很大,应到考虑到解是否存在,多解以及求解方法的问题。

0.2 解的存在性

这里引入三个概念,
工作空间(workspace):操作臂末端的执行器所能达到的范围。
灵巧工作空间(dexterous workspace):机器人末端执行器能从各个方向达到的空间。
可达工作空间(reachable workspace):机器人至少从一个方向上可以道德的空间。

从上述概念可以分析得到,如果要求解存在,那么期望点一定在工作空间内才行。
我们以两连杆机械臂为例,如果l1 = l2 = r,且关节旋转角能达到360°,那么其可达工作空间为半径为2r的圆,灵巧工作空间为原点;如果l1 ≠ l2,那么可达工作空间为外径l1 + l2,内径为|l1 - l2|的圆环,不存在灵巧工作空间。
一般的,当机械臂自由度小于6时,其不能到达三维空间内一般的目标位姿。

0.3 多解问题

多解问题也很好理解,例如Puma560机械臂,对已确定目标可有8个不同解,但往往由于关节运动范围的限制,这8个解中的某些解不能实现。如下图所示:

0.4 解法

由于非线性方程组没有通用的求解算法,针对解法问题,最好对一直操作臂的解的构成形式加以定义。
我们把操作臂的全部求解方法分为两类:封闭解(closed solutions)和数值解(numerical solutions)。
本篇主要讲述封闭解形式,也可分为两类,代数法几何法
同时我们给出一个结论:所有包含转动关节和移动关节的串联型6自由度机械臂均是可解的。 当然一般是数值解,只有在特殊情况下才存在封闭解(解析解),而且这种情况往往具有一些特性(存在几个正交关节轴或者有多个αi为0或者90°)。根据这一特性,机械臂设计者们在设计时也往往会考虑到这一点,尽可能将工业机械臂设计得足够简单,从而能够得到封闭解。

1. 代数解法

我们以三连杆平面机械臂为例,看的小伙伴可以一起拿出纸笔算一下,首先按照上一篇正运动学的方法求解出三连杆的运动学方程:

因为是平面机械臂,确定期望的目标位姿需要三个参数(x,y,Φ)

将上面两个矩阵联立,可得如下方程:

我们把第三个和第四个式子求平方再相加,利用三角函数公式可以求出cosθ2


假定目标位置在工作空间内,那么sinθ2的表达式为

应用双变量反正切公式1 就可以计算出θ2

接下来我们求θ1,我们将原来x和y的式子改写成如下形式
式中k1和k2

这种变换在求解逆运动学时是很常用的形式,大家可以留意。
假设



则有

那么上面改写后的x和y的式子就可以写成如下形式

上面就是很明显的正余弦公式了,整理可得

那么我们再用双变量反正切公式就可以求出
求出θ1和θ2后,我们也可以由下式求出θ3了。

2. 几何解法

以下图的平面机械臂为例

由余弦定理可得

整理后可以求出cosθ2

应用双变量反正切公式就可以求出θ2了。
接下来再由几何分析可以得到,


我们就可以求出θ1

最后由如下公式求得θ3

3.逆运动学实例——Puma560机械臂

写起来太麻烦啦,贴上自己计算手稿又太羞耻,字也不好看。csdn上有现成的求解步骤,大家去看吧!
如果嫌麻烦不想找就看这里我贴的书中的求解步骤吧!





基本步骤和代数法是差不多的,所以大家可以感受到,逆运动学的求解实在是太枯燥啦(呕)!

5. 逆运动学MATLAB的实现

mdl_puma560
%载入工具箱提供的example,建立好的puma560机械臂模型qn = [0    0.7854  3.1416  0   0.7854  0]  %期望的关节角T = transl(0.5, 0.5, 0.7) * rpy2tr(0, 3*pi/4, 0)
T = p560.fkine(qn)
%上面两句都是求出正运动学的位姿,也可以直接自己给出一个期望的位姿Tqi = p560.ikine(T)
qi = p560.ikine6s(T)
%这两句都是求解逆运动学,但是第二句适用于6自由度机械臂%由于存在多解情况,我们可以人为的限定期望的位型解
qi = p560.ikine6s(T, 'ru')
%'l','r'   左手/右手
%'u','d'   肘部在上/肘部在下
%'f','n'    手腕翻转/手腕不翻转p560.plot(qi)


这只是最简单的一些代码,还有很多函数的使用方式大家可以参考《Robotics, Vision and Control》这本书。

6. 总结

以上就是机械臂的逆运动学部分讲解,实际上如果你也跟着每一个例子计算以后会发现如果手算逆运动学会很麻烦(我都懒得敲公式直接贴图了能不麻烦吗Or2),但是得益于计算机的发展,得益于大佬们工具包做的好,我们可以看到逆运动学用matlab求解非常简单(这里希望大家能够试着不用工具箱自己写一下逆运动学的求解),但是我们不能满足于躺在前人的成就上洋洋自得,几行代码写起来简单,但是对于我们而言,为了真正学好机器人学,理解代码背后的原理才是最为重要的,各个学科都是如此。所以也希望大家不论是学什么,都不要眼高手低,拿出纸笔自己多写写画画,譬如BP神经网络的原理,直接看一坨公式自然不容易理解,那么画一个简单的网络结构,自己按照公式推导一下慢慢理解就好了。


  1. http://blog.sina.com.cn/s/blog_131fa47b20102wftq.html ↩︎

中正平和的机器人学笔记——2. 机械臂逆运动学(附MATAB代码)相关推荐

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

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

  2. 中正平和的机器人学笔记——1. 机械臂正运动学(附MATLAB代码)

    中正平和的机器人学笔记--1.正运动学 0. 何为运动学?何为正运动学? 运动学主要研究的就是机械臂的运动特性(位置.速度.加速度等),但是不考虑使机械臂产生运动时施加的力和力矩(这部分是动力学).而 ...

  3. 中正平和的机器人学笔记——5. 机械臂动力学

    0. 基础知识 0.1 线加速度 上一篇中我们讲到了在坐标系{A}和坐标系{B}原点重合时,BQ^BQBQ的速度矢量的表示方式: AVQ^AV_QAVQ​ = BARBVQ^A_BR^BV_QBA​R ...

  4. 中正平和的机器人学笔记——0. 前言

    中正平和的机器人学笔记--0.前言 一点唠叨的话 没有想到最后还是入了机器人学的坑,心情复杂. 借鉴某同学课设时写csdn blog整理自己所学知识的方法,我也将这周学习到的机器人学的知识记录整理下来 ...

  5. 数值法求六轴机械臂逆运动学解

    问题描述:已知工具坐标系相对于固定坐标系的期望位置和姿态,如何求解满足期望位姿的关节角? 本篇将通过基于雅克比矩阵的牛顿-拉夫森迭代法求运动学逆解. 牛顿 - 拉夫森法(Newton - Raphso ...

  6. 【机械】基于简化几何解法的六轴机械臂位置规划附matlab代码

    1 内容介绍 基于简化几何解法的六轴机械臂位置规划附matlab代码 2 部分代码 clc; clear; %载入数据 importfile('shuiping.mat'); theta_shuipi ...

  7. UR机械臂逆运动学解析解

    UR机械臂逆运动学解析解 ur10机械臂的DH(修正)参数为 d1=0.1273;a2=-0.612;a3=-0.5723;d4=0.163941;d5=0.1157;d6=0.6922; 首先,推导 ...

  8. PUAM560机械臂逆运动学实例-梳理

    经过努力,对课本中PUAM560机械臂的运动学逆解算的实例进行了梳理,啥事都得动手试试才能学的深刻,整理一下我的理解和思路.由于首次接触逆解对于许多概念理解很不到位,不过随着学习的深入我相信我会越来越 ...

  9. 机器人学matlab建模实例,中正平和的机器人学笔记——3.几个MATLAB实例

    0. 轨迹 学机器人学前最想知道的,就是如何把机器人末端执行器平滑地从A点移动到B点,也许不太准确,应当说从位姿A移动到位姿B. 0.1 关节空间运动 考虑末端执行器在以下两个笛卡尔位姿之间移动 下面 ...

  10. 中正平和的机器人学笔记——4. 雅可比矩阵(附MTALB代码)

    1. 基础知识 基础知识主要是希望大家回顾一下大学物理里讲的速度矢量和角速度矢量部分的知识,用矢量形式去表示,还有叉乘的相关知识,这些我就不赘述了. 想象存在坐标系{A}和{B},把{B}固连在某一刚 ...

最新文章

  1. 学术 | 热议:寒门硕士要不要继续读博士?
  2. Day02-深度学习原理与使用方法
  3. 点击按钮测试用例标题_功能测试有哪些用例?分享功能测试用例大全
  4. boost::program_options模块实现一个用户定义的类来解析 特定机制——不是默认使用的 iostream 操作的测试程序
  5. 21个ui设计技巧,让你的设计不落伍
  6. Python中yield简单用法
  7. 小白 C++ 入门到大神发疯学习路线
  8. 嵌入式基于Linux电机控制,嵌入式linux下控制电机运动
  9. php html显示mysql数据库_从数据库调出数据显示到页面 PHP+Mysql+Html(简单实例)...
  10. C++代码中执行bat文件
  11. 博文视点大讲堂20期:Windows 7来了——知道你所不知道的Windows 7
  12. 如何在Mac上使用触控栏?
  13. Python获取sklearn库中iris数据写入本地csv文件,可视化展示数据并进行分类、聚类实验以及结果可视化
  14. 梦幻西游服务器哪个区人气最多,梦幻西游大区火爆程度排名 北京一区垄断前三...
  15. 【Python讲义】WEEK 8
  16. (简单)SQL练习13:从titles表获取按照title进行分组
  17. 全程15分钟 详解如何为MacBook Pro 15寸 加装固态硬
  18. mtk开发世界时区客制化
  19. 第三天python作业题
  20. 新品发布-T3M系列宽带高速MIMO Mesh自组网电台

热门文章

  1. 文件夹病毒残余文件的解决办法
  2. MSN Messenger协议简介
  3. 如何将音乐上传到YouTube音乐
  4. 装饰器结构应用与基本使用(611)
  5. JanusGraph学习笔记
  6. 大学生创新创业训练计划项目(信息类)申报书撰写
  7. 【教程搬运】廖雪峰Git的使用教程(二)
  8. HTML5如何实现开心消消乐小游戏
  9. 谈谈工业通信协议的采集和转换-如modbus opc profinet ethernetIP 61850等
  10. html加密原理,说说Html5视频加密播放原理