00001 #ifndef limit_surface_h___ 00002 #define limit_surface_h___ 00003 #include "wrench_cone.h" 00004 #include <string> 00005 #include <iostream> 00006 00007 namespace ICR 00008 { 00009 //-------------------------------------------------------------------- 00010 //-------------------------------------------------------------------- 00016 class LimitSurface 00017 { 00018 private: 00019 00020 double force_magnitude_; 00025 int disc_; 00026 double mu_0_; 00027 double mu_T_; 00031 WrenchCone local_cone_; 00032 ContactType contact_type_; 00037 Eigen::Matrix<double,6,4> selection_matrix_; 00038 00039 void initializeSelectionMatrix(); 00040 void addFrictionlessWrench(); 00041 void addHardFingerWrenches(); 00042 void addSoftFingerWrenches(); 00043 00044 LimitSurface(); 00045 friend class PointContactModel; 00046 friend class OWS; 00047 00048 public: 00049 00050 EIGEN_MAKE_ALIGNED_OPERATOR_NEW 00051 00052 LimitSurface(double force_magnitude); 00053 LimitSurface(double force_magnitude, int disc, double mu_0); 00054 LimitSurface(double force_magnitude, int disc, double mu_0, double mu_T); 00055 LimitSurface(LimitSurface const& src); 00056 LimitSurface& operator=(LimitSurface const& src); 00057 bool operator==(LimitSurface const& other)const; 00058 friend std::ostream& operator<<(std::ostream& stream, LimitSurface const& lim_surf); 00059 ~LimitSurface(); 00060 00061 double getMu0() const; 00062 double getMuT() const; 00063 double getForceMagnitude() const; 00064 int getDisc()const; 00065 int getNumPrimitiveWrenches() const; 00066 WrenchCone const* getLocalWrenchCone() const; 00067 ContactType getContactType() const; 00068 }; 00069 //-------------------------------------------------------------------- 00070 //-------------------------------------------------------------------- 00071 }//namespace ICR 00072 #endif