メインページ | ネームスペース一覧 | クラス階層 | 構成 | Directories | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ | 関連ページ

HISpidarMotor.h

00001 #ifndef VR_HAPTIC_HDSPIDARMOTOR_H
00002 #define VR_HAPTIC_HDSPIDARMOTOR_H
00003 
00004 #include "Base/Affine.h"
00005 #include "Device/DVDaBase.h"
00006 #include "Device/DVAdBase.h"
00007 #include "Device/DVCounterBase.h"
00008 
00009 namespace Spr {
00010 
00011 class SPR_DLL HISpidarMotor{
00012 public:
00013     /// @name   モータについての定数
00014     //@{
00015     /// 最大出力(N)
00016     float maxForce;
00017     /// 最小出力(N)
00018     float minForce;
00019     /// D/Aの出力電圧 / モータの出力  (V/N)
00020     float voltPerNewton;
00021     /// モータに流れる電流 / D/Aの出力電圧
00022     float currentPerVolt;
00023     /// 糸の長さ / パルス数
00024     float lengthPerPulse;
00025     /// モータが取り付けられている位置(糸の出口)の座標
00026     Vec3f pos;
00027     /// 糸がグリップに取り付けられている位置
00028     Vec3f jointPos;
00029     //
00030     //@}
00031 
00032     //@{    デバイスアクセス
00033     /// 使用するD/A.
00034     DVDaBase* da;
00035     /// 使用するエンコーダのカウンタ.
00036     DVCounterBase* counter;
00037     /// 使用するA/D.
00038     DVAdBase* ad;
00039     //@}
00040     /// 出力した力
00041     float force;
00042 
00043     //@{    モータ定数(内部抵抗・逆起電力・コイル定数)のキャリブレーション
00044     float voltageInt;   ///<    モータ端子間電圧の積分
00045     float currentInt;   ///<    モータ電流の積分
00046     float timeInt;      ///<    積分区間の時間
00047     float currentLast;  ///<    計測開始時のモータ電流
00048     float lengthLast;   ///<    計測開始時の糸の長さ
00049     float vdd;          ///<    電源電圧
00050     PTM::VMatrixCol<float> calibMat;
00051                         ///<    キャリブレーション用データ
00052     PTM::VVector<float> calibVec;
00053                         ///<    キャリブレーション用データ
00054     Vec4f calibResult;  ///<    キャリブレーション結果 (R, L, E)
00055     //@}
00056 public:
00057     /// 
00058     HISpidarMotor();
00059     /// 
00060     virtual ~HISpidarMotor(){}
00061     /// 出力の設定
00062     void SetForce(float f){
00063         if(f < minForce) f = minForce;
00064         if(f > maxForce) f = maxForce;
00065         if(da) da->Voltage(f * voltPerNewton);
00066         force = f;
00067     }
00068     /// 実際に出力した力の取得
00069     float GetForce(){
00070         return force;
00071     }
00072     /// 電流値の取得
00073     float GetCurrent(){
00074         return force * voltPerNewton * currentPerVolt;
00075     }
00076     /// 現在の糸の長さの設定
00077     void SetLength(float l){ if(counter) counter->Count(long(l / lengthPerPulse)); }
00078     /// 現在の糸の長さ
00079     float GetLength(){
00080         if(counter) return counter->Count() * lengthPerPulse;
00081         else return 0;
00082     }
00083     /// 速度の計測
00084     float GetVelocity();
00085     /// モータ定数のキャリブレーションのための計測 (100回くらいこれを呼んでから)
00086     void GetCalibrationData(float dt);
00087     /// モータ定数のキャリブレーション (こっちを呼んでキャリブレーション)
00088     void Calibrate(bool bUpdate);
00089     /// 電源電圧の計測
00090     void GetVdd();
00091 };
00092 
00093 }   //  namespace Spr
00094 #endif

Springheadに対してSun Apr 16 01:57:53 2006に生成されました。  doxygen 1.4.1