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

HISpidar3.h

00001 #ifndef HDSPIDAR3QUAD_H
00002 #define HDSPIDAR3QUAD_H
00003 
00004 #include "HIHapticDevice.h"
00005 #include "HISpidarMotor.h"
00006 #include "Device/DVDeviceManager.h"
00007 #include <vector>
00008 
00009 namespace Spr {
00010 using namespace Spr;
00011 
00012 /** 3本糸のSPIDAR.
00013     糸の長さから座標計算を行ったり、出力する力覚から各モータの
00014     出力を計算したりする。出力の計算に2次計画法を用いているため,
00015     HIS/Fortran の libF77.lib libI77.lib QuadPR.lib が必要.
00016 @verbatim
00017 SPIDARの定数の設定例
00018 Init(dev, motPos, 0.5776, 2.924062107079e-5f, 0.5f, 20.0f);
00019 
00020 //  モータの取り付け位置. モータが直方体に取り付けられている場合は,
00021 #define PX  0.265f  //  x方向の辺の長さ/2
00022 #define PY  0.265f  //  y方向の辺の長さ/2
00023 #define PZ  0.265f  //  z方向の辺の長さ/2
00024 Vec3f motorPos[][4] =   //  モータの取り付け位置(中心を原点とする){
00025     {Vec3f(-PX, PY, PZ),    Vec3f( PX, PY,-PZ), Vec3f(-PX,-PY,-PZ), Vec3f( PX,-PY, PZ)},
00026     {Vec3f( PX, PY, PZ),    Vec3f(-PX, PY,-PZ), Vec3f( PX,-PY,-PZ), Vec3f(-PX,-PY, PZ)}
00027 };
00028 
00029 //  1ニュートン出すためのDAの出力電圧[V/N]
00030 //  maxon:      0.008[m] / 0.0438[Nm/A] / 0.5[A/V] =  0.365296803653
00031 //  千葉精機:   0.008[m] / 0.0277[Nm/A] / 0.5[A/V] =  0.5776
00032 sp->VoltPerNewton(0.5776f);
00033 
00034 //  1カウントの長さ [m/plus]   実測値: 2.924062107079e-5f
00035 sp->LenPerPlus(2.924062107079e-5f);
00036 
00037 //  最小張力 [N]
00038 sp->MinForce(0.5f);
00039 
00040 //  最大張力 [N]
00041 sp->MaxForce(20.0f);
00042 @endverbatim
00043 */
00044 
00045 class SPR_DLL HISpidar3: public HIForceDevice3D{
00046 public:
00047 
00048     typedef HIForceDevice3D superclass;
00049 protected:
00050     Vec3f pos;
00051     Vec3f force;
00052     /// モータ
00053     HISpidarMotor motor[3];
00054     /// 面のどちら側を使用するか
00055     bool bLeft;
00056 
00057 public:
00058     ///
00059     HISpidar3();
00060     /// デバイスのタイプ
00061     HIOBJECTDEF(HISpidar3);
00062     ///
00063     virtual ~HISpidar3();
00064     /// デバイスの初期化(使用前に呼ぶ)
00065     virtual bool Init(DVDeviceManager& dev);
00066     /// デバイスの初期化(使用前に呼ぶ)
00067     virtual bool Init(DVDeviceManager& dev, Vec3f* motorPos, float vpn, float lpp, float minF, float maxF, bool bLeft);
00068     /// キャリブレーションの前に行う処理
00069     virtual bool BeforeCalib(){ SetMinForce(); return true; }
00070     /// キャリブレーション
00071     virtual bool Calib();
00072     /// 簡易キャリブレーション(原点ではなく,モータ3つの重心でキャリブレーション)
00073     virtual bool EasyCalib();
00074     /// 最低張力を出力
00075     void SetMinForce();
00076     /// 力の出力
00077     virtual void SetForce(const Vec3f& f){ SetForce(f, 0.1f); }
00078     virtual void SetForce(const Vec3f& f, float gamma);
00079     /// デバイスの現在位置を返す
00080     virtual Vec3f GetPos(){ return pos; }
00081     /// デバイスの目標力出力を返す
00082     virtual Vec3f GetForce(){ return force; }
00083     /// デバイスの状態を更新する.
00084     virtual void Update(float dt);
00085 
00086     Vec3f CalcForce(Vec3f *f);
00087     
00088     HISpidarMotor* Motor(){
00089         return motor;
00090     }
00091 
00092 };
00093 
00094 
00095 }   //  namespace Spr
00096 #endif
00097 

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