Go to the documentation of this file.00001 #include "tidyup_actions/actionExecutorPutdownObject.h"
00002 #include <pluginlib/class_list_macros.h>
00003 #include "tidyup_msgs/GetPutdownPose.h"
00004 #include "arm_navigation_msgs/ArmNavigationErrorCodes.h"
00005 #include <arm_navigation_msgs/convert_messages.h>
00006 #include "tidyup_utils/planning_scene_interface.h"
00007
00008 PLUGINLIB_DECLARE_CLASS(tidyup_actions, action_executor_putdown_object,
00009 tidyup_actions::ActionExecutorPutdownObject,
00010 continual_planning_executive::ActionExecutorInterface)
00011
00012 namespace tidyup_actions
00013 {
00014 bool ActionExecutorPutdownObject::fillGoal(tidyup_msgs::PlaceObjectGoal & goal,
00015 const DurativeAction & a, const SymbolicState & current)
00016 {
00017 if(!PlanningSceneInterface::instance()->resetPlanningScene())
00018 ROS_ERROR("%s: PlanningScene reset failed.", __PRETTY_FUNCTION__);
00019
00020 ROS_ASSERT(a.parameters.size() == 4);
00021 string location = a.parameters[0];
00022 goal.putdown_object = a.parameters[1];
00023 goal.static_object = a.parameters[2];
00024 goal.arm = a.parameters[3];
00025 return true;
00026 }
00027
00028 void ActionExecutorPutdownObject::updateState(const actionlib::SimpleClientGoalState & actionReturnState,
00029 const tidyup_msgs::PlaceObjectResult & result,
00030 const DurativeAction & a, SymbolicState & current)
00031 {
00032 ROS_INFO("PutdownObject returned result");
00033 ROS_ASSERT(a.parameters.size() == 4);
00034 string location = a.parameters[0];
00035 string object = a.parameters[1];
00036 string static_object = a.parameters[2];
00037 string arm = a.parameters[3];
00038 if(actionReturnState == actionlib::SimpleClientGoalState::SUCCEEDED) {
00039 ROS_INFO("PutdownObject succeeded.");
00040 current.setBooleanPredicate("grasped", object + " " + arm, false);
00041 current.setBooleanPredicate("on", object + " " + static_object, true);
00042 current.setBooleanPredicate("graspable-from", object + " " + location + " " + arm, true);
00043 current.setBooleanPredicate("searched", location, false);
00044 current.setNumericalFluent("x", object, result.putdown_pose.pose.position.x);
00045 current.setNumericalFluent("y", object, result.putdown_pose.pose.position.y);
00046 current.setNumericalFluent("z", object, result.putdown_pose.pose.position.z);
00047 current.setNumericalFluent("qx", object, result.putdown_pose.pose.orientation.x);
00048 current.setNumericalFluent("qy", object, result.putdown_pose.pose.orientation.y);
00049 current.setNumericalFluent("qz", object, result.putdown_pose.pose.orientation.z);
00050 current.setNumericalFluent("qw", object, result.putdown_pose.pose.orientation.w);
00051 current.setNumericalFluent("timestamp", object, result.putdown_pose.header.stamp.sec);
00052 current.setObjectFluent("frame-id", object, result.putdown_pose.header.frame_id);
00053
00054 }
00055 current.setObjectFluent("arm-state", arm, "arm_unknown");
00056 current.setBooleanPredicate("recent-detected-objects", location, false);
00057 }
00058 };
00059