Exemplo n.º 1
0
    def geodesic_distance(
        self,
        position_a: Union[Sequence[float], ndarray],
        position_b: Union[Sequence[float], Sequence[Sequence[float]]],
        episode: Optional[Episode] = None,
    ) -> float:
        if episode is None or episode._shortest_path_cache is None:
            path = habitat_sim.MultiGoalShortestPath()
            if isinstance(position_b[0], (Sequence, np.ndarray)):
                path.requested_ends = np.array(position_b, dtype=np.float32)
            else:
                path.requested_ends = np.array(
                    [np.array(position_b, dtype=np.float32)]
                )
        else:
            path = episode._shortest_path_cache

        path.requested_start = np.array(position_a, dtype=np.float32)

        self.pathfinder.find_path(path)

        if episode is not None:
            episode._shortest_path_cache = path

        return path.geodesic_distance
Exemplo n.º 2
0
    def geodesic_distance(self, position_a, position_b):
        path = habitat_sim.MultiGoalShortestPath()
        path.requested_start = np.array(position_a, dtype=np.float32)

        if isinstance(position_b[0], List) or isinstance(
                position_b[0], np.ndarray):
            path.requested_ends = np.array(position_b, dtype=np.float32)
        else:
            path.requested_ends = np.array(
                [np.array(position_b, dtype=np.float32)])

        self._sim.pathfinder.find_path(path)

        return path.geodesic_distance