编辑 我刚刚用 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[:,:,i,1]@T[:,:,i,2]@T[:,:,i,3]@T[:,:,i,4] #CODE SAMPLE 1
T_res= T[:,:,:,0]@T[:,:,:,1]@T[:,:,:,2]@T[:,:,:,3]@T[:,:,:,4] #CODE SAMPLE 2