ARCS6 AR6-REV.24062600
読み取り中…
検索中…
一致する文字列を見つけられません
ResoLoopCutDistObsrv.hh
[詳解]
1
9//
10// Copyright (C) 2011-2022 Yokokura, Yuki
11// This program is free software;
12// you can redistribute it and/or modify it under the terms of the FreeBSD License.
13// For details, see the License.txt file.
14
15#ifndef RESOLOOPCUTDISTOBSRV
16#define RESOLOOPCUTDISTOBSRV
17
18#include <cassert>
19#include "Matrix.hh"
20#include "TransferFunction.hh"
21#include "TwoInertiaParamDef.hh"
22
23// ARCS組込み用マクロ
24#ifdef ARCS_IN
25 // ARCSに組み込まれる場合
26 #include "ARCSassert.hh"
27 #include "ARCSeventlog.hh"
28#else
29 // ARCSに組み込まれない場合
30 #define arcs_assert(a) (assert(a))
31 #define PassedLog()
32 #define EventLog(a)
33 #define EventLogVar(a)
34#endif
35
36namespace ARCS { // ARCS名前空間
39//template <>
41 public:
44 : Ds(), Ks(), Jm(), Dm(), Rg(), gd(), Ts(),
45 Lnum(), Lden(), Rnum(), Rden(), Qnum(), Qden(), L(), R(), QLinv()
46 {
47 PassedLog();
48 }
49
54 ResoLoopCutDistObsrv(const struct TwoInertiaParams& Params, const double Bandwidth, const double SmplTime)
55 : Ds(), Ks(), Jm(), Dm(), Rg(), gd(), Ts(),
56 Lnum(), Lden(), Rnum(), Rden(), Qnum(), Qden(), L(), R(), QLinv()
57 {
58 SetParameters(Params, Bandwidth, SmplTime); // オブザーバのパラメータを設定
59 PassedLog();
60 }
61
65 : Ds(r.Ds), Ks(r.Ks), Jm(r.Jm), Dm(r.Dm), Rg(r.Rg), gd(r.gd), Ts(r.Ts),
66 Lnum(r.Lnum), Lden(r.Lden), Rnum(r.Rnum), Rden(r.Rden), Qnum(r.Qnum), Qden(r.Qden), L(), R(), QLinv()
67 {
68
69 }
70
75
80 void SetParameters(const struct TwoInertiaParams& Params, const double Bandwidth, const double SmplTime){
81 // パラメータの格納
82 Ds = Params.Ds;
83 Ks = Params.Ks;
84 Jm = Params.Jm;
85 Dm = Params.Dm;
86 Rg = Params.Rg;
87 gd = Bandwidth;
88 Ts = SmplTime;
89
90 // オブザーバ左側ループの伝達関数
91 Lnum.Set( 1.0/Rg );
92 Lden.Set( Jm, Dm );
93 L.SetCoefficients(Lnum, Lden, Ts);
94
95 // オブザーバ右側ループの伝達関数
96 Rnum.Set( 1, 0 );
97 Rden.Set( Ds, Ks );
98 R.SetCoefficients(Rnum, Rden, Ts);
99
100 // オブザーバフィルタと左側ループの逆系の乗算結果の伝達関数
101 Qnum.Set( Rg*gd*Jm, Rg*gd*Dm );
102 Qden.Set( 1, gd );
103 QLinv.SetCoefficients(Qnum, Qden, Ts);
104 }
105
108 void SetBandwidth(const double Bandwidth){
109 // パラメータの格納
110 gd = Bandwidth;
111
112 // オブザーバフィルタと左側ループの逆系の乗算結果の伝達関数
113 Qnum.Set( Rg*gd*Jm, Rg*gd*Dm );
114 Qden.Set( 1, gd );
115 QLinv.SetCoefficients(Qnum, Qden, Ts);
116 }
117
122 double GetCompTorque(const double TorqueRef, const double TorsionTorque){
123 return QLinv.GetResponse( L.GetResponse(TorqueRef) - R.GetResponse(TorsionTorque) ); // [Nm] モータ側トルク補償値の計算
124 }
125
131 void GetPDgainForRLCTTC(const double wt, const double zt, double& Kpt, double& Kdt){
132 Kpt = -( (Jm*Ks - Dm*Ds)*Rg*wt*wt )/( 2.0*Ds*Ks*wt*zt - Ds*Ds*wt*wt - Ks*Ks ); // [-] P-Dねじれトルク制御 比例ゲイン
133 Kdt = -( 2.0*Jm*Ks*Rg*wt*zt - Ds*Jm*Rg*wt*wt - Dm*Ks*Rg )/( 2.0*Ds*Ks*wt*zt - Ds*Ds*wt*wt - Ks*Ks );// [-] P-Dねじれトルク制御 微分ゲイン
134 }
135
136 private:
138 const ResoLoopCutDistObsrv& operator=(const ResoLoopCutDistObsrv&) = delete;
139 double Ds;
140 double Ks;
141 double Jm;
142 double Dm;
143 double Rg;
144 double gd;
145 double Ts;
146 Matrix<1,1> Lnum;
147 Matrix<1,2> Lden;
148 Matrix<1,2> Rnum;
149 Matrix<1,2> Rden;
150 Matrix<1,2> Qnum;
151 Matrix<1,2> Qden;
155};
156}
157
158#endif
159
ARCS イベントログクラス
#define PassedLog()
イベントログ用マクロ(ファイルと行番号のみ記録版)
Definition ARCSeventlog.hh:26
ARCS用ASSERTクラス
2慣性共振系のパラメータ定義ファイル
行列/ベクトル計算クラス(テンプレート版)
伝達関数クラス
行列/ベクトル計算クラス(テンプレート版)
Definition Matrix.hh:44
constexpr void Set(const T1 &u1, const T2 &... u2)
行列要素に値を設定する関数
Definition Matrix.hh:385
共振ループ切断外乱オブザーバ
Definition ResoLoopCutDistObsrv.hh:40
~ResoLoopCutDistObsrv()
デストラクタ
Definition ResoLoopCutDistObsrv.hh:72
double GetCompTorque(const double TorqueRef, const double TorsionTorque)
モータ側トルク補償値を取得する関数
Definition ResoLoopCutDistObsrv.hh:122
ResoLoopCutDistObsrv(ResoLoopCutDistObsrv &&r)
ムーブコンストラクタ
Definition ResoLoopCutDistObsrv.hh:64
ResoLoopCutDistObsrv(void)
空コンストラクタ
Definition ResoLoopCutDistObsrv.hh:43
ResoLoopCutDistObsrv(const struct TwoInertiaParams &Params, const double Bandwidth, const double SmplTime)
コンストラクタ
Definition ResoLoopCutDistObsrv.hh:54
void GetPDgainForRLCTTC(const double wt, const double zt, double &Kpt, double &Kdt)
RLC-TTC用のP-D制御ゲインを計算する関数(仮設)
Definition ResoLoopCutDistObsrv.hh:131
void SetBandwidth(const double Bandwidth)
オブザーバの制御帯域を設定する関数
Definition ResoLoopCutDistObsrv.hh:108
void SetParameters(const struct TwoInertiaParams &Params, const double Bandwidth, const double SmplTime)
オブザーバのパラメータを設定する関数
Definition ResoLoopCutDistObsrv.hh:80
伝達関数クラス
Definition TransferFunction.hh:41
double GetResponse(const double u)
入力信号に対する伝達関数の応答を返す関数(1サンプル遅れ無し)
Definition TransferFunction.hh:129
void SetCoefficients(const Matrix< 1, N+1 > &Num, const Matrix< 1, D+1 > &Den, const double SmplTime)
伝達関数の係数を設定する関数
Definition TransferFunction.hh:79
2慣性共振系のパラメータ構造体(Ds有り版)
Definition TwoInertiaParamDef.hh:29
double Ds
[Nm/(rad/s)] 2慣性間の粘性
Definition TwoInertiaParamDef.hh:32
double Rg
[-] 減速比
Definition TwoInertiaParamDef.hh:36
double Dm
[Nm/(rad/s)] モータ側粘性
Definition TwoInertiaParamDef.hh:35
double Ks
[Nm/rad] 2慣性間の剛性
Definition TwoInertiaParamDef.hh:33
double Jm
[kgm^2] モータ側慣性
Definition TwoInertiaParamDef.hh:34