Source code for brom_drake.motion_planning.systems.proximity_pose_plan_dispenser.config

from dataclasses import dataclass
import numpy as np
from pydrake.all import (
    RigidTransform,
)

[docs] @dataclass class ProximityPosePlanDispenserConfig: proximity_limit: float = 1e-1 # The proximity limit for the poses. translation_weight: float = 1.0 # The weight for the translation distance in the distance calculation. orientation_weight: float = 0.0 # The weight for the orientation distance in the distance calculation.
[docs] def distance_between_poses( self, pose1: RigidTransform, pose2: RigidTransform, ) -> float: """ Description ----------- This method computes the distance between two poses. Arguments --------- pose1 : RigidTransform The first pose. pose2 : RigidTransform The second pose. """ # Setup Q_translation = self.translation_weight Q_orientation = self.orientation_weight # translation_distance = np.linalg.norm(pose1.translation() - pose2.translation()) orientation_distance = np.linalg.norm(pose1.rotation().matrix() - pose2.rotation().matrix()) return Q_translation * translation_distance + Q_orientation * orientation_distance
[docs] def in_proximity( self, pose1: RigidTransform, pose2: RigidTransform, ) -> bool: """ Description ----------- This method checks if two poses are within the proximity of each other. Arguments --------- pose1 : RigidTransform The first pose. pose2 : RigidTransform The second pose. """ # Setup return self.distance_between_poses(pose1, pose2) < self.proximity_limit