example2_driver.h
Go to the documentation of this file.
00001 /*
00002  *  Copyright (c) 2011, A.M.Howard, S.Williams
00003  *  All rights reserved.
00004  *
00005  *  Redistribution and use in source and binary forms, with or without
00006  *  modification, are permitted provided that the following conditions are met:
00007  *      * Redistributions of source code must retain the above copyright
00008  *        notice, this list of conditions and the following disclaimer.
00009  *      * Redistributions in binary form must reproduce the above copyright
00010  *        notice, this list of conditions and the following disclaimer in the
00011  *        documentation and/or other materials provided with the distribution.
00012  *      * Neither the name of the <organization> nor the
00013  *        names of its contributors may be used to endorse or promote products
00014  *        derived from this software without specific prior written permission.
00015  *
00016  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00017  *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00018  *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00019  *  DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
00020  *  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00021  *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00022  *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00023  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00024  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00025  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00026  */
00027 /*
00028  * This example extends Example1 to use a custom JointProperties class to store additional
00029  * information about each servo. We will also make use of the per-actuator initialization
00030  * hook provided by the base class. This allows us to provide these custom properties in a
00031  * single YAML configuration file, instead of hard-coding them as in the last example, or
00032  * creating additional properties on the parameter server.
00033  *
00034  *  Created on: Nov 27, 2011
00035  *      Author: Stephen Williams
00036  */
00037 
00038 #ifndef EXAMPLE2_DRIVER_H_
00039 #define EXAMPLE2_DRIVER_H_
00040 
00041 #include <actuator_array_driver/actuator_array_driver.h>
00042 #include <actuator_array_example/dummy_actuator.h>
00043 
00044 namespace actuator_array_example
00045 {
00046 // Create a custom JointProperties struct that additionally holds the home position of each
00047 // actuator and the array index (or channel) of this actuator. The use of 'channel' here
00048 // is to mimic how a real servo communication system might be used.
00049 struct Example2JointProperties : public actuator_array_driver::JointProperties
00050 {
00051   int channel;
00052   double home;
00053 };
00054 
00055 class Example2Driver : public actuator_array_driver::ActuatorArrayDriver<Example2JointProperties>
00056 {
00057 private:
00058 
00059   // A container of DummyActuator objects, stored by Channel ID
00060   std::map<int, DummyActuator> actuators_;
00061 
00062   // Keep track of the previous time a read/update was called
00063   ros::Time previous_time_;
00064 
00065 public:
00066   Example2Driver();
00067   virtual ~Example2Driver();
00068 
00069   // In addition to the standard four functions, also provide an implementation of the
00070   // per-actuator initialization function
00071   bool init_actuator_(const std::string& joint_name, Example2JointProperties& joint_properties, XmlRpc::XmlRpcValue& joint_data);
00072   bool read_(ros::Time ts = ros::Time::now());
00073   bool command_();
00074   bool stop_();
00075   bool home_();
00076 };
00077 
00078 }
00079 #endif  // EXAMPLE2_DRIVER_H_


actuator_array_example
Author(s): Stephen Williams
autogenerated on Wed Nov 27 2013 12:01:28