Source code for brom_drake.utils.initial_condition_manager.manager
from dataclasses import dataclass, field
import numpy as np
from pydrake.all import (
Context,
Frame,
ModelInstanceIndex,
MultibodyPlant,
RigidTransform,
)
from typing import List
# Internal Imports
from brom_drake.utils.initial_condition_manager.initial_condition import InitialCondition
[docs]
@dataclass
class InitialConditionManager:
_ic_tuples: List[InitialCondition] = field(default_factory=list)
def add_initial_condition(self, ic_tuple: InitialCondition):
self._ic_tuples.append(ic_tuple)
def add_initial_configuration(self, model_instance_index: ModelInstanceIndex, configuration: np.ndarray):
ic_tuple = InitialCondition(
model_instance_index=model_instance_index,
configuration=configuration
)
self._ic_tuples.append(ic_tuple)
def add_initial_pose(self, model_instance_index: ModelInstanceIndex, pose_wrt_parent: RigidTransform):
ic_tuple = InitialCondition(
model_instance_index=model_instance_index,
pose_wrt_parent=pose_wrt_parent
)
self._ic_tuples.append(ic_tuple)
[docs]
def set_all_initial_conditions(self, plant: MultibodyPlant, diagram_context: Context = None):
"""
*Description*
Set all initial conditions (both the pose and configuration)
for the given plant.
"""
self.set_all_initial_configurations(plant, diagram_context=diagram_context)
self.set_all_initial_poses(plant, diagram_context=diagram_context)
[docs]
def set_all_initial_configurations(self, plant: MultibodyPlant, diagram_context: Context = None):
"""Set all known initial configurations for the given plant."""
for ic_tuple in self._ic_tuples:
ic_tuple.set_initial_configuration(plant, diagram_context=diagram_context)
[docs]
def set_all_initial_poses(self, plant: MultibodyPlant, diagram_context: Context = None):
"""Set all known initial poses for the given plant."""
for ic_tuple in self._ic_tuples:
ic_tuple.set_initial_pose(plant, diagram_context=diagram_context)