controller_base.h
Go to the documentation of this file.
00001 
00002 // Copyright (C) 2012, hiDOF INC.
00003 //
00004 // Redistribution and use in source and binary forms, with or without
00005 // modification, are permitted provided that the following conditions are met:
00006 //   * Redistributions of source code must retain the above copyright notice,
00007 //     this list of conditions and the following disclaimer.
00008 //   * Redistributions in binary form must reproduce the above copyright
00009 //     notice, this list of conditions and the following disclaimer in the
00010 //     documentation and/or other materials provided with the distribution.
00011 //   * Neither the name of hiDOF, Inc. nor the names of its
00012 //     contributors may be used to endorse or promote products derived from
00013 //     this software without specific prior written permission.
00014 //
00015 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00016 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00017 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00018 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00019 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00020 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00021 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00022 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00023 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00024 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00025 // POSSIBILITY OF SUCH DAMAGE.
00027 
00028 /*
00029  * Author: Wim Meeussen
00030  */
00031 
00032 
00033 #ifndef CONTROLLER_INTERFACE_CONTROLLER_BASE_H
00034 #define CONTROLLER_INTERFACE_CONTROLLER_BASE_H
00035 
00036 #include <ros/node_handle.h>
00037 #include <hardware_interface/robot_hw.h>
00038 
00039 namespace hardware_interface
00040 {
00041   class InterfaceResources;
00042 }
00043 
00044 namespace controller_interface
00045 {
00046 
00053 class ControllerBase
00054 {
00055 public:
00056   ControllerBase(): state_(CONSTRUCTED){}
00057   virtual ~ControllerBase(){}
00058 
00067   virtual void starting(const ros::Time& /*time*/) {};
00068 
00074   virtual void update(const ros::Time& time, const ros::Duration& period) = 0;
00075 
00081   virtual void stopping(const ros::Time& /*time*/) {};
00082 
00086   bool isRunning()
00087   {
00088     return (state_ == RUNNING);
00089   }
00090 
00092   void updateRequest(const ros::Time& time, const ros::Duration& period)
00093   {
00094     if (state_ == RUNNING)
00095       update(time, period);
00096   }
00097 
00099   bool startRequest(const ros::Time& time)
00100   {
00101     // start succeeds even if the controller was already started
00102     if (state_ == RUNNING || state_ == INITIALIZED){
00103       starting(time);
00104       state_ = RUNNING;
00105       return true;
00106     }
00107     else
00108       return false;
00109   }
00110 
00112   bool stopRequest(const ros::Time& time)
00113   {
00114     // stop succeeds even if the controller was already stopped
00115     if (state_ == RUNNING || state_ == INITIALIZED){
00116       stopping(time);
00117       state_ = INITIALIZED;
00118       return true;
00119     }
00120     else
00121       return false;
00122   }
00123 
00124   /*\}*/
00125 
00129   typedef std::vector<hardware_interface::InterfaceResources> ClaimedResources;
00130 
00147   virtual bool initRequest(hardware_interface::RobotHW* robot_hw,
00148                            ros::NodeHandle&             root_nh,
00149                            ros::NodeHandle&             controller_nh,
00150                            ClaimedResources&            claimed_resources) = 0;
00151 
00152   /*\}*/
00153 
00155   enum {CONSTRUCTED, INITIALIZED, RUNNING} state_;
00156 
00157 
00158 private:
00159   ControllerBase(const ControllerBase &c);
00160   ControllerBase& operator =(const ControllerBase &c);
00161 
00162 };
00163 
00164 }
00165 
00166 
00167 #endif


controller_interface
Author(s): Wim Meeussen
autogenerated on Thu Dec 1 2016 03:45:58