def get_plan(self):
        '''
        Calculate the plan from current image to the goal. 
        '''
        print('Received a request for plan to goal')

        if self.y_current is None or self.y_goal is None:
            print('Unable to plan because missing images.')
            return [-1]

        # Plan
        instance = namedtuple('instance', ['y_stary', 'y_goal'])

        size = self.size
        instance.y_start = get_uncertain_image(self.y_current, size)
        instance.y_goal = get_uncertain_image(self.y_goal, size)

        # Run planning
        result = self.algo.plan(instance.y_start, instance.y_goal)
        plan = result.plan

        print('Planning done, found plan: ' + str(plan))

        # Fix a bug temporarily TODO: Relearn diffeos
        orbit = OrbitModule(size)

        return orbit.inverse_plan(plan)
Esempio n. 2
0
    def __init__(self, id_discdds, diffeo_structure_threshold, id_algo,
                 plan_length, num_tests, get_planning_thresholds, plans):

        config = get_current_config()
        self.config = config

        # Load objects from configuration manager
        self.discdds = config.discdds.instance(id_discdds)
        self.algo = init_algorithm(self.config, id_algo, id_discdds,
                                   self.discdds)
        self.cmdlist = [
            self.discdds.actions[i].original_cmd
            for i in range(len(self.discdds.actions))
        ]
        #        pdb.set_trace()
        self.metric_goal = self.algo.metric_goal
        # Save input arguments
        self.id_discdds = id_discdds
        self.id_algo = id_algo
        self.diffeo_structure_threshold = diffeo_structure_threshold
        self.plan_length = plan_length
        self.num_tests = num_tests

        # Load orbit camera module
        self.orbit_module = OrbitModule(self.discdds.get_shape())

        # Set get_planning_thresholds function
        if get_planning_thresholds.__class__ == 'str':
            try:
                self.get_planning_thresholds = eval(get_planning_thresholds)
            except:
                logger.info()
        else:
            self.get_planning_thresholds = get_planning_thresholds
        self.get_planning_thresholds_name = str(get_planning_thresholds)

        # Initiate diffeo_structure
        self.diffeo_struct = DiffeoStructure(self.discdds,
                                             diffeo_structure_threshold)

        if plans == 'random':
            self.plans = self.gennerate_random_plans()
        elif plans.__class__ in [list, tuple]:
            self.plans = tuple(plans)
        else:
            self.plans = eval(plans)

        logger.info('Initialized with plans: ' + str(self.plans))
Esempio n. 3
0
 def get_plan(self, req):
     '''
     Calculate the plan from current image to the goal.
     Called from ROS srv. 
     '''
     self.info(str(req))
     self.info('Received a request for plan to goal')
     
     
     # Initiate response object
     res = camera_actuator.srv.planServiceResponse()  # @UndefinedVariable
     
     if self.state in [WAIT_GOAL, WAIT_CURRENT]:
         self.info('Module is in state: ' + self.state + 
                   'Unable to plan because of unspecified images.')
         res.plan = [-1]
         return res
     
     # Assert the module is idle state, otherwise refuse to plan.
     if not self.state == IDLE:
         self.info('Module is in state: ' + self.state + 
                   ' and will not accept new requests for plans right now')
         res.plan = [-1]
         return res
     
     self.info('Passed state check, OK')
     self.state = PLANNING  # indicate that the module is busy with planning
     
     # Plan
     instance = namedtuple('instance', ['y_stary', 'y_goal'])
     
     size = self.size
     y_start = self.get_y_current(size)
     y_goal = self.get_y_goal(size)
     instance.y_start = y_start
     instance.y_goal = y_goal
     
     # Run planning
     algo = self.online_planner.algo
     discdds = self.online_planner.discdds
     
     thresholds = rospy.get_param(self.node_name + '/planning_thresholds')
     if thresholds.__class__ == str:
         get_planning_thresholds = eval('online_planning.' + thresholds)
         thresh = get_planning_thresholds(algo=algo,
                                          discdds=discdds,
                                          active_instance=instance)
     else:
         thresh = thresholds
         
     precision, min_visibility = thresh
     self.info('Ready to plan with precision %g' % precision)
     
     result = self.online_planner.algo.plan(y_start,
                                            y_goal,
                                            precision,
                                            min_visibility)
     plan = result.plan
     
     self.info('Planning done, found plan: ' + str(plan))
     
     orbit = OrbitModule(size)
     
     
     res.plan = orbit.inverse_plan(plan)
     self.state = IDLE
     return res