Skip to content

Commit 42675b6

Browse files
committed
Nest single-consumer scene and camera helper cfgs in their presets
Move the five helper classes that are meaningful only inside one preset class into that class as nested classes, per the repository's nested-class convention: the handover, Allegro, Shadow Direct, and Shadow OpenAI manager scene cfgs and the tiled-camera variant base. _ShadowHandManagerSceneCfg stays module-level (base of two subclasses, one in another file) as does _ShadowHandCameraManagerSceneCfg (consumed by both the train and the Play presets). Nested configclasses must carry their own @configclass decorator — without it, an outer-decorated preset reprocesses the preset instances and the nested class's unannotated defaults resolve to MISSING. All twenty scene preset variants and the camera preset verified value-identical.
1 parent 792e400 commit 42675b6

5 files changed

Lines changed: 90 additions & 105 deletions

File tree

source/isaaclab_tasks/isaaclab_tasks/core/handover/handover_manager_env_cfg.py

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -32,32 +32,31 @@
3232

3333

3434
@configclass
35-
class _HandoverManagerSceneCfg(InteractiveSceneCfg):
36-
"""Scene shared by the handover Manager backend alternatives."""
37-
38-
num_envs = 2048
39-
env_spacing = 1.5
40-
replicate_physics = True
35+
class HandoverManagerSceneCfg(PresetCfg):
36+
"""Backend-specific scene cloning settings for handover."""
4137

42-
ground = AssetBaseCfg(
43-
prim_path="/World/ground",
44-
spawn=sim_utils.GroundPlaneCfg(),
45-
)
46-
right_hand: PresetCfg = RIGHT_HAND_CFG
47-
left_hand: PresetCfg = LEFT_HAND_CFG
48-
object: ObjectCfg = ObjectCfg()
49-
light = AssetBaseCfg(
50-
prim_path="/World/Light",
51-
spawn=sim_utils.DomeLightCfg(intensity=2000.0, color=(0.75, 0.75, 0.75)),
52-
)
38+
@configclass
39+
class SceneCfg(InteractiveSceneCfg):
40+
"""Scene shared by the handover Manager backend alternatives."""
5341

42+
num_envs = 2048
43+
env_spacing = 1.5
44+
replicate_physics = True
5445

55-
@configclass
56-
class HandoverManagerSceneCfg(PresetCfg):
57-
"""Backend-specific scene cloning settings for handover."""
46+
ground = AssetBaseCfg(
47+
prim_path="/World/ground",
48+
spawn=sim_utils.GroundPlaneCfg(),
49+
)
50+
right_hand: PresetCfg = RIGHT_HAND_CFG
51+
left_hand: PresetCfg = LEFT_HAND_CFG
52+
object: ObjectCfg = ObjectCfg()
53+
light = AssetBaseCfg(
54+
prim_path="/World/Light",
55+
spawn=sim_utils.DomeLightCfg(intensity=2000.0, color=(0.75, 0.75, 0.75)),
56+
)
5857

59-
physx = _HandoverManagerSceneCfg(clone_in_fabric=True)
60-
newton_mjwarp = _HandoverManagerSceneCfg(clone_in_fabric=False)
58+
physx = SceneCfg(clone_in_fabric=True)
59+
newton_mjwarp = SceneCfg(clone_in_fabric=False)
6160
ovphysx = physx
6261
default = physx
6362

source/isaaclab_tasks/isaaclab_tasks/core/reorient/config/allegro_hand/allegro_hand_manager_env_cfg.py

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -34,30 +34,29 @@
3434
from isaaclab_tasks.utils import PresetCfg
3535

3636

