精华内容
下载资源
问答
  • 逆运动学

    万次阅读 2018-05-25 15:21:38
    逆运动学(IK)与前向运动学基本上是相反的思想。 解你运动学问题有两种不同的方法。第一种是纯粹的数值方法。从本质上讲,这种方法是猜测和迭代,直到错误足够小,或者直到认为放弃。牛顿 - 拉夫逊算法是一种常见...

    逆运动学(IK)与前向运动学基本上是相反的思想。

    解你运动学问题有两种不同的方法。第一种是纯粹的数值方法。从本质上讲,这种方法是猜测和迭代,直到错误足够小,或者直到认为放弃。牛顿 - 拉夫逊算法是一种常见的选择,因为它在概念上简单并且如果初始猜测与解“足够接近”时具有二次收敛速率。但是,不能保证算法会收敛或足够快地满足应用要求,并且只返回一个解决方案。为了针对各种可能的姿势产生解决方案,必须使用不同的初始条件。 数值方法的优点是相同的算法适用于所有串行机械手。

    另一种更优选的解决方法是一种称为“分析”“封闭形式”的解决方案。封闭形式解决方案是特定的代数方程,它不需要迭代求解,并且有两个主要优点:通常它们比数值方法更快解决问题,并且更容易制定哪些可能的解决方案是适当的。但是,只有某些类型的机械手可以以封闭形式解决。显而易见的问题是,哪种类型的机械手具有封闭形式的解决方案?研究表明,如果满足以下两个条件中的任何一个,那么串行机械手可以以封闭形式解决。

    • 三个相邻的关节轴在一个点上相交
    • 三个相邻的关节轴是平行的(在技术上这是一个特殊情况,因为平行线在无穷远处相交)

    幸运的是,目前在工业中使用的六个自由度串行机械手中的大多数将满足上述条件之一。

    通常,机械手中的最后三个关节是满足条件1的旋转关节,这样的设计被称为球形手腕,并且公共交点被称为手腕中心。这种设计的优点在于,它可在运动学上解耦端部执行器的位置和方向。

    在数学上,这意味着不用同时求解12个非线性方程(整个齐次变换矩阵的前三行中的每一项一个方程),现在可以独立地解决两个更简单的问题:首先是手腕中心的笛卡尔坐标,然后是旋转的组成以定向末端执行器。从物理上讲,具有球形手腕的六自由度串联机械手将使用前三个关节来控制手腕中心的位置,而最后三个关节将根据需要来定向末端执行器。

    我们现在将正式确定带球形手腕的串行机械手的解决方案。考虑这里所示的六自由度机械手,其中关节4,5和6组成球形手腕。腕部中心(WC)和末端执行器(EE)相对于基坐标0的位置分别由以下表达式给出:这里写图片描述这里写图片描述。EE相对于WC的位置由以下表达式给出:这里写图片描述。请注意,所有三个矢量均以基坐标0的形式表示,如前导上标“0”所示。
    这里写图片描述

    步骤1:完成机械手的DH参数表。 提示:将第4,5和6关节坐标系的原点与WC一致。
    步骤2:找到WC相对于基坐标系0的位置。回想一下,基坐标系0和末端执行器之间的变换关系具有以下形式:
    这里写图片描述

    例如,如果你选择z4平行于z6并且从WC指向EE,那么这个位移是沿着z6的简单平移。这种位移的大小,我们称之为d,将取决于机械手的尺寸,并在URDF文件中定义。此外,由于r13,r23和r33定义了EE相对于基坐标系0的Z轴,所以WC的笛卡尔坐标是:
    这里写图片描述

    步骤3:找到变量q1,q2和q3,使得WC具有等于方程(3)的坐标。这是艰难的一步。 解决问题的一种方法是反复将连接投影到平面上并使用三角函数来求解关节角度。不幸的是,没有适用于所有操纵器的通用配方,因此您必须进行试验。 下一篇中的示例将为您提供一些有用的指导。

    步骤4:一旦前三个变量已知,通过应用变换关系式根据WC来计算这里写图片描述.

    步骤5:找到与旋转矩阵对应的一组欧拉角,
    这里写图片描述

    步骤6:在一组可能的解决方案中选择正确的解决方案

    <下一篇>

    展开全文
  • 机器人逆运动学

    2019-04-09 19:02:07
    机器人逆运动学
  • UR机械臂正逆运动学求解

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

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

           以UR5机械臂结构和尺寸参数为例进行正逆运动学求解,下图分别是UR5结构图和标准DH系参数:

     

    1. 正运动学求解

    正运动学是已知关节六个角度求变换矩阵T

    其中:

    整理得:

    带入DH参数,求解:

            

    最终变换矩阵:

    正运动学求解完毕。

    2. 逆运动学求解

    逆运动学是已知变换矩阵T,求六个关节角度 。逆运动学求解有解析法,几何法,迭代法,这里采用解析法求解。

    2.1 两个简单的数学方法

    2.1.1 求角度

     这个逆运动学算法求解的角度范围是

     

    因为标准的反正切arctan的值域是

    所以不能使用,这里介绍一个改进的反正切求法 Atan2(y, x)(Matlab里有这个函数),它的值域可以满足要求。

    2.1.2 解方程

    首先进行三角恒等变换,令

    其中:

    然后带入原方程:

    2.2 约定

    为了简化书写,约定:

    2.3 求解1,5,6关节角度

    已知:

    其中:

    等式左边:

    等式右边:

    2.3.1 求关节角1

    利用等式左右两边第3行,第4列对应相等求关节角1。

    整理得:

    设:

    则  

    根据前面介绍的解方程的方法:

    2.3.2 求关节角5

    利用等式左右两边第3行,第3列对应相等求关节角5。

    解得:

    2.3.3 求关节角6

    利用等式左右两边第3行,第1列对应相等求关节角6。

    设:

    根据前面介绍的方法:

    其实可以通过化简得到式中

    2.4 求解2,3,4关节角度

    已知:

    其中:

    等式左边等于

    等式右边等于

    2.4.1 求解关节角3

    利用等式左右两边第1行,第4列对应相等,第2行,第4列对应相等,求关节角3。

    为了简化,设:

    将m,n带入上式得

    式子③④平方和为

    因为

    所以

    2.4.2  求解关节角2

    将③④展开得:

    将关节角3带入⑤⑥,求关节角2得

    2.4.3  求解关节角4

    的第2行第2列,第1行第2列求 

    2.5 总结

    2.5.1 求解公式

    2.5.2 奇异位置

    1.肩关节奇异位置

    此时末端执行器参考点O6位于轴线z1和z2构成的平面内,关节角1无法求解。

    2.肘关节奇异位置

    此时关节角2无法求解。

    3.腕关节奇异位置

    此时轴线z4和z6平行,关节角6无法求解。

    2.6 实例

    利用Matlab机器人库 ur5 DH参数:


    alpha1 = pi/2;          a1=0;                 d1=89.459;

    alpha2 = 0;              a2=-425;           d2=0;

    alpha3 = 0;              a3=-392.25;      d3=0;

    alpha4 = pi/2;           a4=0;               d4=109.15;

    alpha5 = -pi/2;          a5=0;               d5=94.65;

    alpha6 = 0;               a6=0;               d6=82.3;

    取 theta1 = 1;  theta2 = 1;  theta3 = 1;  theta4 = 1;  theta5 = 1;  theta6 = 1;  (不要纠结theta选这6个数值是否有实际意义,这里只验证算法的有效性)

    • 将theta带入正运动学公式,求T:

    • 将T带入逆运动学公式, 反求theta

    theta = 

    • 再将8个theta带入正运动学公式,反求8个T:

    8个T均等于

    验证了算法的有效性

    展开全文
  • 逆运动学研究

    2014-04-03 10:12:51
    基于MATLAB的机器人逆运动学研究
  • 实验目的: 1) 基于robotics机器人库构建机器人; 2) 对构建的机器人进行逆运动学分析; 3) 了解和熟悉机器人逆运动学的作用
  • 运动系统使用前向运动学的运动学原理,每个关节的角度都由逆运动学的伪逆雅各布运动所发现的关节速度来更新。 纸: link1: 具有反向运动学PD-伪反向Jacobian和正向运动学Denavit Hartenberg的机器人操纵器控制...
  • UP-6逆运动学

    2018-03-19 18:09:57
    安川机器人逆运动学求解,基于常用的灵巧空间,并不能算出所有情况的逆解
  • 机器人逆运动学关键公式,仅供机器人相关领域从业者使用,运动学(kinematics)是力学的一门分支,专门描述物体的运动,即物体在空间中的位置随时间的演进而作的改变,完全不考虑作用力或质量等等影响运动的因素。...
  • 该文件以6自由度puma560为例说明机器人的一种正逆运动学的编程方法(正运动学为DH法,逆运动学为解析解),以及机器人工具箱(matlab robotic toolbox)初步的运动学使用方法。
  • 六轴机械臂逆运动学求八组逆解MATLAB程序,2种版本的程序,经测试可用。六轴机械臂逆运动学求八组逆解MATLAB程序,2种版本的程序,经测试可用。六轴机械臂逆运动学求八组逆解MATLAB程序,2种版本的程序,经测试可用。六...
  • 机械手臂的逆运动学
  • 该代码可以实现UR5正逆运动学的求解,其中逆运动学为8组解,正运动学输入六个关节角的角度值,UR5的DH坐标即可
  • 机器人学,PUMA560正运动学公式和逆运动学公式的 matlab 代码,包含符号运行结果和数值仿真代码。
  • 针对2DOF机械臂做的simulink仿真,包含正运动学和逆运动学
  • 胡椒逆运动学 胡椒机器人的逆运动学计算
  • 此资源包括机器人或机械臂逆运动学轨迹规划matlab代码,由空间中三维坐标反求六轴角度值,基于6自由度关节机器人,在matlab环境上已验证,可直接建立工程运行。
  • Delta并联机器人正逆运动学分析_及matlab仿真分析(含运动学推导文档)
  • 针对PUMA机器人: ①建立坐标系; ②给出D-H参数表; ③推导正运动学、逆运动学; ④编程给出工作空间。
  • 许多低成本的爱好类机器人,只有4个关节(自由度)。本文档描述了如何用MATLAB的机器人工具箱1来确定这种机器人的逆运动学
  • 三自由度机械臂运动学及逆运动学分析_及matlab仿真分析程序(含文档推导过程)
  • Simulink模型利用逆运动学方程和系统雅可比矩阵来模拟机器人,使其写出或画出hello这个单词
  • 逆运动学

    万次阅读 2018-05-19 16:02:58
    1、在机器人实际应用中,逆运动学往往更有用,这里...2、逆运动学:如果知道一个物体的笛卡尔坐标位姿,那么机器人需要怎样的关节坐标才能接近这个物体。  以下主要说明 一般逆解不唯一: 以PUMA560模型为例(md...

    1、在机器人实际应用中,逆运动学往往更有用,这里可参看:http://blog.sina.com.cn/s/blog_131fa47b20102whij.html(选中后,右键转到.....)。机器人学导论中第三章和第四章亦可见。

    2、逆运动学:如果知道一个物体的笛卡尔坐标位姿,那么机器人需要怎样的关节坐标才能接近这个物体。

      以下主要说明 一般逆解不唯一:

    以PUMA560模型为例(mdl_puma560),先定义一个位姿状态,有正解函数fkine( )得末端位姿.---

    qn---->(0,pi/4,-pi,0,pi/4,0)%机器人标准状态(关节坐标)

    qn =
             0    0.7854    3.1416         0    0.7854         0

     T=p560.fkine(qn)     %对应的机器人末端位姿
    T =
       -0.0000    0.0000    1.0000    0.5963
       -0.0000    1.0000   -0.0000   -0.1501
       -1.0000   -0.0000   -0.0000   -0.0144

             0         0         0    1.0000

    这样先由qn的标准状态得到末端位姿(用正运动学解函数fkine(qn)),再用ikine6s的方法来计算逆运动学的封闭解。所以要实现末端位姿T,所需的关节坐标为

    qi=p560.ikine6s(T)      %由逆解函数ikine6s( )---工具箱解析法函数求出,与函数ikine( )数值法不同,可以打开查看具体代码
    qi =

        2.6486   -3.9270    0.0940    2.5326    0.9743    0.373      %与标准关节坐标值不一样

    同样的,T1=p560.fkine(qi)  %对应的末端位姿 与qn确定的一样。
                T1 =
                            -0.0000    0.0000    1.0000    0.5963
                             0.0000    1.0000   -0.0000   -0.1500
                            -1.0000    0.0000   -0.0000   -0.0144

                              0         0         0    1.0000

    即:不同的关节坐标得到了同样的末端位姿————封闭解不唯一。

    画出观察(注意影子):               p560.plot(qn)       ——————————————————     p560.plot(qi)

              

    以上是逆运动学求解由工具箱函数实现,在实际逆运动学求解方法中有数值解法和封闭解法两种。

    数值解:迭代求解的方式,求解速度慢;优势在于它能够求解处于奇异位形以及非6关节型的机械臂。

    封闭解:一般是针对像PUMA机器人一样的,拥有六个旋转关节的操作臂(存在几个正交关节轴或者多个关节扭转角为0或pi)进行的基于解析形式的解法,或者指对于不高于四次多项式不用迭达便可完成求解。过程中使用的代数法和几何法。(在参看的博文中有)

    展开全文
  • ikfast_c++逆运动学求解程序
  • 基于MATLAB的机器人逆运动学研究
  • PyKDL---正运动学和逆运动学正运动学 串联机械臂运用过程中常用到正逆运动学,正运动学指的是已知关节空间变量关节角或角速度,求取操作空间的位置或速度;逆运动学是指已知操作空间的位姿或速度,求取关节空间的...

    PyKDL---正运动学和逆运动学


    串联机械臂运用过程中常用到正逆运动学,正运动学指的是已知关节空间变量关节角或角速度,求取操作空间的位置或速度;逆运动学是指已知操作空间的位姿或速度,求取关节空间的关节角或关节速度。

    正运动学

    首先需要获取运动链,获取方法可以参照我写的PyKDL—运动段、运动链和运动树,本文不在介绍。
    运动学部分需要明白一个特点,输入参数也会输出参数,应用了Python的引用机制,对于串联机器人,运动学都是基于运动链完成,都需要输入运动链。

    #正运动学
    fk = PyKDL.ChainFkSolverPos_recursive(chain)
    
    pos = PyKDL.Frame()
    q = PyKDL.JntArray(7)
    for i in range(7):
        q[i] = 0
    q[0] = 1
    fk_flag = fk.JntToCart(q, pos)
    print "fk_flag", fk_flag
    print "pos", pos
    

    逆运动学

    KDL库的逆运动学是数值解法求取的,有多种数值解法,相关解法原理可能在后面我也会写,本文给出其中一种。

    #逆运动学
    ik_v = PyKDL.ChainIkSolverVel_pinv(chain)
    ik = PyKDL.ChainIkSolverPos_NR(chain, fk, ik_v, maxiter=100, eps=math.pow(10, -9))
    
    qq = PyKDL.JntArray(7)
    qq_k = PyKDL.JntArray(7)
    ik.CartToJnt(qq_k, pos, qq)
    print "qq:", qq
    

    完整代码

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    import math
    
    import PyKDL
    
    from urdf_parser_py.urdf import URDF
    from pykdl_utils.kdl_parser import kdl_tree_from_urdf_model
    
    robot = URDF.from_xml_file("/home/d/catkin_ws/src/robot_description/armc_description/urdf/armc_description.urdf")
    tree = kdl_tree_from_urdf_model(robot)
    
    print tree.getNrOfSegments()
    chain = tree.getChain("base_link", "sensor_link")
    print chain.getNrOfSegments()
    print chain.getNrOfJoints()
    
    #正运动学
    fk = PyKDL.ChainFkSolverPos_recursive(chain)
    
    pos = PyKDL.Frame()
    q = PyKDL.JntArray(7)
    for i in range(7):
        q[i] = 0
    q[0] = 1
    fk_flag = fk.JntToCart(q, pos)
    print "fk_flag", fk_flag
    print "pos", pos
    
    #逆运动学
    ik_v = PyKDL.ChainIkSolverVel_pinv(chain)
    ik = PyKDL.ChainIkSolverPos_NR(chain, fk, ik_v, maxiter=100, eps=math.pow(10, -9))
    
    qq = PyKDL.JntArray(7)
    qq_k = PyKDL.JntArray(7)
    ik.CartToJnt(qq_k, pos, qq)
    print "qq:", qq
    

    也可参考另一个博客PyKDL程序,代码如下

    #coding=utf-8
    import numpy as np
    import PyKDL as kdl
    # import copy #用于深度拷贝
     
    # 注意一些基本概念
    # Segment初始化由绕的轴和末端姿态来生成,可能跟书上的D-H方法有点不一样,区别在于用末端和轴来定义一个关节
    #   轴是在当前关节的坐标系中绕轴V旋转,默认设置为kdl.Joint.RotZ
    #   f_tip,末端在当前坐标系中的姿态
     
    jnts = []
    frms = []
     
    for i in range(6):
        jnts.append(kdl.Joint(kdl.Joint.RotZ))
     
    # 注意,这个框架是f_tip,末端
    frm1 = kdl.Frame(kdl.Rotation.RotX(-np.pi/2), kdl.Vector(0, 0, 239.5))
    frm2 = kdl.Frame(kdl.Rotation.RotX(0), kdl.Vector(250, 0, 0))
    frm3 = kdl.Frame(kdl.Rotation.RotX(np.pi/2), kdl.Vector(0, 262, 0))
    frm4 = kdl.Frame(kdl.Rotation.RotX(-np.pi/2), kdl.Vector(0, 0, 0))
    frm5 = kdl.Frame(kdl.Rotation.RotX(np.pi/2), kdl.Vector(0, 0, 0))
    frm6 = kdl.Frame(kdl.Rotation.RotX(0), kdl.Vector(-168, 0, 0))
     
    frms.append(frm1)
    frms.append(frm2)
    frms.append(frm3)
    frms.append(frm4)
    frms.append(frm5)
    frms.append(frm6)
     
     
    rbt = kdl.Chain() #建立机器人对象
     
    link = []
    for i in range(6):
        link.append(kdl.Segment(jnts[i], frms[i]))
        rbt.addSegment(link[i])
     
    fk = kdl.ChainFkSolverPos_recursive(rbt)
     
    p = kdl.Frame()
    q = kdl.JntArray(6)
    q[0] = 0
    q[1] = 0
    q[2] = 0
    q[3] = 0
    q[4] = 0
    q[5] = 0
     
    fk.JntToCart(q, p)
     
    print(p)
    
    展开全文
  • 逆运动学开发包ikan

    2008-08-25 19:30:25
    逆运动学开发包,ikan,i逆运动学开发包
  • 总结出的逆运动学IK算法数学推导过程,转化为相应代码就可正常使用,仅适用于共轴机器人
  • 机器人逆运动学求解新方法。选择最优的求解结果。
  • 文章目录Modern Robotics运动学数值解法及SVD算法前言数值逆运动学牛顿-拉普森方法数值逆运动学算法奇异值(SVD)分解算法基于SVD分解计算伪逆矩阵(C语言)计算伪逆算法的测试验证一般机器人逆运动学数值解法实现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,305
精华内容 5,322
关键字:

逆运动学