这篇博客会讨论一下使用解析法求解3自由度拟人机械臂的逆解及分析。

一、机械臂的逆解

机械臂的逆运动学问题就是由给定的末端执行器位置和方向,确定机械臂各个关节变量的值。机械臂的求解方法可以分为两大类:数值解和解析解(封闭解),解析解又可分为代数解和几何解。
        数值解和解析解有各自的特点,商用的机械臂一般都会采用解析解,因为求解速度快且准确,而不会采用本质迭代的数值解法。

二、拟人机械臂+球形手腕

如果大家注意到的话,可以发现,市面上的6轴机械臂的构型都是相似的,大都是拟人臂+球形手腕的构型,因为这样的构型可以把球形腕的求逆解耦出来。

三、3自由度拟人机械臂的求解

这篇博客的内容都出自于《机器人学:建模,规划和控制》这本教材,有兴趣的同学可以找到这本书看一下。本文只讨论一下3自由度拟人机械臂的逆运动学,以后有时间会总结一下6轴工业机械臂的求逆解问题。
        很多机器人学教材上关于机械臂的逆解都是罗列一堆公式,对其中的推导过程并没有讲述很清楚,再加上中文版本的机器人学教材错误百出,很多同学看得一头雾水,对求解推导过程中使用的数学原理没有深入体会,导致对机械臂的求逆解问题一直处于一种似懂非懂的状态。最重要的是,我认为只有使用代码实现对机械臂求逆解,才算是初步达到了学习机器人学的目的。
        3轴机械臂的构型和DH参数如下图所示,使用DH方法进行运动学建模,建立的坐标系如下图所示。

建立直角坐标系后,机械臂末端的位置,也就是坐标系3原点的位置可表示为:

px=c1(a2c2+a3c23)py=s1(a2c2+a3c23)pz=a2s2+a3s23

\begin{align}_{x}}={{c}_{1}}\left( {{a}_{2}}{{c}_{2}}+{{a}_{3}}{{c}_{23}} \right) \\ _{y}}={{s}_{1}}\left( {{a}_{2}}{{c}_{2}}+{{a}_{3}}{{c}_{23}} \right) \\ & pz={{a}_{2}}{{s}_{2}}+{{a}_{3}}{{s}_{23}}\\ \end{align}
        已知 px{{p}_{x}}, py{{p}_{y}}, pz{{p}_{z}}3个已知量,求解3个未知量关节角度 ϑ1{{\vartheta }_{1}} , ϑ2{{\vartheta }_{2}} , ϑ3{{\vartheta }_{3}}。 从代数的角度来看,由于限定关节角度的范围为[−π,π]\left[ -\pi ,\pi \right] ,故会有多解,从几何角度来看,就是如下图所示的多解情形。

求解的过程是从关节3 →\to 关节2 →\to关节1。 首先求解关节3的解:
      由 (1)2+(2)2+(3)2{{(1)}^{2}}+{{(2)}^{2}}+{{(3)}^{2}} 可得

c3=px2+py2+pz2−a22−a322a2a3

{{c}_{3}}=\frac{{{p}_{x}}^{2}+{{p}_{y}}^{2}+{{p}_{z}}^{2}-{{a}_{2}}^{2}-{{a}_{3}}^{2}}{2{{a}_{2}}{{a}_{3}}}
      那么 s3=±1−c32−−−−−−√{{s}_{3}}=\pm \sqrt{1-{{c}_{3}}^{2}}。
      故 ϑ3,I=atan2(s3,c3){{\vartheta }_{3,I}}=atan2(s3,c3),使用 atan2()atan2()函数是为了得到范围在 [−π,π]\left[ -\pi ,\pi \right]的关节角度。根据 s3{{s}_{3}}的符号和 atan2()atan2()的性质,可知关节3的第二个解是 ϑ3,II=atan2(−s3,c3)=−atan2(s3,c3)=−ϑ3,I{{\vartheta }_{3,II}}=atan2(-s3,c3)=-atan2(s3,c3)=-{\vartheta }_{3,I}。 到此,关节3的两个解就得出来了。
       接下来求关节2的解:
      由 (1)2+(2)2{{\left( 1 \right)}^{2}}+{{\left( 2 \right)}^{2}}可以消掉 s1s_1和 c1c_1,再结合 (3)(3),这两个方程含 c2c_2和 s2s_2两个未知数,可求得

