【问题标题】:Solving Denavit Hartenberg Forward Kinematics for n roboticarms with Numpy使用 Numpy 求解 n 个机械臂的 Denavit Hartenberg 正向运动学
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-03-07
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多