逆运动学问题如何解决?


20

机器人手臂的正向运动学很容易解决。我们可以使用Denavit-Hartenberg变换矩阵表示每个关节。

例如,如果关节是线性致动器,它可以具有变换矩阵:ith

Ti=[10000100001di0001] ,其中扩展长度由定义di

而旋转链接可能是:

Ti=[100L0cosαisinαi00sinαicosαi00001]其中是角度,是链接的长度。αL

然后,我们可以通过乘以所有变换矩阵来找到末端执行器的位置和方向。Ti

问题是,我们如何解决逆问题?

在数学上,对于期望的端部执行器位置中,找到参数,使得。有什么方法可以解决这个问题?MdiαiTi=M

Answers:


11

回想过去,当我学习并逐步完善时,我使用了简单的渐变跟踪来解决IK问题。

在模型中,您尝试将每个关节旋转一个微小的量,看看对端点位置误差有多大的差异。完成此操作后,然后将每个关节旋转与其所产生的收益成比例的量。然后,一遍又一遍地做,直到足够接近为止。

通常,这称为梯度跟踪或山峰跟踪。想象一下具有两个自由度的机械臂:

我知道

旋转关节A一点点即可使端点沿方向a移动。旋转关节B一点点即可使端点沿方向b移动。这两个都使我们靠近目标的距离大致相同,因此我们应该以相同的速度旋转两个关节。

如果要绘制到目标的距离与关节角度的关系图,它将看起来像这样:

我知道

我在某些轮廓上加了颜色只是为了帮助。我们可以看到该算法采用的路径。您会注意到,在关节空间中,所采取的路径看起来不是最佳的。它需要一条曲线。但是,在实际空间中,您会看到终点与目标之间的直线相当。您还可以看到,实际上有两种解决方案,该算法刚刚找到了最接近的一种。

这不是解决逆运动学问题的唯一方法。当然,这也不是最好的方法。

优点:

  • 从概念上讲,它很简单,如果您只是对此学习,那就太好了。
  • 即使实现了Denavit-Hartenberg变换矩阵的眼神,您也很容易实现。
  • 这很笼统,允许您使用各种关节:旋转,线性和其他形式的关节,只要您可以估计它们如何导致端点移动即可。
  • 即使没有零或无数个解,它也能很好地应对。

缺点:

  • 它很慢,需要很多次迭代才能找到解决方案。但是,如果您可以让真正的手臂跟随算法的计算过程就可以了。
  • 它可能会卡在局部最小值中。IE如果找到足够好的解决方案,它可能找不到最佳的解决方案。

在我非常老的网站上有关于它的更多详细信息:美观的纹理光源发出的有弹性的有趣而富有弹性的页面



1

有两种广泛的方法:

  • 给出末端执行器姿势的解析解直接计算关节坐标。通常,解决方案不是唯一的,因此您可以计算一组可能的关节坐标。有些可能会导致机器人撞击其环境(或自身)内的东西,或者您的任务可能会帮助您选择特定的解决方案,即。您可能更希望肘部向上(或向下),或者机器人将手臂放在躯干的左侧(或右侧)。通常,在获得解析解时会受到限制,对于6轴机器人,假定球形手腕(所有轴相交)。数十年来,已经计算出了许多不同类型的机器人的解析解决方案,您可能会找到一篇为您的机器人提供解决方案的论文。
  • 如其他答案中所述,数值解使用一种优化方法来调整关节坐标,直到正向运动学给出正确的解为止。再次,关于此的大量文献和许多软件。

使用我的MATLAB机器人工具箱,我使用Denavit-Hartenberg参数创建了一个著名的6轴机器人模型

>> mdl_puma560
>> p560

p560 = 

Puma 560 [Unimation]:: 6 axis, RRRRRR, stdDH, fastRNE            
 - viscous friction; params of 8/95;                             
+---+-----------+-----------+-----------+-----------+-----------+
| j |     theta |         d |         a |     alpha |    offset |
+---+-----------+-----------+-----------+-----------+-----------+
|  1|         q1|          0|          0|     1.5708|          0|
|  2|         q2|          0|     0.4318|          0|          0|
|  3|         q3|    0.15005|     0.0203|    -1.5708|          0|
|  4|         q4|     0.4318|          0|     1.5708|          0|
|  5|         q5|          0|          0|    -1.5708|          0|
|  6|         q6|          0|          0|          0|          0|
+---+-----------+-----------+-----------+-----------+-----------+

然后选择一个随机的关节坐标

>> q = rand(1,6)
q =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

然后计算正向运动学

>> T = p560.fkine(q)
T = 
   -0.9065    0.0311   -0.4210  -0.02271
    0.2451    0.8507   -0.4649   -0.2367
    0.3437   -0.5247   -0.7788    0.3547
         0         0         0         1

现在我们可以使用已发布的解析解决方案来计算具有6个关节和球形手腕的机器人的逆运动学

>> p560.ikine6s(T)
ans =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

瞧,我们有原始的关节坐标。

数值解

>> p560.ikine(T)
Warning: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.63042 
> In SerialLink/ikine (line 244) 
Warning: failed to converge: try a different initial value of joint coordinates 
> In SerialLink/ikine (line 273) 

ans =

     []

失败了,这是一个普遍的问题,因为他们通常需要一个好的初始解决方案。我们试试吧

>> p560.ikine(T, 'q0', [1 1 0 0 0 0])
ans =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

现在可以给出答案,但这与解析解决方案不同。没关系,因为IK问题有多种解决方案。我们可以通过计算正向运动学来验证我们的解决方案是正确的

>> p560.fkine(ans)
ans = 
   -0.9065    0.0311   -0.4210  -0.02271
    0.2451    0.8507   -0.4649   -0.2367
    0.3437   -0.5247   -0.7788    0.3547
         0         0         0         1

并检查它是否与我们开始的转换相同(正确)。

其他资源:


0

当要计算具有6自由度的机器人的逆运动学时,最好使用pieper的解,它说,当您拥有一个具有六个自由度并且三个轴相交的机器人时,可以使用它。有简单的证明,您可以轻松证明它,如果您需要帮助,我可以提示您


您介意提供更多有关证明的细节吗?
2015年

欢迎使用机器人技术 Parhamsagharichiha。感谢您的回答,但我们正在寻找能够提供一些解释和上下文的综合答案。单行答案不能做到这一点,因此,请编辑您的答案以解释为什么它是正确的,最好是引用。不包含说明的答案可能会被删除。
查克(Chuck)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.