1

arduinoと6つのサーボモーターを使用して、6自由度のロボットアームを構築しています。

シリアル通信を使った Python インターフェースを自作して、次のように書けるようにしmove_motor(angle1=45, angle2=37)ました。

今、私は IK の部分に取り組んでいます。腕の長さを設定する良いパッケージを探しています。それを与えると(x,y,z,theta)、各モーターの角度が返されます。

お得なパッケージはありますか?または、少なくとも私のニーズに合わせて遊ぶことができるものはありますか?

4

1 に答える 1

5

あなたの問題は非常に単純なので、二次計画法 (QP) によって逆運動学 (IK) 問題を解くのが最善だと思います。Python では、CVXOPT ライブラリなどを使用して、数行のコードで QP を解くことができます (ここにいくつかのコードを含むチュートリアルを公開しました)。また、CVXOPT を QP ソルバーとして使用する Python の IK ソルバーの例を書きました。目の前の問題よりも複雑ですが、インスピレーションを得るために見てみることができます。

便利な部分は次の関数です。

def compute_velocity(self, q, qd):
    P = zeros(self.I.shape)
    r = zeros(self.q_max.shape)
    for obj in self.objectives:
        J = obj.jacobian(q)
        P += obj.weight * dot(J.T, J)
        r += obj.weight * dot(-obj.velocity(q, qd).T, J)
    if self.K_doflim is not None:
        qd_max = minimum(self.qd_max, self.K_doflim * (self.q_max - q))
        qd_min = maximum(self.qd_min, self.K_doflim * (self.q_min - q))
    else:
        qd_max = self.qd_max
        qd_min = self.qd_min
    G = vstack([+self.I, -self.I])
    h = hstack([qd_max, -qd_min])
    if self.constraints:
        A = vstack([c.jacobian() for c in self.constraints])
        b = hstack([c.velocity() for c in self.constraints])
        return cvxopt_solve_qp(P, r, G, h, A, b)
    return cvxopt_solve_qp(P, r, G, h)

これは基本的に、グローバル IK 問題 (関節角度ベクトル 'q' を見つける) を微分 IKによって、つまり、システムを解に向かって駆動する速度 'qd' を計算することによって解決します。これは本質的に、Levenberg-Marquardt アルゴリズムの背後にある考え方です。

于 2015-10-24T01:52:55.117 に答える