Python反向运动学软件包

2024-05-16 11:44:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用arduino和6个伺服电机制造一个6自由度的机械臂。

我用串行通信为自己制作了一个Python接口,这样我就可以编写:move_motor(angle1=45, angle2=37),伺服电机也会相应地移动。

现在我进入了IK部分,我正在寻找一个好的包,在这里你可以设置手臂的长度,然后你可以给它(x,y,z,theta),它将返回你的角度为每个马达。

有好的包裹吗?或者至少我可以玩些什么来满足我的需要?


Tags: movearduinoik角度机械motortheta手臂
1条回答
网友
1楼 · 发布于 2024-05-16 11:44:36

由于你的问题很简单,我认为对你来说最好的方法是用二次规划(QP)来求解逆运动学(IK)问题。在Python中,您可以使用CVXOPT库(我发布了a tutorial with some code here)在几行代码中解决QPs。另外,我写的是an example of IK solver in Python,它使用CVXOPT作为QP解算器。它比手头的问题更复杂,但你可以看看它来寻找灵感。

有用的部分是此函数:

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问题(通过微分IK找到关节角度向量“q”),也就是说,通过计算速度“qd”来驱动系统走向解决方案。它本质上是Levenberg-Marquardt algorithm背后的思想。

相关问题 更多 >