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 #ifndef ROBOT_CONTROLLERS_INTERFACE_CONTROLLER_H
00032 #define ROBOT_CONTROLLERS_INTERFACE_CONTROLLER_H
00033
00034 #include <string>
00035 #include <vector>
00036 #include <boost/shared_ptr.hpp>
00037 #include <ros/ros.h>
00038 #include <robot_controllers_interface/handle.h>
00039
00054 namespace robot_controllers
00055 {
00056
00057
00058 class ControllerManager;
00059
00066 class Controller : public Handle
00067 {
00068 public:
00072 Controller()
00073 {
00074 }
00075
00077 virtual ~Controller()
00078 {
00079 }
00080
00088 virtual int init(ros::NodeHandle& nh, ControllerManager* manager)
00089 {
00090 name_ = nh.getNamespace();
00091
00092 if (name_.at(0) == '/')
00093 name_.erase(0, 1);
00094 return 0;
00095 }
00096
00102 virtual bool start() = 0;
00103
00111 virtual bool stop(bool force) = 0;
00112
00119 virtual bool reset() = 0;
00120
00126 virtual void update(const ros::Time& time, const ros::Duration& dt) = 0;
00127
00129 std::string getName()
00130 {
00131 return name_;
00132 }
00133
00135 virtual std::string getType()
00136 {
00137 return "UnknownType";
00138 }
00139
00141 virtual std::vector<std::string> getCommandedNames() = 0;
00142
00144 virtual std::vector<std::string> getClaimedNames() = 0;
00145
00146 private:
00147 std::string name_;
00148 };
00149
00150
00151 typedef boost::shared_ptr<Controller> ControllerPtr;
00152
00153 }
00154
00155 #endif // ROBOT_CONTROLLERS_INTERFACE_CONTROLLER_H