15#ifndef DISTURBANCEOBSRV
16#define DISTURBANCEOBSRV
30 #define arcs_assert(a) (assert(a))
33 #define EventLogVar(a)
46 template <DObType T,
size_t N = 1>
54 DisturbanceObsrv(
const double TrqConst,
const double Inertia,
const double Bandwidth,
const double SmplTime)
55 : u(), tdis(), uVec(), tdisVec(), DOb(), DObVec()
57 SetStateSpaceModel(TrqConst, Inertia, Bandwidth, SmplTime, DOb);
67 : u(), tdis(), uVec(), tdisVec(), DOb(), DObVec()
70 for(
size_t i = 1; i <= N; ++i){
71 SetStateSpaceModel(TrqConst[i], Inertia[i], Bandwidth[i], SmplTime, DObVec.at(i-1));
78 : u(), tdis(), uVec(), tdisVec(), DOb(r.DOb), DObVec(r.DObVec)
110 for(
size_t i = 1; i <= N; ++i){
118 tdisVec.at(i-1) = DObVec.at(i-1).GetNextResponses(uVec.at(i-1));
119 ret[i] = tdisVec.at(i-1)[1];
126 if constexpr(N == 1){
132 for(
size_t i = 0; i < N; ++i){
133 DObVec[i].ClearStateVector();
143 static constexpr size_t GetOrder(
void){
144 if constexpr(T == DObType::FULL_0TH)
return 2;
145 if constexpr(T == DObType::FULL_1ST)
return 3;
151 std::array<Matrix<1,2>, N> uVec;
152 std::array<Matrix<1,1>, N> tdisVec;
155 StateSpaceSystem<GetOrder(), 2, 1> DOb;
156 std::array<StateSpaceSystem<GetOrder(), 2, 1>, N> DObVec;
164 void SetStateSpaceModel(
const double Ktn,
const double Jmn,
const double gdis,
const double Ts,
165 StateSpaceSystem<GetOrder(), 2, 1>& DObSys
168 const double l1 = -gdis;
169 const double l2 = -gdis;
170 const double l3 = -gdis;
175 if constexpr(T == DObType::FULL_0TH){
177 const Matrix<2,2> A = {
183 const Matrix<2,2> B = {
189 const Matrix<2,1> c = {
193 DObSys.SetContinuous(A, B, c, Ts);
197 if constexpr(T == DObType::FULL_1ST){
199 const Matrix<3,3> A = {
200 l1 + l2 + l3 , -1.0/Jmn, 0,
201 Jmn*(l1*l2 + l2*l3 + l3*l1), 0 , 1,
202 -Jmn*l1*l2*l3 , 0 , 0
206 const Matrix<2,3> B = {
207 Ktn/Jmn, -( l1 + l2 + l3 ),
208 0 , -Jmn*( l1*l2 + l2*l3 + l3*l1 ),
213 const Matrix<3,1> c = {
217 DObSys.SetContinuous(A, B, c, Ts);
#define PassedLog()
イベントログ用マクロ(ファイルと行番号のみ記録版)
Definition ARCSeventlog.hh:26
離散化クラス(テンプレート版) !!!注意喚起:このクラスは将来的に廃止予定です。代わりに、ArcsControlDiscretizeを使用して下さい。
DObType
外乱オブザーバのタイプの定義
Definition DisturbanceObsrv.hh:38
外乱オブザーバクラス
Definition DisturbanceObsrv.hh:47
DisturbanceObsrv(DisturbanceObsrv &&r)
ムーブコンストラクタ
Definition DisturbanceObsrv.hh:77
DisturbanceObsrv(const double TrqConst, const double Inertia, const double Bandwidth, const double SmplTime)
コンストラクタ(スカラー版)
Definition DisturbanceObsrv.hh:54
void ClearStateVector(void)
状態ベクトルをクリアする関数
Definition DisturbanceObsrv.hh:125
Matrix< 1, N > GetDistTorque(const Matrix< 1, N > &Current, const Matrix< 1, N > &MotorSpeed)
外乱トルクを推定する関数(ベクトル版)
Definition DisturbanceObsrv.hh:107
DisturbanceObsrv(const Matrix< 1, N > &TrqConst, const Matrix< 1, N > &Inertia, const Matrix< 1, N > &Bandwidth, const double SmplTime)
コンストラクタ(ベクトル版)
Definition DisturbanceObsrv.hh:66
~DisturbanceObsrv()
デストラクタ
Definition DisturbanceObsrv.hh:84
double GetDistTorque(const double Current, const double MotorSpeed)
外乱トルクを推定する関数(スカラー版)
Definition DisturbanceObsrv.hh:91
行列/ベクトル計算クラス(テンプレート版)
Definition Matrix.hh:44
constexpr void Set(const T1 &u1, const T2 &... u2)
行列要素に値を設定する関数
Definition Matrix.hh:385
void GetNextResponses(const Matrix< 1, I > &uin, Matrix< 1, O > &yout)
状態空間モデルの応答を計算して取得する関数(次の時刻の出力ベクトルを即時に返す版)
Definition StateSpaceSystem.hh:265
void ClearStateVector(void)
状態ベクトルをクリアする関数
Definition StateSpaceSystem.hh:306