00001 #ifndef grasp_h___ 00002 #define grasp_h___ 00003 00004 #include "target_object.h" 00005 #include "utilities.h" 00006 #include "contact_model.h" 00007 #include "finger.h" 00008 #include "wrench_space.h" 00009 #include <iostream> 00010 00011 namespace ICR 00012 { 00013 //------------------------------------------------------------------ 00014 //------------------------------------------------------------------ 00020 class Grasp 00021 { 00022 private: 00023 00024 std::vector<Finger*> fingers_; 00025 bool initialized_; 00026 TargetObjectPtr obj_; 00027 DiscreteWrenchSpace* gws_; 00028 uint num_fingers_; 00029 uint num_grasp_wrenches_; 00030 00031 OWSPtr computeOWS(Finger const* new_finger); 00032 PatchListPtr computePatches(Finger* new_finger); 00033 void addFinger(FingerParameters const& param, uint centerpoint_id); 00034 void computeGWS(); 00035 void clear(); 00036 00037 public: 00038 00039 Grasp(); 00040 Grasp(Grasp const& src); 00041 Grasp& operator=(Grasp const& src); 00042 friend std::ostream& operator<<(std::ostream& stream,Grasp const& grasp); 00043 ~Grasp(); 00055 void init(FParamList const& f_param_list,const TargetObjectPtr obj,VectorXui const& centerpoint_ids); 00056 void setCenterPointId(uint finger_id,uint centerpoint_id); 00057 void setCenterPointIds(VectorXui const& centerpoint_ids); 00058 bool isInitialized()const; 00059 Finger const* getFinger(uint id) const; 00060 uint getNumFingers()const; 00061 const TargetObjectPtr getParentObj()const; 00062 DiscreteWrenchSpace const* getGWS()const; 00063 }; 00064 //------------------------------------------------------------------ 00065 //------------------------------------------------------------------ 00066 }//namespace ICR 00067 #endif