1

我正在做一个项目,我需要将 pybullet 的渲染替换为 pytorch3d 生成的渲染。

我发现 pybullet 和 pytorch3d 对坐标系有不同的定义(请参阅这些链接:pybulletpytorch3d; x 和 z 轴被翻转),我在我的代码中解释了这一点。但是我在渲染的对象中仍然存在不一致。我认为问题可能是,虽然 pytorch3d 需要一个 c2w 旋转矩阵(即相机到世界),但 pybullet 可能需要一个 w2c 旋转矩阵。但是,我找不到与此相关的任何文档。有没有人遇到过这个问题,或者可以就如何找出 pybullet 期望它的旋转矩阵到底是什么提供一些有用的提示?

谢谢!

4

1 回答 1

-1

我假设您在谈论viewMatrix预期的 by pybullet.getCameraImage()。这确实应该是一个世界到相机的旋转矩阵。

然而,在 pyBullet 中,相机是在负 z 方向看,而我通常希望它是正方向。我通过围绕 x 轴添加 180° 旋转来对此进行补偿:

rot_x_180 = np.array(
    [
        [1, 0, 0, 0],
        [0, -1, 0, 0],
        [0, 0, -1, 0],
        [0, 0, 0, 1],
    ]
)
tf_mat = rot_x_180 @ tf_world_to_camera
view_matrix = tf_mat.flatten(order="F")

其中tf_world_to_camera是齐次旋转矩阵。

于 2022-01-26T10:02:09.480 回答