37-
@configclass
38-
class _AllegroCubeSceneCfg(InteractiveSceneCfg):
39-
"""Allegro scene shared by the backend alternatives."""
40-
41-
num_envs = 8192
42-
env_spacing = 0.75
43-
replicate_physics = True
44-
45-
ground = AssetBaseCfg(prim_path="/World/ground", spawn=sim_utils.GroundPlaneCfg())
46-
robot: ArticulationCfg = ROBOT_CFG
47-
object: ObjectCfg = OBJECT_CFG
48-
light = AssetBaseCfg(
49-
prim_path="/World/Light",
50-
spawn=sim_utils.DomeLightCfg(intensity=2000.0, color=(0.75, 0.75, 0.75)),
51-
)
52-
53-
5437
@configclass
5538
class AllegroCubeSceneCfg(PresetCfg):
5639
"""Backend-specific scene cloning settings matching the Direct task."""
5740

58-
physx = _AllegroCubeSceneCfg(clone_in_fabric=True)
59-
newton_mjwarp = _AllegroCubeSceneCfg(clone_in_fabric=False)
60-
ovphysx = _AllegroCubeSceneCfg(clone_in_fabric=True)
41+
@configclass
42+
class SceneCfg(InteractiveSceneCfg):
43+
"""Allegro scene shared by the backend alternatives."""
44+
45+
num_envs = 8192
46+
env_spacing = 0.75
47+
replicate_physics = True
48+
49+
ground = AssetBaseCfg(prim_path="/World/ground", spawn=sim_utils.GroundPlaneCfg())
50+
robot: ArticulationCfg = ROBOT_CFG
51+
object: ObjectCfg = OBJECT_CFG
52+
light = AssetBaseCfg(
53+
prim_path="/World/Light",
54+
spawn=sim_utils.DomeLightCfg(intensity=2000.0, color=(0.75, 0.75, 0.75)),
55+
)
56+
57+
physx = SceneCfg(clone_in_fabric=True)
58+
newton_mjwarp = SceneCfg(clone_in_fabric=False)
59+
ovphysx = SceneCfg(clone_in_fabric=True)
6160
default = physx
6261

6362
def set_num_envs(self, num_envs: int) -> None:

source/isaaclab_tasks/isaaclab_tasks/core/reorient/config/shadow_hand/shadow_hand_camera_env_cfg.py

Lines changed: 32 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -54,29 +54,6 @@ def validate_shadow_hand_camera_settings(
5454
)
5555

5656

57-
@configclass
58-
class _ShadowHandBaseTiledCameraCfg(CameraCfg):
59-
"""Base camera configuration for the shadow hand vision environment.
60-
61-
This is an internal config used by :class:`ShadowHandTiledCameraCfg` presets and
62-
by derived env configs that hard-code a specific data type. It embeds
63-
:class:`~isaaclab_tasks.utils.MultiBackendRendererCfg` so the renderer backend can
64-
still be selected via the ``presets`` CLI argument.
65-
"""
66-
67-
prim_path: str = "/World/envs/env_.*/Camera"
68-
offset: CameraCfg.OffsetCfg = CameraCfg.OffsetCfg(
69-
pos=(0, -0.35, 1.0), rot=(0.0, 0.7071, 0.0, 0.7071), convention="world"
70-
)
71-
data_types: list[str] = []
72-
spawn: sim_utils.PinholeCameraCfg = sim_utils.PinholeCameraCfg(
73-
focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 20.0)
74-
)
75-
width: int = 120
76-
height: int = 120
77-
renderer_cfg: MultiBackendRendererCfg = MultiBackendRendererCfg()
78-
79-
8057
@configclass
8158
class ShadowHandTiledCameraCfg(PresetCfg):
8259
"""Camera data-type presets for the shadow hand vision environment.
@@ -96,41 +73,55 @@ class ShadowHandTiledCameraCfg(PresetCfg):
9673
presets = newton_renderer, rgb
9774
"""
9875

