Source code for isaaclab_newton.envs.mdp.events

# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

"""Newton visual randomization event terms."""

from __future__ import annotations

from typing import TYPE_CHECKING

import torch

from isaaclab.envs.mdp.visual_events import _compile_distribution
from isaaclab.managers import EventTermCfg, ManagerTermBase, SceneEntityCfg

from ...physics.newton_manager import NewtonManager

if TYPE_CHECKING:
    from isaaclab.envs import ManagerBasedEnv


[docs] class randomize_visual_shape(ManagerTermBase): """Sample one color per selected link and write Newton shape storage on device."""
[docs] def __init__(self, cfg: EventTermCfg, env: ManagerBasedEnv): super().__init__(cfg, env) channels = cfg.params["channels"] if tuple(channels) != ("color",): raise NotImplementedError("Newton per-shape randomization currently supports only the 'color' channel.") asset_cfg: SceneEntityCfg = cfg.params["asset_cfg"] asset = env.scene[asset_cfg.name] if isinstance(asset_cfg.body_ids, slice): ids = range(asset.num_bodies)[asset_cfg.body_ids] else: ids = asset_cfg.body_ids body_names = tuple(asset.body_names[index] for index in ids) self._writer = NewtonManager.create_visual_shape_color_writer(asset, body_names) self._sample = _compile_distribution(channels["color"], env.device) self._all_env_ids = torch.arange(env.num_envs, dtype=torch.int32, device=self._writer.device)
def __call__( self, env: ManagerBasedEnv, env_ids: torch.Tensor | slice | None, asset_cfg: SceneEntityCfg, channels: dict[str, tuple | dict], ) -> None: del asset_cfg, channels if isinstance(env_ids, slice): env_ids = None selected = self._all_env_ids if env_ids is None else env_ids.to(device=self._writer.device, dtype=torch.int32) model = NewtonManager.get_model() if self._writer.model is not model: self._writer.rebind(model) self._writer(self._sample((len(selected), self._writer.body_count)), selected)