在计算雅可比矩阵以解析方式求解逆运动学时,我从很多地方读到可以使用此公式在雅可比矩阵中创建关节的每一列:

$$ \ mathbf { J} _ {i} = \ frac {\ partial \ mathbf {e}} {\ partial \ phi_ {i}} = \ left [\ begin {array} {c} {\ left [\ mathbf {a} __ i} ^ {\ prime} \ times \ left(\ mathbf {e} _ {pos}-\ mathbf {r} _ {i} ^ {\ prime} \ right)\ right] ^ {T}} \\ { \ left [\ mathbf {a} _ {i} ^ {\ prime} \ right] ^ {T}} \ end {array} \ right] $$

这样$ a'$是世界空间中的旋转轴,$ r'$是世界空间中的枢轴点,$ e_ {pos} $是末端执行器在世界空间中的位置。

但是,我不知道无法理解当关节具有多个自由度时这是如何工作的。以以下示例为例:



$ \ theta $是旋转自由度,$ e $是末端执行器,$ g $是目标末端执行器的$ P_1 $,$ P_2 $和$ P_3 $是关节。得到这样的东西: ,0,1)\ times(\ vec {e}-\ vec {P_ {1}}))_ {x}&((0,0,1)\ times(\ vec {e}-\ vec {P_ {2}}))_ {x} \\((0,0,1)\ times \ vec {e})_ {y}&((0,0,1)\ times(\ vec {e}- \ vec {P_ {1}}})_ {y}&((0,0,1)\ times(\ vec {e}-\ vec {P_ {2}}))_ {y} \\(( 0,0,1)\ times \ vec {e})_ {z}&((0,0,1)\ times(\ vec {e}-\ vec {P_ {1}}})_ {z} &((0,0,1)\ times(\ vec {e}-\ vec {P_ {2}}))_ {z} \\ 0&0&0 \\ 0&0&0 \\ 1& 1&1
\ end {bmatrix} $$

这假定所有旋转轴均为$(0,0,1)$,并且所有旋转轴只有一个旋转比最终自由度。因此,我相信每一列都是一个自由度,在这种情况下,是$ \ theta _ \#$。

现在,问题来了:如果所有关节都具有完整的6个自由度,该怎么办?现在说,对于每个关节,我在所有轴上都有旋转自由度,即$ \ theta_x $,$ \ theta_y $和$ \ theta_z $,还具有所有轴上的平动自由度,即$ t_x $,$ t_y $和$ t_z $。

为了使我的问题更清楚,假设如果我要“强制性”将上述公式应用于所有关节的所有自由度,那么我可能会得到像这样的雅可比矩阵:


(单击以获得完整大小)

但这真是不可思议,因为每个关节的自由度的所有6列都在重复同一件事。 br />
如何使用相同的公式来构建所有自由度的雅可比矩阵?雅可比矩阵在这种情况下会是什么样子?

评论

实际上,我不确定我是否应该在数学,GamesDev或物理领域中发布此问题。我觉得我在错误的地方张贴了这个问题。

我认为您的错误是您没有为每个自由度更改a',这就是为什么它们看起来都一样的原因。

#1 楼

我必须承认,我很少见过该特定公式,但是我的猜测是,如果有一个以上的自由度,则可以对每一列中的每个关节进行评估,然后(也许?)将这些结果乘以每列。