c2=±px2+py2−−−−−−−√(a2+a3c3)+pza3s3a22+a32+2a2a3c3

{{c}_{2}}=\frac{\pm \sqrt{{{p}_{x}}^{2}+{{p}_{y}}^{2}}\left( {{a}_{2}}+{{a}_{3}}{{c}_{3}} \right)+{{p}_{z}}{{a}_{3}}{{s}_{3}}}{{{a}_{2}}^{2}+{{a}_{3}}^{2}+2{{a}_{2}}{{a}_{3}}{{c}_{3}}}

s2=±px2+py2−−−−−−−√a3s3+pz(a2+a3c3)a22+a32+2a2a3c3

{{s}_{2}}=\frac{\pm \sqrt{{{p}_{x}}^{2}+{{p}_{y}}^{2}}{{a}_{3}}{{s}_{3}}+{{p}_{z}}\left( {{a}_{2}}+{{a}_{3}}{{c}_{3}} \right)}{{{a}_{2}}^{2}+{{a}_{3}}^{2}+2{{a}_{2}}{{a}_{3}}{{c}_{3}}}
      由 ϑ2=atan2(s2,c2){{\vartheta }_{2}}=atan2(s2,c2)可求得关节2的值,但是由于 s3s_{3}的符号和 px2+py2−−−−−−−√\sqrt{{{p}_{x}}^{2}+{{p}_{y}}^{2}}前的符号会造成多解,当 s3+=1−c32−−−−−−√{{s}_{3}}^{+}=\sqrt{1-{{c}_{3}}^{2}}时:

ϑ2,I=atan2(pz(a2+a3c3)−a3s3+px2+py2−−−−−−−√,(a2+a3c3)px2+py2−−−−−−−√+pza3s3+)

{{\vartheta }_{2,I}}=atan2({{p}_{z}}\left( {{a}_{2}}+{{a}_{3}}{{c}_{3}} \right)-{{a}_{3}}{{s}_{3}}^{+}\sqrt{{{p}_{x}}^{2}+{{p}_{y}}^{2}},\left( {{a}_{2}}+{{a}_{3}}{{c}_{3}} \right)\sqrt{{{p}_{x}}^{2}+{{p}_{y}}^{2}}+{{p}_{z}}{{a}_{3}}{{s}_{3}}^{+})

ϑ2,II=atan2(pz(a2+a3c3)+a3s3+px2+py2−−−−−−−√,−(a2+a3c3)px2+py2−−−−−−−√+pza3s3+)

{{\vartheta }_{2,II}}=atan2({{p}_{z}}\left( {{a}_{2}}+{{a}_{3}}{{c}_{3}} \right)+{{a}_{3}}{{s}_{3}}^{+}\sqrt{{{p}_{x}}^{2}+{{p}_{y}}^{2}},-\left( {{a}_{2}}+{{a}_{3}}{{c}_{3}} \right)\sqrt{{{p}_{x}}^{2}+{{p}_{y}}^{2}}+{{p}_{z}}{{a}_{3}}{{s}_{3}}^{+})
      当 s3−=−1−c32−−−−−−√{{s}_{3}}^{-}=-\sqrt{1-{{c}_{3}}^{2}}时,

ϑ2,III=atan2(pz(a2+a3c3)−a3s3−px2+py2−−−−−−−√,(a2+a3c3)px2+py2−−−−−−−√+pza3s3+)

{{\vartheta }_{2,III}}=atan2({{p}_{z}}\left( {{a}_{2}}+{{a}_{3}}{{c}_{3}} \right)-{{a}_{3}}{{s}_{3}}^{-}\sqrt{{{p}_{x}}^{2}+{{p}_{y}}^{2}},\left( {{a}_{2}}+{{a}_{3}}{{c}_{3}} \right)\sqrt{{{p}_{x}}^{2}+{{p}_{y}}^{2}}+{{p}_{z}}{{a}_{3}}{{s}_{3}}^{+})

