机器人手臂的正向运动学很容易解决。我们可以使用Denavit-Hartenberg变换矩阵表示每个关节。
例如,如果关节是线性致动器,它可以具有变换矩阵:
,其中扩展长度由定义
而旋转链接可能是:
其中是角度,是链接的长度。
然后,我们可以通过乘以所有变换矩阵来找到末端执行器的位置和方向。
问题是,我们如何解决逆问题?
在数学上,对于期望的端部执行器位置中,找到参数,使得。有什么方法可以解决这个问题?
机器人手臂的正向运动学很容易解决。我们可以使用Denavit-Hartenberg变换矩阵表示每个关节。
例如,如果关节是线性致动器,它可以具有变换矩阵:
,其中扩展长度由定义
而旋转链接可能是:
其中是角度,是链接的长度。
然后,我们可以通过乘以所有变换矩阵来找到末端执行器的位置和方向。
问题是,我们如何解决逆问题?
在数学上,对于期望的端部执行器位置中,找到参数,使得。有什么方法可以解决这个问题?
Answers:
回想过去,当我学习并逐步完善时,我使用了简单的渐变跟踪来解决IK问题。
在模型中,您尝试将每个关节旋转一个微小的量,看看对端点位置误差有多大的差异。完成此操作后,然后将每个关节旋转与其所产生的收益成比例的量。然后,一遍又一遍地做,直到足够接近为止。
通常,这称为梯度跟踪或山峰跟踪。想象一下具有两个自由度的机械臂:
旋转关节A一点点即可使端点沿方向a移动。旋转关节B一点点即可使端点沿方向b移动。这两个都使我们靠近目标的距离大致相同,因此我们应该以相同的速度旋转两个关节。
如果要绘制到目标的距离与关节角度的关系图,它将看起来像这样:
我在某些轮廓上加了颜色只是为了帮助。我们可以看到该算法采用的路径。您会注意到,在关节空间中,所采取的路径看起来不是最佳的。它需要一条曲线。但是,在实际空间中,您会看到终点与目标之间的直线相当。您还可以看到,实际上有两种解决方案,该算法刚刚找到了最接近的一种。
这不是解决逆运动学问题的唯一方法。当然,这也不是最好的方法。
优点:
缺点:
在我非常老的网站上有关于它的更多详细信息:美观的纹理光源发出的有弹性的有趣而富有弹性的页面。
对于这个问题,有许多解决方案都围绕着雅可比矩阵。此幻灯片显示了Jacobian方法,还提到了我不熟悉的循环坐标下降法。
关于这个主题有很多资源-如果您向google请求“逆运动学Jacobian”。
另外,请查看M IT的“机器人入门”公开课程的讲义第5.3章。
有两种广泛的方法:
使用我的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
并检查它是否与我们开始的转换相同(正确)。
其他资源:
当要计算具有6自由度的机器人的逆运动学时,最好使用pieper的解,它说,当您拥有一个具有六个自由度并且三个轴相交的机器人时,可以使用它。有简单的证明,您可以轻松证明它,如果您需要帮助,我可以提示您