使用 Numpy 求解 n 个机械臂的 Denavit Hartenberg 正向运动学

问题描述

编辑 我刚刚用 numpy 的 einsum 函数解决了这个问题。而不是做 T[:,:,0]@... 我只是用 einsum 对前两个进行 Matmul'ed,然后用下一个索引得到结果,依此类推。


我目前正在尝试求解 5 DOF 机械臂前向运动学的 Denavit Hartenberg 方程。由于我需要为遗传算法解决这个问题,因此我需要同时为 n 个机械臂进行。

我目前的方法是定义一个 4x4xnx5 矩阵,其中包含 n 个机械臂所需的所有变换矩阵。然后我在 for 循环上迭代所有 n 个臂,用矩阵乘法求解每个 DH 方程(参见下面的代码示例 1)。这有效,但显然很耗时。更聪明的方法是执行代码示例 2 之类的操作,但随后我收到以下错误消息 (n=500):

"matmul: 输入操作数 1 在其核心维度 0 中存在不匹配,其中 gufunc 签名 (n?,k),(k,m?)->(n?,m?)(大小 4 与 500)"

有没有办法像代码示例 2 中演示的那样使用 numpy 进行矩阵乘法?

for i in range(n):
       T_res[i,:] = T[:,i,0]@T[:,1]@T[:,2]@T[:,3]@T[:,4] #CODE SAMPLE 1


T_res= T[:,4] #CODE SAMPLE 2

解决方法

我刚刚用 numpy 的 einsum 函数解决了这个问题。而不是做 T[:,:,0]@... 我只是用 einsum 对前两个进行 Matmul'ed,然后用下一个索引得到结果,依此类推。