ϑ2,IV=atan2(pz(a2+a3c3)+a3s3−px2+py2−−−−−−−√,−(a2+a3c3)px2+py2−−−−−−−√+pza3s3−)

{{\vartheta }_{2,IV}}=atan2({{p}_{z}}\left( {{a}_{2}}+{{a}_{3}}{{c}_{3}} \right)+{{a}_{3}}{{s}_{3}}^{-}\sqrt{{{p}_{x}}^{2}+{{p}_{y}}^{2}},-\left( {{a}_{2}}+{{a}_{3}}{{c}_{3}} \right)\sqrt{{{p}_{x}}^{2}+{{p}_{y}}^{2}}+{{p}_{z}}{{a}_{3}}{{s}_{3}}^{-})
       在列出关节2的解的时候要注意,因为从直观上看c2c_2和s2s_2的组合一共有8种(4个c2c_2,2个s2s_2),由于需要满足三角平方公式,所以只有4种是合法的。
      最后求解关节1的值,和教材上的求解方法不同,我更愿意在几何上直观快速地求解出其值,根据机械臂末端在X-Y平面上投影可知其中一个解是:

ϑ1,I=atan2(py,px)

{{\vartheta }_{1,I}}=atan2({{p}_{y}},{{p}_{x}})

而另外一个解是位于相对于原点对称的那个象限里,可以用

ϑ1,II=atan2(−py,−px)

{{\vartheta }_{1,II}}=atan2({{-p}_{y}},{{-p}_{x}})。
      最后我们需要获得机械臂的解,首先说结论,这四个解是:

(ϑ1,Iϑ2,Iϑ3,I)(ϑ1,Iϑ2,IIIϑ3,II)(ϑ1,IIϑ2,IIϑ3,I)(ϑ1,IIϑ2,IVϑ3,II)

\begin{align}& \left( \begin{matrix}{{\vartheta }_{1,I}} _{2,I}} _{3,I}} \\ \end{matrix} \right) \\ & \left( \begin{matrix}{{\vartheta }_{1,I}} _{2,III}} _{3,II}} \\ \end{matrix} \right) \\ & \left( \begin{matrix}{{\vartheta }_{1,II}} _{2,II}} _{3,I}} \\ \end{matrix} \right) \\ & \left( \begin{matrix}{{\vartheta }_{1,II}} _{2,IV}} _{3,II}} \\ \end{matrix} \right) \\ \end{align}
      前面根据关节3的解后可以确定关节2的解,再结合 px{{p}_{x}}、 py{{p}_{y}}和 (a2c2+a3c23)\left( {{a}_{2}}{{c}_{2}}+{{a}_{3}}{{c}_{23}} \right)的符号确定关节1的值,即可得到上述4组解,如下图所示。

参考文献:
布鲁诺・西西里安诺.《机器人学:建模,规划和控制》 西安交通大学出版社 2015

