$$ \ 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 />
如何使用相同的公式来构建所有自由度的雅可比矩阵?雅可比矩阵在这种情况下会是什么样子?
#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-机器人力学和控制简介-皮尔逊教育有限公司。
评论
实际上,我不确定我是否应该在数学,GamesDev或物理领域中发布此问题。我觉得我在错误的地方张贴了这个问题。我认为您的错误是您没有为每个自由度更改a',这就是为什么它们看起来都一样的原因。