但是让我向任意多个自由度的上下文中的Jacobian建议一个更简单的方法:基本上,Jacobian会告诉您,如果将末端执行器框架移动了一些,则每个关节会移动多远任意选择方向。设$ f(\ theta)$为正向运动学,其中$ \ theta = [\ theta_1,...,\ theta_n] $为关节,$ f _ {\ text {pos}} $为关节的位置部分。正向运动学和$ f _ {\ text {rot}} $旋转部分。然后,可以通过区分关节变量的正向运动学来获得雅可比行列式: {bmatrix}
\ frac {\ partial f _ {\ text {pos}}} {\ partial \ theta_1}和\ frac {\ partial f _ {\ text {pos}}} {\ partial \ theta_2}& ...,\ frac {\ partial f _ {\ text {pos}}} {\ partial \ theta_n} \\
\ frac {\ partial f _ {\ text {rot}}}} {\ partial \ theta_1} ,&\ frac {\ partial f _ {\ text {rot}}} {\ partial \ theta_2}和...,\ frac {\ partial f _ {\ text {rot}}} {{partial \ theta_n}
\ end {bmatrix}
$$
是您的机械手的雅可比行列式。反转它会为您提供逆速度的逆运动学。但是,如果您想知道末端执行器向任何方向移动少量$ \ Delta x $,由于要知道每个关节必须移动多远(由于位置水平,这实际上是一个线性化):
$$
\ Delta \ theta = J ^ {-1} \ Delta x
$$

希望有帮助。

评论


$ \ begingroup $
感谢您的答复!但这是否意味着我将不得不以数字方式计算值?实际上,我从幻灯片19中的graphics.cs.cmu.edu/nsp/course/15-464/Fall09/handouts/IK.pdf和幻灯片中的graphics.ucsd.edu/courses/cse169_w05/CSE169_13.ppt中看到了这个分析示例78.从幻灯片看,我似乎不必遍历数值方法。在没有实际功能可区分的情况下,可以使用此公式。但是问题是当我每个关节都有更多自由度时会发生什么。
$ \ endgroup $
–氙气
2012年11月26日11:11



$ \ begingroup $
如果我正确地理解了幻灯片,则可以通过确定每个关节的矢量$(e_i-P_i)$来处理任意多个(旋转)自由度的情况,其中$ P_i $是关节的位置。因此,如果您有46个关节,则确实会得到一个46列6行的雅可比矩阵(如果忽略末端执行器的方向,则为3列)。长话短说:您可以将该公式应用于任意数量的关节,而不必将其与其他关节“结合”。
$ \ endgroup $
–丹尼尔·艾伯茨(Daniel Eberts)
2012年11月26日上午11:36

$ \ begingroup $
但是,如果关节具有许多自由度,如$ \ theta_x $,$ \ theta_y $,$ \ theta_z $和平移自由度(如$ t_x $,$ t_y $,$ t_z $),会发生什么?现在,每个关节具有6个自由度。根据我对雅可比矩阵对IK的工作原理的理解,前6列将是相对于6种不同自由度的末端执行器的导数,而这前6列将描述第一个关节。接下来的6列将描述关于6个自由度的第二个关节,依此类推。使用等式$(e_i-P_i)$,是否意味着每个关节的6列会自动打包为一列?
$ \ endgroup $
–氙气
2012年11月26日11:49



$ \ begingroup $
啊,我明白了。不,在那种情况下,该公式将不起作用,因为它是为具有一个旋转轴的旋转接头设计的。如果您想例如球形关节,您可能需要使用不同的公式来处理特定的关节类型,或者需要封闭形式的机器人正向运动学。如果有的话,您可以通过w.r.t.关节$ \ theta $并获得雅可比行列式。
$ \ endgroup $
–丹尼尔·艾伯茨(Daniel Eberts)
2012年11月26日12:22

$ \ begingroup $
谢谢! :)虽然很好奇,但是graphics.ucsd.edu/courses/cse169_w05/CSE169_13.ppt中的幻灯片58是否暗示可以对具有3个自由度的旋转关节使用公式?这意味着如果关节不具有平移自由度,而仅具有3个旋转自由度,仍然可行吗?虽然我不确定为什么要花$(1,0,0,0)$乘以不同的旋转来获得不同的自由度。
$ \ endgroup $
–氙气
2012年11月26日12:55



#2 楼

您针对6自由度关节的公式假定所有6个关节在世界框架中都具有轴$(0,0,1)$,并且所有关节都是旋转的。由于这6个关节是相同的,因此它们在雅可比行列中的列也相同。

