example3_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 /*
00029  * In this example we will set parameters for each servo based on information stored
00030  * in the URDF robot description. Because the base class was designed to use the robot
00031  * description information, there are very few code changes. The only difference
00032  * is the custom 'init_actuator_' function now makes use of information obtained
00033  * from the robot description instead of using hard-coded defaults. The only extra
00034  * work really involved is in the creation of the robot description file itself.
00035  *
00036  * Additionally, we will explore the initialization process in detail. In the first
00037  * two examples, the convenience function 'init()' was used. Here we will perform
00038  * initialization by manually calling helper functions provided by the base class.
00039  *
00040  *  Created on: Nov 27, 2011
00041  *      Author: Stephen Williams
00042  */
00043 
00044 #ifndef EXAMPLE3_DRIVER_H_
00045 #define EXAMPLE3_DRIVER_H_
00046 
00047 #include <actuator_array_driver/actuator_array_driver.h>
00048 #include <actuator_array_example/dummy_actuator.h>
00049 
00050 namespace actuator_array_example
00051 {
00052 
00053 struct Example3JointProperties : public actuator_array_driver::JointProperties
00054 {
00055   int channel;
00056   double home;
00057 };
00058 
00059 class Example3Driver : public actuator_array_driver::ActuatorArrayDriver<Example3JointProperties>
00060 {
00061 private:
00062 
00063   // A container of DummyActuator objects, stored by Channel ID
00064   std::map<int, DummyActuator> actuators_;
00065 
00066   // Keep track of the previous time a read/update was called
00067   ros::Time previous_time_;
00068 
00069 public:
00070   Example3Driver();
00071   virtual ~Example3Driver();
00072 
00073   bool init_actuator_(const std::string& joint_name, Example3JointProperties& joint_properties, XmlRpc::XmlRpcValue& joint_data);
00074   bool read_(ros::Time ts = ros::Time::now());
00075   bool command_();
00076   bool stop_();
00077   bool home_();
00078 };
00079 
00080 }
00081 #endif  // EXAMPLE3_DRIVER_H_


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