def reset(self):
        """
        Called at __init__ and whenever the animation aborts and retries
        """

        self.follow_obj = np.random.choice(self.pois)
        if self.follow_obj.type == "MESH":
            self.follow_size = max(self.follow_obj.dimensions)
        else:
            self.follow_size = 2
            logger.warning(
                f"{self.follow_obj.name} had {self.follow_obj.type=}, using {self.follow_size=} instead of .dimensions"
            )

        follow_loc = self.follow_obj.matrix_world.translation
        off = follow_loc - self.target_obj.location
        s = self.follow_size * random_general(self.follow_rad_mult)
        self.target_obj.location = follow_loc + off.normalized() * s
        self.target_obj.location.z = follow_loc.z + self.follow_size * random_general(
            self.alt_mult
        )

        alt = get_altitude(self.target_obj.location, self.bvh)
        if alt is None:
            logger.warning(f"In AnimPolicyFollowObject.reset(), got {alt=}")
        if alt is not None and alt < 2:
            self.target_obj.location *= self.target_obj.location.z / 2

        for c in self.target_obj.constraints:
            self.target_obj.constraints.remove(c)

        butil.constrain_object(self.target_obj, "TRACK_TO", target=self.follow_obj)

        Called at __init__ and whenever the animation aborts and retries
        
infinigen/core/placement/animation_policy.py