机器人由5个轴组成。第一个轴绕z轴旋转,其他四个轴绕y轴旋转。求解器基本上可以工作。
这是我到目前为止所做的:平移部分,因为这里只跟踪位置。实际上,我也尝试使用组合的Jacobian矩阵,所以不仅平移部分而且旋转部分也是如此。但无论如何,抖动的运动还是存在的):
然后,阻尼系数为:如您所见,这只是一个经典的带阻尼最小二乘法的伪逆运动学求解器。根据第二个(问题)动作的可操作性因素是:
视频开头的可操作性下降。但为什么?据我所知,该可操纵性因子表示轴的线性相关性。在我看来,轴在开始部分似乎并不是线性相关的。如您在第一个动画中所见,求解器似乎正常工作。我在这里想念什么?
#1 楼
正如其他人已经指出的那样,因为在给出的描述中不会有任何奇异的行为,所以IK算法的实现必然存在问题。现在有两种选择:要么开始停止调试代码,或者您可能想利用这个问题可以很容易地分解为两个子问题,您可以轻松地使用到目前为止编写的大部分代码。
给出所需的3D目标$ \ left(x_d,y_d,z_d \ right)$,很容易观察到第一个关节的期望值为:$ \ theta_ {1d} = \ arctan \ left(\ frac {y_d} {x_d} \ right)$。
将操纵器的第一关节驱动到$ \ theta_ {1d} $的控制定律可以很简单:
$
\ dot {\ theta_1} = K_1 \ cdot \ left(\ theta_ {1d}-\ theta_ {1} \ right)。
$
然后,让$ R \ in SO (3)$是矩阵,说明$ \ theta_ {1d} $绕$ z $轴旋转:
$
R = \ left(\ begin {array} {cccc }
\ cos {\ theta_ {1d}}&-\ sin {\ theta_ {1d}}&0 \\
\ sin {\ theta_ {1d}}&\ cos {\ theta_ {1d }}&0 \\
0&0&1 \\
\ end {array} \ right)。
$
通过$ R $,您ll得到新目标$ \ left(x_d,0,z_d \ right)_1 = R ^ T \ cdot \ left(x_d,y_d,z_d \ right)^ T $将在$中建立新的IK 2D平面问题xz $平面。
评论
$ \ begingroup $
我认为没有必要在子问题中分解问题。由于单位向量的声明已经表明了您刚刚描述的内容。
$ \ endgroup $
–乔
19年2月15日在20:22
$ \ begingroup $
分解只是建议,让您重用4 DOF Jacobian,这是您的代码平稳运行的一部分,如您在文章开头所报告的那样。
$ \ endgroup $
– Ugo Pattacini
19年2月15日在20:30
#2 楼
我认为您在第一个手腕轴处引入了算法奇点。在我看来,当它达到“向下”的90度时,它会尝试回零至-269度而不是转到91度。当然,这是推测性的,没有看到代码。
评论
欢迎使用机器人技术,乔!这是一个很棒的问题,但是不幸的是,我认为没有足够的细节来回答这个问题。当系统达到奇点时,我希望某个运动轴会产生狂野的摆动,例如一个轴会旋转180度,因为另一个轴正试图达到89到91度(如果90度是奇点)。我在这里并没有真正看到这种行为。我想知道这是否更多是实现问题,例如使用atan而不是atan2之类的东西,等等。能否请您编辑问题以发布正在使用的代码?@ Chuck,我编辑了问题,以便可以看到“狂野的秋千”。 (请看2.更新的动画)