$ T_i = \ left [\ begin {matrix}
1&0&0&0 \\
0&1&0&0 \\
0&0&1&d_i \\
\ end {matrix} \ right] $
,其中扩展长度由$ d_i $
定义,而旋转链接可能是:
$ T_i = \ left [\ begin {矩阵}
1&0&0&L \\
0&\ cos \ alpha_i&-\ sin \ alpha_i&0 \\
0&0&0&1
\ end {matrix} \ right] $其中$ \ alpha $是角度,而$ L $是链接的长度。
然后我们可以通过乘以找出末端执行器的位置和方向所有转换矩阵:$ \ prod {T_i} $。
问题是,我们如何解决反问题?
从数学上讲,对于所需的末端执行器位置$ M $,找到参数$ d_i $,$ \ alpha_i $,使得$ \ prod {T_i} = M $。有什么方法可以求解该方程式?
#1 楼
过去,当我学习时,随着学习的进行,我使用了简单的渐变跟踪来解决IK问题。在模型中,您尝试将每个关节的每个关节旋转一个很小的角度数量,看对终点位置误差有多大的影响。完成此操作后,然后将每个关节旋转与其所产生的收益成比例的量。然后,一遍又一遍地进行操作,直到足够接近为止。
通常,这称为梯度跟踪或山峰跟踪。想象一下一个具有两个自由度的机械臂:
旋转关节A稍微移动了端点沿方向a。旋转关节B一点点即可使端点沿方向b移动。这两个都使我们靠近目标的距离大约相等,因此我们应该以相同的速度旋转两个关节。
如果要绘制到目标与关节的距离图角度,如下所示:
我在某些轮廓上进行了着色只是为了帮助。我们可以看到该算法采用的路径。您会注意到,在关节空间中,所采取的路径看起来并不是最佳的。它需要一条曲线。但是,在实际空间中,您会看到终点与目标之间的直线相当。您还可以看到实际上有两种解决方案,而该算法刚刚找到了最接近的解决方案。当然,这也不是最好的方法。
概念上很简单,如果您只是学习它,那就太好了。即使实现了Denavit-Hartenberg变换矩阵的视线也可以吓到您。
它非常通用,允许您使用各种关节:旋转,线性和其他关节,只要您可以估计它们的位置即可导致端点移动。
即使解决方案的数量为零或无限,它也能很好地应对。
缺点:
很慢,需要很多次迭代才能找到解决方案。但是,如果您可以让真实的手臂跟随算法的进行计算就很好了。
它可能会卡在局部最小值中。即如果找到了足够好的解决方案,它可能找不到最佳解决方案。弹性页面。
#2 楼
对于这个问题,有许多解决方案都围绕着雅可比矩阵。此幻灯片显示了Jacobian方法,还提到了我不熟悉的循环坐标下降法。关于这个主题有很多资源-如果您向google请求“逆运动学Jacobian”。入门机器人课程。
#3 楼
有两种广泛的方法:给定末端执行器姿势的解析解直接计算关节坐标。通常,解决方案不是唯一的,因此您可以计算一组可能的关节坐标。有些可能会导致机器人撞击其环境(或自身)内的东西,或者您的任务可能会帮助您选择特定的解决方案,即。您可能更希望肘部向上(或向下),或者机器人将手臂放在躯干的左侧(或右侧)。通常,在获得解析解方面存在一些限制,对于6轴机器人,假定球形手腕(所有轴相交)。数十年来,已经计算出了许多不同类型的机器人的解析解,您可能会找到为您的机器人提供解法的论文。如其他答案所述,数值解使用一种优化方法进行调整。关节坐标,直到正向运动学给出正确的解决方案为止。同样,关于这方面的文献很多,并且有很多软件。使用我的MATLAB机器人工具箱,我使用Denavit-Hartenberg参数创建了一个著名的六轴机器人模型。
>> 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
并检查它是否与我们开始时使用的转换相同。
其他资源:
免费视频讲座此主题,请在机器人学院搜索运动学
第7章,机器人学,视觉与控制(2e),Corke,Springer,2017年。