使用 Numpy 求解 n 个机械臂的 Denavit Hartenberg 正向运动学
Solving Denavit Hartenberg Forward Kinematics for n roboticarms with Numpy
编辑
我刚刚用 numpy 的 einsum 函数解决了这个问题。而不是做 T[:,:,:,0]@... 我只是用 einsum 对前两个进行 Matmul,然后用下一个索引计算结果,依此类推。
我目前正在尝试求解 5 DOF 机械臂正向运动学的 Denavit Hartenberg 方程。因为我需要用遗传算法解决这个问题,所以我需要同时为 n 个机械臂解决这个问题。
我目前的做法是定义一个 4x4xnx5 矩阵,其中包含 n 个机械臂所需的所有变换矩阵。然后我在一个 for 循环上对所有 n 个臂进行迭代,用矩阵乘法求解每个 DH 方程(参见下面的代码示例 1)。这可行,但显然很耗时。一种更聪明的方法是执行类似代码示例 2 的操作,但我随后收到以下错误消息 (n=500):
"matmul: Input operand 1 has a mismatch in its core dimension 0, with
gufunc signature (n?,k),(k,m?)->(n?,m?) (size 4 is different from
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,然后用下一个索引计算结果,依此类推。
编辑 我刚刚用 numpy 的 einsum 函数解决了这个问题。而不是做 T[:,:,:,0]@... 我只是用 einsum 对前两个进行 Matmul,然后用下一个索引计算结果,依此类推。
我目前正在尝试求解 5 DOF 机械臂正向运动学的 Denavit Hartenberg 方程。因为我需要用遗传算法解决这个问题,所以我需要同时为 n 个机械臂解决这个问题。
我目前的做法是定义一个 4x4xnx5 矩阵,其中包含 n 个机械臂所需的所有变换矩阵。然后我在一个 for 循环上对所有 n 个臂进行迭代,用矩阵乘法求解每个 DH 方程(参见下面的代码示例 1)。这可行,但显然很耗时。一种更聪明的方法是执行类似代码示例 2 的操作,但我随后收到以下错误消息 (n=500):
"matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 4 is different from 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,然后用下一个索引计算结果,依此类推。