Go to the documentation of this file.00001 #include "tidyup_actions/actionExecutorOpenDoor.h"
00002 #include <pluginlib/class_list_macros.h>
00003 #include "tidyup_utils/planning_scene_interface.h"
00004
00005 PLUGINLIB_DECLARE_CLASS(tidyup_actions, action_executor_open_door,
00006 tidyup_actions::ActionExecutorOpenDoor,
00007 continual_planning_executive::ActionExecutorInterface)
00008
00009 namespace tidyup_actions
00010 {
00011
00012 bool ActionExecutorOpenDoor::fillGoal(tidyup_msgs::OpenDoorGoal & goal,
00013 const DurativeAction & a, const SymbolicState & current)
00014 {
00015 if(!PlanningSceneInterface::instance()->resetPlanningScene())
00016 ROS_ERROR("%s: PlanningScene reset failed.", __PRETTY_FUNCTION__);
00017
00018 ROS_ASSERT(a.parameters.size() == 3);
00019 string location = a.parameters[0];
00020 string door = a.parameters[1];
00021 string arm = a.parameters[2];
00022
00023
00024 goal.left_arm = false;
00025 goal.right_arm = false;
00026 if(arm == "left_arm") {
00027 goal.left_arm = true;
00028 }
00029 if(arm == "right_arm") {
00030 goal.right_arm = true;
00031 }
00032 return goal.right_arm || goal.left_arm;
00033 }
00034
00035 void ActionExecutorOpenDoor::updateState(const actionlib::SimpleClientGoalState & actionReturnState,
00036 const tidyup_msgs::OpenDoorResult & result,
00037 const DurativeAction & a, SymbolicState & current)
00038 {
00039 ROS_INFO("OpenDoor returned result");
00040 ROS_ASSERT(a.parameters.size() == 3);
00041 string location = a.parameters[0];
00042 string door = a.parameters[1];
00043 string arm = a.parameters[2];
00044 if(actionReturnState == actionlib::SimpleClientGoalState::SUCCEEDED) {
00045 ROS_INFO("OpenDoor succeeded.");
00046 current.setBooleanPredicate("door-open", door, true);
00047 }
00048 current.setObjectFluent("arm-state", arm, "arm_unknown");
00049 current.setBooleanPredicate("door-state-known", door, false);
00050 }
00051
00052 };
00053