99-
default: _ShadowHandBaseTiledCameraCfg = _ShadowHandBaseTiledCameraCfg(
100-
data_types=["rgb", "depth", "semantic_segmentation"]
101-
)
76+
@configclass
77+
class BaseTiledCameraCfg(CameraCfg):
78+
"""Base camera configuration for the shadow hand vision environment.
79+
80+
This is an internal config used by :class:`ShadowHandTiledCameraCfg` presets and
81+
by derived env configs that hard-code a specific data type. It embeds
82+
:class:`~isaaclab_tasks.utils.MultiBackendRendererCfg` so the renderer backend can
83+
still be selected via the ``presets`` CLI argument.
84+
"""
85+
86+
prim_path: str = "/World/envs/env_.*/Camera"
87+
offset: CameraCfg.OffsetCfg = CameraCfg.OffsetCfg(
88+
pos=(0, -0.35, 1.0), rot=(0.0, 0.7071, 0.0, 0.7071), convention="world"
89+
)
90+
data_types: list[str] = []
91+
spawn: sim_utils.PinholeCameraCfg = sim_utils.PinholeCameraCfg(
92+
focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 20.0)
93+
)
94+
width: int = 120
95+
height: int = 120
96+
renderer_cfg: MultiBackendRendererCfg = MultiBackendRendererCfg()
97+
98+
default: BaseTiledCameraCfg = BaseTiledCameraCfg(data_types=["rgb", "depth", "semantic_segmentation"])
10299
"""Default: RGB + depth + semantic segmentation (7 CNN input channels)."""
103100

104-
full: _ShadowHandBaseTiledCameraCfg = _ShadowHandBaseTiledCameraCfg(
105-
data_types=["rgb", "depth", "semantic_segmentation"]
106-
)
101+
full: BaseTiledCameraCfg = BaseTiledCameraCfg(data_types=["rgb", "depth", "semantic_segmentation"])
107102
"""Full modalities: RGB + depth + semantic segmentation (7 channels). Alias for default."""
108103

109-
rgb: _ShadowHandBaseTiledCameraCfg = _ShadowHandBaseTiledCameraCfg(data_types=["rgb"])
104+
rgb: BaseTiledCameraCfg = BaseTiledCameraCfg(data_types=["rgb"])
110105
"""RGB only (3 CNN input channels)."""
111106

112-
rgb_depth: _ShadowHandBaseTiledCameraCfg = _ShadowHandBaseTiledCameraCfg(data_types=["rgb", "depth"])
107+
rgb_depth: BaseTiledCameraCfg = BaseTiledCameraCfg(data_types=["rgb", "depth"])
113108
"""RGB and depth (4 CNN input channels)."""
114109

115-
albedo: _ShadowHandBaseTiledCameraCfg = _ShadowHandBaseTiledCameraCfg(data_types=["albedo"])
110+
albedo: BaseTiledCameraCfg = BaseTiledCameraCfg(data_types=["albedo"])
116111
"""Albedo (3 CNN input channels)."""
117112

