Pytorch 如何计算给定两个4x4仿射矩阵的相对姿态

Pytorch 如何计算给定两个4x4仿射矩阵的相对姿态,pytorch,affinetransform,kinematics,Pytorch,Affinetransform,Kinematics,我有两个4x4仿射矩阵,A和B。它们代表世界坐标系中两个物体的姿势 如何通过矩阵乘法计算它们的相对姿势?(实际上,我想知道物体B坐标系中的位置(x_A,y_A) 我试过相对姿势=A*B^-1 relative_pose=torch.multiply(A,torch.inverse(B)) 然而,相对翻译太大了。(A和B彼此非常接近,但它们在世界坐标系中远离原点。) Pyrotch的测试数据: import torch A = torch.tensor([[-9.3793e-01, -3.448

我有两个4x4仿射矩阵,A和B。它们代表世界坐标系中两个物体的姿势

如何通过矩阵乘法计算它们的相对姿势?(实际上,我想知道物体B坐标系中的位置(x_A,y_A)

我试过相对姿势=A*B^-1

relative_pose=torch.multiply(A,torch.inverse(B))

然而,相对翻译太大了。(A和B彼此非常接近,但它们在世界坐标系中远离原点。)


Pyrotch的测试数据:

import torch
A = torch.tensor([[-9.3793e-01, -3.4481e-01, -3.7340e-02, -4.6983e+03],
    [ 3.4241e-01, -9.3773e-01,  5.8526e-02,  1.0980e+04],
    [-5.5195e-02,  4.2108e-02,  9.9759e-01, -2.3445e+01],
    [ 0.0000e+00,  0.0000e+00,  0.0000e+00,  1.0000e+00]])
B =  torch.tensor([[-9.7592e-01, -2.1022e-01, -5.8136e-02, -4.6956e+03],
         [ 2.0836e-01, -9.7737e-01,  3.6429e-02,  1.0979e+04],
         [-6.4478e-02,  2.3438e-02,  9.9764e-01, -2.3251e+01],
         [ 0.0000e+00,  0.0000e+00,  0.0000e+00,  1.0000e+00]])

因此,我假设您在齐次坐标系中使用实心变换矩阵
M
,换句话说,4x4矩阵包含3x3旋转矩阵
R
、3x1平移向量
T
[0,0,0,1]
齐次“填充”行向量。你想找到从一个姿势到另一个姿势的转换(我不知道如何按块编写矩阵,但这类似于
(R|t\\0|1)

然后我认为你的公式是错误的:如果
Y_1=M_1 X
Y_2=M_2 X
,那么你就有
Y_2=M_2 M_1^-1 X
,你的相对姿势矩阵是
M_rel=M_2 M_1^-1

因此,您需要反转立体变换矩阵
M_1=(R_1 | T_1\\0 | 1)

如果你写下方程,如果我们注意到
P=R_1^-1
,那么你会发现
M_1^-1=(P|-PT\\0|1)

因此,我假设您在齐次坐标系中使用实心变换矩阵
M
,换句话说,4x4矩阵包含3x3旋转矩阵
R
、3x1平移向量
T
[0,0,1]
齐次“填充”行向量。您希望找到从一个姿势到另一个姿势的变换(我不知道如何按块编写矩阵,但这类似于
(R|t\\0|1)

然后我认为你的公式是错误的:如果
Y_1=M_1 X
Y_2=M_2 X
,那么你就有
Y_2=M_2 M_1^-1 X
,你的相对姿势矩阵是
M_rel=M_2 M_1^-1

因此,您需要反转立体变换矩阵
M_1=(R_1 | T_1\\0 | 1)

如果你写这些方程,如果我们注意到,
P=R_1^-1
,你会发现,
M_1^-1=(P|-PT\\0|1)

的数学解@trialNerror是完全正确的

我在pytorch中犯了一个错误
torch.multiply
提供元素级乘法。对于乘法矩阵,应使用
torch.mm()

在我使用批处理作为额外维度的情况下,代码应该是这样的


relative\u pose=torch.inverse(A).bmm(B)

@trialNerror的数学解完全正确

我在pytorch中犯了一个错误
torch.multiply
提供元素级乘法。对于乘法矩阵,应使用
torch.mm()

在我使用批处理作为额外维度的情况下,代码应该是这样的


relative_pose=torch.inverse(A).bmm(B)

谢谢你指出我的错误。立体变换矩阵M_1是否可以用
M_1^-1=(p |-PT\\0 | 1)的方式反转
?我可以通过
M_1^-1
计算它吗?是的,现在你提到了它,你可以简单地计算
M_1
的逆矩阵,作为4x4矩阵,不需要进行块分解。我觉得很愚蠢…谢谢你指出我的错误。立体变换矩阵M_1是否以
M_1^-1=(P |-PT\\0 | 1)
?我可以通过
M|u 1^-1
计算它吗?是的,既然你提到了它,你可以简单地将
M|u 1
的逆矩阵计算为4x4矩阵,而不需要进行块分解。我觉得很愚蠢…很高兴这样做了!你能接受关闭线程的答案吗?:)很高兴这个问题解决了!您能接受关闭线程的答案吗?:)