Pybullet中的旋转矩阵是将世界坐标转换为相机还是相机转换为世界?

Is the rotation matrix in Pybullet converting world coordinates into camera or camera to world?

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

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

谢谢!

我假设您是在谈论 pybullet.getCameraImage() 所期望的 viewMatrix。这确实应该是一个 world-to-camera 旋转矩阵。

但是,在 pyBullet 中,相机看起来是负的 z-direction,而我通常希望它是正的。我通过在 x-axis:

周围添加 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 是齐次旋转矩阵。