isaaclab_mimic.datagen.datagen_info 源代码

# Copyright (c) 2024-2025, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0

"""
Defines structure of information that is needed from an environment for data generation.
"""
from copy import deepcopy


[文档]class DatagenInfo: """ Defines the structure of information required from an environment for data generation processes. The `DatagenInfo` class centralizes all essential data elements needed for data generation in one place, reducing the overhead and complexity of repeatedly querying the environment whenever this information is needed. To allow for flexibility,not all information must be present. Core Elements: - **eef_pose**: Captures the current 6 dimensional poses of the robot's end-effector. - **object_poses**: Captures the 6 dimensional poses of relevant objects in the scene. - **subtask_term_signals**: Captures subtask completions signals. - **target_eef_pose**: Captures the target 6 dimensional poses for robot's end effector at each time step. - **gripper_action**: Captures the gripper's state. """
[文档] def __init__( self, eef_pose=None, object_poses=None, subtask_term_signals=None, target_eef_pose=None, gripper_action=None, ): """ Args: eef_pose (torch.Tensor or None): robot end effector poses of shape [..., 4, 4] object_poses (dict or None): dictionary mapping object name to object poses of shape [..., 4, 4] subtask_term_signals (dict or None): dictionary mapping subtask name to a binary indicator (0 or 1) on whether subtask has been completed. Each value in the dictionary could be an int, float, or torch.Tensor of shape [..., 1]. target_eef_pose (torch.Tensor or None): target end effector poses of shape [..., 4, 4] gripper_action (torch.Tensor or None): gripper actions of shape [..., D] where D is the dimension of the gripper actuation action for the robot arm """ self.eef_pose = None if eef_pose is not None: self.eef_pose = eef_pose self.object_poses = None if object_poses is not None: self.object_poses = {k: object_poses[k] for k in object_poses} self.subtask_term_signals = None if subtask_term_signals is not None: self.subtask_term_signals = dict() for k in subtask_term_signals: if isinstance(subtask_term_signals[k], (float, int)): self.subtask_term_signals[k] = subtask_term_signals[k] else: # only create torch tensor if value is not a single value self.subtask_term_signals[k] = subtask_term_signals[k] self.target_eef_pose = None if target_eef_pose is not None: self.target_eef_pose = target_eef_pose self.gripper_action = None if gripper_action is not None: self.gripper_action = gripper_action
def to_dict(self): """ Convert this instance to a dictionary containing the same information. """ ret = dict() if self.eef_pose is not None: ret["eef_pose"] = self.eef_pose if self.object_poses is not None: ret["object_poses"] = deepcopy(self.object_poses) if self.subtask_term_signals is not None: ret["subtask_term_signals"] = deepcopy(self.subtask_term_signals) if self.target_eef_pose is not None: ret["target_eef_pose"] = self.target_eef_pose if self.gripper_action is not None: ret["gripper_action"] = self.gripper_action return ret