Source code for brom_drake.utils.leaf_systems.named_vector_selection_system

import numpy as np
from pydrake.all import AffineSystem
from typing import List

[docs] def define_named_vector_selection_system( all_element_names: List[str], sequence_of_names_for_output: List[str], ) -> AffineSystem: """ *Description* This method creates an Affine System that will receive as input a vector where each element is named according to `all_element_names` and returns an output vector that selects only the elements specified in `desired_inputs`. *Parameters* name : str The name of the system to be added. all_element_names : List[str] The list of all element names in the input vector. desired_inputs : List[str] The list of desired element names to be selected for output. *Returns* AffineSystem The created NamedVectorSelectionSystem. """ # Setup n_x = len(all_element_names) n_y = len(sequence_of_names_for_output) # Create the selection matrix D = np.zeros((n_y, n_x)) for i, desired_name in enumerate(sequence_of_names_for_output): if desired_name not in all_element_names: raise ValueError( f"Desired input '{desired_name}' not found in all_element_names." ) j = all_element_names.index(desired_name) D[i, j] = 1.0 # Create the Affine System return AffineSystem( D=D, )