精华内容
下载资源
问答
  • 机器人逆运动学求解方法。选择最优的求解结果。
  • 冗余机器人运动规划与控制模型可以统一各种关节物理极限,如关节变量极限与关节速度极限,同时该模型又可以最终转化为一个标准的二次规划问题。为了实时求解该二次规划问题,提出一种基于线性变分不等式(LVI)的原...
  • 利用几何法求解工业机器人逆运动学是将空间中的机器人结转换为几个正交平面下的几何法求解方法,就有简单,直观的效果。但是,对于机器人的一个空间位置姿态可能对于多种关节角的情况,采用几何法的求解可能会造成,...

    利用几何法求解工业机器人逆运动学是将空间中的机器人结转换为几个正交平面下的几何法求解方法,就有简单,直观的效果。但是,对于机器人的一个空间位置姿态可能对于多种关节角的情况,采用几何法的求解可能会造成,考虑不充分,求解结果变少的情况。但基于它所具有的优点和直观性,我觉得还是可以和大家分享一下我的求解例子。我以工业机器人staubli为例,机器人的前三个关节确定机器人的位置,后三个关节确定机器人的姿态,将第六各关节坐标系建立在机器人的腕关节处。
    第一关节角的求解如下图所示:
    在这里插入图片描述
    对应的matlab代码如下:
    首先定义好机器人的姿态关系:

    n1 = -1;   % 'l'
     n2 = -1;   % 'u'
     n4 = -1;   % 'n'
     if sol(1)==1%~isempty(strfind(configuration, 'l'))
         n1 = -1;
     end
     if sol(1)==2%~isempty(strfind(configuration, 'r'))
         n1 = 1;
     end
     if sol(2)==1%~isempty(strfind(configuration, 'u'))
         if n1 == 1
             n2 = 1;
         else
             n2 = -1;
         end
     end
     if sol(2)==2%~isempty(strfind(configuration, 'd'))
         if n1 == 1
             n2 = -1;
         else
             n2 = 1;
         end
     end
     if sol(3)==1%~isempty(strfind(configuration, 'n'))
         n4 = 1;
     end
     if sol(3)==2%~isempty(strfind(configuration, 'f'))
         n4 = -1;
     end
    

    姿态描述如下:
    在这里插入图片描述
    theta1的逆解代码为:

     r = sqrt(Px^2 + Py^2);
     if sol(1) == 1
         theta(1) = atan2(Py,Px) + pi - asin(d3/r);
     else
         theta(1) = atan2(Py,Px) + asin(d3/r);
     end
     if theta(1)>pi
          theta(1) = theta(1)-2*pi;
     end
    

    第二关节的求解如下图所示:
    在这里插入图片描述
    theta2的逆解代码为:

    V114 = Px*cos(theta(1)) + Py*sin(theta(1))-a1;
    r = sqrt(V114^2 + Pz^2);
    Psi = acos((a2^2-d4^2-a3^2+V114^2+Pz^2)/(2.0*a2*r));
    if ~isreal(Psi)
        theta = [];
    else
        
        theta(2) = atan2(Pz,V114) + n2*Psi;
    

    第三关节的求解如下图示:
    在这里插入图片描述
    theta3的逆解代码为:

    num = cos(theta(2))*V114+sin(theta(2))*Pz-a2;
    den = cos(theta(2))*Pz - sin(theta(2))*V114;
    theta(3) = atan2(a3,d4) - atan2(num, den);
    

    以上是我的推导以及参考机器人工具箱中的代码写的,暂时没有没有发现问题,如果大家在参考的过程中发现了问题,欢迎批评指正。

    展开全文
  • 为克服粒子群算法实现逆运动学求解收敛慢、易陷入局部最优等缺陷,依据得到的关节角度约束关系,以实际角度与理想角度的误差平方和作为适应度函数,提出利用粒子群优化神经网络的学习型算法进行求解。仿真实验验证了...
  • 基于多目标粒子群算法的机器人逆运动学求解方法[J].现代计算机,2020(10):13-17. 0.摘要 采用多目标优化的方式,提出基于多目标粒子群算法的机器人逆运动学求解方法,可以同时实现对位置精度和姿态精度的控制。 1.逆...

    [1]刘洋.基于多目标粒子群算法的机器人逆运动学求解方法[J].现代计算机,2020(10):13-17.

    0.摘要

    采用多目标优化的方式,提出基于多目标粒子群算法的机器人逆运动学求解方法,可以同时实现对位置精度和姿态精度的控制。

    1.逆运动学求解常用方法

    逆运动学求解算法包括:解析法和数值法
    解析法:在我之前的blog中有详细的公式和代码
    大多参考文献说解析法的效果不好,尤其是对自由度高的机械臂,但是也许是我对ur10的仿真过于不刁钻,我现在还未发现这个问题

    https://blog.csdn.net/weixin_44168457/article/details/113241613

    数值解法:数值方法的本质就是将机器人逆运动学问题转换成一个优化问题,再
    利用相关优化方法进行求解。现在主要的方法是神经网络和群体智能算法(包括粒
    子群算法、萤火虫算法、遗传算法等。)
    神经网络:可以很好的解决逆运动学,但是求解精度好坏取决于训练集质量好坏,并且不同的机械臂,不可以通用训练集。

    2.建立机器人模型(基于DH参数建立矩阵)

    在这里插入图片描述
    3.建立多目标函数
    在这里插入图片描述在这里插入图片描述
    位置精度最高、姿态精度最高、关节角度变化最小,多目标优化的目标函数在此建立

    3.多目标粒子群算法

    3.1算法定义
    引入帕累托支配的概念解决多目标的问题,当两组适应度之间存在帕累托支配关系时,可以根据支配关系进行比较评价优劣。但很多时候两组适应度之间并不存在帕累托支配关系,无法比较评价优劣,此时两组解均应当进行保留。所以最后求解得到的是一个帕累托最优解的集合。
    3.2算法流程
    在这里插入图片描述
    这个流程图倒是看起来简单易懂哈!
    论文之中详细阐述了每个部分的内容,我的理解这一部分包括
    1)如何将粒子群应用于机器人的位置控制上
    2)如何处理多目标优化下的最优解问题
    3.3适应度函数的构造
    ①位置的适应度函数在这里插入图片描述

    ②姿态的适应度函数
    在这里插入图片描述
    3.4帕累托解集的更新
    存储能力和计算速度的问题,对定期删除掉掉帕累托解集中的一部分相对不好的解。
    3.5历史最优解的提取
    历史最优解是粒子群算法中的核心参数,包括每个粒子的局部最优解 和整个粒子群的全局最优解。它们也需要随着算法的迭代不断进行更新。局部最优解受帕累托支配关系就可以确定,全局最优解从帕累托最优解集中随机选取。
    3.6多解优化
    就是我们粒子群算法得到的是一个帕累托最优解集,我们要选出最好的那个,
    评价函数如下:
    在这里插入图片描述

    4.总结

    文章的最后还有仿真,我没有写进来,包括我也没有学习粒子群的具体的算法。我觉得是这样,现在很多“智能算法”都用来处理轨迹规划,或者说是机械臂控制的问题,我觉得先知道什么算法可以用来做什么就可以了。好说回来,粒子群算法处理逆运动学问题可以有很高的机械臂运动的位置和姿态精度,但是同样受逆运动学求解的多解性的影响,并且对计算速度和计算机GPU的影响也很大。
    后续我看到其他算法的求解,会回来补充优缺点~

    展开全文
  • 针对该问题,提出一种基于类电磁机制的逆运动学求解方法,随机抽取问题可行域内一组初始解,仿照电磁理论中带电粒子间吸引一排斥机制,使得粒子快速收敛到问题的最优解,并结合变尺度法进一步提高求解精度。...
  • 基于CMAC的双足步行机器人逆运动学控制,阮晓钢,李志谦,针对双足步行机器人腿部逆模型求解问题,提出一种基于CMAC神经网络的机器人逆运动学控制方法,设计了CMAC神经网络控制系统。控制系�
  • 采用用于冗余度机器人求解的扩展雅克比方法,通过引入次级任务实现了冗余度机器人的...对4自由度冗余机器人进行了逆运动学求解和实验验证。并给出了机器人关节空间的期望变量,得到了关节空间和笛卡尔空间的轨迹误差。
  • 采用D-H法通过连杆坐标系变换矩阵建立机械臂运动控制模型,该模型呈现非常严重的非线性特性,传统...仿真试验和实际应用表明该算法在稳定性、搜索成功率以及收敛精度有显著提高,能有效解决机器人逆运动学模型的求解
  • 为解决机器人逆解过程中存在解被丢失、大量矩阵逆乘、多组解的问题,提出了一种新的推导MO-TOMAN机器人逆运动学方法。在解的推导过程中,采用双变量正切函数避免了解被丢失的可能性,回避了大量的逆矩阵相乘,简化...
  • 接下来,在本篇博客中,我们将讨论如何使用RobWork求解UR3机器人运动学逆解,使用的方法是通用的雅可比数值迭代方法,数值迭代算法虽然没有封闭解(也叫解析解)算法计算的结果精确,求解的速度也比封闭解算法慢...

    在上一篇博客文章中,我们介绍了如何创建一个使用RobWork机器人框架的工程,以及如何加载机器人设备文件。
    接下来,在本篇博客中,我们将讨论如何使用RobWork求解UR3机器人的运动学逆解,使用的方法是通用的雅可比数值迭代方法,数值迭代算法虽然没有封闭解(也叫解析解)算法计算的结果精确,求解的速度也比封闭解算法慢不少,并且在有解的情况下也可能会求解失败,但是雅可比数值迭代算法的优势也非常的明显,比如:通用,我只需要正向运动学的DH参数就可以进行求逆操作,封闭解算法比较理想,但是真实情况是由于制造和装配误差的存在,基于机器人厂商给定的设计图纸的尺寸建立的正向运动学是不准确的,就我所接触的一些品牌的机器人来说,国产机器人的制造精度貌似还不错,基本满足使用要求,此时可以使用封闭解算法来求逆。相反,知名度很大的UR机器人精度就差别很大,它的精度维持主要靠出厂时标定的DH补偿数据,UR机器人出厂之前都会进行运动学参数标定,标定得到的补偿数据会存放在一个叫calibration.conf文件中,并将该文件存放在与机械臂配套的机器人控制器里,用户可以通过ssh远程登录访问控制器来获取UR机器人的标定补偿数据。不同公司的策略不一样,UR机器人公司的这种简单粗暴的方式从另外一种角度来看可能也挺好的。你要用这些数据的时候直接从这里拿即可,具体的操作如下:

    liuqiang@liuqiang-Vulcan-JINGANG-GTSeries:~$ssh root@192.168.1.111 #登录机器人控制器
    root@192.168.1.111's password:  #需要输入密码,默认的密码是easybot
    Linux ur-2017332604 3.14.23-rt20URKernel #1 SMP PREEMPT RT Fri Mar 31 20:33:18 CEST 2017 i686
    
    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.
    
    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
    permitted by applicable law.
    root@ur-2017332604:~# cat ./.urcontrol/calibration.conf #这条命令就是打印标定的DH补偿数据
    [mounting]
    delta_theta = [ -5.05343367106411137e-05, -0.0561242156763783057, -0.0628157016125706208, 0.118814438034714087, 5.68822754944051158e-05, -1.45429512938645578e-05]
    delta_a = [ 1.85427703966640276e-05, 0.000418280909411400392, 0.001565903694771692, -9.66540899511680791e-06, -2.93410449126249217e-05, 0]
    delta_d = [ -5.56630992100959343e-05, 8.16504944596539062, -14.4282499666997612, 6.26317959859598705, -3.9946104585394937e-05, 0.000367523159254548593]
    delta_alpha = [ -0.000626175392884231741, -0.00167062908967277168, 0.00403522262881641277, -0.000368945620575544808, 0.000173987342825920877, 0]
    joint_checksum = [ 0xe9245b66, 0x3d2f29a6, 0x840da431, 0x5f70ae22, 0x6e93f19, 0xcee31fb0]
    calibration_status = 2 # 0 == notInitialized / 1 == notLinearised / 2 == Linearised
    joint_raw_offset = [ 0x1d0897, 0x5d8476, 0x1aec25, 0x9cf1b9, 0x9bec11, 0x1da4e0]
    joint_selftest_data_crc = [ 0xddf34bf6, 0xa7727e85, 0xe09cd766, 0xb70c73b2, 0xd9e9302e, 0x5ec3a46c]
    root@ur-2017332604:~# exit #退出登录
    logout
    Connection to 192.168.1.111 closed.
    

    通常我们只需要delta_theta, delta_a, delta_d, delta_alpha的数据,将这些补偿数据跟标准的DH参数表中的数据进行叠加,然后计算正向运动学,你会发现,结合DH补偿参数后,正向运动学的结果跟从控制器上读到的TCP数据(工具中心点位姿)是基本一致的(在机器人官方宣称的精度范围内)。

    你可能会注意到,叠加了DH补偿参数之后,之前基于标准的DH参数推导的封闭逆解算法现在无法发挥作用了。此时,你会发现基于雅可比数值迭代的逆解算法派上了用场。

    这就是为什么基于雅可比的数值迭代算法有那么多缺点,但是在真实的项目中用的还很普遍,这也是我写这篇博客的原因。
    因为雅可比数值迭代逆解算法虽然简单粗暴,但是很实用。

    CMakeLists.txt

    cmake_minimum_required(VERSION 3.5)
    
    project(ur_ik_solver LANGUAGES CXX)
    
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    set(RobWork_DIR "/home/liuqiang/SourceCode/RobWork/RobWork/cmake")
    find_package(RobWork)
    include_directories(${ROBWORK_INCLUDE_DIRS})
    add_executable(ur_ik_solver main.cpp)
    target_link_libraries(ur_ik_solver ${ROBWORK_LIBRARIES})
    

    main.cpp

    #include <iostream>
    #include <rw/common/Ptr.hpp>
    #include <rw/loaders/WorkCellLoader.hpp>
    #include <rw/models/WorkCell.hpp>
    #include <rw/models/Device.hpp>
    #include <rw/kinematics/State.hpp>
    #include <rw/invkin/JacobianIKSolver.hpp>
    #include <rw/math.hpp>
    #include <ctime>
    
    using namespace rw::common;
    using namespace rw::loaders;
    using namespace rw::models;
    using namespace rw::invkin;
    using namespace rw::kinematics;
    using namespace rw::math;
    
    int main() {
        WorkCell::Ptr workcell =  WorkCellLoader::Factory::load("/home/liuqiang/UR3_2015/UR3.xml");
        State state = workcell->getDefaultState();
        Device::Ptr device = workcell->findDevice("UR3_2015");
        JacobianIKSolver::Ptr solver = ownedPtr(new JacobianIKSolver(device, state));
        solver->setSolverType(JacobianIKSolver::SVD);
        solver->setMaxIterations(50); //如果不设置,默认是迭代20次
        Q q1(6, 1.57, -2.4, 2.4, -1.57, -1.57, 0);
        device->setQ(q1, state);
        std::cout << device->getQ(state) << "\n";
        Transform3D<> tcp_pose = device->baseTend(state);
        std::cout << tcp_pose << "\n";
        Q q2(6, 1.5, -2., 2., -1.5, -1.5, 0.5);
        device->setQ(q2, state);
        std::cout << device->getQ(state) << "\n";
        Transform3D<> tcp_pose2 = device->baseTend(state);
        std::cout << tcp_pose2 << "\n";
        device->setQ(q1, state);
        std::cout << device->getQ(state) << "\n";
        clock_t start_time = clock();
        for (int i = 0; i < 10000; ++i) {
            auto result = solver->solve(tcp_pose2, state);
            std::cout << result.size() << "\n";
            std::cout << result[0] << "\n";
        }
        clock_t end_time = clock();
        std::cout << "use: " << (static_cast<double>(end_time - start_time) / CLOCKS_PER_SEC) / 10000 << " s\n";
        return 0;
    }
    

    在RobWork机器人框架中,Device设备对象本身是不存储状态信息的(当然也不是什么数据都不存储),即Stateless无状态的设备,设备的状态信息存储在一个单独的State对象中,因此涉及操作状态数据时,就需要传入单独维护的State对象。
    基于RobWork的数值迭代解在耗时上确实比封闭解长不少,在上述的10000次雅可比数值迭代结果的平均值是每次迭代耗时use: 0.00144038 s,即约1.5 ms
    而我之前使用单纯的封闭解算法计算得出的耗时为0.0000608s,即约0.061ms,简单计算得出雅可比数值迭代一次的耗时是封闭解算法的23.69倍。

    结论:能用封闭解算法的情况下使用封闭解当然是最好的了,如果现实条件不允许,那么使用数值迭代法不失为一种良策。

    展开全文
  • 一、运动学 1、正解 不考虑横向髋关节运动时,四足机器人的腿部可以简化成二连杆机构,如上图。如果已知α,β\alpha,\betaα,β,可以通过下式求P[x,y]位置: x=−L1sin⁡α−L2sin⁡(α−β)x =- L_1\sin\alpha –...
  • 对该机器人进行了运动学分析,通过几何法和D—H矩阵变换求解机器人关节空间内的逆运动学问题,得到了任务空间中基于管道扫查特征参数的关节变量表达式,为相贯线扫描路径参数的在线优化提供了设计途径。...
  • 针对超冗余度机器人的运动学逆解求解快速性与优化性难以兼顾的问题,对于一类9自由度超冗余全方位移动操作臂,提出一种关节等效和局部优化相结合的逆运动学求解方法。分析系统结构特点,在位姿分离的基础上对不同...
  • 曲臂高空作业车末端执行器位置和姿态的确定,由各关节角协调控制。各关节角依据串联机器人正、逆运动学 求解方法,D-H参数来确定。正、逆运动学求解方法得到的相关参数,能为曲臂高空作业车设计提供理论依据。
  • 出于学习机器人学算法和C++编程的目的,我写了一个对上述提到的C++版本的函数库的测试算例,使用牛顿拉普森方法求解机械臂逆运动学解,代码链接:https://github.com/GProbot/modern-robot 算例说明:对一个两连杆...

    在过去的好几个月的时间,因为工作需要,把《现代机器人学》这本书认真地学习了一下,个人感觉这本书的阅读价值极高,可显著提高机器人学算法,数学能力。

    这本教材是提供了所讲算法的官方的matlab代码(链接),另外也有人写了C++(链接)、python及其它版本。

    出于学习机器人学算法C++编程的目的,我写了一个对上述提到的C++版本的函数库的测试算例,使用牛顿拉普森方法求解机械臂逆运动学解,代码链接:https://github.com/GProbot/modern-robot

    算例说明:对一个两连杆机构求逆解

    程序运行结果:

    linux-gp@linuxgp-virtual-machine:~/modernrobotic$ ./robot_test 
    Slist=
     0  0  0
     0  0  0
     1  1  1
    -0 -0 -0
    -0 -1 -2
    -0 -0 -0
    M = 
    1 0 0 2
    0 1 0 0
    0 0 1 0
    0 0 0 1
    T = 
    1 0 0 1
    0 1 0 1
    0 0 1 0
    0 0 0 1
    
    initial joint = 
         0
    1.0472
         0
    joint result = 
    -4.33401e-08
          1.5708
         -1.5708
    FKinSpace = 
               1 -4.33401e-08            0            1
     4.33401e-08            1            0            1
               0            0            1            0
               0            0            0            1
    FKinSpace = T
    

     

    展开全文
  • 机械臂的逆运动学问题就是由给定的末端执行器位置和方向,确定机械臂各个关节变量的值。机械臂的求解方法可以分为两大类:数值解和解析解(封闭解)。  数值解和解析解有各自的特点,商用的机械臂一般都会采用解析...
  • 以8自由度凿岩机械臂为研究对象,提出了一种基于运动轨迹的求解多关节冗余机器人运动学逆...该方法在求解位于连续轨迹上的多个工作点的逆运动学问题时,求解的机械臂各关节转动或移动变化平缓,而且逆运动学求解精度可
  • 机器人学——3.3-逆运动学

    千次阅读 2020-04-28 10:22:19
    上一节已经展示了机械臂的正运动学求解方法,即在给定关节坐标以及可选工具和基座变换的条件下,如何确定末端执行器的位姿。 实际应用中的另一个问题是运动学的问题:给定期望的末端执行器位姿 ξE\xi_EξE​,...
  •  机械臂的逆运动学问题就是由给定的末端执行器位置和方向,确定机械臂各个关节变量的值。机械臂的求解方法可以分为两大类:数值解和解析解(封闭解),解析解又可分为代数解和几何解。  数值解和解析解有各自的...
  • 在喷涂机器人中引入非正交非球型3R手腕,根据6个转动关节的空间布局特征,采用矩阵方程和方向余弦相结合的方法,对非正交非球型手腕6R串联型喷涂机器人进行了逆运动学分析,推导出仅含4个未知参数的4个非线性方程组成的...
  • 包含了UR机器人运动学建模与运动学解的求解过程(解析法),通过实际的机器人参数验证该求解方法的正确性,分析了机器人的奇异位置,并编制好matlab程序便与仿真。
  • 为解决一般6R机器人逆运动学问题,提出一种基于符号运算和矩阵分解的高精度逆运动学算法。采用符号运算求解逆运动学方程的系数矩阵,避免了大量中间过程的浮点数计算累积误差;通过矩阵奇异值分解优化方法提高消元...
  • 机器人逆运动学就是即在已知末端的工具坐标系相对于基坐标系的位姿。计算所有能够到达指定位姿的关节角。求解可能出现: 不存在相应解 存在唯一解 存在多解 我们把机械臂的全部求解方法分为两大类:...
  • 7自由度机械臂利用7个关节自由度控制末端 的6个位姿变量,具有冗余自由度,可以使一种末 端位姿对应关节角空间内的无限组解,大大提高了 操控的灵活性.冗余机械臂在实现末端位姿...解机械臂运动学逆解带来一定的困难.
  • 动态微分方程是通过Kane方法导出的,然后通过四阶Runge-Kutta方法进行数值求解。基于这些微分方程的数值解,最终确定了产生谐波梯形波运动所需的施加关节转矩,为我们提供了有关履带机器人机构步态控制的重要信息...
  • 6轴机器人运动学正解,解2

    千次阅读 2019-06-27 15:33:18
    解计算方法可以参考以下书籍 机器人学导论——分析、系统及应用 电子工业出版社 机器人学导论第3版 机械工业出版社 机器人学建模、规划与控制 西安交通大学出版社 对于关节1,2,3可以从运动方程手工推导出各个关节...
  • 以PUMA-560机器人为例,使用代数法进行逆运动学求解。 已知: T60=T01*T12*T23*T34*T45*T56; T60左乘T01的逆得到: T1=inv(T01)*T60=T12*T23*T34*T45*T56=T2; 使用matlab计算T1和T2: T1 = [ (nx*cos(theta1))...
  • 采用旋量理论和指数积方法建立此机器人的运动学模型,完成了正运动学及雅可比矩阵的求解,并且基于旋量理论采用Paden- Kahan子问题完成了逆运动学求解.在Matlab中对其运动学算法进行了仿真分析,验证了运动学算法的...

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
关键字:

机器人逆运动学求解方法