00001 #ifndef HDSPIDARG6_H
00002 #define HDSPIDARG6_H
00003
00004 #include "HIHapticDevice.h"
00005 #include "HISpidarMotor.h"
00006 #include "Device/DVPioBase.h"
00007 #include "Device/DVDeviceManager.h"
00008 #include "HISpidarCalc6Dof.h"
00009
00010 namespace Spr {;
00011
00012
00013
00014 class SPR_DLL HISpidarG6: public HIForceDevice6D,public HISpidarCalc6Dof{
00015 public:
00016 std::vector<HISpidarMotor> motor;
00017 std::vector<DVPioBase*> button;
00018
00019
00020 HIOBJECTDEF(HISpidarG6);
00021
00022 HISpidarG6();
00023 virtual ~HISpidarG6();
00024
00025 bool Init(DVDeviceManager& dev, int nMotor, const Vec3f(* motorPos)[2], float vpn, float lpp, float minF, float maxF);
00026
00027 virtual bool BeforeCalib(){ SetMinForce(); return true; }
00028
00029 virtual bool Calib();
00030
00031 void SetMinForce();
00032
00033
00034 Vec3f GetPos(){ return pos; }
00035
00036 Quaternionf GetOri(){ return ori; }
00037
00038
00039 void SetForce(const Vec3f& f){ SetForce(f, Vec3f()); }
00040
00041 void SetForce(const Vec3f& f, const Vec3f& t){ HISpidarCalc6Dof::SetForce(f, t); }
00042
00043 void SetWeight(float s=0.3f, float t=1.0f, float r=6.0f){ smooth=s; lambda_t=t; lambda_r=r; }
00044
00045
00046 Vec3f GetForce(){ return trnForce; }
00047
00048 Vec3f GetTorque(){ return rotForce; }
00049
00050
00051 int HISpidarG6::GetButton(int ch){
00052 if(button[ch]) return button[ch]->Get();
00053 else return 0;
00054 }
00055
00056
00057 virtual void Update(float dt);
00058 virtual void Update(){ HISpidarCalc6Dof::Update(); }
00059
00060 protected:
00061 virtual void MakeWireVec();
00062 virtual void UpdatePos();
00063 virtual void MeasureWire();
00064 };
00065
00066 }
00067 #endif