From 576460b44e0e7eefc1a2332b48e3c63c353309a6 Mon Sep 17 00:00:00 2001 From: Gijs de Jong Date: Sat, 17 May 2025 21:54:05 +0100 Subject: [PATCH 1/3] Log `Asset3D` instead of using trimesh --- src/rerun_loader_urdf/__init__.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/rerun_loader_urdf/__init__.py b/src/rerun_loader_urdf/__init__.py index db8d9e5..50d13ff 100644 --- a/src/rerun_loader_urdf/__init__.py +++ b/src/rerun_loader_urdf/__init__.py @@ -97,6 +97,7 @@ def log_joint(self, entity_path: str, joint: urdf_parser.Joint, recording: rr.Re def log_visual(self, entity_path: str, visual: urdf_parser.Visual, recording: rr.RecordingStream) -> None: """Log a URDF visual to Rerun.""" material = None + mesh_or_scene = None if visual.material is not None: if visual.material.color is None and visual.material.texture is None: # use globally defined material @@ -109,12 +110,11 @@ def log_visual(self, entity_path: str, visual: urdf_parser.Visual, recording: rr if isinstance(visual.geometry, urdf_parser.Mesh): resolved_path = self.root_filepath / resolve_ros_path(visual.geometry.filename) mesh_scale = visual.geometry.scale - mesh_or_scene = trimesh.load_mesh(resolved_path) - if mesh_scale is not None: - if transform is not None: - transform.scale = mesh_scale - else: - transform = rr.Transform3D(scale=mesh_scale) + + transform = rr.Transform3D(scale=mesh_scale) + + recording.log(entity_path + f"/{resolved_path}", rr.Asset3D(path=resolved_path), transform) + elif isinstance(visual.geometry, urdf_parser.Box): mesh_or_scene = trimesh.creation.box(extents=visual.geometry.size) elif isinstance(visual.geometry, urdf_parser.Cylinder): @@ -145,7 +145,7 @@ def log_visual(self, entity_path: str, visual: urdf_parser.Visual, recording: rr texture_path = resolve_ros_path(material.texture.filename) mesh.visual = trimesh.visual.texture.TextureVisuals(image=Image.open(texture_path)) log_trimesh(entity_path + f"/{i}", mesh, transform, recording=recording) - else: + elif mesh_or_scene is not None: mesh = mesh_or_scene if material is not None and not isinstance(mesh.visual, trimesh.visual.texture.TextureVisuals): if material.color is not None: From 63f53de26e19ca27a8b8d0e7c75ed7e0a2b5cf4e Mon Sep 17 00:00:00 2001 From: Gijs de Jong Date: Sat, 17 May 2025 22:15:50 +0100 Subject: [PATCH 2/3] Log albedo factor --- src/rerun_loader_urdf/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rerun_loader_urdf/__init__.py b/src/rerun_loader_urdf/__init__.py index 50d13ff..ebe3ada 100644 --- a/src/rerun_loader_urdf/__init__.py +++ b/src/rerun_loader_urdf/__init__.py @@ -114,6 +114,10 @@ def log_visual(self, entity_path: str, visual: urdf_parser.Visual, recording: rr transform = rr.Transform3D(scale=mesh_scale) recording.log(entity_path + f"/{resolved_path}", rr.Asset3D(path=resolved_path), transform) + if material is not None: + recording.log( + entity_path + f"/{resolved_path}", rr.Asset3D.from_fields(albedo_factor=material.color.rgba) + ) elif isinstance(visual.geometry, urdf_parser.Box): mesh_or_scene = trimesh.creation.box(extents=visual.geometry.size) From 70b2bf056af3fa45a523c14aa57155b684cfaab5 Mon Sep 17 00:00:00 2001 From: Gijs de Jong Date: Fri, 23 May 2025 13:24:35 +0200 Subject: [PATCH 3/3] increment version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f952f43..79b5263 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "rerun-loader-urdf" description = "Example of an executable data-loader plugin for the Rerun Viewer for URDF files." -version = "0.2.0" +version = "0.3.0" requires-python = ">=3.10" dependencies = [ "urdfdom-py",