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
是齐次旋转矩阵。
我正在做一个项目,我需要用 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
是齐次旋转矩阵。