From 7426231ad22b87102ca7282c73a6d228bd524faa Mon Sep 17 00:00:00 2001 From: Mayank Mittal <12863862+Mayankm96@users.noreply.github.com> Date: Mon, 23 Feb 2026 19:49:15 +0100 Subject: [PATCH] Apply world scale to mesh transformation correctly in MeshRayCaster Previously, the transforms were applied in the order (scale, transform, rotate). However, in Isaac Sim, the correct transformation order is (transform, rotate, scale). This MR fixes this issue by applying scale later. Signed-off-by: Mayank Mittal <12863862+Mayankm96@users.noreply.github.com> --- .../isaaclab/sensors/ray_caster/multi_mesh_ray_caster.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/isaaclab/isaaclab/sensors/ray_caster/multi_mesh_ray_caster.py b/source/isaaclab/isaaclab/sensors/ray_caster/multi_mesh_ray_caster.py index 39be0d7ca0d..4b8ba818a45 100644 --- a/source/isaaclab/isaaclab/sensors/ray_caster/multi_mesh_ray_caster.py +++ b/source/isaaclab/isaaclab/sensors/ray_caster/multi_mesh_ray_caster.py @@ -228,17 +228,18 @@ def _initialize_warp_meshes(self): mesh = create_trimesh_from_geom_mesh(mesh_prim) else: mesh = create_trimesh_from_geom_shape(mesh_prim) - scale = sim_utils.resolve_prim_scale(mesh_prim) - mesh.apply_scale(scale) relative_pos, relative_quat = sim_utils.resolve_prim_pose(mesh_prim, target_prim) relative_pos = torch.tensor(relative_pos, dtype=torch.float32) relative_quat = torch.tensor(relative_quat, dtype=torch.float32) + world_scale = sim_utils.resolve_prim_scale(mesh_prim) + rotation = matrix_from_quat(relative_quat) transform = np.eye(4) transform[:3, :3] = rotation.numpy() transform[:3, 3] = relative_pos.numpy() + transform[:3, :3] = transform[:3, :3] @ np.diag(world_scale) mesh.apply_transform(transform) # add to list of parsed meshes