NODE rosplan_pipeline_manager.py
This is maybe the most important node of the RoboCLuedo ROSPlan package: it allows other nodes to plan and to dispatch the solved plan with a simple interface. Moreover, it adds a large set of informations and details about how the planning process proceeds, and in particular when something wrong occurs, it makes this failure explainable.
The ROSPlan workflow is always the same: load the problem, try to solve it, parse the solved plan, and finally dispatch the solved plan. Each step must be “triggered” each time it is required. And each step, when finished its job, returns something via topic. In other words, it is a pipeline, and this node collects all these triggers in only one place.
- Authors:
- Francesco Ganci (S4143910) 
- Version
- v1.0.0 
- rosplan_pipeline_manager.LANDMARK_COLLECT = 1
- collect - Type
- landmark corresponding to 
 
- rosplan_pipeline_manager.LANDMARK_REPLAN = 0
- replan - Type
- landmark corresponding to 
 
- rosplan_pipeline_manager.LANDMARK_SOLVE = 2
- solve - Type
- landmark corresponding to 
 
- rosplan_pipeline_manager.NODE_NAME = 'rosplan_pipeline_manager'
- nothing to say, node name 
- rosplan_pipeline_manager.SRV_TIMEOUT = 60
- a timeout of 1min used for the client connection 
- rosplan_pipeline_manager.action_feedback_msg = None
- the pending feedback from the actions 
- rosplan_pipeline_manager.action_feedback_received = False
- any pending feedback? 
- rosplan_pipeline_manager.cbk_action_feedback(feedback)[source]
- receive a feedback from the ROSPlan action - The feedback manager can provide an explaination of whatever problem it could arise during the dispatch phase. It is used mostly for detecting a hardware failure, - Parameters
- plan (robocluedo_rosplan_msgs/ActionFeedback) – the feedback from the last executed action 
 - Attention - the feedback manager does not send a “succes” feedbacl, meaning that a feedback is sent only when something goes wrong. 
- rosplan_pipeline_manager.cbk_parsing_interface(plan)[source]
- this callback receives the output from the parsing interface, if any - this topic is used for understanding if the planning interface succeeded in parsing the plan. - Parameters
- plan (rosplan_dispatch_msgs/CompletePlan) – the parsed plan 
 - Note - if something goes wrong, the node publishes nothing! 
- rosplan_pipeline_manager.cbk_pipeline(req)[source]
- implementation of the service pipeline manager - This very long function allows to use the ROSPlan framework as a pipeline, in a simple way. - Parameters
- req (RosplanPipelineManagerServiceRequest) – the pipeline request 
- Returns
- (RosplanPipelineManagerServiceResponse) the response to the caller. 
 
- rosplan_pipeline_manager.cbk_planning_interface(plan)[source]
- this callback receives the output from the planner, if any - When the plannning interface ended its work, it publishes on this topic the preprocessed problem instance. The pipeline manager uses this topic for understanding the outcome of the problem solution phase. - Parameters
- plan (std_msgs/String) – the solution of the problem 
 - Note - if something goes wrong, the node publishes nothing! 
- rosplan_pipeline_manager.cbk_problem_instance(problem)[source]
- this callback received the problem instance from the problem interface - When the problem interface ended its work, it publishes on this topic the preprocessed problem instance. The pipeline manager uses this topic for understanding the outcome of this loading phase. - Parameters
- problem (std_msgs/String) – the problem instance loaded into the knowledge base. 
 - Note - if something goes wrong, the node publishes nothing! 
- rosplan_pipeline_manager.cl_dispatch = None
- (ros client handle) plan dispatcher 
- rosplan_pipeline_manager.cl_parse = None
- (ros client handle) plan parser trigger 
- rosplan_pipeline_manager.cl_plan = None
- (ros client handle) planning interface trigger 
- rosplan_pipeline_manager.cl_problem = None
- (ros client handle) problem instance trigger 
- rosplan_pipeline_manager.cl_update_goal = None
- (ros client handle) set a particular goal into the rosplan knowledge base 
- rosplan_pipeline_manager.inspect_planner_output(fpath)[source]
- the function reurns true when the problem has been found unsolvable. Otherwise, it returns false. - This function is used when there’s something wrong with the planning interface, and enables to distinguish the scenario in which the planner is not solvable from the simple syntax error. - Parameters
- fpath (String) – the path of the output from the planner. 
 - Attention - this function is good only for popf planner, because when the problem is declared unsolvable, it writes a particular thing on the output, the one that is searched by this function in order to understand if the problem is unsolvable or simply badly formulated. Using other planners makes this function to be updated. 
- rosplan_pipeline_manager.open_cl(cl_name, cl_type)[source]
- handful utility to open a client - Parameters
- cl_name (string) – name of the client 
- cl_type – type of message used by the service 
 
 
- rosplan_pipeline_manager.parsing_interface_array = []
- the parsed plan 
- rosplan_pipeline_manager.parsing_interface_received = False
- if the parsed plan han been sent or not 
- rosplan_pipeline_manager.planner_interface_received = False
- it becomes false a bit before triggering the planner, and true when the planning interface succeeded. 
- rosplan_pipeline_manager.planner_interface_solution_path = ''
- the value of the parameter “output_problem_path” 
- rosplan_pipeline_manager.planner_interface_text = ''
- text received from the planning interface 
- rosplan_pipeline_manager.problem_instance_received = False
- this flag is set true when the subscriber received a problem instance. this means that the problem generation worked as expected. 
- rosplan_pipeline_manager.problem_instance_text = ''
- the last problem instance received 
- rosplan_pipeline_manager.service_dispatch = '/rosplan_plan_dispatcher/dispatch_plan'
- name of the service plan dispatch 
- rosplan_pipeline_manager.service_parse = '/rosplan_parsing_interface/parse_plan'
- name of the trigger of the plan parser 
- rosplan_pipeline_manager.service_pipeline = '/robocluedo/pipeline_manager'
- service for the pipeline command manager 
- rosplan_pipeline_manager.service_plan = '/rosplan_planner_interface/planning_server'
- name of the trigger of planning interface 
- rosplan_pipeline_manager.service_problem = '/rosplan_problem_interface/problem_generation_server'
- name of the trigger of problem interface 
- rosplan_pipeline_manager.service_update_goal = '/update_goal'
- used to apply a landmark to the knowledge base 
- rosplan_pipeline_manager.shut_msg()[source]
- called at the shutdown of the node, just a message 
- rosplan_pipeline_manager.srv_pipeline = None
- (ros service handle) service handle for the pipeline service 
- rosplan_pipeline_manager.sub_action_feedback = None
- (ros subscriber handle) the feedback subscription 
- rosplan_pipeline_manager.sub_parser_interface = None
- (ros subscription handle) 
- rosplan_pipeline_manager.sub_planner_interface = None
- (ros subscription handle) 
- rosplan_pipeline_manager.sub_problem_instance = None
- (ros subscriber handle) 
- rosplan_pipeline_manager.topic_action_feedback = '/robocluedo/action_feedback'
- the topic for receiving the feedback 
- rosplan_pipeline_manager.topic_parser_interface = '/rosplan_parsing_interface/complete_plan'
- used for checking the outcome of the parsing interface 
- rosplan_pipeline_manager.topic_planner_interface = '/rosplan_planner_interface/planner_output'
- used for checking if the plan succeeded 
- rosplan_pipeline_manager.topic_problem_instance = '/rosplan_problem_interface/problem_instance'
- topic used to understand if the problem generation succeeded