重新开始,假设一个关节的轴$ a $经过点$ r $。设$ e $为末端执行器的位置。 $ a $,$ r $和$ e $的坐标都在世界框架中给出,并随着机器人的移动而更新。轴$ a $的长度为$ 1 $。

如果关节旋转,则关节的雅可比行列为

$ J _ {\ theta}(a, r)= \ left [\ begin {matrix}
a \ times(e-r)\\
a
\ end {matrix} \ right] $

如果关节是棱柱形,则列为

$ J_ {p}(a)= \ left [\ begin {matrix}
a \\
0
\ end {matrix} \ right] $

假设我们有一个6自由度的关节,它不仅是球形的,而且还可以在空间中平移。假设关节的轴是$ a_x $,$ a_y $和$ a_z $,并且每个旋转关节和棱柱形关节共享一个轴,因此关节的雅可比行列式变为左[\ begin {matrix}
J_p(a_x)&J_p(a_y)&J_p(a_z)&J _ {\ theta}(a_x,r)&J _ {\ theta}(a_y,r)&J_ { \ theta}(a_z,r)
\ end {matrix} \ right] $

轴$ a_x $,$ a_y $和$ a_z $取决于前向运动学机器人。为了说明这一点,让世界框架中第k个关节的变换由下式给出:

$ F_k = \ prod_ {i = 1} ^ {k} L_i T_i $

其中变换$ L_i $是常数,而变换$ T_i $取决于联合变量。假设$ R_c(q)$和$ P_c(q)$是围绕名为$ c $的坐标轴($ x $,$ y $或$ z $)旋转并平移$ q $的变换。 br />
设$ \ Delta q =(\ Delta p_x,\ Delta p_y,\ Delta p_z,\ Delta \ theta_x,\ Delta \ theta_y,\ Delta \ theta_z)$是通过Jacobian计算的$ i位移第$个关节。令$ \ Delta T = P_x(\ Delta p_x)P_y(\ Delta p_y)P_z(\ Delta p_z)R_x(\ Delta \ theta_x)R_y(\ Delta \ theta_y)R_z(\ Delta \ theta_z)$并更新本地关节的转换方式: ,以及联合$ i $的$ a_z $恰好是$ F_i $旋转矩阵的列。位置$ r $也是$ F_i $的转换向量。

#3 楼

据我了解您的问题,您想要6自由度关节的Jacobian矩阵。

让我从非常基础的机器人技术开始。您正处于机器人学习的不同初始阶段。您需要了解,每个关节代表一个自由度,要么是旋转关节,要么是棱柱形关节。

就球形关节而言,它可以转换为具有三个相互垂直轴的3个旋转关节。因此,现在您简化了球形关节。

前进到Jacobian矩阵。它包含6行。前3行代表方向,后3行代表相对于特定坐标系的位置。矩阵中的每一列表示单个关节。因此,关节数/自由度数与Jacobian矩阵中的列数相同。

以下是您的问题的更清晰的看法:
单个关节永远无法实现一个以上的自由度,因为它会使关节变得复杂,而精确的控制将永远无法实现。即使我们假设一个关节具有多个自由度,也需要将该关节转换为每个具有1个自由度的多个关节,以简化数学和求解。

理想情况下,带有6个旋转关节的6自由度机器人可以解决大多数实际问题。但是根据您的问题,您考虑使用6个关节机器人,每个关节具有3个自由度,这使18个自由度机器人成为可能。这将提供冗余的DOF(即18-6 = 12冗余的DOF)。因此,要使机器人末端执行器以任何方向到达任何位置,您将拥有无限不同的解决方案(解决方案意味着每个关节旋转)。因此,要解决此类逆运动学问题,您将需要迭代的逆运动学方法。

希望,我已经更清楚地回答了您的问题。要学习基本的机器人技术,您可以参考John J. Craig-机器人力学和控制简介-皮尔逊教育有限公司。