def run_experiment(oracle, configuration): if hasattr(oracle, 'crg'): delattr(oracle, 'crg') # TODO - reuse the crg for some experiments # search is set by configuration? NOt sure what a configuration is search, successor = configuration initial, goal = get_representation(oracle, MANIPULATION_PLANNERS.FFROB) # This one gets the plan from the initial state to the goal plan, state_space = search(initial, goal, ffrob_generator(initial, goal, oracle, successor())) if plan is not None: plan = Plan(plan.cost, plan.length, sum(get_sample_time(operator) for operator in plan.operators)) return Outcome(plan, state_space.time_elapsed(), state_space.iterations, len(state_space), state_space.num_expanded(), state_space.num_generations(), oracle.ffrob_sample_time, oracle.ffrob_sample_attempts)
def run_experiment(oracle, configuration): search, control = configuration initial, goal = get_representation(oracle, MANIPULATION_PLANNERS.HBF) reachability_graph = lambda state: RelaxedPlanGraph(state, goal, lambda rg: GeneratingScheduler(rg, [SP(oracle) for SP in USE_SUBPLANNERS])) generator = lambda vertex: reset_reachability_generator(vertex, oracle, reachability_graph, *control, only_initial=initial, initial_reset_time=INITIAL_RESET_TIME, reset_time=RESET_TIME) #generator = lambda vertex: reachability_generator(vertex, reachability_graph(vertex.state), *control) plan, state_space = resetting_search(oracle, lambda: search(initial, goal, generator), max_time=TIMEOUT) if plan is not None: plan = Plan(plan.cost, plan.length, sum(get_sample_time(operator) for operator in plan.operators)) return Outcome(plan, state_space.time_elapsed(), state_space.iterations, len(state_space), state_space.num_expanded(), state_space.num_generations(), getattr(state_space, 'resets', 0))
def solve(env, problem, planner, search, display, movie, profile, log, debug): RaveSetDebugLevel(DebugLevel.Fatal) #RaveSetDebugLevel(DebugLevel.Debug) problem.set_viewer(env) problem.load_env(env) oracle = ManipulationOracle(problem, env) start, goal = get_representation(oracle, planner) generator = get_generator(start, goal, oracle, planner) oracle.draw_goals() dt = datetime.datetime.now() planner_name = MANIPULATION_PLANNERS.names[planner].lower() directory = DIRECTORY + '{}/{}/{}/{}/'.format(problem.name, planner_name, dt.strftime('%Y-%m-%d'), dt.strftime('%H-%M-%S')) print SEPARATOR + '\nSolving manipulation problem %s using %s'%(problem.name, planner_name) def execute(): if debug: debug_fn = openrave_debug_fn(oracle) else: debug_fn = simple_debug start_time = time() try: if search == 'RRT': output = plan_rrt(start, goal, generator, oracle) else: output = default_plan(start, goal, generator, debug=debug_fn) except KeyboardInterrupt: output = None, 'Time: %.3f'%(time() - start_time) if log or movie: make_dir(directory) print 'Created directory:', directory return output if profile: (plan, state_space), pr = run_profile(execute) else: plan, state_space = execute() data = (str(plan) if plan is not None else 'Infeasible') + '\n\n' + str(state_space) if plan is not None: sample_time = sum(get_sample_time(operator) for operator in plan.operators) data += 'Sample time: %.5f | Sample ratio %.3f%%'%(sample_time, 100*sample_time/state_space.time_elapsed()) # TODO - should really freeze the time print SEPARATOR print data if log: write(directory + DATA_FILENAME, data) print '\nWrote', directory + DATA_FILENAME if plan is not None and display is not None: print SEPARATOR images_directory = directory+'images/' if movie else None if display == 'states': visualize_states(map(lambda tup: tup[1], plan.plan), oracle, display=True, save=images_directory) elif display == 'plan': visualize_plan(plan, oracle, display=True, save=images_directory) elif display == 'execute': if movie: launch_quicktime() # TODO - produces missing value if quicktime is already enabled execute_plan(plan, oracle, pause=False) else: print display, ' is not a valid display method' if profile: print SEPARATOR, str_profile(pr) if log: write_profile(pr, directory + PROFILE_FILENAME) print '\nWrote', directory + PROFILE_FILENAME print SEPARATOR,