Example #1
0
    def test_FirstPlannerSucceeds_ReturnsImmediately(self):
        first_planner = SuccessPlanner(self.traj, delay=True)
        second_planner = FailPlanner()
        planner = prpy.planning.Ranked(first_planner, second_planner)

        # Run the metaplanner in a separate thread so we have control over when
        # each delegate planner terminates.
        def test_planner():
            planner.PlanTest(self.robot)

        test_thread = threading.Thread(target=test_planner)
        test_thread.start()
        first_planner.wait_for_start()
        second_planner.wait_for_start()

        # Force the first planner to return success. The meta-planner should
        # immediately return success and the second planner should still be
        # running in the background.
        first_planner.finish()
        test_thread.join(timeout=self.join_timeout)
        self.assertFalse(test_thread.isAlive())

        # Clean up by terminating the second planner.
        second_planner.finish()
        test_thread.join()
Example #2
0
    def test_FirstPlannerFails_ReturnsResultOfSecondPlanner(self):
        first_planner = FailPlanner(delay=True)
        second_planner = SuccessPlanner(self.traj, delay=True)
        planner = prpy.planning.Ranked(first_planner, second_planner)

        # Run the metaplanner in a separate thread so we have control over when
        # each delegate planner terminates.
        def test_planner():
            planner.PlanTest(self.robot)

        test_thread = threading.Thread(target=test_planner)
        test_thread.start()
        first_planner.wait_for_start()
        second_planner.wait_for_start()

        # Force the first planner to return failure. The meta-planner should
        # wait for the second planner before declaring failure.
        first_planner.finish()

        # Force the second planner to return. This trajectory should be
        # immediately returned by the meta-planner.
        second_planner.finish()
        test_thread.join(timeout=self.join_timeout)
        self.assertFalse(test_thread.isAlive())

        # Clean up.
        test_thread.join()
Example #3
0
    def test_SecondPlannerSucceeds_WaitsForFirstPlanner(self):
        first_planner = SuccessPlanner(self.traj, delay=True)
        second_planner = SuccessPlanner(self.traj, delay=True)
        planner = prpy.planning.Ranked(first_planner, second_planner)

        # Run the metaplanner in a separate thread so we have control over when
        # each delegate planner terminates.
        def test_planner():
            planner.PlanTest(self.robot)

        test_thread = threading.Thread(target=test_planner)
        test_thread.start()
        first_planner.wait_for_start()
        second_planner.wait_for_start()

        # Force the second planner to return success. The metaplanner should
        # continue waiting for the first planner.
        second_planner.finish()
        test_thread.join(timeout=self.join_timeout)
        self.assertTrue(test_thread.isAlive())

        # Terminate the first planner. The result should be instantly returned.
        # TODO: Also check that the correct trajectory was returned.
        first_planner.finish()
        test_thread.join(timeout=self.join_timeout)
        self.assertFalse(test_thread.isAlive())