Skip to content

Commit 021e242

Browse files
Replace deprecated TiledCamera with Camera in visuotactile sensor
TiledCamera was merged into Camera in #5162, leaving TiledCamera as a deprecated wrapper. The visuotactile sensor still used the old classes, which caused CI failures due to the extra deprecation layer interacting poorly with the refactored Camera renderer/Fabric initialization. Also fix Camera.__del__ crash when __init__ raises before _renderer is assigned by moving data attribute initialization earlier in __init__.
1 parent caab0de commit 021e242

8 files changed

Lines changed: 38 additions & 20 deletions

File tree

source/isaaclab/docs/CHANGELOG.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ Added
1212
joints with zero stiffness and damping receive a minimal stiffness so that
1313
backends like Newton recognise the drive as active.
1414

15+
Fixed
16+
^^^^^
17+
18+
* Fixed ``AttributeError`` in :meth:`Camera.__del__` when the constructor raised
19+
before ``_renderer`` was assigned. Data attributes are now initialized early in
20+
``__init__`` so cleanup is always safe.
21+
1522

1623
4.6.0 (2026-04-13)
1724
~~~~~~~~~~~~~~~~~~

source/isaaclab/isaaclab/sensors/camera/camera.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,14 @@ def __init__(self, cfg: CameraCfg):
116116
# initialize base class
117117
super().__init__(cfg)
118118

119+
# UsdGeom Camera prim for the sensor
120+
self._sensor_prims: list[UsdGeom.Camera] = list()
121+
# Create empty variables for storing output data
122+
self._data = CameraData()
123+
# Renderer and render data — assigned in _initialize_impl.
124+
self._renderer: BaseRenderer | None = None
125+
self._render_data = None
126+
119127
# toggle rendering of rtx sensors as True
120128
# this flag is read by SimulationContext to determine if rtx sensors should be rendered
121129
settings = get_settings_manager()
@@ -152,14 +160,6 @@ def __init__(self, cfg: CameraCfg):
152160
if len(matching_prims) == 0:
153161
raise RuntimeError(f"Could not find prim with path {check_path}.")
154162

155-
# UsdGeom Camera prim for the sensor
156-
self._sensor_prims: list[UsdGeom.Camera] = list()
157-
# Create empty variables for storing output data
158-
self._data = CameraData()
159-
# Renderer and render data — assigned in _initialize_impl.
160-
self._renderer: BaseRenderer | None = None
161-
self._render_data = None
162-
163163
if not has_kit():
164164
return
165165
# HACK: We need to disable instancing for semantic_segmentation and instance_segmentation_fast to work

source/isaaclab_contrib/config/extension.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
# Semantic Versioning is used: https://semver.org/
3-
version = "0.3.0"
3+
version = "0.3.1"
44

55
# Description
66
title = "Isaac Lab External Contributions"

source/isaaclab_contrib/docs/CHANGELOG.rst

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
Changelog
22
---------
33

4+
0.3.1 (2026-04-14)
5+
~~~~~~~~~~~~~~~~~~
6+
7+
Changed
8+
^^^^^^^
9+
10+
* Replaced deprecated :class:`~isaaclab.sensors.camera.TiledCamera` and
11+
:class:`~isaaclab.sensors.camera.TiledCameraCfg` with :class:`~isaaclab.sensors.camera.Camera`
12+
and :class:`~isaaclab.sensors.camera.CameraCfg` in the visuotactile sensor.
13+
14+
415
0.3.0 (2026-02-13)
516
~~~~~~~~~~~~~~~~~~
617

source/isaaclab_contrib/docs/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ The TacSL tactile sensor system includes:
256256

