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

HISpidarCalcBase.h

00001 #ifndef HISPIDARCALCBASE_H
00002 #define HISPIDARCALCBASE_H
00003 
00004 #include <Base/BaseDebug.h>
00005 #include <Base/Affine.h>
00006 #include <Base/QuadProgram.h>
00007 #include <iostream>
00008 #include <vector>
00009 #include <math.h>
00010 
00011 namespace Spr{;
00012 /** SPIDAR(糸を使った力覚提示装置)のための姿勢計算と力覚計算を行う
00013 基本クラス.
00014 インタフェース(仮想関数)と,
00015 2次計画法や繰り返し法による姿勢計算のための作業領域を用意する.
00016 void Spr::HISpidarCalcBase::MakeWireVec(), 
00017 void Spr::HISpidarCalcBase::UpdatePos(), 
00018 void Spr::HISpidarCalcBase::MeasureWire(), 
00019 の3つの関数をオーバーライドすることで個々のSPIDARのための計算を行うように
00020 できる.    */
00021 class SPR_DLL HISpidarCalcBase{
00022 protected:
00023     /**@name    姿勢と力覚を計算するためのパラメータ.
00024         姿勢ベクトル = a(ワイヤ長) = p(w(ワイヤ長))
00025         a: ワイヤ長 から 姿勢ベクトル への変換関数.
00026         w: ワイヤ長 から ワイヤ接合位置ベクトル への変換関数.
00027         p: ワイヤ接合位置ベクトル から 姿勢ベクトル への変換関数
00028 
00029         姿勢ベクトル = a(ワイヤ長) = p(w(ワイヤ長)) を偏微分すると
00030         Δ姿勢ベクトル = A・Δワイヤ長 = P・W・Δワイヤ長
00031     */
00032     //@{
00033     PTM::VVector<float> measuredLength;             ///<    計測したワイヤ長
00034     PTM::VVector<float> calculatedLength;           ///<    前の姿勢から計算されるワイヤ長
00035     PTM::VMatrixRow<float> matA;                        ///<    行列 A
00036     PTM::VMatrixRow<float> matATA;                      ///<    A * Aの転置
00037     PTM::VVector<float> lengthDiff;                 ///<    Δワイヤ長 = 計測ワイヤ長 - 算出ワイヤ長.       lengthDiff[i] is the measured SetLength of this time minus the computed legth of last time  
00038     PTM::VVector<float> lengthDiffAve;              ///<    Δワイヤ長の平均値
00039     PTM::VVector<float> postureDiff;                ///<    求めた姿勢の変化量 = A * lengthDiff
00040     //@}
00041     VQuadProgram<float> quadpr;             ///<    2次計画問題の計算クラス
00042 public:
00043     HISpidarCalcBase(){}                    ///<    コンストラクタ
00044     virtual ~HISpidarCalcBase(){}           ///<    デストラクタ
00045 protected:
00046     virtual void Update()=0;                ///<    姿勢情報の更新
00047     PTM::VVector<float>& Tension() {        ///<    張力
00048         return quadpr.vecX;
00049     }
00050     /** 初期化
00051         @param minF 最小張力
00052         @param maxF 最大張力
00053         @param dof  エンドエフェクタの自由度    */
00054     void Init(int dof, const VVector<float>& minF, const VVector<float>& maxF);
00055     virtual void MakeWireVec()=0;           ///<    ワイヤ方向ベクトルの計算
00056     virtual void UpdatePos()=0;             ///<    ワイヤ設置位置座標の更新
00057     virtual void MeasureWire()=0;           ///<    ワイヤ長の計測
00058 };
00059 
00060 }   //  namespace Spr
00061 #endif

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