Source code for brom_drake.systems.pose_composition

from pydrake.common.value import AbstractValue
from pydrake.all import RigidTransform
from pydrake.systems.framework import Context, InputPort, LeafSystem

[docs] class PoseCompositionSystem(LeafSystem): """ *Description* This LeafSystem receives two Pose inputs (i.e., AbstractValue objects containing RigidTransform values) and returns the composition of the two poses (i.e., an AbstractValue containing a RigidTransform value). *Diagram* The LeafSystem's input and output ports can be illustrated with the following block: :: |---------------| pose_AB ----------->| | (RigidTransform) | Pose | | Composition | ----> pose_AC pose_BC ----------->| System | (RigidTransform) (RigidTransform) | | |---------------| """ def __init__(self): LeafSystem.__init__(self) # Define Input Ports self._pose_AB_port = self.DeclareAbstractInputPort( "pose_AB", AbstractValue.Make(RigidTransform()) ) self._pose_BC_port = self.DeclareAbstractInputPort( "pose_BC", AbstractValue.Make(RigidTransform()) ) # Define Output Port self.DeclareAbstractOutputPort( "pose_AC", lambda: AbstractValue.Make(RigidTransform()), self.CalcOutputPose, )
[docs] def CalcOutputPose(self, context: Context, output: AbstractValue): """ *Description* This callback function computes the composed pose, ``pose_AC``, from the two inputs ``pose_AB`` and ``pose_BC``. """ # Retrieve current input values pose_AB: RigidTransform = self.GetInputPort("pose_AB").Eval(context) pose_BC: RigidTransform = self.GetInputPort("pose_BC").Eval(context) assert type(pose_AB) is RigidTransform, \ f"Expected pose_AB port to contain \"RigidTransform\" objects, but received type {type(pose_AB)}" assert type(pose_BC) is RigidTransform, \ f"Expected pose_BC port to contain \"RigidTransform\" objects, but received type {type(pose_BC)}" # Compute Product and return it pose_AC = pose_AB.multiply(pose_BC) output.SetFrom( AbstractValue.Make(pose_AC) )
def get_pose_AB_port(self) -> InputPort: return self._pose_AB_port def get_pose_BC_port(self) -> InputPort: return self._pose_BC_port