Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef PRIMITIVEBASE_HPP_
00035 #define PRIMITIVEBASE_HPP_
00036 #include <ros/ros.h>
00037 #include <actionlib/server/simple_action_server.h>
00038
00039 #include <auv_msgs/NavSts.h>
00040 #include <navcon_msgs/ControllerSelect.h>
00041
00042 namespace labust
00043 {
00044 namespace primitive
00045 {
00049 template <class ActionType>
00050 class ExecutorBase
00051 {
00052 protected:
00053 typedef ActionType Action;
00054 typedef actionlib::SimpleActionServer<Action> ActionServer;
00055 typedef boost::shared_ptr<ActionServer> ActionServerPtr;
00056
00060 ExecutorBase(const std::string& name):
00061 primitiveName(name){};
00065 std::string primitiveName;
00069 ros::Publisher stateRef;
00073 ros::Subscriber stateHat;
00077 ActionServerPtr aserver;
00081 ros::ServiceClient control_manager;
00082 };
00083
00084 template <class Executor,
00085 class OutputType = auv_msgs::NavSts,
00086 class StateType = auv_msgs::NavSts>
00087 class PrimitiveBase : public Executor
00088 {
00089 typedef PrimitiveBase<Executor,OutputType,StateType> Base;
00090 public:
00094 PrimitiveBase(){this->onInit();};
00098 void onInit()
00099 {
00100 ros::NodeHandle nh,ph("~");
00101 this->aserver.reset(new typename Executor::ActionServer(nh, this->primitiveName, false));
00102
00103 this->aserver->registerGoalCallback(boost::bind(&Base::onGoal, this));
00104 this->aserver->registerPreemptCallback(boost::bind(&Base::onPreempt, this));
00105
00106 this->stateRef = nh.advertise<OutputType>("out", 1);
00107 this->stateHat = nh.subscribe<StateType>("state", 1,boost::bind(&Base::onStateHat,this,_1));
00108
00109 this->control_manager = nh.serviceClient<navcon_msgs::ControllerSelect>("controller_select", true);
00110
00111 Executor::init();
00112
00113 this->aserver->start();
00114 }
00115 };
00116 }
00117 }
00118
00119
00120 #endif