【发布时间】:2021-01-12 19:44:23
【问题描述】:
编辑 我刚刚用 numpy 的 einsum 函数解决了这个问题。而不是做 T[:,:,:,0]@... 我只是用 einsum 对前两个进行 Matmul 运算,然后用下一个索引得到结果,依此类推。
我目前正在尝试求解 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
【问题讨论】:
-
你能提供一个工作代码示例吗?
-
我刚刚用numpy的einsum函数解决了这个问题。而不是做 T[:,:,:,0]@... 我只是用 einsum 对前两个进行 Matmul 运算,然后用下一个索引得到结果,依此类推。
-
如果你解决了这个问题,你可以回答你自己的问题,这样以后偶然发现这个问题的任何人都可以很容易地看到解决方案。
标签: python numpy matrix-multiplication robotics kinematics