如何使用numbafy或者有什么替代lambdify的方法吗

2024-05-08 13:50:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在研究机器人的动力学问题。我需要计算一个4x4变换矩阵。我将变换矩阵保持为符号形式,以计算由列表构成的速度矩阵Uij,即变换矩阵关于关节角的微分

T存储变换矩阵的列表[T01, T02 , T03 ... ]T= [[4x4 symbolic matrix], [4x4 symbolic matrix], [4x4 symbolic matrix], ......10 terms]

Qdiff存储不同的关节角度:

Qdiff=[Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10]

U2d是存储在列表中的速度矩阵,其中U2d[i][j]给出T[0][j]wrtQj的微分

为了得到U2d[i][j]的形式,我将它存储在一个列表列表中

U2d=[ [ T[i].diff(Qdiff[j]) for j in list(range(0,i+1)) ] for i in list(range(10)) ]

U2nsubs是使用lambdify从符号表达式到函数的转换列表(这在计算上非常昂贵,占用大约70%的时间)

U2nsubs=[[sp.lambdify([[Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10]],U2d[i][j]) for j in range(0,i+1)]for i in range(10)]

这里我试图通过在不同的迭代中替换不同的关节角度位置来获得numpy数组k q是不同时间间隔的关节角度列表:

q= [[10 real values of Q1],[10 real values of Q2],[10 real values of Q3],....]

U2dsubs=[[[U2nsubs[i][j]([q[0][k],q[1][k],q[2][k],q[3][k],q[4][k],q[5][k],q[6][k],q[7][k],q[8][k],q[9][k]]) for k in list(range(10))]for j in range(0,i+1)]for i in range(10)]

U2dsubs[i][j][k]将以第k个间隔替换从Q1到Q10的关节角度

  • 如何使用Numbafy或任何其他计算速度更快的方法来评估这一点

Tags: in列表forrange矩阵matrix角度symbolic