00001 #ifndef FORCETORQUE
00002 #define FORCETORQUE
00003
00004 #include <iostream>
00005
00006
00007 #include <cob_forcetorque/CanESD.h>
00008 #include <Eigen/Core>
00009 #include <Eigen/Array>
00010 #include <fstream>
00011
00012
00013
00014 #define READ_SG 0x200
00015 #define READ_MATRIX 0x202
00016 #define READ_CALIB 0x205
00017 #define SET_CALIB 0x206
00018 #define SET_BASEID 0x213
00019 #define SET_BAUD 0x214
00020 #define READ_FIRMWARE 0x215
00021
00022 class ForceTorqueCtrl
00023 {
00024 public:
00025 ForceTorqueCtrl();
00026 ~ForceTorqueCtrl();
00027
00028 bool Init();
00029 void ReadFTSerialNumber();
00030 void SetActiveCalibrationMatrix(int num);
00031 void ReadSGData(double &Fx, double &Fy, double &Fz, double &Tx, double &Ty, double &Tz);
00032 void ReadFirmwareVersion();
00033 void ReadCalibrationMatrix();
00034
00035 void SetGaugeOffset(float sg0Off, float sg1Off, float sg2Off, float sg3Off, float sg4Off, float sg5Off);
00036 void SetGaugeGain(float gg0, float gg1, float gg2, float gg3, float gg4, float gg5);
00037 void SetFXGain(float fxg0, float fxg1, float fxg2, float fxg3, float fxg4, float fxg5);
00038 void SetFYGain(float fyg0, float fyg1, float fyg2, float fyg3, float fyg4, float fyg5);
00039 void SetFZGain(float fzg0, float fzg1, float fzg2, float fzg3, float fzg4, float fzg5);
00040 void SetTXGain(float txg0, float txg1, float txg2, float txg3, float txg4, float txg5);
00041 void SetTYGain(float tyg0, float tyg1, float tyg2, float tyg3, float tyg4, float tyg5);
00042 void SetTZGain(float tzg0, float tzg1, float tzg2, float tzg3, float tzg4, float tzg5);
00043
00044 void SetCalibMatrix();
00045 void CalcCalibMatrix();
00046 void StrainGaugeToForce(int& sg0, int& sg1, int& sg2, int& sg3, int& sg4, int& sg5);
00047
00048 protected:
00049 void initCan();
00050
00051 private:
00052 CanMsg CMsg;
00053 CanItf* m_Can;
00054 unsigned int d_len;
00055 Eigen::VectorXf m_v3StrainGaigeOffset;
00056 Eigen::VectorXf m_v3GaugeGain;
00057 Eigen::VectorXf m_v3FXGain;
00058 Eigen::VectorXf m_v3FYGain;
00059 Eigen::VectorXf m_v3FZGain;
00060 Eigen::VectorXf m_v3TXGain;
00061 Eigen::VectorXf m_v3TYGain;
00062 Eigen::VectorXf m_v3TZGain;
00063 Eigen::MatrixXf m_mXCalibMatrix;
00064 Eigen::MatrixXf m_vForceData;
00065
00066
00067
00068
00069
00070 void ReadMatrix(int axis, Eigen::VectorXf& vec);
00071
00072
00073 union
00074 {
00075 char bytes[2];
00076 short int value;
00077 } ibBuf;
00078
00079 union
00080 {
00081 char bytes[4];
00082 float value;
00083 } fbBuf;
00084
00085 std::ofstream out;
00086 };
00087
00088 #endif