ARCS6 AR6-REV.24062600
読み取り中…
検索中…
一致する文字列を見つけられません
LoadVelocityObsrv.hh
[詳解]
1
8//
9// Copyright (C) 2011-2022 Kawai, Yusuke, and Yokokura, Yuki
10// This program is free software;
11// you can redistribute it and/or modify it under the terms of the FreeBSD License.
12// For details, see the License.txt file.
13
14#ifndef LOADVELOCITYOBSRV
15#define LOADVELOCITYOBSRV
16
17#include <cassert>
18#include <tuple>
19#include "Matrix.hh"
20#include "Discret.hh"
21#include "StateSpaceSystem.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名前空間
38template <size_t N = 1>
40 public:
46 LoadVelocityObsrv(const double GearRatio, const double TorsionStiff, const double Bandwidth, const double SmplTime)
47 : Ks(TorsionStiff),
48 Rg(GearRatio),
49 g(Bandwidth),
50 Ts(SmplTime),
51 ObsrvSys()
52 {
53 // オブザーバゲイン
54 const double k1 = Bandwidth; // [rad/s]
55 const double k2 = Bandwidth; // [rad/s]
56 const double k3 = Bandwidth; // [rad/s]
57
58 // 連続系オブザーバのA行列
59 const Matrix<3,3> Ao = {
60 -(k1 + k2 + k3) , -Ks , 0,
61 (k1*k2 + k2*k3 + k3*k1)/Ks , 0 , 1,
62 k1*k2*k3/Ks , 0 , 0
63 };
64
65 // 連続系オブザーバのB行列
66 const Matrix<2,3> Bo = {
67 Ks/Rg, ( k1 + k2 + k3 ),
68 0 , -( k1*k2 + k2*k3 + k3*k1 )/Ks,
69 0 , -k1*k2*k3/Ks
70 };
71
72 // オブザーバのC行列
73 const Matrix<3,1> co = {
74 0, 1, 0
75 };
76
77 // 状態空間モデルに設定
78 ObsrvSys.SetContinuous(Ao, Bo, co, Ts);
79
80 PassedLog();
81 }
82
86 : Ks(r.Ks),
87 Rg(r.Rg),
88 g(r.g),
89 Ts(r.Ts),
90 ObsrvSys(r.ObsrvSys)
91 {
92
93 }
94
99
104 double GetLoadVelocity(const double MotorVelocity, const double TorsionTorque){
105 const Matrix<1,2> u = {MotorVelocity, TorsionTorque};
106 const Matrix<1,1> y = ObsrvSys.GetNextResponses(u);
107 return y[1];
108 }
109
110 private:
111 LoadVelocityObsrv(const LoadVelocityObsrv&) = delete;
112 const LoadVelocityObsrv& operator=(const LoadVelocityObsrv&) = delete;
113 double Ks;
114 double Rg;
115 double g;
116 double Ts;
117 StateSpaceSystem<3,2,1> ObsrvSys;
118};
119}
120
121#endif
122
ARCS イベントログクラス
#define PassedLog()
イベントログ用マクロ(ファイルと行番号のみ記録版)
Definition ARCSeventlog.hh:26
ARCS用ASSERTクラス
行列/ベクトル計算クラス(テンプレート版)
離散化クラス(テンプレート版) !!!注意喚起:このクラスは将来的に廃止予定です。代わりに、ArcsControlDiscretizeを使用して下さい。
状態空間表現によるシステムクラス
負荷側速度オブザーバクラス
Definition LoadVelocityObsrv.hh:39
LoadVelocityObsrv(const double GearRatio, const double TorsionStiff, const double Bandwidth, const double SmplTime)
コンストラクタ
Definition LoadVelocityObsrv.hh:46
double GetLoadVelocity(const double MotorVelocity, const double TorsionTorque)
推定負荷側速度を取得する関数
Definition LoadVelocityObsrv.hh:104
~LoadVelocityObsrv()
デストラクタ
Definition LoadVelocityObsrv.hh:96
LoadVelocityObsrv(LoadVelocityObsrv &&r)
ムーブコンストラクタ
Definition LoadVelocityObsrv.hh:85
行列/ベクトル計算クラス(テンプレート版)
Definition Matrix.hh:44
状態空間表現によるシステムクラス
Definition StateSpaceSystem.hh:40
void SetContinuous(const Matrix< N, N > &A, const Matrix< I, N > &B, const Matrix< N, O > &C, const double Ts)
連続系のA行列,B行列,C行列を設定して離散化する関数
Definition StateSpaceSystem.hh:92
void GetNextResponses(const Matrix< 1, I > &uin, Matrix< 1, O > &yout)
状態空間モデルの応答を計算して取得する関数(次の時刻の出力ベクトルを即時に返す版)
Definition StateSpaceSystem.hh:265