この質問は古いですが、私が考えたことはありますが、実際に実装することはできなかったので、とにかく答えます。
拘束のない回転ジョイントは、ボール ジョイントまたは球面ジョイントと呼ばれます。自由度は 3 です。各球面ジョイントをそれぞれ 1 自由度の 3 つの回転 (回転) ジョイントとしてパラメータ化する場合、チュートリアルの式を球面ジョイントにも使用できます。
例:N
を球面ジョイントの数とします。各ジョイントにローカル変換T_local[i]
とワールド変換があるとします
T_world[i] = T_local[0] * ... * T_local[i]
R_world[i][k]
, ,を の回転行列の k 番目の列とk = 0, 1, 2
します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
ます。