118-
simple_shading_constant_diffuse: _ShadowHandBaseTiledCameraCfg = _ShadowHandBaseTiledCameraCfg(
113+
simple_shading_constant_diffuse: BaseTiledCameraCfg = BaseTiledCameraCfg(
119114
data_types=["simple_shading_constant_diffuse"]
120115
)
121116
"""Simple shading with constant diffuse (3 CNN input channels)."""
122117

123-
simple_shading_diffuse_mdl: _ShadowHandBaseTiledCameraCfg = _ShadowHandBaseTiledCameraCfg(
124-
data_types=["simple_shading_diffuse_mdl"]
125-
)
118+
simple_shading_diffuse_mdl: BaseTiledCameraCfg = BaseTiledCameraCfg(data_types=["simple_shading_diffuse_mdl"])
126119
"""Simple shading with diffuse MDL (3 CNN input channels)."""
127120

128-
simple_shading_full_mdl: _ShadowHandBaseTiledCameraCfg = _ShadowHandBaseTiledCameraCfg(
129-
data_types=["simple_shading_full_mdl"]
130-
)
121+
simple_shading_full_mdl: BaseTiledCameraCfg = BaseTiledCameraCfg(data_types=["simple_shading_full_mdl"])
131122
"""Simple shading with full MDL (3 CNN input channels)."""
132123

133-
depth: _ShadowHandBaseTiledCameraCfg = _ShadowHandBaseTiledCameraCfg(data_types=["depth"])
124+
depth: BaseTiledCameraCfg = BaseTiledCameraCfg(data_types=["depth"])
134125
"""Depth only (1 channel).
135126
136127
.. warning::
@@ -144,9 +135,7 @@ class ShadowHandTiledCameraCfg(PresetCfg):
144135
presets=depth,ovrtx # depth rendering with OVRTX renderer
145136
"""
146137

147-
semantic_segmentation: _ShadowHandBaseTiledCameraCfg = _ShadowHandBaseTiledCameraCfg(
148-
data_types=["semantic_segmentation"]
149-
)
138+
semantic_segmentation: BaseTiledCameraCfg = BaseTiledCameraCfg(data_types=["semantic_segmentation"])
150139
"""Semantic segmentation (3 CNN input channels)."""
151140

152141

source/isaaclab_tasks/isaaclab_tasks/core/reorient/config/shadow_hand/shadow_hand_env_cfg.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -266,15 +266,6 @@ class ObjectCfg(PresetCfg):
266266
newton_kamino = newton_mjwarp
267267

268268

269-
@configclass
270-
class _ShadowHandSceneCfg(InteractiveSceneCfg):
271-
"""Shadow Direct scene defaults; backend presets only set ``clone_in_fabric``."""
272-
273-
num_envs = 8192
274-
env_spacing = 0.75
275-
replicate_physics = True
276-
277-
278269
@configclass
279270
class ShadowHandSceneCfg(PresetCfg):
280271
"""Scene configuration presets for the shadow hand environment.
@@ -283,8 +274,16 @@ class ShadowHandSceneCfg(PresetCfg):
283274
Newton does not support Fabric cloning, so ``clone_in_fabric`` must be ``False``.
284275
"""
285276

286-
physx: InteractiveSceneCfg = _ShadowHandSceneCfg(clone_in_fabric=True)
287-
newton_mjwarp: InteractiveSceneCfg = _ShadowHandSceneCfg(clone_in_fabric=False)
277+
@configclass
278+
class SceneCfg(InteractiveSceneCfg):
279+
"""Shadow Direct scene defaults; backend presets only set ``clone_in_fabric``."""
280+
281+
num_envs = 8192
282+
env_spacing = 0.75
283+
replicate_physics = True
284+
285+
physx: InteractiveSceneCfg = SceneCfg(clone_in_fabric=True)
286+
newton_mjwarp: InteractiveSceneCfg = SceneCfg(clone_in_fabric=False)
288287
default: InteractiveSceneCfg = physx
289288
newton_kamino = newton_mjwarp
290289

source/isaaclab_tasks/isaaclab_tasks/core/reorient/config/shadow_hand/shadow_hand_manager_env_cfg.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -295,19 +295,18 @@ class CriticCfg(FullStateWithoutActionCfg):
295295
critic: CriticCfg = CriticCfg()
296296

297297

298-
@configclass
299-
class _ShadowHandOpenAIManagerSceneCfg(_ShadowHandManagerSceneCfg):
300-
"""Shadow Hand scene with fingertip joint-wrench sensing."""
301-
302-
joint_wrench = JointWrenchSensorCfg(prim_path="{ENV_REGEX_NS}/Robot")
303-
304-
305298
@configclass
306299
class ShadowHandOpenAIManagerSceneCfg(PresetCfg):
307300
"""Backend-specific OpenAI scene alternatives."""
308301

309-
physx = _ShadowHandOpenAIManagerSceneCfg(clone_in_fabric=True)
310-
newton_mjwarp = _ShadowHandOpenAIManagerSceneCfg(clone_in_fabric=False)
302+
@configclass
303+
class SceneCfg(_ShadowHandManagerSceneCfg):
304+
"""Shadow Hand scene with fingertip joint-wrench sensing."""
305+
306+
joint_wrench = JointWrenchSensorCfg(prim_path="{ENV_REGEX_NS}/Robot")
307+
308+
physx = SceneCfg(clone_in_fabric=True)
309+
newton_mjwarp = SceneCfg(clone_in_fabric=False)
311310
ovphysx = physx
312311
newton_kamino = newton_mjwarp
313312
default = physx

0 commit comments

Comments
 (0)