257257
```python
258258
import isaaclab.sim as sim_utils
259-
from isaaclab.sensors import TiledCameraCfg
259+
from isaaclab.sensors import CameraCfg
260260

261261
from isaaclab_contrib.sensors.tacsl_sensor import VisuoTactileSensorCfg
262262

@@ -288,7 +288,7 @@ tactile_sensor_cfg = VisuoTactileSensorCfg(
288288
tangential_stiffness=0.1, # Tangential stiffness
289289

290290
# Camera configuration (must match render_cfg dimensions)
291-
camera_cfg=TiledCameraCfg(
291+
camera_cfg=CameraCfg(
292292
prim_path="{ENV_REGEX_NS}/Robot/elastomer_tip/cam",
293293
height=GELSIGHT_R15_CFG.image_height,
294294
width=GELSIGHT_R15_CFG.image_width,

source/isaaclab_contrib/isaaclab_contrib/sensors/tacsl_sensor/visuotactile_sensor.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import isaaclab.sim as sim_utils
2121
import isaaclab.utils.math as math_utils
2222
from isaaclab.markers import VisualizationMarkers
23-
from isaaclab.sensors.camera import Camera, TiledCamera
23+
from isaaclab.sensors.camera import Camera
2424
from isaaclab.sensors.sensor_base import SensorBase
2525
from isaaclab.sim import SimulationContext
2626
from isaaclab.utils.math import quat_apply, quat_inv
@@ -66,7 +66,7 @@ class VisuoTactileSensor(SensorBase):
6666
The following requirements must be satisfied for proper sensor operation:
6767
6868
**Camera Tactile Imaging**
69-
If ``enable_camera_tactile=True``, a valid ``camera_cfg`` (TiledCameraCfg) must be
69+
If ``enable_camera_tactile=True``, a valid ``camera_cfg`` (CameraCfg) must be
7070
provided with appropriate camera parameters.
7171
7272
**Force Field Computation**
@@ -98,7 +98,7 @@ def __init__(self, cfg: VisuoTactileSensorCfg):
9898
self._data: VisuoTactileSensorData = VisuoTactileSensorData()
9999

100100
# Camera-based tactile sensing
101-
self._camera_sensor: Camera | TiledCamera | None = None
101+
self._camera_sensor: Camera | None = None
102102
self._nominal_tactile: dict | None = None
103103

104104
# Force field tactile sensing
@@ -262,7 +262,7 @@ def _initialize_camera_tactile(self):
262262
self._tactile_rgb_render = GelsightRender(self.cfg.render_cfg, device=self.device)
263263

264264
# Create camera sensor
265-
self._camera_sensor = TiledCamera(self.cfg.camera_cfg)
265+
self._camera_sensor = Camera(self.cfg.camera_cfg)
266266

267267
# Initialize camera
268268
if not self._camera_sensor.is_initialized:

source/isaaclab_contrib/isaaclab_contrib/sensors/tacsl_sensor/visuotactile_sensor_cfg.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
from isaaclab.markers import VisualizationMarkersCfg
1414
from isaaclab.markers.config import VISUO_TACTILE_SENSOR_MARKER_CFG
15-
from isaaclab.sensors import SensorBaseCfg, TiledCameraCfg
15+
from isaaclab.sensors import CameraCfg, SensorBaseCfg
1616
from isaaclab.utils import configclass
1717
from isaaclab.utils.assets import ISAACLAB_NUCLEUS_DIR
1818

@@ -171,7 +171,7 @@ class VisuoTactileSensorCfg(SensorBaseCfg):
171171
tangential_stiffness: float = 0.1
172172
"""Tangential stiffness for shear forces."""
173173

174-
camera_cfg: TiledCameraCfg | None = None
174+
camera_cfg: CameraCfg | None = None
175175
"""Camera configuration for tactile RGB/depth sensing.
176176
177177
If None, camera-based sensing will be disabled even if :attr:`enable_camera_tactile` is True.

source/isaaclab_contrib/test/sensors/test_visuotactile_sensor.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
import isaaclab.sim as sim_utils
2727
from isaaclab.assets import Articulation, ArticulationCfg, RigidObject, RigidObjectCfg
28-
from isaaclab.sensors.camera import TiledCameraCfg
28+
from isaaclab.sensors.camera import CameraCfg
2929
from isaaclab.terrains.trimesh.utils import make_plane
3030
from isaaclab.terrains.utils import create_prim_from_mesh
3131
from isaaclab.utils.assets import ISAACLAB_NUCLEUS_DIR
@@ -69,7 +69,7 @@ def get_sensor_cfg_by_type(sensor_type: str) -> VisuoTactileSensorCfg:
6969
return VisuoTactileSensorCfg(
7070
prim_path="/World/Robot/elastomer/tactile_cam",
7171
enable_force_field=False,
72-
camera_cfg=TiledCameraCfg(
72+
camera_cfg=CameraCfg(
7373
height=320,
7474
width=240,
7575
prim_path="/World/Robot/elastomer_tip/cam",
@@ -89,7 +89,7 @@ def get_sensor_cfg_by_type(sensor_type: str) -> VisuoTactileSensorCfg:
8989
debug_vis=False,
9090
enable_camera_tactile=True,
9191
enable_force_field=True,
92-
camera_cfg=TiledCameraCfg(
92+
camera_cfg=CameraCfg(
9393
height=320,
9494
width=240,
9595
prim_path="/World/Robot/elastomer_tip/cam",

0 commit comments

Comments
 (0)