Libbarrett  1.2.4
include/barrett/systems/friction_compensator.h
00001 /*
00002         Copyright 2012 Barrett Technology <support@barrett.com>
00003 
00004         This file is part of libbarrett.
00005 
00006         This version of libbarrett is free software: you can redistribute it
00007         and/or modify it under the terms of the GNU General Public License as
00008         published by the Free Software Foundation, either version 3 of the
00009         License, or (at your option) any later version.
00010 
00011         This version of libbarrett is distributed in the hope that it will be
00012         useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
00013         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014         GNU General Public License for more details.
00015 
00016         You should have received a copy of the GNU General Public License along
00017         with this version of libbarrett.  If not, see
00018         <http://www.gnu.org/licenses/>.
00019 
00020         Further, non-binding information about licensing is available at:
00021         <http://wiki.barrett.com/libbarrett/wiki/LicenseNotes>
00022 */
00023 
00024 /*
00025  * friction_compensator.h
00026  *
00027  *  Created on: Jan 27, 2012
00028  *      Author: dc
00029  */
00030 
00031 #ifndef BARRETT_SYSTEMS_FRICTION_COMPENSATOR_H_
00032 #define BARRETT_SYSTEMS_FRICTION_COMPENSATOR_H_
00033 
00034 
00035 #include <string>
00036 
00037 #include <Eigen/Core>
00038 #include <libconfig.h++>
00039 
00040 #include <barrett/units.h>
00041 #include <barrett/systems/abstract/single_io.h>
00042 
00043 
00044 namespace barrett {
00045 namespace systems {
00046 
00047 
00048 template<size_t DOF>
00049 class FrictionCompensator : public SingleIO<
00050                                                                         typename units::JointVelocities<DOF>::type,
00051                                                                         typename units::JointTorques<DOF>::type>
00052 {
00053         BARRETT_UNITS_TEMPLATE_TYPEDEFS(DOF);
00054 
00055 public:
00056         FrictionCompensator(const libconfig::Setting& setting,
00057                         const std::string& sysName = "FrictionCompensator") :
00058                 SingleIO<jv_type,jt_type>(sysName),
00059                 coulomb(setting["coulomb"]), viscous(setting["viscous"])
00060         {}
00061         virtual ~FrictionCompensator() {
00062                 this->mandatoryCleanUp();
00063         }
00064 
00065 protected:
00066         v_type coulomb;
00067         v_type viscous;
00068         jt_type jt;
00069 
00070         virtual void operate() {
00071                 const jv_type& jv = this->input.getValue();
00072                 for (size_t i = 0; i < DOF; ++i) {
00073                         if (jv[i] > 0.0) {
00074                                 jt[i] = jv[i]*viscous[i] + coulomb[i];
00075                         } else if (jv[i] < 0.0) {
00076                                 jt[i] = jv[i]*viscous[i] - coulomb[i];
00077                         } else {
00078                                 jt[i] = 0.0;
00079                         }
00080                 }
00081 
00082                 this->outputValue->setData(&jt);
00083         }
00084 
00085 private:
00086         DISALLOW_COPY_AND_ASSIGN(FrictionCompensator);
00087 
00088 public:
00089         EIGEN_MAKE_ALIGNED_OPERATOR_NEW
00090 };
00091 
00092 
00093 }
00094 }
00095 
00096 
00097 #endif /* BARRETT_SYSTEMS_FRICTION_COMPENSATOR_H_ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Defines