题
我正在尝试为任意多个链接的串行链进行反向运动学。
在下面的 纸, ,我找到了一个如何计算雅各布矩阵的示例。
Entry (i, j) = v[j] * (s[i] - p[j])
在哪里:
v[j]
是关节J的旋转轴的单位矢量
s[i]
联合i的位置(int世界坐标?)是
p[j]
联合j的位置(在世界坐标中?)是
该论文说,这有效 j
是具有单一自由度的旋转关节。但是我的旋转接头对它们的旋转没有约束。然后我想要什么公式? (或者我可能会误解“自由程度”一词?)
解决方案
这个问题是旧的,但是无论如何我都会回答,因为这是我想到的,但从未真正实施。
没有约束的旋转接头称为球接头或球形接头。他们有3个自由度。如果您以3个自由度的3个旋转(Revolute)关节来对每个球形关节进行参数化,则可以在教程中使用该公式进行球形关节。
例如:让 N
是球形关节的数量。假设每个关节都有局部转换 T_local[i]
和世界变革
T_world[i] = T_local[0] * ... * T_local[i]
让 R_world[i][k]
, k = 0, 1, 2
, ,成为K-Th 旋转矩阵的柱 T_world[i]
. 。定义 3 * N
关节轴为
v[3 * j + 0] = R_world[i][0]
v[3 * j + 1] = R_world[i][1]
v[3 * j + 2] = R_world[i][2]
计算雅各布 J
对于某些最终效果 s[i]
, ,使用教程的公式。所有坐标都在世界框架中。
例如,使用伪内方法给出了位移 dq
这将最终效应转移到给定的方向 dx
.
长度 dq
是 3 * N
. 。定义
R_dq[j] =
R_x[dq[3 * j + 0]] *
R_y[dq[3 * j + 1]] *
R_z[dq[3 * j + 2]]
为了 j = 0, 1, ..., N-1
, , 在哪里 R_x
, R_y
, R_z
是旋转旋转的转换矩阵 x-
, y-
, , 和 z
- 轴。
更新本地转换:
T_local[j] := T_local[j] * R_dq[j]
并从顶部重复以其他方向移动最终效果 dx
.
其他提示
让我在任意许多DOF的背景下对Jacobians提出一种更简单的方法:基本上,Jacobian告诉您,如果您将末端效应子框架移动到某个任意选择的方向,则每个关节移动了多远。令F(θ)为正向运动学,其中θ= [θ1,...,θn]是关节。然后,您可以通过区分联合变量的正向运动学来获得雅各布:
jIJ = DF一世/dθj
是您的操纵者的Jacobian。反转它将为您提供有关速度的反向运动学。但是,如果您想知道每个关节要移动多远,如果您想在任何方向上移动少量ΔX(因为在位置级别上,这实际上是线性化):Δθ,它仍然有用。 = j-1ΔX
希望这有帮助。