def _create_planner(): return _sst_module.RRTWrapper( state_bounds=system.get_state_bounds(), control_bounds=system.get_control_bounds(), distance=system.distance_computer(), start_state=np.array([0., 0.]), goal_state=np.array([9., 9.]), goal_radius=0.5, random_seed=0)
def test_py_system_rrt(): system = Point() planner = _sst_module.RRTWrapper( state_bounds=system.get_state_bounds(), control_bounds=system.get_control_bounds(), distance=system.distance_computer(), start_state=np.array([0.2, 0.1]), goal_state=np.array([5., 5.]), goal_radius=1.5, random_seed=0) min_time_steps = 10 max_time_steps = 50 integration_step = 0.02 for iteration in range(1000): planner.step(system, min_time_steps, max_time_steps, integration_step) im = planner.visualize_tree(system)
def test_create_multiple_times_rrt(): ''' There used to be a crash during construction ''' system = standard_cpp_systems.CartPole() planners = [] for i in range(100): planner = _sst_module.RRTWrapper( state_bounds=system.get_state_bounds(), control_bounds=system.get_control_bounds(), distance=system.distance_computer(), start_state=np.array([-20, 0, 3.14, 0]), goal_state=np.array([20, 0, 3.14, 0]), goal_radius=1.5, random_seed=0) min_time_steps = 10 max_time_steps = 50 integration_step = 0.02 for iteration in range(100): planner.step(system, min_time_steps, max_time_steps, integration_step) planners.append(planner)
def test_py_system_rrt_custom_distance(): ''' Check that distance overriding in python works ''' system = Acrobot() planner = _sst_module.RRTWrapper( state_bounds=system.get_state_bounds(), control_bounds=system.get_control_bounds(), # use custom distance computer distance=AcrobotDistance(), start_state=np.array([0., 0., 0., 0.]), goal_state=np.array([np.pi, 0., 0., 0.]), goal_radius=2., random_seed=0) min_time_steps = 10 max_time_steps = 50 integration_step = 0.02 for iteration in range(100): planner.step(system, min_time_steps, max_time_steps, integration_step) im = planner.visualize_tree(system)
def test_point_rrt(): ''' Sanity check RRT test - makes sure that RRT produces exactly(!) the same results during runs. Idea is to be deterministic and reproducible and detect when RRT algorithm is changed during refactoring. ''' system = standard_cpp_systems.Point() planner = _sst_module.RRTWrapper( state_bounds=system.get_state_bounds(), control_bounds=system.get_control_bounds(), distance=system.distance_computer(), start_state=np.array([0., 0.]), goal_state=np.array([9., 9.]), goal_radius=0.5, random_seed=0) number_of_iterations = 31000 min_time_steps = 20 max_time_steps = 200 integration_step = 0.002 print("Starting the planner.") start_time = time.time() expected_results = { 0: (1, None), 10000: (7563, 5.4), 20000: (14952, 4.43), 30000: (22293, 4.43), 'final': (23021, 4.43) } for iteration in range(number_of_iterations): planner.step(system, min_time_steps, max_time_steps, integration_step) if iteration % 10000 == 0: solution = planner.get_solution() expected_number_of_nodes, expected_solution_cost = expected_results[ iteration] assert (expected_number_of_nodes == planner.get_number_of_nodes()) if solution is None: solution_cost = None assert (expected_solution_cost is None) else: solution_cost = np.sum(solution[2]) assert (abs(solution_cost - expected_solution_cost) < 1e-9) print( "Time: %.2fs, Iterations: %d, Nodes: %d, Solution Quality: %s" % (time.time() - start_time, iteration, planner.get_number_of_nodes(), solution_cost)) path, controls, costs = planner.get_solution() solution_cost = np.sum(costs) print("Time: %.2fs, Iterations: %d, Nodes: %d, Solution Quality: %f" % (time.time() - start_time, number_of_iterations, planner.get_number_of_nodes(), solution_cost)) expected_number_of_nodes, expected_solution_cost = expected_results[ 'final'] assert (planner.get_number_of_nodes() == expected_number_of_nodes) assert (abs(solution_cost - expected_solution_cost) < 1e-9)