反向运动学:计算雅可比行列式

Nic*_*ner 6 graphics inverse-kinematics

我正在尝试为任意多个链接的串行链做逆运动学.

在下面的文章中,我找到了一个如何计算雅可比矩阵的例子.

Entry (i, j) = v[j] * (s[i] - p[j])
Run Code Online (Sandbox Code Playgroud)

哪里:

v[j] 是关节j的旋转轴的单位矢量

s[i] 是关节i的位置(int world coords?)

p[j] 关节j的位置(在世界坐标?中)

该论文称,如果j是具有单一自由度的旋转关节,则可行.但是我的旋转关节对它们的旋转没有限制.那么我想要什么配方?(或者我可能误解了"自由度"一词?)

ant*_*kos 8

这个问题已经过时了,但无论如何我都会回答,因为这是我一直在考虑的事情,但从未真正实现过.

没有约束的旋转接头称为球形接头或球形接头; 他们有3个自由度.如果根据一个自由度的3个旋转(旋转)关节参数化每个球形关节,也可以在教程中使用球形关节的公式.

例如:N设为球形关节的数量.假设每个联合都有局部转换T_local[i]和世界转换

T_world[i] = T_local[0] * ... * T_local[i]
Run Code Online (Sandbox Code Playgroud)

R_world[i][k],, k = 0, 1, 2是旋转矩阵的 k 列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]
Run Code Online (Sandbox Code Playgroud)

使用教程的公式计算J某些末端效应器的雅可比行列式s[i].所有坐标都在世界框架中.

例如,使用伪逆方法给出了dq在给定方向上移动末端效应器的位移dx.

长度dq3 * N.限定

R_dq[j] = 
    R_x[dq[3 * j + 0]] *
    R_y[dq[3 * j + 1]] *
    R_z[dq[3 * j + 2]]
Run Code Online (Sandbox Code Playgroud)

j = 0, 1, ..., N-1,其中R_x,R_y,R_z是用于围绕旋转变换矩阵x-,y-z-axes.

更新本地转换:

T_local[j] := T_local[j] * R_dq[j]
Run Code Online (Sandbox Code Playgroud)

并从顶部重复以将末端执行器向其他方向移动dx.