【机器人学】使用代数法求解3自由度拟人机械臂的逆运动学解相关推荐

  1. 【机器人学】使用解析法求解6轴机械臂的逆运动学解

    本文是承接上一篇求3轴拟人机械臂逆解内容(链接),扩展到求6轴机械臂的逆解,研究的仍然是目前比较流行的工业机械臂构型:拟人臂+球形腕关节(如下图1和图2所示),因为这种构型的机械臂具有闭合形式的逆运动 ...

  2. UR机械臂正逆运动学求解

    最近有个任务:求解UR机械臂正逆运动学,在网上参考了一下大家的求解办法,众说纷纭,其中有些朋友求解过程非常常规,但是最后求解的8组解,只有4组可用.在这里我介绍一个可以求解8组解析解的方法,供大家参考 ...

  3. 修正逆解文章——六轴UR机械臂正逆运动学求解_MATLAB代码(标准DH参数表)

    如下参考链接1的作者大大实现了UR5机械臂的正运动学和逆运动学的Matlab代码.但逆解部分在不同版本的Matlab中运行有错误. 本篇文章是MatlabR2016a下完成的,并说明一下原代码错误的原 ...

  4. 中正平和的机器人学笔记——7. 一种气驱型柔性臂的逆运动学模型

    1. 前言 上一篇分析了Air-Octor的正运动学模型,这一篇是学习另一篇论文1的笔记,着重分析这种柔性臂的逆运动学模型,也就是通过kϕk_\phikϕ​ 和 ϕ\phiϕ 以及 sss 来求 l1 ...

  5. 五自由度机械臂正逆运动学算法(C语言+Matlab)

    五自由度机械臂建模 学习代码都记录在个人github上,欢迎关注~ Matlab机器人工具箱版本9.10 机械臂还是原来的机械臂,之前用ROS做底层驱动,不需要写正逆运动学和相关算法就能得到一些简单的 ...

  6. matlab欧拉迭代,matlab机械臂正逆运动学求解问题,使用牛顿-欧拉迭代算法

    代码复制的有问题,详细见本楼,谢谢. clc;clear; DR=pi/180; %time j = 1; for i = 0 : 0.1 : 2 %input theta= 45 * DR *(1+ ...

  7. newmark法 matlab,newmark法和wilson法求解单自由度体系加速度反应谱

    fid=fopen('77(0.01-4172).txt','r'); %以下为newmark法求解单自由度体系反应谱 [Acceleration,count]=fscanf(fid,'%g'); d ...

  8. 机器人学回炉重造(1-2):各种典型机械臂的正运动学建模(标准D-H法)

    文章目录 写在前面 三连杆平面机械臂 平行四边形操作臂 闭链结构 例:平行四边形操作臂 球形臂 拟人臂 球腕 斯坦福机械臂 带球形手腕的拟人化机械臂 DLR机械臂 参考文献 写在前面 本文所有机械臂均 ...

  9. 中正平和的机器人学笔记——6. 一种气驱型柔性臂的正运动学模型

    1. 前言 柔性臂是当前机器人领域一个比较热的研究方向,国内外高校如MIT.Stanford.JHU和我校.上交.中科大.北航等等都有做研究.大致可以分为三类:气驱/绳驱,超弹性材料,智能材料(DE/ ...

最新文章

  1. Python中的注释(转)
  2. c++ -DNDEBUG openMP优化
  3. 什么是java?为什么大家都学习java技术?
  4. DOS 中for遍历文件内容
  5. 微信公众平台开发之在网页上添加分享到朋友圈,关注微信号等按钮
  6. Nginx+FastCGI支持HTTPS部署过程详述
  7. php 用户中心 框架,OpenCenter —— PHP 通用用户中心框架【国人开发,代码托管在 Git@OSC】...
  8. html5晋级之路-学习笔记表单
  9. Flutter入门学习--(18)添加本地资源图片
  10. java2实用教程 第6版(课后习题总结)
  11. NS方程由精确解求源项matlab代码
  12. java编程实现行列式计算应用_基于java的行列式计算程序
  13. oracle sql 分区查询语句_Oracle SQL调优之分区表
  14. oracle报错 ORA-01722: 无效数字
  15. 批处理系统,分时系统,分布式系统,多处理/多核处理器系统,集群系统,嵌入式操作系统
  16. linux 内存清理 释放命令,linux 内存清理释放命令(示例代码)
  17. IE6,7,8开发人员工具使用详解下(浏览器模式、文本模式、JavaScript调试、探查器)
  18. 强化IT能力 中国移动OpenStack玩“大”的
  19. 信息学奥赛一本通C++语言-----2036:【例5.3】开关门
  20. 正菱台体积在线计算机,正多棱台体积,表面积,棱长,斜高,底面积,质量在线计算器_三贝计算网_23bei.com...

热门文章

  1. n分频器 verilog_verilog实现简单分频器
  2. 视频游戏产业因区块链而被限制的 3 个原因
  3. 关于“口算纪元”游戏第一版本开发记录
  4. 超市老板利用人性做营销,锁定大量客户,这一招你也可以用!
  5. 2G显存 用之有道:从玩家需求的转变看显存的发展
  6. 电脑怎么迁移游戏资源,数据迁移能把游戏数据迁移吗
  7. html5的经典特效思路
  8. Unity3D泰课在线 ARPG 课程《泰斗破坏神》系列视频教程附素...
  9. web大作业 静态网页 HTML+CSS+JavaScript橙色的时尚服装购物商城
  10. StudyJams-第06课_篮球记分板