sr_articulated_robot.h
Go to the documentation of this file.
00001 
00030 #ifndef         SHADOWHAND_H_
00031 # define        SHADOWHAND_H_
00032 
00033 #include <ros/ros.h>
00034 #include <string>
00035 #include <vector>
00036 #include <map>
00037 
00038 //self_test
00039 #include "diagnostic_msgs/SelfTest.h"
00040 #include "self_test/self_test.h"
00041 
00042 #include <boost/smart_ptr.hpp>
00043 #include <boost/thread.hpp>
00044 #include <boost/noncopyable.hpp>
00045 #include <boost/assign.hpp>
00046 
00047 #ifdef GAZEBO
00048 #include <sensor_msgs/JointState.h>
00049 #endif
00050 
00051 
00052 namespace debug_values
00053 {
00055   static const std::map<const std::string, const unsigned int> names_and_offsets
00056     = boost::assign::map_list_of ("Sensor PID last in",         0) \
00057                                  ("Sensor PID iState",          1) \
00058                                  ("Sensor PID last D",          2) \
00059                                  ("Sensor PID last out",        3) \
00060                                  ("PID last in",                4) \
00061                                  ("PID iState",                 5) \
00062                                  ("PID last D",                 6) \
00063                                  ("PID last out",               7) \
00064                                  ("Strain Gauge Offset 0",      8) \
00065                                  ("Strain Gauge Offset 1",      9) \
00066                                  ("Num setup Msgs received",   10) \
00067                                  ("Num sensor Msgs received",  11) \
00068                                  ("Sensor Val (motor set P)",  12) \
00069                                  ("Sensor Val (motor sensor)", 13) \
00070                                  ("H-Bridge Duty",             14) \
00071                                  ("Duty Temp",                 15) ;
00072 }
00073 
00074 
00075 namespace shadowrobot
00076 {
00080   struct JointData
00081   {
00082     double position;
00083     double target;
00084     double temperature;
00085     double current;
00086     double force;
00087     std::string flags;
00088     int jointIndex;
00089     double min;
00090     double max;
00091     short isJointZero;
00092 
00099     int publisher_index;
00100     ros::Time last_pos_time;
00101     double last_pos;
00102     double velocity;
00103 
00104   JointData() :
00105     position(0.0), target(0.0), temperature(0.0), current(0.0), force(0.0), flags(""), jointIndex(0), min(0.0), max(90.0), isJointZero(0), publisher_index(0), last_pos_time(0.0), last_pos(0.0), velocity(0.0)
00106     {
00107     }
00108 
00109   JointData(JointData& jd) :
00110     position(jd.position), target(jd.target), temperature(jd.temperature), current(jd.current), force(jd.force),
00111       flags(jd.flags), jointIndex(jd.jointIndex), min(jd.min), max(jd.max), isJointZero(jd.isJointZero), publisher_index(jd.publisher_index), last_pos_time(jd.last_pos_time), last_pos(jd.last_pos), velocity(jd.velocity)
00112     {
00113     }
00114 
00115   JointData(const JointData& jd) :
00116     position(jd.position), target(jd.target), temperature(jd.temperature), current(jd.current), force(jd.force),
00117       flags(jd.flags), jointIndex(jd.jointIndex), min(jd.min), max(jd.max), isJointZero(jd.isJointZero), publisher_index(jd.publisher_index), last_pos_time(jd.last_pos_time), last_pos(jd.last_pos), velocity(jd.velocity)
00118     {
00119     }
00120   };
00121 
00125   enum controller_parameters
00126   {
00127     PARAM_sensor, 
00128     PARAM_target, 
00129     PARAM_valve, 
00130     PARAM_deadband, 
00131     PARAM_p, 
00132     PARAM_i, 
00133     PARAM_d, 
00134     PARAM_imax, 
00135     PARAM_output_offset, 
00136     PARAM_shift, 
00137     PARAM_output_max, 
00138 
00139     PARAM_motor_maxforce, 
00140     PARAM_motor_safeforce, 
00141     PARAM_force_p, 
00142     PARAM_force_i, 
00143     PARAM_force_d, 
00144     PARAM_force_imax, 
00145     PARAM_force_out_shift, 
00146     PARAM_force_deadband, 
00147     PARAM_force_offset, 
00148     PARAM_sensor_imax, 
00149     PARAM_sensor_out_shift,
00150     PARAM_sensor_deadband, 
00151     PARAM_sensor_offset, 
00152     PARAM_max_temperature, 
00153     PARAM_max_current, 
00154     PARAM_type_of_sensor, 
00155     PARAM_type_of_setpoint
00157 
00158   };
00159 
00163   struct Parameters
00164   {
00166     std::string name;
00168     std::string value;
00169 
00170   Parameters() :
00171     name(""), value("")
00172     {
00173     }
00174 
00175   Parameters( Parameters& param ) :
00176     name(param.name), value(param.value)
00177     {
00178     }
00179 
00180   Parameters( const Parameters& param ) :
00181     name(param.name), value(param.value)
00182     {
00183     }
00184   };
00185 
00189   struct JointControllerData
00190   {
00191     std::vector<Parameters> data;
00192 
00193   JointControllerData() :
00194     data()
00195     {
00196     }
00197 
00198   JointControllerData( JointControllerData& jcd ) :
00199     data(jcd.data)
00200     {
00201     }
00202 
00203   JointControllerData( const JointControllerData& jcd ) :
00204     data(jcd.data)
00205     {
00206     }
00207   };
00208 
00209 
00210 
00214   struct DiagnosticData
00215   {
00217     std::string joint_name;
00219     short level;
00220 
00222     std::string flags;
00223 
00225     int target_sensor_num;
00227     int position_sensor_num;
00229     double target;
00230 
00232     std::map<std::string, int> debug_values;
00234     double position;
00235 
00237     double temperature;
00239     double current;
00241     double force;
00242 
00243     //values read from the debug node.
00244     uint64_t num_sensor_msgs_received;
00245 
00246   };
00247 
00255   class SRArticulatedRobot : boost::noncopyable
00256   {
00257   public:
00261     SRArticulatedRobot()
00262     {
00263     }
00264     ;
00265 
00269     virtual ~SRArticulatedRobot()
00270     {
00271     }
00272     ;
00273 
00275     typedef std::map<std::string, JointData> JointsMap;
00277     typedef std::map<std::string, enum controller_parameters> ParametersMap;
00278 
00285     virtual short sendupdate( std::string joint_name, double target ) = 0;
00286 
00292     virtual JointData getJointData( std::string joint_name ) = 0;
00293 
00298     virtual JointsMap getAllJointsData() = 0;
00299 
00306     virtual short setContrl( std::string contrlr_name, JointControllerData ctrlr_data ) = 0;
00307 
00313     virtual JointControllerData getContrl( std::string contrlr_name ) = 0;
00314 
00322     virtual short setConfig( std::vector<std::string> myConfig ) = 0;
00323 
00330     virtual void getConfig( std::string joint_name ) = 0;
00331 
00336     virtual std::vector<DiagnosticData> getDiagnostics() = 0;
00337 
00339     JointsMap joints_map;
00340 
00342     ParametersMap parameters_map;
00343 
00344     boost::mutex joints_map_mutex;
00345     boost::mutex parameters_map_mutex;
00346     boost::mutex controllers_map_mutex;
00347 
00348   protected:
00350     boost::shared_ptr<self_test::TestRunner> self_test;
00351 #ifdef GAZEBO
00352     std::vector<ros::Publisher> gazebo_publishers;
00353     ros::Subscriber gazebo_subscriber;
00354 #endif
00355   }; //end class
00356 
00357 }//end namespace
00358 
00359 
00360 /* For the emacs weenies in the crowd.
00361 Local Variables:
00362    c-basic-offset: 2
00363 End:
00364 */
00365 
00366 #endif      /* !SHADOWHAND_H_ */


sr_hand
Author(s): Ugo Cupcic
autogenerated on Fri Aug 28 2015 13:08:51