RCPSP

RCPSP

RCPSP (Resource Constraint Project Scheduling Problem, 資源制約プロジェクトスケジューリング問題)とは、先行制約(Precedence Constraints)と資源制約(Resource Constraints)のもとで、決定変数を各作業の開始日とし、目的関数を最小化する組合せ最適化問題で、次のように定式化(またはモデル化)表されます。

    \[\displaystyle{\boxed{\begin{array}{cl} {\bf min}&\ Objective\ Function\\ {start\ times}&\\ {\bf subject\ to}&1^\circ\ Precedence\ Constraints\\ &2^\circ\ Resource\ Constraints \end{array}}}\]

これを拡張した問題に対する商用ソルバーとして、OptSeqがあります。そこで使用可能なクラス、インスタンス、メソッドを以下に示します。

●クラス「モデル」
model=Model()

●クラス「作業」
act=model.addActivity(name=””,duedate=”inf”,backward=False,weight=1,autoselect=False,quadratic=False)
act.addModes(mode1,mode2,…)

●クラス「モード」
mode=Mode(name,duration=0)
mode.addResource(resource,requirement={(start,finish):req},rtype=None)
mode.addBreak(start=0,finish=0,maxtime=’inf’)
mode.addBreak(start=0,{(start,finish):req},’break’)
mode.addParallel(start=1,finish=1,maxparallel=’inf’)
mode.addState(state,fromValue=0,toValue=0)

●クラス「資源」
res=model.addResource(name,capacity,rhs=0,direction=’<=',weight='inf')
res.addCapacity(start,finish,amount)
res.addTerms(coeffs,vars,values)

●クラス「時間制約」
model.addTemporal(pred,succ,tempType=’CS’,delay=0,pred_mode=None,succ_mode=None)

●クラス「状態」
model.addState(name)

基本的例題

例1(プッシュ型とプル型) ある作業の納期と作業期間が与えられるとき、納期までどれくらい余裕があるのか(prob1a)、または納期にジャストインするためにはいつから作業に取りかかればよいか(prob1b)という問題を考えます。そのために作業をどう前詰めするか、納期に後詰めするかが問われ、それぞれプッシュ型とプル型に対応します。

#prob1a.py
from optseq import *
#=====リソース
prob1=Model()
res=prob1.addResource("worker",1)
#=====データセット
#i:[期間、後続、納期]
data={
1:[5,2,'inf'],\
2:[1,0,10]\
}
#=====アクティビティ
act={}
for i in data:
  act[i]=prob1.addActivity("Act[{0}]".format(i))
#=====先行制約
for i in data:
  if data[i][1]!=0:
    prob1.addTemporal(act[i],act[data[i][1]])    
#-----納期日
for i in data:
  if data[i][1]==0:
    prob1.addTemporal("source",act[i],"SS",delay= data[i][2]-1)
    prob1.addTemporal(act[i],"source","SS",delay=-data[i][2]+1) 
#====資源制約  
mode={}  
for i in data:
  mode[i]=Mode("Mode[{0}]".format(i),duration=data[i][0])
  mode[i].addResource(res,requirement=1)
  act[i].addModes(mode[i])
#=====最適化
prob1.Params.Makespan=True
prob1.Params.TimeLimit=1
#prob1.Params.OutputFlag=True
prob1.optimize()
prob1.write("prob1a.txt")
prob1.writeExcel("prob1a.csv")
#=====prob1a.txt
#  activity    mode   duration  1 2 3 4 5 6 7 8 910
#---------------------------------------------------
#  Act[1]   Mode[1]      5     ==========          
#  Act[2]   Mode[2]      1                       ==
#---------------------------------------------------
#   resource usage/capacity     
#---------------------------------------------------
#            worker             1 1 1 1 1 0 0 0 0 1
#                               1 1 1 1 1 1 1 1 1 1
#---------------------------------------------------

OptSeqは指定がなければ前詰めが実行されます。納入作業は10日目に行うと考えて、開始のタイミングを9日目終了に合わせています。

#prob1b.py
from optseq import *
#=====リソース
prob1=Model()
res=prob1.addResource("worker",1)
#=====データセット
#i:[期間、後続、納期]
data={
1:[5,2,10],\
2:[1,0,10]\
}
#=====アクティビティ
act={}
for i in data:
  act[i]=prob1.addActivity("Act[{0}]".format(i),duedate=data[i][2],backward=True)  
#=====先行制約
for i in data:
  if data[i][1]!=0:
    prob1.addTemporal(act[i],act[data[i][1]])    
#-----納期日
for i in data:
  if data[i][1]==0:
    prob1.addTemporal("source",act[i],"SS",delay= data[i][2]-1)
    prob1.addTemporal(act[i],"source","SS",delay=-data[i][2]+1)    
#====資源制約  
mode={}  
for i in data:
  mode[i]=Mode("Mode[{0}]".format(i),duration=data[i][0])
  mode[i].addResource(res,requirement=1)
  act[i].addModes(mode[i])
#=====最適化
prob1.Params.Makespan=True
prob1.Params.TimeLimit=1
#prob1.Params.OutputFlag=True
prob1.optimize()
prob1.write("prob1b.txt")
prob1.writeExcel("prob1b.csv")
#=====prob1a.txt
#  activity    mode   duration  1 2 3 4 5 6 7 8 910
#---------------------------------------------------
#  Act[1]   Mode[1]      5             ==========  
#  Act[2]   Mode[2]      1                       ==
#---------------------------------------------------
#   resource usage/capacity     
#---------------------------------------------------
#            worker             0 0 0 0 1 1 1 1 1 1
#                               1 1 1 1 1 1 1 1 1 1
#---------------------------------------------------

作業の定義において、納期の指定(duedate)と後詰めの指定(backward=True)を行っています。そのためにデータセットで主作業(Act[1])にも納期を指定する必要があることに注意してください(後続作業として納品作業があるので本来は不要であるように思われますが)。

例2(その場待機と置き場待機) 種々の制約があると待機期間が生じます。リソース(作業員、作業機械、作業場所)によっては待機中も確保が必要になります。たとえば、リソースが作業場所の場合、その作業場所で待機をするその場待機と、どこか待機場所を確保する置き場待機が考えられます。

#prob2a.py
from optseq import *
#=====リソース
prob2=Model()
res=prob2.addResource("place",1)
#=====データセット
#i:[期間、後続、納期]
data={
1:[5,2,'inf'],\
2:[1,0,10]\
}
#=====アクティビティ
act={}
for i in data:
  act[i]=prob2.addActivity("Act[{0}]".format(i))
#=====先行制約
for i in data:
  if data[i][1]!=0:
    prob2.addTemporal(act[i],act[data[i][1]],tempType="CS",delay=0)
    prob2.addTemporal(act[data[i][1]],act[i],tempType="SC",delay=0)  
#-----納期日
for i in data:
  if data[i][1]==0:
    prob2.addTemporal("source",act[i],"SS",delay= data[i][2]-1)
    prob2.addTemporal(act[i],"source","SS",delay=-data[i][2]+1)  
#====資源制約  
mode={}  
for i in data:
  mode[i]=Mode("Mode[{0}]".format(i),duration=data[i][0])
  mode[i].addResource(res,requirement=1)
  mode[i].addBreak(0,'inf') 
 #mode[i].addBreak(0,'inf',maxtime=2)
 #mode[i].addBreak(0,0)  
  mode[i].addResource(res,{(0,'inf'):1},'break')
  act[i].addModes(mode[i])
#=====最適化  
prob2.Params.Makespan=True
prob2.Params.TimeLimit=1
#prob2.Params.OutputFlag=True
prob2.optimize()
prob2.write("prob2a.txt")
prob2.writeExcel("prob2a.csv")
#=====prob2a.txt: mode[i].addBreak(0,'inf') 
#  activity    mode   duration  1 2 3 4 5 6 7 8 910
#---------------------------------------------------
#  Act[1]   Mode[1]      5     ==========........  
#  Act[2]   Mode[2]      1                       ==
#---------------------------------------------------
#   resource usage/capacity     
#---------------------------------------------------
#            place              1 1 1 1 1 1 1 1 1 1
#                               1 1 1 1 1 1 1 1 1 1
#---------------------------------------------------
#=====prob2a.txt: mode[i].addBreak(0,'inf',maxtime=2) 
#  activity    mode   duration  1 2 3 4 5 6 7 8 910
#---------------------------------------------------
#  Act[1]   Mode[1]      5     ========....==....  
#  Act[2]   Mode[2]      1                       ==
#---------------------------------------------------
#   resource usage/capacity     
#---------------------------------------------------
#            place              1 1 1 1 1 1 1 1 1 1
#                               1 1 1 1 1 1 1 1 1 1
#---------------------------------------------------
#=====prob2a.txt: mode[i].addBreak(0,0) 
#  activity    mode   duration  1 2 3 4 5 6 7 8 910
#---------------------------------------------------
#  Act[1]   Mode[1]      5     ........==========  
#  Act[2]   Mode[2]      1                       ==
#---------------------------------------------------
#   resource usage/capacity     
#---------------------------------------------------
#            place              1 1 1 1 1 1 1 1 1 1
#                               1 1 1 1 1 1 1 1 1 1
#---------------------------------------------------

ここでは、待機期間の取り方を3種類考えて、その場待機を実現しています。

#prob2b.py
from optseq import *
#=====リソース
prob2=Model()
res0=prob2.addResource("place",1)
res1=prob2.addResource("stock",1)
#=====データセット
#i:[期間、後続、納期]
data={
1:[5,-2,"inf"],\
2:[1,0,10]\
}
#=====アクティビティ
act={}
for i in data:
  act[i]=prob2.addActivity("Act[{0}]".format(i))
#=====先行制約
for i in data:
  if data[i][1]!=0:
    prob2.addTemporal(act[i],act[data[i][1]],tempType="CS",delay=0)  
#-----納期日
for i in data:
  if data[i][1]==0:
    prob2.addTemporal("source",act[i],"SS",delay= data[i][2]-1)
    prob2.addTemporal(act[i],"source","SS",delay=-data[i][2]+1)  
#====資源制約  
mode={}  
for i in data:
  mode[i]=Mode("Mode[{0}]".format(i),duration=data[i][0])
  mode[i].addResource(res0,1)
  act[i].addModes(mode[i])
#=====仮想作業
d_act={}
for i in data:
  if data[i][1]<0:
    d_act[i]=prob2.addActivity("Wait[{0}]".format(i))
    prob2.addTemporal(act[i],d_act[i],tempType="CS")
    prob2.addTemporal(d_act[i],act[i],tempType="SC")
    prob2.addTemporal(d_act[i],act[abs(data[i][1])],tempType="CS")
    prob2.addTemporal(act[abs(data[i][1])],d_act[i],tempType="SC")
d_mode={}
for i in data:
  if data[i][1]<0:
    d_mode[i]=Mode("d_Mode[{0}]".format(i))
    d_mode[i].addBreak(0,0)
    d_mode[i].addResource(res1,{(0,"inf"):1},"break")
    d_act[i].addModes(d_mode[i])
#=====最適化      
prob2.Params.Makespan=True
prob2.Params.TimeLimit=1
#prob2.Params.OutputFlag=True
prob2.optimize()
prob2.write("prob2b.txt")
prob2.writeExcel("prob2b.csv")
#=====prob2b.txt 
#  activity    mode   duration  1 2 3 4 5 6 7 8 910
#---------------------------------------------------
#  Act[1]   Mode[1]      5     ==========          
#  Act[2]   Mode[2]      1                       ==
# Wait[1]  d_Mode[1]     0               ........  
#---------------------------------------------------
#   resource usage/capacity     
#---------------------------------------------------
#            place              1 1 1 1 1 0 0 0 0 1
#                               1 1 1 1 1 1 1 1 1 1
#---------------------------------------------------
#            stock              0 0 0 0 0 1 1 1 1 0
#                               1 1 1 1 1 1 1 1 1 1
#---------------------------------------------------

ここでは、待機場所を別に確保して、待機中はそこを使うようにしています。この置き場待機を実施するかどうかは、データセットにおける後続作業の番号が負であるかどうかで判断しています。

エクスポート

エクスポート

●「工程’s」のファイルにエクスポートを行うと、次のような13種類のTSVファイルが得られます。

ここで、次の3つのファイルに注目します。
・koutei.tsv ⇒作業の定義
・requirement.tsv ⇒要求リソース
・constraint.tsv ⇒先行制約
これらから、データセットを作成するのに必要な項目(以下の赤太字)を抽出します。

koutei.tsvのレコードを構成するフィールド(129個)

第1階層グループID 第1階層グループ名称 第1階層グループ備考1 第1階層グループ備考2 第1階層グループ備考3 第1階層グループ備考4 第1階層グループ備考5 第1階層グループ備考6 第1階層グループ備考7 第1階層グループ備考8 第1階層グループ備考9 第1階層グループ備考10 第2階層グループID 第2階層グループ名称 第3階層グループID 第3階層グループ名称 第4階層グループID 第4階層グループ名称 第5階層グループID 第5階層グループ名称 第6階層グループID 第6階層グループ名称 第7階層グループID 第7階層グループ名称 第8階層グループID 第8階層グループ名称 第9階層グループID 第9階層グループ名称 第10階層グループID 第10階層グループ名称 行番号 工程ID 工程名称 初期工程開始日 初期工程終了日 工程開始日 工程終了日 工程期間 カレンダID 進捗度 数量 備考1 備考2 備考3 備考4 備考5 備考6 備考7 備考8 備考9 備考10 バーを移動しない 後続に影響しない範囲で遅く開始する 編集不可 左シンボル形状 中シンボル形状 右シンボル形状 左シンボル色 中シンボル色 右シンボル色 テキストの表示位置 URL表示名1 URL1 URL表示名2 URL2 URL表示名3 URL3 URL表示名4 URL4 URL表示名5 URL5 第1階層グループ非表示 第1階層グループバー非表示 第1階層グループ折りたたみ(バーチャート) 第1階層グループ折りたたみ(ツリービュー) 第1階層グループ名称の書き方 第2階層グループ非表示 第2階層グループバー非表示 第2階層グループ折りたたみ(バーチャート) 第2階層グループ折りたたみ(ツリービュー) 第2階層グループ名称の書き方 第3階層グループ非表示 第3階層グループバー非表示 第3階層グループ折りたたみ(バーチャート) 第3階層グループ折りたたみ(ツリービュー) 第3階層グループ名称の書き方 第4階層グループ非表示 第4階層グループバー非表示 第4階層グループ折りたたみ(バーチャート) 第4階層グループ折りたたみ(ツリービュー) 第4階層グループ名称の書き方 第5階層グループ非表示 第5階層グループバー非表示 第5階層グループ折りたたみ(バーチャート) 第5階層グループ折りたたみ(ツリービュー) 第5階層グループ名称の書き方 第6階層グループ非表示 第6階層グループバー非表示 第6階層グループ折りたたみ(バーチャート) 第6階層グループ折りたたみ(ツリービュー) 第6階層グループ名称の書き方 第7階層グループ非表示 第7階層グループバー非表示 第7階層グループ折りたたみ(バーチャート) 第7階層グループ折りたたみ(ツリービュー) 第7階層グループ名称の書き方 第8階層グループ非表示 第8階層グループバー非表示 第8階層グループ折りたたみ(バーチャート) 第8階層グループ折りたたみ(ツリービュー) 第8階層グループ名称の書き方 第9階層グループ非表示 第9階層グループバー非表示 第9階層グループ折りたたみ(バーチャート) 第9階層グループ折りたたみ(ツリービュー) 第9階層グループ名称の書き方 第10階層グループ非表示 第10階層グループバー非表示 第10階層グループ折りたたみ(バーチャート) 第10階層グループ折りたたみ(ツリービュー) 第10階層グループ名称の書き方 初期計画左シンボル形状 初期計画中シンボル形状 初期計画右シンボル形状 初期計画左シンボル色 初期計画中シンボル色 初期計画右シンボル色 拡張設定1 EOR

PERTの例題について赤太字の項目を抜き出すと次のようになります。

requirement.tsvのレコードを構成するフィールド(5個)

工程ID 資源ID 必要量 タイプ EOR

PERTの例題について赤太字の項目を抜き出すと次のようになります。

constraint.tsvのレコードを構成するフィールド(26個)

先行工程ID 後続工程ID タイプ 作業間隔 カレンダID 備考 非表示 描画順序1 描画オフセット右1 描画オフセット下1 描画順序2 描画オフセット右2 描画オフセット下2 描画順序3 描画オフセット右3 描画オフセット下3 描画順序4 描画オフセット右4 描画オフセット下4 描画順序5 描画オフセット右5 描画オフセット下5 描画順序6 描画オフセット右6 描画オフセット下6 EOR

PERTの例題について赤太字の項目を抜き出すと次のようになります。

データセットの作成

「工程’s」による平準化

「工程’s」による平準化…Homework

●作業情報が次表のように与えられる例を考えます。

# 作業名 作業時間 先行関係 作業員
1 A1 3 4 5 3
2 A2 4 6 7 1
3 A3 6 8 1
4 A4 4 6 7 4
5 A5 5 9 4
6 A6 4 10 5
7 A7 5 8 4
8 A8 2 10 5
9 A9 2 10 2
10 A10 5 0 3

山積みを行った結果を次に示します。毎日10名まで配員可能とすると、これをオーバーしていることが分かります。

ここで、赤い作業の列がCPを表しています。通常は、CP以外の作業を前後させて平準化(山均し)を行います。

●「工程’s」の「オシカ」を用いて平準化を行った結果を次に示します。

●以上は、各作業を作業期間中は毎日一定の配員で行う場合です。しかし日ごとに配員数を変えてよい場合を検討するために、次の山積みを行います。

●これを平準化して、次の結果を得ます。

本来は、作業81が始まるまでに作業A74を終わらせたいところですが、「工程’s」でそれが可能かどうかは現在検討中です。

●参考までに、別の方法で日ごとの配員数を変えながら(したがって作業期間を変えながら)、平準化を行った結果を次に示します。

ここで、10名の作業員はどの作業も担当できることを仮定しています。

基本操作

アクティティビティの定義と先行関係の付与…Homework

●操作1:編集期間の設定

●操作2:通し日の設定

●操作3:グループ名の定義(行の追加、行番号の定義)

●操作4:アクティビティの定義(名称の設定)

●操作5:シンボルの変更

●操作5:後続作業の定義、先行関係の付与

先行関係には、CS関係(完了⇒開始)、SC関係(開始⇒完了)、SS関係(開始⇒開始)、CC関係(完了⇒完了)の4種類がある。

●操作6:グループバーを非表示
●操作7:操作の取り消し

リソースの付与…Homework

●操作8:資源マスターの定義

●操作9:必要資源の付与

●操作10:バーレイアウトの変更

●操作11:キャパ(提供可能資源量)の付与

補遺:出力FB型追従SMI制御


補遺:出力FB型追従SMI制御…Homework


[1] 定値外乱を受ける制御対象

\displaystyle{(1)\quad \begin{array}{l} \dot{x}(t)=Ax(t)+Bu(t)+w\\ y(t)=Cx(t)\\ (x(t)\in{\rm\bf R}^n, u(t)\in{\rm\bf R}^m, y(t)\in{\rm\bf R}^p, w\in{\rm\bf R}^n, m=p) \end{array} }

の出力を、次のコマンド(定値目標)

\displaystyle{(2)\quad r\in{\rm\bf R}^m %\begin{array}{l} %\dot{r}(t)=\Gamma(r(t)-r_c)\\ %(r(t),r_c\in{\rm\bf R}^m) %\end{array} %\Gammaは安定行列 }

に追従させることを考えます。そのために、積分動作

\displaystyle{(3)\quad \begin{array}{l} \dot{x}_I(t)=y(t)-r\\ %\dot{x}_I(t)=r(t)-y(t)\\ (x_I(t)\in{\rm\bf R}^m) \end{array} }

を考え、次の拡大系を構成します。

\displaystyle{(4)\quad %\underbrace{ \left[\begin{array}{c} \dot{x}(t) \\ \dot{x}_I(t) \end{array}\right] %}_{\dot{x}_E(t)} = %\underbrace{ \left[\begin{array}{cc} A & 0 \\ C & 0 \end{array}\right] %}_{A_E} %\underbrace{ \left[\begin{array}{c} x(t) \\ x_I(t) \end{array}\right] %}_{x_E(t)} + %\underbrace{ \left[\begin{array}{c} B \\ 0 \end{array}\right] %}_{B_E} u(t) + %\underbrace{ \left[\begin{array}{c} w \\ -r \end{array}\right] %}_{w_E} }

定常状態では

\displaystyle{(5)\quad \left[\begin{array}{c} 0 \\ 0 \end{array}\right] = \left[\begin{array}{cc} A & 0 \\ C & 0 \end{array}\right] \left[\begin{array}{c} x_\infty \\ x_{I\infty} \end{array}\right] + \left[\begin{array}{c} B \\ 0 \end{array}\right] u_\infty + \left[\begin{array}{c} w \\ -r \end{array}\right] }

を得ます(x_{\infty},x_{I\infty},u_{\infty}は定数ベクトル)。

●さて、関係式

\displaystyle{(10)\quad \underbrace{ \left[\begin{array}{c} {\dot x}(t) \\ y(t)-r \end{array}\right] }_{x_{E2}(t)} = \underbrace{ \left[\begin{array}{cc} A & B \\ C & 0 \end{array}\right] }_{S_E} \underbrace{ \left[\begin{array}{c} x(t)-x_\infty \\ u(t)-u_\infty \end{array}\right] }_{x_{E3}(t)} }

を用いて、偏差系

\displaystyle{(15)\quad \begin{array}{l} \boxed{ \underbrace{ \left[\begin{array}{c} \dot x_1(t)\\ \dot x_2(t) \end{array}\right] }_{\dot{x}_{E3}(t)} = \underbrace{ \left[\begin{array}{cc} A & B \\ 0 & 0 \end{array}\right] }_{A_{E3}} \underbrace{ \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right] }_{x_{E3}(t)} + \underbrace{ \left[\begin{array}{c} 0\\ I_m \end{array}\right] }_{B_{E3}} {\dot u}(t)}\\ (x_1(t)=x(t)-x_\infty, x_2(t)=u(t)-u_\infty) \end{array} }

を得ます。これはSM標準形となっていることに注意して、SM制御系を設計します。

●スイッチング関数として、次式を考えます。

\displaystyle{(16)\quad s(t)= \underbrace{ \left[\begin{array}{cc} S_1C & S_2 \\ \end{array}\right] }_{S} \underbrace{ \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right] }_{x_{E3}(t)} = \underbrace{S_2 \left[\begin{array}{cc} M & I \\ \end{array}\right] }_{S} \underbrace{ \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right] }_{x_{E3}(t)} \ (M=S_2^{-1}S_1C) }

(15)に対して、座標変換

\displaystyle{(17)\quad \underbrace{ \left[\begin{array}{c} x_1(t)\\ s(t) \end{array}\right] }_{x'_{E3}(t)} = \underbrace{ \left[\begin{array}{cc} I & 0 \\ S_1C & S_2 \\ \end{array}\right] }_{T_s} \underbrace{ \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right] }_{x_{E3}(t)}\\ \Leftrightarrow \underbrace{ \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right] }_{x_{E3}(t)} = \underbrace{ \left[\begin{array}{cc} I & 0 \\ -S_2^{-1}S_1C & S_2^{-1} \\ \end{array}\right] }_{T_s^{-1}} \underbrace{ \left[\begin{array}{c} x_1(t)\\ s(t) \end{array}\right] }_{x'_{E3}(t)} }

を行って、次式を得ます。

\displaystyle{(18)\quad \underbrace{ \left[\begin{array}{c} \dot x_1(t)\\ \dot s(t) \end{array}\right] }_{\dot{x}'_{E3}(t)} = \underbrace{ \left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12} \\ \bar{A}_{21} & \bar{A}_{22} \\ \end{array}\right] }_{T_sA_{E3}T_s^{-1}} \underbrace{ \left[\begin{array}{c} x_1(t)\\ s(t) \end{array}\right] }_{x'_{E3}(t)} + \underbrace{ \left[\begin{array}{cc} 0\\ S_2 \end{array}\right] }_{T_sB_{E3}} {\dot u}(t) }

\displaystyle{(19)\quad \begin{array}{l} \bar{A}_{11}=A-BM\quad(M=S_2^{-1}S_1C)\\ \bar{A}_{12}=BS_2^{-1}\\ \bar{A}_{21}=S_1(A-BM)\\ \bar{A}_{22}=S_1BS_2^{-1} \end{array} }

以下では、\bar{A}_{11}が安定行列となるようにスイッチング関数が選ばれていると仮定します。

●このとき、スライディングモード制御則(SM制御則、SMC則)

\displaystyle{(20)\quad  {\dot u}(t)=\underbrace{{\dot u}_\ell(t)}_{linear\ control}+\underbrace{{\dot u}_n(t)}_{switching\ component}} }

を、2次安定性

\displaystyle{(21)\quad  \begin{array}{lll} V(\bar{x})= \underbrace{ \left[\begin{array}{c} x_1(t)\\ s(t) \end{array}\right]^T }_{\bar{x}^T(t)} \underbrace{ \left[\begin{array}{cc} P_1 & 0\\ 0 & P_2 \end{array}\right] }_{P} \underbrace{ \left[\begin{array}{c} x_1(t)\\ s(t) \end{array}\right] }_{\bar{x}(t)}\\ \Rightarrow \dot{V}(\bar{x})\le - \underbrace{ \left[\begin{array}{c} x_1(t)\\ s(t) \end{array}\right]^T }_{\bar{x}^T(t)} \underbrace{ \left[\begin{array}{cc} Q_1 & 0\\ 0 & I \end{array}\right] }_{Q} \underbrace{ \left[\begin{array}{c} x_1(t)\\ s(t) \end{array}\right] }_{\bar{x}(t)} \end{array}} }

すなわち

\displaystyle{(21')\quad  \begin{array}{lll} V(\bar{x})= \underbrace{x_1^T(t)P_1x_1(t)}_{V(x_1)}+\underbrace{s^T(t)P_2s(t)}_{V(s)}\\ \Rightarrow \dot{V}(\bar{x})\le  -x_1^T(t)Q_1x_1(t)-s^T(t)s(t) \end{array}} }

が成り立つように決定します(P_1>0, P_2>0, Q_1>0)。

可到達性の検討

等価制御は

\displaystyle{(22)\quad \begin{array}{l} s(t)=0\Rightarrow\dot{s}(t)=0 \Rightarrow 0=\bar{A}_{21}x_1(t)+\bar{A}_{22}s(t)+S_2{\dot u}(t)\\ \Rightarrow {\dot u}_{eq}(t)=-\underbrace{S_2^{-1}}_{(SB_{E3})^{-1}} \underbrace{\left[\begin{array}{cc} \bar{A}_{21} & \bar{A}_{22} \\ \end{array}\right]x'_{E3}(t)}_{SA_{E3}x_{E3}(t)}} \end{array} }

のように得られます。(20)の第1項{\dot u}_\ellは、この等価制御をベースして

\displaystyle{(23)\quad  \begin{array}{l} {\dot u}_\ell(t)=-\underbrace{S_2^{-1}}_{(SB_{E3})^{-1}} \underbrace{(\left[\begin{array}{cc} \bar{A}_{21} & \bar{A}_{22} \\ \end{array}\right]x'_{E3}(t)-\Phi s(t))}_{(SA_{E3}-\Phi S)x_{E3}(t)}} \end{array}} }

のように構成します(\Phiは安定行列)。このとき閉ループ系は次式で与えられます。

\displaystyle{(24)\quad \begin{array}{l} \left[\begin{array}{c} \dot{x}_1(t)\\ \dot{s}(t) \end{array}\right] = \left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12} \\ 0 & \Phi \\ \end{array}\right] \left[\begin{array}{c} x_1(t)\\ s(t) \end{array}\right] + \left[\begin{array}{c} 0\\ S_2{\dot u}_n(t) \end{array}\right] \end{array }

すなわち

\displaystyle{(25)\quad \begin{array}{l} \dot{x}_1(t)=\bar{A}_{11}x_1(t)+\bar{A}_{12}s(t)\\ \dot{s}(t)=\Phi s(t)+S_2{\dot u}_n(t) \end{array} }

ここで、\Phiは安定行列なので

\displaystyle{(26)\quad \begin{array}{l} P_2\Phi+\Phi^TP_2=-I \end{array} }

を満たすP_2>0を選ぶことができます。これを用いて

\displaystyle{(27)\quad  {\dot u}_n(t)=-\underbrace{S_2^{-1}}_{(SB_{E3})^{-1}}\rho\frac{P_2s(t)}{||P_2s(t)||}} }

と選びます(\rho>0は定数)。このとき次式が成り立ちます。

\displaystyle{(28)\quad \begin{array}{l} \dot{V}(s)=2s^T(t)P_2\dot{s}(t)\\ =2s^T(t)P_2(\Phi s(t)-\rho\frac{P_2s(t)}{||P_2s(t)||})\\ =s^T(t)(P_2\Phi+\Phi^TP_2)s(t)+2s^T(t)P_2(-\rho\frac{P_2s(t)}{||P_2s(t)||})\\ = -||s(t)||^2-2\rho||P_2s(t)||\\ \le -||s(t)||^2 \end{array} }

スライディングモードの検討

\bar{A}_{11}は安定行列なので

\displaystyle{(29)\quad \begin{array}{l} P_1\bar{A}_{11}+\bar{A}_{11}^TP_1=-Q_1<0 \end{array} }

を満たすP_1>0を選ぶことができます。

\displaystyle{(30)\quad \begin{array}{l} \dot{V}(x_1)=2x_1^T(t)P_1\dot{x}_1(t)\\ =2x_1^T(t)P_1( \bar{A}_{11}x_1(t)+\bar{A}_{12}\underbrace{s(t)}_{0})\\ =x_1^T(t)(P_1\bar{A}_{11}+\bar{A}_{11}^TP_1)x_1(t)\\ =-x_1^T(t)Q_1x_1(t) \end{array} }

積分動作をもつSMC

上で求めた偏差系E3に対するSMCは次式で与えられました。

\displaystyle{(31)\quad  {\dot u}(t)={\dot u}_\ell(t)+{\dot u}_n(t) }

\displaystyle{(32)\quad  {\dot u}_\ell(t)=-(SB_{E3})^{-1}(SA_{E3}-\Phi S)x_{E3}(t) }

\displaystyle{(33)\quad  {\dot u}_n(t)=-(SB_{E3})^{-1}\rho\frac{P_2s(t)}{||P_2s(t)||}}=-(SB_{E3})^{-1}\rho\,{\rm sgn}(P_2Sx_{E3}(t)) }

これらを積分して、制御対象(1)に対する積分動作をもつSMCを導出します。

\displaystyle{(34)\quad  {u}(t)={u}_\ell(t)+{u}_n(t) }

まず(32)は(10)を用いて次式のように書けます。

\displaystyle{(35)\quad  {\dot u}_\ell(t)=- \underbrace{ (SB_{E3})^{-1}(SA_{E3}-\Phi S)S_E^{-1} }_{\left[\begin{array}{cc} F & F_I \end{array}\right]} \underbrace{ \left[\begin{array}{c} {\dot x}(t) \\ y(t)-r \end{array}\right] }_{x_{E2}(t)} }

これを積分して

\displaystyle{(36)\quad  u_\ell(t)=-Fx(t)+F_I\int_0^t(r-y(\tau))d\tau }

次に(33)は(10)を用いて次式のように書けます。

\displaystyle{(37)\quad  {\dot u}_n(t) =-S_2^{-1}\rho\, {\rm sgn}( \underbrace{ P_2SS_E^{-1} }_{\left[\begin{array}{cc} G & G_I \end{array}\right]} \underbrace{ \left[\begin{array}{c} {\dot x}(t) \\ y(t)-r \end{array}\right] }_{x_{E2}(t)}) }

これを積分すれば

\displaystyle{(38)\quad  u_n(t)=S_2^{-1}\rho\,\int_0^t\underbrace{{\rm sgn}(-G{\dot x}(\tau)+G_I(r-y(\tau)))}_{0,\pm 1}d\tau }

モデル規範・追従SM-OBS制御

モデル規範・SMオブザーバベース・追従SM制御…Homework

[1] 次の状態方程式で表される制御対象を考えます。

\displaystyle{(1)\quad \dot{x}(t)=Ax(t)+Bu(t)+B\xi(t,x,u)\quad(x(t)\in{\rm\bf R}^n) }

この状態が理想的なモデル

\displaystyle{(2)\quad \boxed{\dot{w}(t)=A_mw(t)+B_mr(t)}\quad(w(t)\in{\rm\bf R}^n) }

の状態を追従するように、すなわち

\displaystyle{(3)\quad e_x(t)=x(t)-w(t)\rightarrow 0 \quad(t\rightarrow\infty) }

となるように制御則を決定したいとします。

以下では、(2)は適当な安定化状態フィードバックと入力変換を行って

\displaystyle{(4)\quad \boxed{\begin{array}{l} A_m=A+BL_x\\ B_m=BL_r \end{array}} }

のように得られていると仮定します。

●モデル間の誤差は、(1)と(2)を辺々引き算して

\displaystyle{(5)\quad \begin{array}{l} \underbrace{\dot{x}(t)-\dot{w}(t)}_{\dot{e}_x(t)} =Ax(t)+Bu(t)+B\xi(t,x,u)-(A_mw(t)+B_mr(t))\\ =Ax(t)-A_mx(t)+A_mx(t)-A_mw(t)+Bu(t)+B\xi(t,x,u)-B_mr(t)\\ =A_me_x(t)+(A-A_m)x(t)+Bu(t)+B\xi(t,x,u)-B_mr(t) \end{array} }

に従います。これは(4)を用いて次式となります。

\displaystyle{(6)\quad \dot{e}_x(t)=A_me_x(t)+B(u(t)-L_xx(t)-L_rr(t)+\xi(t,x,u)) }

●出力方程式は次式で与えられるとします。

\displaystyle{(7)\quad y(t)=Cx(t) }

状態フィードバックは使えないので、次のSMオブザーバを考えます。

\displaystyle{(8)\quad \begin{array}{l} \dot{z}(t)=Az(t)+Bu(t)-G \overbrace{C\underbrace{(z(t)-x(t))}_{e(t)}}^{e_y(t)=Cz(t)-y(t)}+B\nu_o\quad(z(t)\in{\rm\bf R}^n)\\ =\underbrace{(A-GC)}_{A_o}z(t)+Gy(t)+Bu(t)+B\nu_o \end{array} }

ここで、GA_o=A-GCが安定行列となるように選ばれているとします。

SMオブザーバの誤差方程式は、(1)と(7)を辺々引き算して

\displaystyle{(9)\quad \begin{array}{l} \underbrace{\dot{z}(t)-\dot{x}(t)}_{\dot{e}(t)} =Az(t)+Bu(t)-G Ce(t)+B\nu_o\\ -(Ax(t)+Bu(t)+B\xi(t,x,u))\\ =Ae(t)-GCe(t)+B\nu_o-B\xi(t,x,u)\\ =\underbrace{(A-GC)}_{A_o}e(t)+B(\nu_o-\xi(t,x,u)) \end{array} }

すなわち

\displaystyle{(9')\quad \boxed{\dot{e}(t)=A_oe(t)+B(\nu_o-\xi(t,x,u))} }

となります。いま

\displaystyle{(10)\quad PA_o+A_o^TP<0 }

を満足するP>0と、あるF\in{\bf R}^{m\times p}に対して

\displaystyle{(11)\quad PB=C^TF^T }

が満足されているものとします。このとき、\nu_oは次式で与えます。

\displaystyle{(12)\quad \boxed{\nu_o=-\rho_o(u_\ell,y)\frac{Fe_y(t)}{||Fe_y(t)||} }

ただし

\displaystyle{(12')\quad Fe_y(t)=FCe(t)=B^TPe(t)\quad(Ce(t)=Cz(t)-y(t)) }

[2] SMオブザーバ(8)の状態((1)の状態の推定値)をモデル(2)の状態を追従させることを考えます。そのために次の制御則を考えます。

\displaystyle{(13)\quad u(t)=L_xz(t)+L_rr(t)+\bar{u}(t) }

このとき、この場合のモデル間の誤差は、(8)と(2)を辺々引き算して

\displaystyle{(14)\quad \begin{array}{l} \underbrace{\dot{z}(t)-\dot{w}(t)}_{\dot{e}_z(t)} =Az(t)+Bu(t)-G Ce(t)+B\nu_o-(A_mw(t)+B_mr(t))\\ =Az(t)-A_mz(t)+A_mz(t)-A_mw(t)-G Ce(t)+B\nu_o\\ +Bu(t)+B\xi(t,x,u)-B_mr(t)\\ =A_me_z(t)+\underbrace{(A-A_m)}_{-BL_x}z(t)-G Ce(t)+B\nu_o\\ +B(L_xz(t)+L_rr(t)+\bar{u}(t))+B\xi(t,x,u)-\underbrace{B_m}_{BL_r}r(t)\\ =A_me_z(t)+B\bar{u}(t)-G Ce(t)+B(\xi(t,x,u)+\nu_o) \end{array} }

すなわち

\displaystyle{(14')\quad \dot{e}_z(t)=A_me_z(t)-G Ce(t)+B(\bar{u}+\xi(t,x,u)+\nu_o) }

に従います。これに対して、スライディングモード制御

\displaystyle{(15)\quad \bar{u}(t)=u_\ell(t)+\nu_c }

を適用することを考えます。スイッチング関数は

\displaystyle{(16)\quad s(t)=Se_z(t) }

とします。これはスイッチング関数(1)またはスイッチング関数(2)の方法で選定します。

●線形制御部を、次式のように決めます。

\displaystyle{(17)\quad \boxed{u_\ell(t)=-\underbrace{(SB)^{-1}(SA_m-\Phi S)}_{L}e_z(t)} }

また、スイッチング部を、次式のように決めます。

\displaystyle{(18)\quad \boxed{\nu_c=-\underbrace{(SB)^{-1}\rho_c(u_\ell,y)}_{L_n} \frac{\bar{P}_2s(t)}{||\bar{P}_2s(t)||} }

ここで、P_2>0は適当な安定行列\Phiを与えて

\displaystyle{(19)\quad \bar{P}_2\Phi+\Phi^T\bar{P}_2<0 }

の解として求め、また、次の関係を満たすものとします。

\displaystyle{(20)\quad \boxed{\rho_c(u_\ell,y)=||SB||\rho_o(u_\ell,y)+\gamma_c} }

●(15),(18)を(14′)に代入して、モデル間の誤差は

\displaystyle{(21)\quad \begin{array}{l} \dot{e}_z(t)=A_me_z(t)-G Ce(t)+B(u_\ell(t)+\nu_c+\xi(t,x,u)+\nu_o)\\ =A_me_z(t)-G Ce(t)+B(-Le_z(t)+\nu_c+\xi(t,x,u)+\nu_o)\\ =\underbrace{(A_m-BL)}_{A_c}e_z(t)-G Ce(t)+B(\nu_c+\xi(t,x,u)+\nu_o) \end{array} }

すなわち

\displaystyle{(21')\quad \boxed{\dot{e}_z(t)=A_ce_z(t)-G Ce(t)+B(\nu_c+\xi(t,x,u)+\nu_o) }

に従います。

[3] 以下では、状態方程式は次のSM標準形をとるように座標変換されているとします。

\displaystyle{(22)\quad \underbrace{ \left[\begin{array}{c} \dot x_1(t)\\ \dot x_2(t) \end{array}\right] }_{\dot{x}(t)} = \underbrace{ \left[\begin{array}{cc} A_{11} & A_{12} \\ A_{21} & A_{22} \\ \end{array}\right] }_{A} \underbrace{ \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right] }_{x(t)} + \underbrace{ \left[\begin{array}{c} 0\\ B_2 \end{array}\right] }_{B} (u(t)+\xi(t,x,u)) }

これに応じて、スイッチング関数(16)を

\displaystyle{(23)\quad s(t)= \underbrace{ \left[\begin{array}{cc} S_1 & S_2 \\ \end{array}\right] }_{S} \underbrace{ \left[\begin{array}{c} e_{z1}(t)\\ e_{z2}(t) \end{array}\right] }_{x(t)} = \underbrace{S_2 \left[\begin{array}{cc} M & I_m \\ \end{array}\right] }_{S} \underbrace{ \left[\begin{array}{c} e_{z1}(t)\\ e_{z2}(t) \end{array}\right] }_{x(t)} \ (M=S_2^{-1}S_1) }

と分割します。

(21)は、A_m=A+BL_xL=(SB)^{-1}(SA_m-\Phi S)に注意して

\displaystyle{(24)\quad \begin{array}{l} \dot{e}_z(t)=(A+BL_x-B(SB)^{-1}(S(A+BL_x)-\Phi S))e_z(t)\\ -G Ce(t)+B(\nu_c+\xi(t,x,u)+\nu_o)\\ =(A-B(SB)^{-1}SA+BL_x-B(SB)^{-1}(SB)L_x+B(SB)^{-1}\Phi S)e_z(t)\\ -G Ce(t)+B(\nu_c+\xi(t,x,u)+\nu_o)\\ =\underbrace{(A-B(SB)^{-1}(SA-\Phi S))}_{A_c}e_z(t) -G Ce(t)+B(\nu_c+\xi(t,x,u)+\nu_o)\\ \end{array} }

となります。これに対して座標変換

\displaystyle{(25)\quad \begin{array}{l} \underbrace{\left[\begin{array}{c} e_{z1}(t)\\ s(t) \end{array}\right]}_{\bar{e}_z(t)}= \underbrace{\left[\begin{array}{cc} I_{n-m} & 0_{n\times m} \\ S_1 & S_2 \\ \end{array}\right]}_{\bar T} \underbrace{\left[\begin{array}{c} e_{z1}(t)\\ e_{z2}(t) \end{array}\right]}_{e_z(t)}\\ \Leftrightarrow \underbrace{\left[\begin{array}{c} e_{z1}(t)\\ e_{z2}(t) \end{array}\right]}_{e_z(t)}= \underbrace{\left[\begin{array}{cc} I_{n} & 0_{n\times m} \\ -M & S_2^{-1} \\ \end{array}\right]}_{\bar{T}^{-1}} \underbrace{\left[\begin{array}{c} e_{z1}(t)\\ s(t) \end{array}\right]}_{\bar{e}_z(t)}\quad(M=S_2^{-1}S_1) \end{array} }

を行うと、まず(25)を(24)に代入して

\displaystyle{(26)\quad \begin{array}{l} \underbrace{ \left[\begin{array}{cc} I & 0 \\ -M & S_2^{-1} \\ \end{array}\right] }_{\bar{T}^{-1}} \underbrace{ \left[\begin{array}{c} \dot e_{z1}(t)\\ \dot s(t) \end{array}\right] }_{\dot{\bar{e}}_z(t)}\\ = (\left[\begin{array}{cc} A_{11} & A_{12} \\ A_{21} & A_{22} \\ \end{array}\right] - \left[\begin{array}{c} 0\\ B_2 \end{array}\right] (\left[\begin{array}{cc} S_1 & S_2 \\ \end{array}\right] \left[\begin{array}{c} 0\\ B_2 \end{array}\right])^{-1}\\ \times(\left[\begin{array}{cc} S_1 & S_2 \\ \end{array}\right] \left[\begin{array}{cc} A_{11} & A_{12} \\ A_{21} & A_{22} \\ \end{array}\right] -\Phi \left[\begin{array}{cc} S_1 & S_2 \\ \end{array}\right]) ) \underbrace{ \left[\begin{array}{cc} I & 0 \\ -M & S_2^{-1} \\ \end{array}\right] }_{\bar{T}^{-1}} \underbrace{ \left[\begin{array}{c} e_{z1}(t)\\ s(t) \end{array}\right] }_{\bar{e}_z(t)}\\ -G Ce(t)+\left[\begin{array}{c} 0\\ B_2 \end{array}\right](\nu_c+\xi(t,x,u)+\nu_o) \end{array} }

左から\bar{T}をかけて

\displaystyle{(27)\quad \begin{array}{l} \underbrace{ \left[\begin{array}{c} \dot e_{z1}(t)\\ \dot s(t) \end{array}\right] }_{\dot{\bar{e}}_z(t)} = \underbrace{ \left[\begin{array}{cc} I & 0 \\ S_1 & S_2 \\ \end{array}\right] }_{\bar{T}} (\left[\begin{array}{cc} A_{11}-A_{12}M & A_{12}S_2^{-1}  \\ A_{21}-A_{22}M & A_{22}S_2^{-1}  \\ \end{array}\right] -\left[\begin{array}{c} 0\\ B_2 \end{array}\right](S_2B_2)^{-1}\\ \times(\left[\begin{array}{cc} S_1 & S_2  \end{array}\right] \left[\begin{array}{cc} A_{11}-A_{12}M & A_{12}S_2^{-1}  \\ A_{21}-A_{22}M & A_{22}S_2^{-1}  \\ \end{array}\right] -\Phi \left[\begin{array}{cc} 0 & I_m \\ \end{array}\right]) ) \underbrace{ \left[\begin{array}{c} e_{z1}(t)\\ s(t) \end{array}\right] }_{\bar{e}_z(t)}\\ -\underbrace{\bar{T}G}_{\bar{G}} Ce(t) +\underbrace{\left[\begin{array}{cc} I & 0 \\ S_1 & S_2 \\ \end{array}\right]}_{\bar{T}} \left[\begin{array}{c} 0\\ B_2 \end{array}\right](\nu_c+\xi(t,x,u)+\nu_o)\\ = (\left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12} \\ \bar{A}_{21} & \bar{A}_{22}\\ \end{array}\right] -\left[\begin{array}{c} 0\\ S_2B_2 \end{array}\right](S_2B_2)^{-1}\\ \times(\left[\begin{array}{cc} \bar{A}_{21} & \bar{A}_{22}\\ \end{array}\right] -\Phi \left[\begin{array}{cc} 0 & I_m \\ \end{array}\right]) ) \underbrace{ \left[\begin{array}{c} e_{z1}(t)\\ s(t) \end{array}\right] }_{\bar{e}_z(t)}\\ -\bar{G} Ce(t)+\bar{B}(\nu_c+\xi(t,x,u)+\nu_o)\\ =\underbrace{ \left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12} \\ 0 & \Phi\\ \end{array}\right]}_{A_c} \underbrace{ \left[\begin{array}{c} e_{z1}(t)\\ s(t) \end{array}\right] }_{\bar{e}_z(t)} -\bar{G} Ce(t) +\underbrace{\left[\begin{array}{c} 0\\ S_2B_2 \end{array}\right]}_{\bar{B}}(\nu_c+\xi(t,x,u)+\nu_o) \end{array} }

ただし

\displaystyle{(27')\quad  \left\{\begin{array}{l} \bar{A}_{11}=A_{11}-A_{12}M\quad(M=S_2^{-1}S_1)\\ \bar{A}_{12}=A_{12}S_2^{-1}\\ \bar{A}_{21}=S_2(M\bar{A}_{11}+A_{21}-A_{22}M)\\ \bar{A}_{22}=S_2(M{A}_{12}+A_{22})S_2^{-1} \end{array}\right. }

を得ます。ここで、\bar{A}_{11}が安定行列となるように行列Mが選ばれているとします。

これを誤差方程式(9′)と合わせて、閉ループ系は次式で表されます。

\displaystyle{(28)\quad \begin{array}{l} \left[\begin{array}{c} \dot{e}(t)\\ \dot{\bar{e}}_z(t) \end{array}\right]= \underbrace{\left[\begin{array}{cc} A_o & 0\\ -\bar{G}C & A_c \end{array}\right]}_{A_G} \left[\begin{array}{c} e(t)\\ \bar{e}_z(t) \end{array}\right]\\ + \left[\begin{array}{c} 0\\ \bar{B} \end{array}\right]{\nu}_c + \left[\begin{array}{c} B\\ \bar{B} \end{array}\right]\nu_o + \left[\begin{array}{c} -B\\ \bar{B} \end{array}\right]\xi(t,x,\hat{u}) \end{array} }

●以上に基づく設計手順を、数値例で示します。

MATLAB
%ex9_ob_smm.m
%-----
 clear all, close all
%(A,B,C)
 A=[0 0 1 0 0;
    0 -0.1540 -0.0042  1.5400 0;
    0  0.2490 -1.0000 -5.2000 0;
    0.0386 -0.9960 -0.0003 -0.1170 0;
    0 0.5 0 0 -0.5];
 pl=eig(A)
 B=[0 0;
    -0.7440 -0.0320;
    0.3370 -1.1200;
    0.0200 0;
    0 0];
 CM=[0 1 0 0 -1;
     0 0 1 0  0;
     0 0 0 1  0;
     1 0 0 0  0];
 C=[1 0 0 0 0;
    0 0 0 1 0]; 
 [nn,mm]=size(B);
 [pp,nn]=size(CM); 
%-----
%  p1=[-0.05 -2 1.5 -1.5 1.5]
%  p1=[-0.05 -2+1.5*i -2-1.5*i -1.5+1.5*i -1.5-1.5*i]
 Lx=[-0.3131 3.3211 -0.1386 -0.7379 4.1180;
      3.9524 5.6616  2.2906 -65.6425 -90.7262];
 pCL=eig(A+B*Lx)
 Am=A+B*Lx;
 Lr=-inv(C*(Am\B));
 Bm=B*Lr;
 Cm=C;
%-----
 Q=diag([5,1,1,5,5]);
 S=swflqr(A,B,Q) 
%-----
 p1=-3
 [Acal,Bcal,Ccal,TL,Ta,Tb,Tc,D2]=ca_form2(A,B,CM,p1)
%-----
 p2=[-4,-4.425,-4.5,-5]
 [F,G]=smobs2(Acal,p2,nn,pp,TL,Ta,Tb,Tc,D2) 
 Ao=A-G*CM;
%-----
 p3=[-3,-3]
 Phi=diag(p3)
 Lambda=S*B
 L=inv(Lambda)*(S*Am-Phi*S)
 Ac=Am-B*L
 pl=eig(Ac)
%-----
 rhoo=1
 rhoc=norm(Lambda)*rhoo+1
 Ln=rhoc*inv(Lambda)
 P2=lyap(Phi',eye(mm))
%-----
%eof


図1 モデル規範・SMオブザーバベース・追従SM制御系のシミュレーション例

Note C93 閉ループ系の安定性

●閉ループ系のダイナミックスは次式で表されます。

\displaystyle{ \begin{array}{ll} (1.1) & \dot{w}(t)=A_mw(t)+B_mr(t)\\ (1.2) & \dot{e}(t)=A_oe(t)+B(\nu_o-\xi(t,x,u))\\ (1.3) & \dot{\bar e}_z(t)=A_c\bar{e}_z(t)-\bar{G}Ce(t)+\bar{B}(\nu_c+\nu_o+\xi(t,x,u))\\  & (e(t)=z(t)-x(t), \bar{e}_z(t)={\bar T}(z(t)-w(t)) ) \end{array} }

ただし

\displaystyle{(1.4)\quad \begin{array}{l} A_m=A+BL_x,\ B_m=BL_r\\ A_o=A-GC\\ A_c=\bar{T}(A_m-BL)\bar{T}^{-1}\\ L=(SB)^{-1}(SA_m-\Phi S)\\ \bar{B}=\left[\begin{array}{c} 0\\ S_2B_2 \end{array}\right],\  \bar{G}=\bar{T}G \end{array} }

これに対して次のリャプノフ関数を考えます。

\displaystyle{(2)\quad \boxed{\begin{array}{l} V(e,\bar{e}_z) =e^T(t)Pe(t)+\bar{e}_z^T(t)\bar{P}\bar{e}_z(t) \end{array}} }

ここで、正定行列P\bar{P}は、それぞれ安定行列A_oA_cのリャプノフ行列とし、次のリャプノフ方程式の解とします。

\displaystyle{ \begin{array}{ll} (3.1) & PA_o+A_o^TP=-Q\\ (3.2) & \bar{P}A_c+A_c^T\bar{P}=-\bar{P}\bar{G}CQ^{-1}C^T\bar{G}^T\bar{P}-\underline{\bar{P}\bar{Q}\bar{P}} \end{array} }

\bar{P}は、リャプノフ方程式

\displaystyle{(4)\quad \underbrace{\left[\begin{array}{cc} \bar{P}_1 & 0\\ 0 & \bar{P}_2 \end{array}\right]}_{\bar P} \underbrace{\left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12}\\ 0 & \Phi  \end{array}\right]}_{A_c} +\underbrace{\left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12}\\ 0 & \Phi  \end{array}\right]^T}_{A_c^T} \underbrace{\left[\begin{array}{cc} \bar{P}_1 & 0\\ 0 & \bar{P}_2 \end{array}\right]}_{\bar P}<0 }

を満足するブロック対角行列とします。ここで、正定行列\bar{P}_1\bar{P}_2は、それぞれ安定行列\bar{A}_{11}\Phiに対する次のリャプノフ不等式の解です。

\displaystyle{(5)\quad \bar{P}_1\bar{A}_{11}+\bar{A}_{11}^T\bar{P}_1<0 \Leftrightarrow  \bar{A}_{11}\bar{P}_1^{-1}+\bar{P}_1^{-1}\bar{A}_{11}^T<0 }
\displaystyle{(6)\quad \bar{P}_2\Phi+\Phi^T\bar{P}_2<0 \Leftrightarrow \Phi\bar{P}_2^{-1}+\bar{P}_2^{-1}\Phi^T<0 }

このとき、P\bar Pは、次のリャプノフ不等式の解を構成するとします。

\displaystyle{(7)\quad \underbrace{\left[\begin{array}{cc} P & 0\\ 0 & \bar{P} \end{array}\right]}_{P_G} \underbrace{\left[\begin{array}{cc} A_o & 0\\ -\bar{G}C & A_c \end{array}\right]}_{A_G} +\underbrace{\left[\begin{array}{cc} A_o & 0\\ -\bar{G}C & A_c \end{array}\right]^T}_{A_G^T} \underbrace{\left[\begin{array}{cc} P & 0\\ 0 & \bar{P} \end{array}\right]}_{P_G}<0 }

これは次式と等価です。

\displaystyle{(8)\quad \begin{array}{l} \underbrace{\left[\begin{array}{cc} PA_o & 0\\ -\bar{P}\bar{G}C & \bar{P}A_c \end{array}\right]}_{P_GA_G}+ \underbrace{\left[\begin{array}{cc} PA_o & 0\\ -\bar{P}\bar{G}C & \bar{P}A_c \end{array}\right]^T}_{(P_GA_G)^T} =\left[\begin{array}{cc} -Q & -C^T\bar{G}^T\bar{P}\\ -\bar{P}\bar{G}C & \bar{P}A_c+A_c^T\bar{P} \end{array}\right]<0\\ \Leftrightarrow \bar{P}A_c+A_c^T\bar{P}+\bar{P}\bar{G}CQ^{-1}C^T\bar{G}^T\bar{P}<0\\ \Leftrightarrow A_c\bar{P}^{-1}+\bar{P}^{-1}A_c^T+\bar{G}CQ^{-1}C^T\bar{G}^T<0\\ \Leftrightarrow A_c\bar{P}^{-1}+\bar{P}^{-1}A_c^T+\bar{G}CQ^{-1}C^T\bar{G}^T=-\bar{Q}\quad(\bar{Q}>0) \end{array} }

ここで、新しいパラメータ\bar{Q}を導入し、次の公式を用いています。

\displaystyle{ \begin{array}{lll} && \left[\begin{array}{cc} P & M \\ M^T & Q \end{array}\right]<0\\ &\Leftrightarrow& P-MQ^{-1}M^T<0,\ Q<0\\ &\Leftrightarrow& P<0,\ Q-M^TP^{-1}M<0 \end{array} }

いま適当な\hat{Q}_1\hat{Q}_2を与えて、

\displaystyle{(9)\quad \bar{A}_{11}\bar{P}_1^{-1}+\bar{P}_1^{-1}\bar{A}_{11}^T=-\hat{Q}_1 \quad(\hat{Q}_1>0)}
\displaystyle{(10)\quad \Phi\bar{P}_2^{-1}+\bar{P}_2^{-1}\Phi^T=-\hat{Q}_2\quad(\hat{Q}_2>0) }

を解いて、\bar{P}_1\bar{P}_2を定めるものとします。このとき(7)は

\displaystyle{(11)\quad \begin{array}{l} \underbrace{\left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12}\\ 0 & \Phi  \end{array}\right]}_{A_c} \underbrace{\left[\begin{array}{cc} \bar{P}_1^{-1} & 0\\ 0 & \bar{P}_2^{-1} \end{array}\right]}_{\bar{P}^{-1}} + \underbrace{\left[\begin{array}{cc} \bar{P}_1^{-1} & 0\\ 0 & \bar{P}_2^{-1} \end{array}\right]}_{\bar{P}^{-1}} \underbrace{\left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12}\\ 0 & \Phi  \end{array}\right]^T}_{A_c^T}\\ +\underbrace{\left[\begin{array}{c} \bar{G}_1\\ \bar{G}_2 \end{array}\right]}_{\bar{G}} \underbrace{CQ^{-1}C^T}_{Q_{22}} \underbrace{\left[\begin{array}{c} \bar{G}_1\\ \bar{G}_2 \end{array}\right]^T}_{\bar{G}^T}\\ = \underbrace{\left[\begin{array}{cc} \bar{A}_{11}\bar{P}_1^{-1} & \bar{A}_{12}\bar{P}_2^{-1}\\ 0 & \Phi \bar{P}_2^{-1} \end{array}\right]}_{A_c\bar{P}^{-1}} + \underbrace{\left[\begin{array}{cc} \bar{A}_{11}\bar{P}_1^{-1} & \bar{A}_{12}\bar{P}_2^{-1}\\ 0 & \Phi \bar{P}_2^{-1} \end{array}\right]^T}_{(A_c\bar{P}^{-1})^T}\\ +\underbrace{\left[\begin{array}{cc} \bar{G}_1Q_{22}\bar{G}_1^T &\bar{G}_1Q_{22}\bar{G}_2^T\\ \bar{G}_2Q_{22}\bar{G}_1^T &\bar{G}_2Q_{22}\bar{G}_2^T  \end{array}\right]}_{\bar{G}CQ^{-1}C^T\bar{G}^T}\\ = \left[\begin{array}{cc} \bar{A}_{11}\bar{P}_1^{-1}+\bar{P}_1^{-1}\bar{A}_{11}^T+\bar{G}_1Q_{22}\bar{G}_1^T & \bar{A}_{12}\bar{P}_2^{-1}+\bar{G}_1Q_{22}\bar{G}_2^T\\ \bar{P}_2^{-1}\bar{A}_{12}^T+\bar{G}_2Q_{22}\bar{G}_1^T & \Phi\bar{P}_2^{-1}+\bar{P}_2^{-1}\Phi^T+\bar{G}_2Q_{22}\bar{G}_2^T \end{array}\right]\\ = \left[\begin{array}{cc} -\hat{Q}_1+\bar{G}_1Q_{22}\bar{G}_1^T & \bar{A}_{12}\bar{P}_2^{-1}+\bar{G}_1Q_{22}\bar{G}_2^T\\ \bar{P}_2^{-1}\bar{A}_{12}^T+\bar{G}_2Q_{22}\bar{G}_1^T & -\hat{Q}_2+\bar{G}_2Q_{22}\bar{G}_2^T \end{array}\right]<0\\ \Leftrightarrow \left\{\begin{array}{l} \bar{G}_1Q_{22}\bar{G}_1^T +(\bar{A}_{12}\bar{P}_2^{-1}+\bar{G}_1Q_{22}\bar{G}_2^T)\\ \times(\bar{G}_2Q_{22}\bar{G}_2^T -\hat{Q}_2)^{-1}(\bar{P}_2^{-1}\bar{A}_{12}^T+\bar{G}_2Q_{22}\bar{G}_1^T) <\hat{Q}_1\\ \bar{G}_2Q_{22}\bar{G}_2^T <\hat{Q}_2 \end{array}\right. \end{array} }

となります。したがって、この制約を(8)の\hat{Q}_1、(9)の\hat{Q}_2に付けておきます。

●以上の準備の下で次式が示され、閉ループ系のリャプノフ安定性が成り立ちます。

\displaystyle{(12)\quad \begin{array}{l} \dot{V}(e,\zeta,e_r)=2e^T(t)P\dot{e}(t) +2\bar{e}_z^T(t)\bar{P}\dot{\bar{e}}_z(t)\\\\ =2e^T(t)P(A_oe(t)+B(\nu_o-\xi(t,x,u))\\ +2\bar{e}_z^T(t)\bar{P}(A_c\bar{e}_z(t)-\bar{G}Ce(t)+\bar{B}(\nu_c+\nu_o+\xi(t,x,u)))\\\\ =e^T(t)\underbrace{(PA_o+A_o^TP)}_{-Q}e(t)+2e^T(t)PB(\nu_o-\xi(t,x,u))\\ +\bar{e}_z^T(t)\underbrace{(\bar{P}A_c+A_c^T\bar{P})}_{-\bar{P}\bar{G}CQ^{-1}C^T\bar{G}^T\bar{P}-\bar{P}\bar{Q}\bar{P}}\bar{e}_z(t)\\ -2\bar{e}_z^T(t)\bar{P}\bar{G}Ce(t)+2\bar{e}_z^T(t)\bar{P}\bar{B}(\nu_c+\nu_o+\xi(t,x,u))\\\\ =-e^T(t)Qe(t)+2e^T(t)PB(\nu_o-\xi(t,x,u))\\ -\bar{e}_z^T(t)\bar{P}\bar{G}CQ^{-1}C^T\bar{G}^T\bar{P}\bar{e}_z(t)-\underline{\bar{e}_z^T(t)\bar{P}\bar{Q}\bar{P}\bar{e}_z(t)}\\ -2\bar{e}_z^T(t)\bar{P}\bar{G}Ce(t)+2\bar{e}_z^T(t)\bar{P}\bar{B}(\nu_c+\nu_o+\xi(t,x,u))\\\\ =\underbrace{2e^T(t)PB(\nu_o-\xi(t,x,u))}_{\le -2\gamma_o||FCe(t)||}+\underbrace{2\bar{e}_z^T(t)\bar{P}\bar{B}(\nu_c+\nu_o+\xi(t,x,u))}_{\le -2\gamma_c||\bar{P}_2s(t)||}\\ -\underbrace{(e^T(t)Qe(t)+2\bar{e}_z^T(t)\bar{P}\bar{G}Ce(t)+\bar{e}_z^T(t)\bar{P}\bar{G}CQ^{-1}C^T\bar{G}^T\bar{P}\bar{e}_z(t))}_{(e(t)+Q^{-1}C^T\bar{G}^T\bar{P}\bar{e}_z(t))^TQ(e(t)+Q^{-1}C^T\bar{G}^T\bar{P}\bar{e}_z(t))}\\ -\underline{\bar{e}_z^T(t)\bar{P}\bar{Q}\bar{P}\bar{e}_z(t)}\\\\ \le -2\gamma_o||FCe(t)||-2\gamma_c||\bar{P}_2s(t)||\\ -(e(t)+Q^{-1}C^T\bar{G}^T\bar{P}\bar{e}_z(t))^TQ(e(t)+Q^{-1}C^T\bar{G}^T\bar{P}\bar{e}_z(t))\\ -\bar{e}_z^T(t) \bar{P}\bar{Q}\bar{P} \bar{e}_z(t)<0 \end{array} }

ここで、次の平方完成を行っています。

\displaystyle{(13)\quad \begin{array}{l} (e(t)+Q^{-1}C^T\bar{G}^T\bar{P}\bar{e}_z(t))^TQ(e(t)+Q^{-1}C^T\bar{G}^T\bar{P}\bar{e}_z(t))\\ =e^T(t)Qe(t)+2\bar{e}_z^T(t)\bar{P}\bar{G}Ce(t)+\bar{e}_z^T(t)\bar{P}\bar{G}CQ^{-1}C^T\bar{G}^T\bar{P}\bar{e}_z(t) \end{array} }

また、次が成り立つことを用いています。

\displaystyle{ \begin{array}{ll} (14.1) &e^T(t)PB(\nu_o-\xi(t,x,u))\le -\gamma_o||FCe(t)||\\ (14.2) &\bar{z}_e^T(t)\bar{P}\bar{B}(\nu_c+\nu_o+\xi(t,x,u))\le -\gamma_c||\bar{P}_2s(t)|| \end{array} }

まず、(14.1)は

\displaystyle{(15)\quad \boxed{\rho_o(u_\ell,y)=\frac{k_1||u_\ell||+\alpha(t,y)+k_1\gamma_c||(SB)^{-1}||+\gamma_o}_{1-k_1\kappa(SB)}} }

を仮定すると、これを変形して得られる

\displaystyle{(16)\quad \begin{array}{l} \rho_o(u_\ell,y)= k_1||u_\ell||+\alpha(t,y)+k_1\gamma_c||(SB)^{-1}||+\gamma_o\\+k_1\underbrace{||SB||||(SB)^{-1}||}_{\kappa(SB)}\rho_o(u_\ell,y)\\ =k_1(||u_\ell||+||(SB)^{-1}||\underbrace{(\rho_o(u_\ell,y)||SB|| +\gamma_c)}_{\rho_c(u_\ell,y)})+\alpha(t,y)+\gamma_o\\ >k_1(||u_\ell||+||\nu_c||)+\alpha(t,y)+\gamma_o\\ \ge k_1(||u_\ell+\nu_c||)+\alpha(t,y)+\gamma_o\\ = k_1||u||+\alpha(t,y)+\gamma_o \end{array} }

を用いて

\displaystyle{(17)\quad \begin{array}{l} 2e^T(t)PB(\nu_o-\xi(t,x,u))\\ =2e^T(t)C^TF^T(-\rho_o(u_\ell,y)\frac{FCe(t)}{||FCe(t)||}-\xi(t,x,u))\\ =-2||FCe(t)||\rho_o(u_\ell,y)-2e^T(t)C^TF^T\xi(t,x,u)\\ \le -2||FCe(t)||\rho_o(u_\ell,y)+2||FCe(t)||||\xi(t,x,u)||\\ \le 2||FCe(t)||(k_1||u||+\alpha(t,y)-\rho_o(u_\ell,y))\\ \le 2||FCe(t)||(\rho_o(u_\ell,y)-\gamma_o-\rho_o(u_\ell,y))\\ \le -2\gamma_o||FCe(t)|| \end{array} }

次に、(14.2)は

\displaystyle{(18)\quad \begin{array}{l} 2\bar{e}_z^T(t)\bar{P}\bar{B}(\nu_c+\nu_o+\xi(t,x,u))\\ =2\underbrace{\left[\begin{array}{c} e_{z1}(t)\\ s(t) \end{array}\right]^T}_{\zeta^T(t)} \underbrace{\left[\begin{array}{cc} \bar{P}_1 & 0\\ 0 & \bar{P}_2 \end{array}\right]}_{\bar P} \underbrace{\left[\begin{array}{c} 0\\ S_2B_2 \end{array}\right]}_{\bar{B}}(\nu_c+\nu_o+\xi(t,x,u))\\ =-2s^T(t)\bar{P}_2(S_2B_2)\rho_o(u_\ell,y)\frac{FCe(t)}{||FCe(t)||}\\ -2s^T(t)\bar{P}_2(S_2B_2)(S_2B_2)^{-1}\rho_c(u_\ell,y) \frac{\bar{P}_2s(t)}{||\bar{P}_2s(t)||}+2s^T(t)\bar{P}_2(S_2B_2)\xi(t,x,u)\\ =-2s^T(t)\bar{P}_2(S_2B_2)\rho_o(u_\ell,y)\frac{B^TPe(t)}{||B^TPe(t)||}\\ -2s^T(t)\bar{P}_2\rho_c(u_\ell,y)\frac{\bar{P}_2s(t)}{||\bar{P}_2s(t)||}+2s^T(t)\bar{P}_2(S_2B_2)\xi(t,x,u)\\ \le 2||\bar{P}_2s(t)||||S_2B_2||\rho_o(u_\ell,y)-2\rho_c(u_\ell,y)||\bar{P}_2s(t)||\\ +2||\bar{P}_2s(t)||||S_2B_2||||\xi(t,x,u)||\\ \le 2||\bar{P}_2s(t)||(\rho_o(u_\ell,y)||S_2B_2||-\rho_c(u_\ell,y))\\ +2||\bar{P}_2s(t)||||S_2B_2||(k_1||u||+\alpha(t,y))\\ \le 2||\bar{P}_2s(t)||(\rho_c(u_\ell,y)-\gamma_c-\rho_c(u_\ell,y))\\ +2||\bar{P}_2s(t)||||S_2B_2||(\rho_o(u_\ell,y)-\gamma_o)\\ =-2\underbrace{(\gamma_c-||S_2B_2||(\rho_o(u_\ell,y)-\gamma_o))}_{\gamma_c'}||\bar{P}_2s(t)|| \end{array} }

追従SMI-OBS制御

SMオブザーバベース・追従SMI制御…Homework

[0] まず準備の復習から始めます。

制御対象の状態空間表現として次式を考えます。

\displaystyle{ \begin{array}{ll} (1.1) & \dot{x}(t)=Ax(t)+Bu(t)+B\xi(t,x,u)\\ (1.2) & y(t)=Cx(t)\\ & (x(t)\in{\rm\bf R}^n, u(t)\in{\rm\bf R}^m, y(t)\in{\rm\bf R}^p, 1\le m= p < n) \end{array} }

これに対して、積分動作

\displaystyle{ \begin{array}{ll} (2.1) &\dot{x}_r(t)=r(t)-y(t)\quad (x_r(t)\in{\rm\bf R}^m)\\ (2.2) &\underbrace{\frac{d}{dt}(r(t)-r_c)}_{\dot{e}_r(t)}=\Gamma\underbrace{(r(t)-r_c)}_{e_r(t)} \end{array} }

とSM状態オブザーバ

\displaystyle{ \begin{array}{ll} (3.1) &\dot{z}(t)=Az(t)+Bu(t)-G \overbrace{C\underbrace{(z(t)-x(t))}_{e(t)}}^{e_y(t)=Cz(t)-y(t)}+B\nu_o\quad(z(t)\in{\rm\bf R}^n)\\ (3.2) &\displaystyle{\nu_o=-\rho_o(u_\ell,y)\frac{Fe_y(t)}{||Fe_y(t)||}} \end{array} }

を考えます。

●以下では、x(t)の代わりにz(t)を用いた制御則u(t)\hat{u}(t)で表します。

\displaystyle{(4)\quad \begin{array}{l} \hat{u}(t)=\underbrace{-L\left[\begin{array}{c} x_r(t)\\ z(t) \end{array}\right]-L_rr(t)+L_{\dot r}\dot{r}(t)}_{\hat {u}_L}+\hat{\nu}_c\\ \displaystyle{\hat{\nu}_c=L_n\frac{P_2(S\left[\begin{array}{c} x_r(t)\\ z(t) \end{array}\right]-S_rr(t))}{||P_2(S\left[\begin{array}{c} x_r(t)\\ z(t) \end{array}\right]-S_rr(t))||}}\\ L=(S\tilde{B})^{-1}(S\tilde{A}-\Phi S)\\ L_r=(S\tilde{B})^{-1}(\Phi S_r+S_2MB_r)\\ L_{\dot r}=(S\tilde{B})^{-1}S_r\\ L_n=(S\tilde{B})^{-1}\rho_c(\hat{u}_L,y) \end{array} }

ここでスイッチング関数は、\left[\begin{array}{c} x_r(t)\\ z(t) \end{array}\right]\in{\rm\bf R}^{m+n}\left[\begin{array}{c} \tilde z_1(t)\\ \tilde z_2(t) \end{array}\right]\in{\rm\bf R}^{n+m}と分割して、次式で表されるとしています。

\displaystyle{(5)\quad s(t)= \underbrace{ \left[\begin{array}{cc} S_1 & S_2 \\ \end{array}\right] }_{S} %\underbrace{ \left[\begin{array}{c} \tilde z_1(t)\\ \tilde z_2(t) \end{array}\right] %}_{x(t)} = \underbrace{S_2 \left[\begin{array}{cc} M & I_m \\ \end{array}\right] }_{S} %\underbrace{ \left[\begin{array}{c} \tilde z_1(t)\\ \tilde z_2(t) \end{array}\right] %}_{x(t)} \ (M=S_2^{-1}S_1) }

[1] (3.1)から(1.1)を辺々引き算して、誤差方程式

\displaystyle{(6)\quad \dot{e}(t)=(A-GC)e(t)+B\nu_o-B\xi(t,x,\hat{u}) }

を得ます。x(t)=z(t)-e(t)を用いて、(2.1)は

\displaystyle{(7)\quad \dot{x}_r(t)=r(t)-y(t)=r(t)-Cx(t)=r(t)-Cz(t)+\underbrace{Ce(t)}_{e_y(t)} }

となります。また(3.1)は、u(t)の代わりに\hat{u}(t)を用いることにすれば

\displaystyle{(8)\quad \dot{z}(t)=Az(t)-Ge_y(t)+B(\hat{u}(t)+\nu_o) }

と表せます。

●(7)と(8)をまとめて

\displaystyle{(9)\quad \boxed{\begin{array}{l} \left[\begin{array}{c} \dot x_r(t)\\ \dot z(t) \end{array}\right] = \left[\begin{array}{cc} 0_{m\times m} & -C \\ 0_{n\times m} & A \\ \end{array}\right] \left[\begin{array}{c} x_r(t)\\ z(t) \end{array}\right] + \left[\begin{array}{c} I_p\\ -G \end{array}\right] e_y(t)\\ + \left[\begin{array}{c} r(t)\\ B(\hat{u}(t)+\nu_o) \end{array}\right] \end{array}} }

ここで座標変換

\displaystyle{(10)\quad \begin{array}{l} \left[\begin{array}{c} \tilde z_1(t)\\ s(t) \end{array}\right]= \underbrace{\left[\begin{array}{cc} I_{n} & 0_{n\times m} \\ S_1 & S_2 \\ \end{array}\right]}_{\bar T} \left[\begin{array}{c} \tilde z_1(t)\\ \tilde z_2(t) \end{array}\right]\\ \Leftrightarrow \left[\begin{array}{c} \tilde z_1(t)\\ \tilde z_2(t) \end{array}\right]= \underbrace{\left[\begin{array}{cc} I_{n} & 0_{n\times m} \\ -M & S_2^{-1} \\ \end{array}\right]}_{\bar{T}^{-1}} \left[\begin{array}{c} \tilde z_1(t)\\ s(t) \end{array}\right]\quad(M=S_2^{-1}S_1) \end{array} }

を行うと

\displaystyle{(11)\quad \begin{array}{l} \bar{T}^{-1} \left[\begin{array}{c} \dot{\tilde{z}}_1(t)\\ \dot{s}(t) \end{array}\right] = \underbrace{\left[\begin{array}{cc|c} 0_{m\times m} & -C_1 & -C_2 \\ 0_{n-m\times m} & A_{11} & A_{12} \\\hline 0_{m\times m} & A_{21} & A_{22}  \end{array}\right]}_{\left[\begin{array}{cc} \tilde{A}_{11} & \tilde{A}_{12} \\ \tilde{A}_{21} & \tilde{A}_{22}  \end{array}\right]} \left[\begin{array}{cc} I_{n} & 0_{n\times m} \\ -M & S_2^{-1} \\ \end{array}\right] \left[\begin{array}{c} \tilde z_1(t)\\ s(t) \end{array}\right]\\ + \left[\begin{array}{c} I_p\\ -G_1\\\hline -G_2 \end{array}\right] e_y(t) + \left[\begin{array}{c} r(t)\\ 0\\\hline B_2(\hat{u}(t)+\nu_o) \end{array}\right]\\ = \underbrace{\left[\begin{array}{cc} \tilde{A}_{11}-\tilde{A}_{12}M & \tilde{A}_{12}S_2^{-1}\\ \tilde{A}_{21}-\tilde{A}_{22}M & \tilde{A}_{22}S_2^{-1} \end{array}\right]}_{\tilde{A}\bar{T}^{-1}} \left[\begin{array}{c} \tilde z_1(t)\\ s(t) \end{array}\right] - \left[\begin{array}{c} \bar{G}_1\\ G_2 \end{array}\right] e_y(t)\\ + \left[\begin{array}{c} B_rr(t)\\ B_2(\hat{u}(t)+\nu_o) \end{array}\right]\\ (\left[\begin{array}{c} G_1\\ G_2 \end{array}\right] =\left[\begin{array}{c} A_{12}C_2^{-1} \\ A_{22}C_2^{-1}-C_2^{-1}A_{22}^S \end{array}\right], \quad\bar{G}_1= \left[\begin{array}{c} -I_p\\ G_1 \end{array}\right]) \end{array} }

したがって

\displaystyle{(12)\quad \begin{array}{l} \left[\begin{array}{c} \dot{\tilde{z}}_1(t)\\ \dot{s}(t) \end{array}\right] = \underbrace{\left[\begin{array}{cc} I_{n} & 0_{n\times m} \\ S_1 & S_2 \\ \end{array}\right] \left[\begin{array}{cc} \tilde{A}_{11}-\tilde{A}_{12}M & \tilde{A}_{12}S_2^{-1}\\ \tilde{A}_{21}-\tilde{A}_{22}M & \tilde{A}_{22}S_2^{-1} \end{array}\right]}_{\bar{T}\tilde{A}\bar{T}^{-1}} \left[\begin{array}{c} \tilde z_1(t)\\ s(t) \end{array}\right]\\ - \left[\begin{array}{cc} I_{n} & 0_{n\times m} \\ S_1 & S_2 \\ \end{array}\right] \left[\begin{array}{c} \bar{G}_1\\ G_2 \end{array}\right] e_y(t) + \left[\begin{array}{cc} I_{n} & 0_{n\times m} \\ S_1 & S_2 \\ \end{array}\right] \left[\begin{array}{c} B_rr(t)\\ B_2(\hat{u}(t)+\nu_o) \end{array}\right]\\ \end{array} }

すなわち、第1ブロック行は

\displaystyle{(13)\quad \begin{array}{l} \dot{\tilde{z}}_1(t)= \underbrace{(\tilde{A}_{11}-\tilde{A}_{12}M)}_{\bar{A}_{11}}\tilde{z}_1(t) +\underbrace{\tilde{A}_{12}S_2^{-1}}_{\bar{A}_{12}}\bar{z}_2(t)-\bar{G}_1e_y(t)+B_rr(t)\\ =\bar{A}_{11}\tilde{z}_1(t) +\bar{A}_{12}(\bar{z}_2(t)-S_rr(t))+(B_r+\bar{A}_{12}S_r)r(t)-\bar{G}_1e_y(t) \end{array} }

第2ブロック行は(5)を用いて、\Lambda=S\bar{B}とおいて

\displaystyle{(14)\quad \begin{array}{l} \dot{s}(t)= \underbrace{((S_1\bar{A}_{11}+S_2(\tilde{A}_{21}-\tilde{A}_{22}M))\tilde{z}_1(t)+(S_1\bar{A}_{12}+S_2\tilde{A}_{22}S_2^{-1})s(t)}_{S\tilde{A}\bar{T}^{-1}\left[\begin{array}{c} \tilde z_1(t)\\ s(t) \end{array}\right]=S\tilde{A}\left[\begin{array}{c} \tilde z_1(t)\\ \tilde z_2(t) \end{array}\right]}\\ -\underbrace{(S_1\bar{G}_1+S_2G_2)}_{\bar G_2}e_y(t)+S_1B_rr(t)\\ +\underbrace{S_2B_2}_{\Lambda}(L\left[\begin{array}{c} \tilde z_1(t)\\ \tilde z_2(t) \end{array}\right]+L_rr(t)+S_r\dot{r}(t)+\hat{\nu}_c+\nu_o)\\ =S\tilde{A}\left[\begin{array}{c} \tilde z_1(t)\\ \tilde z_2(t) \end{array}\right]-\bar{G}_2e_y(t)+S_1B_rr(t)\\ +\Lambda(-\Lambda^{-1}(S\tilde{A}-\Phi S)\left[\begin{array}{c} \tilde z_1(t)\\ \tilde z_2(t) \end{array}\right]-\Lambda^{-1}(\Phi S_r+S_2MB_r)r(t)+\Lambda^{-1}S_r\dot{r}(t))\\ +\Lambda(\hat{\nu}_c+\nu_o)\\ =S\tilde{A}\left[\begin{array}{c} \tilde z_1(t)\\ \tilde z_2(t) \end{array}\right]-\bar{G}_2e_y(t)+S_1B_rr(t)\\ -(S\tilde{A}-\Phi S)\left[\begin{array}{c} \tilde z_1(t)\\ \tilde z_2(t) \end{array}\right]-(\Phi S_r+S_2MB_r)r(t)+S_r\dot{r}(t)+\Lambda(\hat{\nu}_c+\nu_o)\\ =\Phi (\underbrace{S\left[\begin{array}{c} \tilde z_1(t)\\ \tilde z_2(t) \end{array}\right]}_{s(t)}-S_rr(t))+S_r\dot{r}(t)-\bar{G}_2e_y(t)+\Lambda(\hat{\nu}_c+\nu_o) \end{array} }

(13)と(14)の結果は、次のようにまとめられます。

\displaystyle{ \begin{array}{ll} (15.1) &\dot{\tilde{z}}_1(t) =\bar{A}_{11}\tilde{z}_1(t) +\bar{A}_{12}(\bar{z}_2(t)-S_rr(t))+(B_r+\bar{A}_{12}S_r)r(t)-\bar{G}_1e_y(t)\\ (15.2) &\dot{s}(t)=\Phi (s(t)-S_rr(t))+S_r\dot{r}(t)-\bar{G}_2e_y(t)+\Lambda(\hat{\nu}_c+\nu_o) \end{array} }

ここで

\displaystyle{(16)\quad \begin{array}{l} \underbrace{\left[\begin{array}{c} \zeta_1(t)\\ \zeta_2(t) \end{array}\right]}_{\zeta(t)}= \left[\begin{array}{c} \tilde z_1(t)\\ s(t) \end{array}\right]+ \left[\begin{array}{c} \bar{A}_{11}^{-1}(\bar{A}_{12}S_r+B_r)r_c\\ -S_rr(t) \end{array}\right] \end{array} }

を定義すると

\displaystyle{\quad \begin{array}{ll} (17.1) &\dot{\zeta}_1(t) =\bar{A}_{11}\underbrace{(\tilde{z}_1(t)+\bar{A}_{11}^{-1}(\bar{A}_{12}S_r+B_r)r_c)}_{\zeta_1(t)} +\bar{A}_{12}\zeta_2(t)\\ &+(B_r+\bar{A}_{12}S_r)\underbrace{(r(t)-r_c)}_{e_r(t)}-\bar{G}_1e_y(t)\\ (17.2) &\underbrace{\dot{s}(t)-S_r\dot{r}(t)}_{\dot{\zeta}_2(t)}=\Phi \underbrace{(s(t)-S_rr(t))}_{\zeta_2(t)}-\bar{G}_2e_y(t)+\Lambda(\hat{\nu}_c+\nu_o) \end{array} }

すなわち

\displaystyle{(18)\quad \begin{array}{l} \underbrace{\left[\begin{array}{c} \dot \zeta_1(t)\\ \dot \zeta_2(t) \end{array}\right]}_{\dot{\zeta}(t)}= \underbrace{\left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12}\\ 0 & \Phi  \end{array}\right]}_{A_c} \underbrace{\left[\begin{array}{c} \zeta_1(t)\\ \zeta_2(t) \end{array}\right]}_{\zeta(t)}\\ - \underbrace{\left[\begin{array}{c} \bar{G}_1\\ \bar{G}_2 \end{array}\right]}_{\bar{G}} \underbrace{e_y(t)}_{Ce(t)} + \underbrace{\left[\begin{array}{c} B_r+\bar{A}_{12}S_r\\ 0 \end{array}\right]}_{\bar{G}_r}e_r(t) + \underbrace{\left[\begin{array}{c} 0\\ \Lambda \end{array}\right]}_{\bar\Lambda}(\hat{\nu}_c+\nu_o) \end{array} }

を得ます。これを誤差方程式(6)すなわち

\displaystyle{(6')\quad \dot{e}(t)=\underbrace{(A-GC)}_{A_o}e(t)+B(\nu_o-\xi(t,x,\hat{u})) }

と合わせて、閉ループ系は次式で表されます。

\displaystyle{(19)\quad \begin{array}{l} \left[\begin{array}{c} \dot{e}(t)\\ \dot \zeta(t) \end{array}\right]= \underbrace{\left[\begin{array}{cc} A_o & 0\\ -\bar{G}C & A_c \end{array}\right]}_{A_G} \left[\begin{array}{c} e(t)\\ \zeta(t) \end{array}\right]\\ + \left[\begin{array}{c} 0\\ \bar{G}_r \end{array}\right]e_r(t) + \left[\begin{array}{c} B\\ \bar\Lambda \end{array}\right]\nu_o + \left[\begin{array}{c} 0\\ \bar\Lambda \end{array}\right]\hat{\nu}_c - \left[\begin{array}{c} B\\ 0 \end{array}\right]\xi(t,x,\hat{u}) \end{array} }

ここまでの手順を、関数ob_smiとしてプログラムすることにします。

●以上に基づく設計手順を、数値例で示します。

MATLAB
%ex8_ob_smi.m
%-----
 clear all, close all
 A=[0 1 0;
    0 0 1;
   -0.0001 -0.0082 -0.1029];
 B=[0;0;1];
 C=[0.0001  0.0022  0.0053];
 Gamma=0;
%-----
 po=-0.2; 
 [G,Gn,F]=smobs3(A,B,C,po)
 rhoo=10;
%----- 
 p1=[-0.025 -0.03+j*0.025 -0.03-j*0.025];
 p2=-0.1;
 [L,Lr,Ldr,Ln,SS,Sr,P2]=ob_smi(A,B,C,p1,p2)
 rhoc=20;
%-----
%eof


図1 SMオブザーバベースSMI追従制御系のシミュレーション例

Note C92 閉ループ系の安定性

●閉ループ系は(19)と(3.2)を合わせて

\displaystyle{ \begin{array}{ll} (1.1) & \dot{e}(t)=A_oe(t)+B(\nu_o-\xi(t,x,u))\\ (1.2) & \dot{\zeta}(t)=A_c\zeta(t)-\bar{G}Ce(t)+\bar{G}_re_r(t)+\bar{\Lambda}(\nu_o+\hat{\nu}_c)\\ (1.3) & \dot{e}_r(t)=\Gamma e_r(t) \end{array} }

で表されます。これに対して次のリャプノフ関数を考えます。

\displaystyle{(2)\quad \boxed{\begin{array}{l} V(e,\zeta,e_r) =e^T(t)Pe(t)+\zeta^T(t)\bar{P}\zeta(t)+e_r^T(t)P_re_r(t) \end{array}} }

ここで、正定行列P\bar{P}P_rは、それぞれ安定行列A_oA_c\Gammaのリャプノフ行列とし、次のリャプノフ方程式の解とします。

\displaystyle{ \begin{array}{ll} (3.1) & PA_o+A_o^TP=-Q\\ (3.2) & \bar{P}A_c+A_c^T\bar{P}=-\bar{P}\bar{G}CQ^{-1}C^T\bar{G}^T\bar{P}-\underline{\bar{P}\bar{Q}\bar{P}}\\ (3.3) & P_r\Gamma+\Gamma^TP_r=-Q_r-\underline{\bar{G}_r^T\bar{Q}^{-1}\bar{G}_r} \end{array} }

\bar{P}は、リャプノフ方程式

\displaystyle{(4)\quad \underbrace{\left[\begin{array}{cc} \bar{P}_1 & 0\\ 0 & \bar{P}_2 \end{array}\right]}_{\bar P} \underbrace{\left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12}\\ 0 & \Phi  \end{array}\right]}_{A_c} +\underbrace{\left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12}\\ 0 & \Phi  \end{array}\right]^T}_{A_c^T} \underbrace{\left[\begin{array}{cc} \bar{P}_1 & 0\\ 0 & \bar{P}_2 \end{array}\right]}_{\bar P}<0 }

を満足するブロック対角行列とします。ここで、正定行列\bar{P}_1\bar{P}_2は、それぞれ安定行列\bar{A}_{11}\Phiに対する次のリャプノフ不等式の解です。

\displaystyle{(5)\quad \bar{P}_1\bar{A}_{11}+\bar{A}_{11}^T\bar{P}_1<0 \Leftrightarrow  \bar{A}_{11}\bar{P}_1^{-1}+\bar{P}_1^{-1}\bar{A}_{11}^T<0 }
\displaystyle{(6)\quad \bar{P}_2\Phi+\Phi^T\bar{P}_2<0 \Leftrightarrow \Phi\bar{P}_2^{-1}+\bar{P}_2^{-1}\Phi^T<0 }

このとき、P\bar Pは、次のリャプノフ不等式の解を構成するとします。

\displaystyle{(7)\quad \underbrace{\left[\begin{array}{cc} P & 0\\ 0 & \bar{P} \end{array}\right]}_{P_G} \underbrace{\left[\begin{array}{cc} A_o & 0\\ -\bar{G}C & A_c \end{array}\right]}_{A_G} +\underbrace{\left[\begin{array}{cc} A_o & 0\\ -\bar{G}C & A_c \end{array}\right]^T}_{A_G^T} \underbrace{\left[\begin{array}{cc} P & 0\\ 0 & \bar{P} \end{array}\right]}_{P_G}<0 }

これは次式と等価です。

\displaystyle{(8)\quad \begin{array}{l} \underbrace{\left[\begin{array}{cc} PA_o & 0\\ -\bar{P}\bar{G}C & \bar{P}A_c \end{array}\right]}_{P_GA_G}+ \underbrace{\left[\begin{array}{cc} PA_o & 0\\ -\bar{P}\bar{G}C & \bar{P}A_c \end{array}\right]^T}_{(P_GA_G)^T} =\left[\begin{array}{cc} -Q & -C^T\bar{G}^T\bar{P}\\ -\bar{P}\bar{G}C & \bar{P}A_c+A_c^T\bar{P} \end{array}\right]<0\\ \Leftrightarrow \bar{P}A_c+A_c^T\bar{P}+\bar{P}\bar{G}CQ^{-1}C^T\bar{G}^T\bar{P}<0\\ \Leftrightarrow A_c\bar{P}^{-1}+\bar{P}^{-1}A_c^T+\bar{G}CQ^{-1}C^T\bar{G}^T<0\\ \Leftrightarrow A_c\bar{P}^{-1}+\bar{P}^{-1}A_c^T+\bar{G}CQ^{-1}C^T\bar{G}^T=-\bar{Q}\quad(\bar{Q}>0) \end{array} }

ここで、新しいパラメータ\bar{Q}を導入し、次の公式を用いています。

\displaystyle{ \begin{array}{lll} && \left[\begin{array}{cc} P & M \\ M^T & Q \end{array}\right]<0\\ &\Leftrightarrow& P-MQ^{-1}M^T<0,\ Q<0\\ &\Leftrightarrow& P<0,\ Q-M^TP^{-1}M<0 \end{array} }

いま適当な\hat{Q}_1\hat{Q}_2を与えて、

\displaystyle{(9)\quad \bar{A}_{11}\bar{P}_1^{-1}+\bar{P}_1^{-1}\bar{A}_{11}^T=-\hat{Q}_1 \quad(\hat{Q}_1>0)}
\displaystyle{(10)\quad \Phi\bar{P}_2^{-1}+\bar{P}_2^{-1}\Phi^T=-\hat{Q}_2\quad(\hat{Q}_2>0) }

を解いて、\bar{P}_1\bar{P}_2を定めるものとします。このとき(7)は

\displaystyle{(11)\quad \begin{array}{l} \underbrace{\left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12}\\ 0 & \Phi  \end{array}\right]}_{A_c} \underbrace{\left[\begin{array}{cc} \bar{P}_1^{-1} & 0\\ 0 & \bar{P}_2^{-1} \end{array}\right]}_{\bar{P}^{-1}} + \underbrace{\left[\begin{array}{cc} \bar{P}_1^{-1} & 0\\ 0 & \bar{P}_2^{-1} \end{array}\right]}_{\bar{P}^{-1}} \underbrace{\left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12}\\ 0 & \Phi  \end{array}\right]^T}_{A_c^T}\\ +\underbrace{\left[\begin{array}{c} \bar{G}_1\\ \bar{G}_2 \end{array}\right]}_{\bar{G}} \underbrace{CQ^{-1}C^T}_{Q_{22}} \underbrace{\left[\begin{array}{c} \bar{G}_1\\ \bar{G}_2 \end{array}\right]^T}_{\bar{G}^T}\\ = \underbrace{\left[\begin{array}{cc} \bar{A}_{11}\bar{P}_1^{-1} & \bar{A}_{12}\bar{P}_2^{-1}\\ 0 & \Phi \bar{P}_2^{-1} \end{array}\right]}_{A_c\bar{P}^{-1}} + \underbrace{\left[\begin{array}{cc} \bar{A}_{11}\bar{P}_1^{-1} & \bar{A}_{12}\bar{P}_2^{-1}\\ 0 & \Phi \bar{P}_2^{-1} \end{array}\right]^T}_{(A_c\bar{P}^{-1})^T}\\ +\underbrace{\left[\begin{array}{cc} \bar{G}_1Q_{22}\bar{G}_1^T &\bar{G}_1Q_{22}\bar{G}_2^T\\ \bar{G}_2Q_{22}\bar{G}_1^T &\bar{G}_2Q_{22}\bar{G}_2^T  \end{array}\right]}_{\bar{G}CQ^{-1}C^T\bar{G}^T}\\ = \left[\begin{array}{cc} \bar{A}_{11}\bar{P}_1^{-1}+\bar{P}_1^{-1}\bar{A}_{11}^T+\bar{G}_1Q_{22}\bar{G}_1^T & \bar{A}_{12}\bar{P}_2^{-1}+\bar{G}_1Q_{22}\bar{G}_2^T\\ \bar{P}_2^{-1}\bar{A}_{12}^T+\bar{G}_2Q_{22}\bar{G}_1^T & \Phi\bar{P}_2^{-1}+\bar{P}_2^{-1}\Phi^T+\bar{G}_2Q_{22}\bar{G}_2^T \end{array}\right]\\ = \left[\begin{array}{cc} -\hat{Q}_1+\bar{G}_1Q_{22}\bar{G}_1^T & \bar{A}_{12}\bar{P}_2^{-1}+\bar{G}_1Q_{22}\bar{G}_2^T\\ \bar{P}_2^{-1}\bar{A}_{12}^T+\bar{G}_2Q_{22}\bar{G}_1^T & -\hat{Q}_2+\bar{G}_2Q_{22}\bar{G}_2^T \end{array}\right]<0\\ \Leftrightarrow \left\{\begin{array}{l} \bar{G}_1Q_{22}\bar{G}_1^T +(\bar{A}_{12}\bar{P}_2^{-1}+\bar{G}_1Q_{22}\bar{G}_2^T)\\ \times(\bar{G}_2Q_{22}\bar{G}_2^T -\hat{Q}_2)^{-1}(\bar{P}_2^{-1}\bar{A}_{12}^T+\bar{G}_2Q_{22}\bar{G}_1^T) <\hat{Q}_1\\ \bar{G}_2Q_{22}\bar{G}_2^T <\hat{Q}_2 \end{array}\right. \end{array} }

となります。したがって、この制約を(8)の\hat{Q}_1、(9)の\hat{Q}_2に付けておきます。

●以上の準備の下で次式が示され、閉ループ系のリャプノフ安定性が成り立ちます。

\displaystyle{(12)\quad \begin{array}{l} \dot{V}(e,\zeta,e_r)=2e^T(t)P\dot{e}(t) +2\zeta^T(t)\bar{P}\dot{\zeta}(t) +2e_r^T(t)P_r\dot{e}_r(t)\\\\ =2e^T(t)P(A_oe(t)+B(\nu_o-\xi(t,x,u))\\ +2\zeta^T(t)\bar{P}(A_c\zeta(t)-\bar{G}Ce(t)+\bar{G}_re_r(t)+\bar{\Lambda}(\nu_o+\hat{\nu}_c))\\ +2e_r^T(t)P_r\Gamma e_r(t)\\\\ =e^T(t)\underbrace{(PA_o+A_o^TP)}_{-Q}e(t)+2e^T(t)PB(\nu_o-\xi(t,x,u))\\ +\zeta^T(t)\underbrace{(\bar{P}A_c+A_c^T\bar{P})}_{-\bar{P}\bar{G}CQ^{-1}C^T\bar{G}^T\bar{P}-\bar{P}\bar{Q}\bar{P}}\zeta(t)\\ -2\zeta^T(t)\bar{P}\bar{G}Ce(t)+2\zeta^T(t)\bar{P}\bar{G}_re_r(t)+2\zeta^T(t)\bar{P}\bar{\Lambda}(\nu_o+\hat{\nu}_c)\\ +e_r^T(t)\underbrace{(P_r\Gamma+\Gamma^TP_r)}_{-Q_r-\bar{G}_r^T\bar{Q}^{-1}\bar{G}_r}e_r(t)\\\\ =-e^T(t)Qe(t)+2e^T(t)PB(\nu_o-\xi(t,x,u))\\ -\zeta^T(t)\bar{P}\bar{G}CQ^{-1}C^T\bar{G}^T\bar{P}\zeta(t)-\underline{\zeta^T(t)\bar{P}\bar{Q}\bar{P}\zeta(t)}\\ -2\zeta^T(t)\bar{P}\bar{G}Ce(t)+2\zeta^T(t)\bar{P}\bar{G}_re_r(t)+2\zeta^T(t)\bar{P}\bar{\Lambda}(\nu_o+\hat{\nu}_c)\\ -e_r^T(t)Q_re_r(t)-\underline{e_r^T(t)\bar{G}_r^T\bar{Q}^{-1}\bar{G}_re_r(t)}\\\\ =\underbrace{2e^T(t)PB(\nu_o-\xi(t,x,u))}_{\le -2\gamma_o||FCe(t)||}+\underbrace{2\zeta^T(t)\bar{P}\bar{\Lambda}(\nu_o+\hat{\nu}_c)}_{\le -2\gamma_c||\bar{P}_2\zeta_2(t)||}\\ -\underbrace{(e^T(t)Qe(t)+2\zeta^T(t)\bar{P}\bar{G}Ce(t)+\zeta^T(t)\bar{P}\bar{G}CQ^{-1}C^T\bar{G}^T\bar{P}\zeta(t))}_{(e(t)+Q^{-1}C^T\bar{G}^T\bar{P}\zeta(t))^TQ(e(t)+Q^{-1}C^T\bar{G}^T\bar{P}\zeta(t))}\\ -\underbrace{\underline{\zeta^T(t)\bar{P}\bar{Q}\bar{P}\zeta(t)}-2\zeta^T(t)\bar{P}\bar{G}_re_r(t)+\underline{e_r^T(t)\bar{G}_r^T\bar{Q}^{-1}\bar{G}_re_r(t)}}_{(\zeta(t)-\bar{P}^{-1}\bar{Q}^{-1}\bar{G}_re_r(t))^T \bar{P}\bar{Q}\bar{P} (\zeta(t)-\bar{P}^{-1}\bar{Q}^{-1}\bar{G}_re_r(t))}\\ -e_r^T(t)Q_re_r(t)\\\\ \le -2\gamma_o||FCe(t)||-2\gamma_c||\bar{P}_2\zeta_2(t)||\\ -(e(t)+Q^{-1}C^T\bar{G}^T\bar{P}\zeta(t))^TQ(e(t)+Q^{-1}C^T\bar{G}^T\bar{P}\zeta(t))\\ -(\zeta(t)-\bar{P}^{-1}\bar{Q}^{-1}\bar{G}_re_r(t))^T \bar{P}\bar{Q}\bar{P} (\zeta(t)-\bar{P}^{-1}\bar{Q}^{-1}\bar{G}_re_r(t))\\ -e_r^T(t)Q_re_r(t)<0 \end{array} }

ここで、次の平方完成を行っています。

\displaystyle{ \begin{array}{ll} (13.1) &(e(t)+Q^{-1}C^T\bar{G}^T\bar{P}\zeta(t))^TQ(e(t)+Q^{-1}C^T\bar{G}^T\bar{P}\zeta(t))\\ &=e^T(t)Qe(t)+2\zeta^T(t)\bar{P}\bar{G}Ce(t)+\zeta^T(t)\bar{P}\bar{G}CQ^{-1}C^T\bar{G}^T\bar{P}\zeta(t)\\ (13.2) &(\zeta(t)-\bar{P}^{-1}\bar{Q}^{-1}\bar{G}_re_r(t))^T \bar{P}\bar{Q}\bar{P} (\zeta(t)-\bar{P}^{-1}\bar{Q}^{-1}\bar{G}_re_r(t))\\ &=\underline{\zeta^T(t)\bar{P}\bar{Q}\bar{P}\zeta(t)}-2\zeta^T(t)\bar{P}\bar{G}_re_r(t)+\underline{e_r^T(t)\bar{G}_r^T\bar{Q}^{-1}\bar{G}_re_r(t)} \end{array} }

また、次が成り立つことを用いています。

\displaystyle{ \begin{array}{ll} (14.1) &e^T(t)PB(\nu_o-\xi(t,x,u))\le -\gamma_o||FCe(t)||\\ (14.2) &\zeta^T(t)\bar{P}\bar{\Lambda}(\nu_o+\hat{\nu}_c)\le -\gamma_c||\bar{P}_2\zeta_2(t)|| \end{array} }

まず、(14.1)は

\displaystyle{(15)\quad \rho_o(\hat{u}_L,y)=\frac{k_1||\hat{u}_L||+\alpha(t,y)+k_1\gamma_c||\Lambda^{-1}||+\gamma_o}_{1-k_1\kappa(\Lambda)} }

を変形して得られる

\displaystyle{(16)\quad \begin{array}{l} \rho_o(\hat{u}_L,y)= k_1||\hat{u}_L||+\alpha(t,y)+k_1\gamma_c||\Lambda^{-1}||+\gamma_o+k_1\underbrace{||\Lambda||||\Lambda^{-1}||}_{\kappa(\Lambda)}\rho_o(\hat{u}_L,y)\\ =k_1(||\hat{u}_L||+||\Lambda^{-1}||\underbrace{(\rho_o(\hat{u}_L,y)||\Lambda|| +\gamma_c)}_{\rho_c(\hat{u}_L,y)})+\alpha(t,y)+\gamma_o\\ >k_1(||\hat{u}_L||+||\hat{\nu}_c||)+\alpha(t,y)+\gamma_o\\ \ge k_1(||\hat{u}_L+\hat{\nu}_c||)+\alpha(t,y)+\gamma_o\\ = k_1||\hat{u}||+\alpha(t,y)+\gamma_o \end{array} }

を用いて

\displaystyle{(17)\quad \begin{array}{l} 2e^T(t)PB(\nu_o-\xi(t,x,u))\\ =2e^T(t)C^TF^T(-\rho_o(\hat{u}_L,y)\frac{FCe(t)}{||FCe(t)||}-\xi(t,x,u))\\ =-2||FCe(t)||\rho_o(\hat{u}_L,y)-2e^T(t)C^TF^T\xi(t,x,u)\\ \le -2||FCe(t)||\rho_o(\hat{u}_L,y)+2||FCe(t)||||\xi(t,x,u)||\\ \le 2||FCe(t)||(k_1||\hat{u}||+\alpha(t,y)-\rho_o(\hat{u}_L,y))\\ \le -2\gamma_o||FCe(t)|| \end{array} }

次に、(14.2)は

\displaystyle{(18)\quad \begin{array}{l} 2\zeta^T(t)\bar{P}\bar{\Lambda}(\nu_o+\hat{\nu}_c)\\ =2\underbrace{\left[\begin{array}{c} \zeta_1(t)\\ \zeta_2(t) \end{array}\right]^T}_{\zeta^T(t)} \underbrace{\left[\begin{array}{cc} \bar{P}_1 & 0\\ 0 & \bar{P}_2 \end{array}\right]}_{\bar P} \underbrace{\left[\begin{array}{c} 0\\ \Lambda \end{array}\right]}_{\bar\Lambda}(\nu_o+\hat{\nu}_c)\\ =-2\zeta_2^T(t)\bar{P}_2\Lambda\rho_o(\hat{u}_L,y)\frac{FCe(t)}{||FCe(t)||}-2\zeta_2^T(t)\bar{P}_2\Lambda\rho_c(\hat{u}_L,y)\Lambda^{-1} \frac{\bar{P}_2\zeta_2(t)}{||\bar{P}_2\zeta_2(t)||}\\ \le 2||\bar{P}_2\zeta_2(t)||||\Lambda||\rho_o(\hat{u}_L,y)-2\rho_c(\hat{u}_L,y)||\bar{P}_2\zeta_2(t)||\\ =2||\bar{P}_2\zeta_2(t)||(\rho_o(\hat{u}_L,y)||\Lambda||-\rho_c(\hat{u}_L,y))\\ =2||\bar{P}_2\zeta_2(t)||(\rho_c(\hat{u}_L,y)-\gamma_c-\rho_c(\hat{u}_L,y))\\ =-2\gamma_c||\bar{P}_2\zeta_2(t)|| \end{array} }

Note C92-2 スライディングモードの検討

このSM制御系では、超平面

\displaystyle{(1)\quad {\cal S}_c=\left\{\left[\begin{array}{c} e\\ \zeta_1\\ \zeta_2 \end{array}\right]\in{\bf R}^{2n+p}: \left\{\begin{array}{l} e_y(t)=Ce(t)=Cz(t)-y(t)=0\\ \zeta_2(t)=s(t)-S_rr(t)=0 \end{array}\right. \right\} }

においてスライディングモードが生じることを示します。そのために

\displaystyle{ \begin{array}{ll} (2.1) & \dot{e}(t)=A_oe(t)+B(\nu_o-\xi(t,x,\hat{u}))\\ (2.2) & \dot{\zeta}_2(t)=\Phi\zeta_2(t)-\bar{G}_2\underbrace{e_y(t)}_{Ce(t)} +\Lambda(\hat{\nu}_c+\nu_o) \end{array} }

に対して次のリャプノフ関数を考えます。

\displaystyle{(3)\quad \boxed{V_c(e,\zeta_2)=e_y^T(t)P_2e_y(t)+\zeta_2(t)^T\bar{P}_2\zeta_2(t)} }

この時間微分は次のように計算できます。

\displaystyle{(4)\quad \dot{V}_c=2e_y^T(t)P_2\dot{e}_y(t)+2\zeta_2(t)^T\bar{P}_2\dot{\zeta}_2(t) }

(4)の第1項は、P_2=F^T(CB)^{-1}より

\displaystyle{(5)\quad \begin{array}{l} P_2\dot{e}_y(t)=F^T(CB)^{-1}C\dot{e}(t)\\ =F^T(CB)^{-1}CA_oe(t)+F^T(CB)^{-1}CB(\nu_o-\xi(t,x,\hat{u}))\\ =F^T(CB)^{-1}CA_oe(t)+F^T(\nu_o-\xi(t,x,\hat{u})) \end{array} }

また、(14.1)はPB=C^TF^Tを適用して

\displaystyle{(6)\quad \underbrace{e^T(t)C^T}_{e_y^T(t)}F^T(\nu_o-\xi(t,x,u))\le -\gamma_o||Fe_y(t)|| }

したがって

\displaystyle{(7)\quad \begin{array}{l} e_y^T(t)P_2\dot{e}_y(t)\\ =e_y^T(t)F^T(CB)^{-1}CA_oe(t)+e_y^T(t)F^T(\nu_o-\xi(t,x,\hat{u}))\\ \le ||Fe_y(t)||||(CB)^{-1}CA_oe(t)||-\gamma_o||Fe_y(t)||\\ =-||Fe_y(t)||(\gamma_o-||(CB)^{-1}CA_oe(t)||) \end{array} }

(4)の第2項は、

\displaystyle{(8)\quad \begin{array}{l} 2\zeta_2(t)^T\bar{P}_2\dot{\zeta}_2(t) =2\zeta_2(t)^T\bar{P}_2(\Phi\zeta_2(t)-\bar{G}_2e_y(t) +\Lambda(\hat{\nu}_c+\nu_o))\\ =-\zeta_2(t)^T(\bar{P}_2\Phi+\Phi^T\bar{P}_2)\zeta_2(t)-2\zeta_2(t)^T\bar{P}_2\bar{G}_2e_y(t)+2\zeta_2(t)^T\bar{P}_2\Lambda(\hat{\nu}_c+\nu_o)\\ \le  2||\bar{P}_2\zeta_2(t)||||\bar{G}_2e_y(t)||-2\gamma_c||\bar{P}_2\zeta_2(t)||\\ =-2||\bar{P}_2\zeta_2(t)||(\gamma_c-||\bar{G}_2e_y(t)||) \end{array} }

したがって

\displaystyle{(9)\quad \Omega_\eta=\left\{\left[\begin{array}{c} e\\ \zeta_1\\ \zeta_2 \end{array}\right]\in{\bf R}^{2n+p}:  \left\{\begin{array}{l} ||(CB)^{-1}CA_oe(t)||<\gamma_o-\eta\\ ||\bar{G}_2e_y(t)||<\gamma_c-\eta \end{array}\right. \right\} }

においては

\displaystyle{(10)\quad \begin{array}{l} \dot{V}_c=2e_y^T(t)P_2\dot{e}_y(t) +2\zeta_2(t)^T\bar{P}_2\dot{\zeta}_2(t)\\ \le -2||Fe_y(t)||(\gamma_o-||(CB)^{-1}CA_oe(t)||) -2||\bar{P}_2\zeta_2(t)||(\gamma_c-||\bar{G}_2e_y(t)||)\\ \le -2\eta(||Fe_y(t)||+||\bar{P}_2\zeta_2(t)||)\\ \le -2\eta \kappa \sqrt{V_c}\\ (\kappa=\min\{\underline{\sigma}(F),\underline{\sigma}(\bar{P}_2)\} \times\sqrt{\max\{\bar{\sigma}(P_2),\bar{\sigma}(\bar{P}_2)\}}) \end{array} }

が成り立ち、これより有限時間でV_c=0となり、超平面{\cal S}_cに突入することが分かります(\kappaの表現式はEdwards and Spurgeonによるものです)。

準備

SMオブザーバ

[1] 制御対象の状態空間表現として次式を考えます。

\displaystyle{ \begin{array}{ll} (1.1) & \dot{x}(t)=Ax(t)+Bu(t)+f(t,x,u)\\ (1.2) & y(t)=Cx(t)\\ & (x(t)\in{\rm\bf R}^n, u(t)\in{\rm\bf R}^m, y(t)\in{\rm\bf R}^p, 1\le m\le p < n) \end{array} }

ただし、f(t,x,u)\in{\rm\bf R}^nはモデル誤差、非線形要素、外乱などの影響を表し、次のマッチング条件を満たすとします。

\displaystyle{ \begin{array}{ll} (2.1) & f(t,x,u)=B\xi(t,x,u)\\ (2.2) & ||\xi(t,x,u)||<k_1||u||+\alpha(t,y)\quad(k_1<1)\\ & (f(t,x,y)\in{\rm\bf R}^n, \xi(t,x,u)\in{\rm\bf R}^m) \end{array} }

さらに次の3つを仮定します。 

仮定1^\circ (A,B) は可制御対
仮定2^\circ {\rm ranl}\,CB=m(相対次数1)
仮定3^\circ (A,B,C) の不変零点は安定(最小位相系)

一般性を失うことなく、(1)は次のSM標準形であるとします。

\displaystyle{ \begin{array}{ll} (3.1) & \underbrace{ \left[\begin{array}{c} \dot x_1(t)\\ \dot x_2(t) \end{array}\right] }_{\dot{x}(t)} = \underbrace{ \left[\begin{array}{cc} A_{11} & A_{12} \\ A_{21} & A_{22} \\ \end{array}\right] }_{A} \underbrace{ \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right] }_{x(t)} + \underbrace{ \left[\begin{array}{c} 0\\ B_2 \end{array}\right] }_{B} u(t)\\ (3.2) & y(t) = \underbrace{ \left[\begin{array}{cc} C_1 & C_2 \end{array}\right] }_{C} \underbrace{ \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right] }_{x(t)} \end{array} }

●これに対して、次のSMオブザーバを考えます。

\displaystyle{(4)\quad \begin{array}{l} \dot{z}(t)=Az(t)+Bu(t)-G \overbrace{C\underbrace{(z(t)-x(t))}_{e(t)}}^{e_y(t)=Cz(t)-y(t)}+B\nu_o\quad(z(t)\in{\rm\bf R}^n)\\ =\underbrace{(A-GC)}_{A_o}z(t)+Gy(t)+Bu(t)+B\nu_o \end{array} }

ここで、GA_0=A-GCが安定行列となるように選ばれているとします。また、

\displaystyle{(5)\quad PA_0+A_o^TP=-Q\quad(Q>0) }

を満足するP>0と、あるF\in{\bf R}^{m\times p}に対して

\displaystyle{(6)\quad PB=C^TF^T }

が満足されているものとします。このとき、\nu_o

\displaystyle{(7)\quad \nu_o=-\rho_o(u_\ell,y)\frac{Fe_y(t)}{||Fe_y(t)||} }

のように与えます。上の仮定2^\circ3^\circの下で、SMオブザーバの誤差は次の超平面上でスライディングモードを達成します。

\displaystyle{(8)\quad {\cal S}_o=\{e\in{\bf R}^n: Fe_y=FCe=0\} }

●以下では、{\boxed{p=m}}を仮定します。座標変換

\displaystyle{(9)\quad T_c=\left[\begin{array}{cc} I_{n-p} & 0 \\ C_1 & C_2 \end{array}\right] \Leftrightarrow T_c^{-1}=\left[\begin{array}{cc} I_{n-p} & 0 \\ -C_2^{-1}C_1 & C_2^{-1} \end{array}\right] }

を行なうと

\displaystyle{(10)\quad \begin{array}{l} \underbrace{\left[\begin{array}{cc} {\cal A}_{11} & {\cal A}_{12}\\ {\cal A}_{21} & {\cal A}_{22} \end{array}\right]}_{{\cal A}}\\ =\underbrace{\left[\begin{array}{cc} {A}_{11}-{A}_{12}C_2^{-1}C_1 & A_{12}C_2^{-1} \\ C_1{\cal A}_{11}+C_2A_{21}-C_2A_{22}C_2^{-1}C_1 &  C_1A_{12}C_2^{-1}+C_2A_{22}C_2^{-1} \end{array}\right] }_{T_cAT_c^{-1}}\\ {\cal B}=\underbrace{\left[\begin{array}{c} 0 \\ C_2B_2 \end{array}\right] }_{T_cB}\\ {\cal C}=\underbrace{\left[\begin{array}{cc} 0  & I_p \end{array}\right] }_{CT_c^{-1}}\\ {\cal P}= \underbrace{\left[\begin{array}{cc} I_{n-p} & 0 \\ -C_2^{-1}C_1 & C_2^{-1} \end{array}\right]^T \left[\begin{array}{cc} P_1 & 0\\ 0 & P_2 \end{array}\right] \left[\begin{array}{cc} I_{n-p} & 0 \\ -C_2^{-1}C_1 & C_2^{-1} \end{array}\right] }_{T_c^TPT_c}\\ =\left[\begin{array}{cc} I_{n-p} & -C_1^TC_2^{-T} \\ 0 & C_2^{-T} \end{array}\right]^T \left[\begin{array}{cc} P_1 & 0 \\ -P_2C_2^{-1}C_1 & P_2C_2^{-1} \end{array}\right]\\ =\left[\begin{array}{cc} P_1+C_1^TC_2^{-T}P_2C_2^{-1}C_1 & -C_1^TC_2^{-T}P_2C_2^{-1}\\ -C_2^{-T}P_2C_2^{-1}C_1 & C_2^{-T}P_2C_2^{-1} \end{array}\right] \end{array} }

を得ます。したがって

\displaystyle{(11)\quad \begin{array}{l} G=\underbrace{\left[\begin{array}{cc} I_{n-p} & 0 \\ -C_2^{-1}C_1 & C_2^{-1} \end{array}\right] }_{T_c^{-1}} \underbrace{\left[\begin{array}{c} A_{12}C_2^{-1}\\ C_1A_{12}C_2^{-1}+C_2A_{22}C_2^{-1}-{\cal A}_{22}^s \end{array}\right] }_{\left[\begin{array}{c} {\cal A}_{12}\\ {\cal A}_{22}-{\cal A}_{22}^s \end{array}\right]}\\ =\left[\begin{array}{c} A_{12}C_2^{-1} \\ A_{22}C_2^{-1}-C_2^{-1}A_{22}^S \end{array}\right] \end{array} }

\displaystyle{(12)\quad \begin{array}{l} \underbrace{\left[\begin{array}{cc} P_1+C_1^TC_2^{-T}P_2C_2^{-1}C_1 & -C_1^TC_2^{-T}P_2C_2^{-1}\\ -C_2^{-T}P_2C_2^{-1}C_1 & C_2^{-T}P_2C_2^{-1} \end{array}\right] \left[\begin{array}{c} 0 \\ C_2B_2 \end{array}\right] }_{{\cal P}{\cal B}} = \underbrace{\left[\begin{array}{cc} 0  & I_p \end{array}\right]^T }_{{\cal C}^T} F^T\\ \Rightarrow F=(C_2^{-T}P_2C_2^{-1}C_2B_2)^T=B_2^TP_2C_2^{-1} \end{array} }

すなわち

\displaystyle{(13)\quad \boxed{\begin{array}{l} G= \left[\begin{array}{c} A_{12}C_2^{-1} \\ A_{22}C_2^{-1}-C_2^{-1}A_{22}^S \end{array}\right]\\ F=B_2^TP_2C_2^{-1} \end{array}} }

ここまでの手順を、関数smobs3としてプログラムすることにします。

追従SMI制御

[2] 制御対象

\displaystyle{(1)\quad \begin{array}{l} \dot{x}(t)=Ax(t)+Bu(t)\\ y(t)=Cx(t)\\ (x(t)\in{\rm\bf R}^n, u(t)\in{\rm\bf R}^m, y(t)\in{\rm\bf R}^p, m=p) \end{array} }

の出力を、コマンド(次式の解)

\displaystyle{(2)\quad \begin{array}{l} %\dot{r}(t)=\Gamma(r(t)-r_c)\\ \frac{d}{dt}(r(t)-r_c)=\Gamma(r(t)-r_c)\quad(r(t),r_c\in{\rm\bf R}^m) \end{array} }

に追従させることを考えます(\Gammaは安定行列)。そのために、積分動作

\displaystyle{(3)\quad \begin{array}{l} \dot{x}_r(t)=r(t)-y(t)\quad(x_r(t)\in{\rm\bf R}^m) \end{array} }

を導入し、次の拡大系を構成します。ここで、(1)はすでに標準形であるとしています。

\displaystyle{(4)\quad \begin{array}{l} \left[\begin{array}{c} \dot x_r(t)\\ \dot x(t) \end{array}\right] = \left[\begin{array}{c|cc} 0 & -C_1 & -C_2\\\hline 0 & A_{11} & A_{12} \\ 0 & A_{21} & A_{22} \end{array}\right] \left[\begin{array}{c} x_r(t)\\ x(t) \end{array}\right] + \left[\begin{array}{c} 0\\\hline 0\\ B_2 \end{array}\right] u(t) + \left[\begin{array}{c} I_m \\\hline 0 \\ 0 \end{array}\right] r(t)\\ (x_r(t)\in{\rm\bf R}^m, x(t)\in{\rm\bf R}^n) \end{array} }

これを、次のように分割し直しても標準形であることには変わりありません。

\displaystyle{(5a)\quad \begin{array}{l} \left[\begin{array}{c} \dot{x}_1(t)\\ \dot{x}_2(t) \end{array}\right] = \underbrace{ \left[\begin{array}{cc|c} 0 & -C_1 & -C_2\\ 0 & A_{11} & A_{12} \\\hline 0 & A_{21} & A_{22} \end{array}\right] }_{\tilde{A}=\left[\begin{array}{cc} \tilde{A}_{11} & \tilde{A}_{12} \\ \tilde{A}_{21} & \tilde{A}_{22} \\ \end{array}\right]} \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right] + \underbrace{ \left[\begin{array}{c} 0\\ 0\\\hline B_2 \end{array}\right] }_{\tilde{B}} u(t) + \left[\begin{array}{c} I_m \\ 0 \\\hline 0 \end{array}\right] r(t)\\ (x_1(t)\in{\rm\bf R}^n, x_2(t)\in{\rm\bf R}^m) \end{array} }

ただし

\displaystyle{(5b)\quad %\begin{array}{l} \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right] = \left[\begin{array}{c} x_r(t)\\ x(t) \end{array}\right] %\end{array} }

●この積分器による拡大系を安定化できれば、積分器の値x_r(t)は定値となり、被積分項r(t)-y(t)の値は零となり、y(t)r(t)へ漸近します。そこで、SM制御によって拡大系を安定化し、追従制御系を構成することを考えます。この制御系は特別なr(t)=0の場合を含みますので、まずスイッチング関数として、次式を考えます。

\displaystyle{(6)\quad s(t)= \underbrace{ \left[\begin{array}{cc} S_1 & S_2 \\ \end{array}\right] }_{S} %\underbrace{ \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right] %}_{x(t)} = \underbrace{S_2 \left[\begin{array}{cc} M & I_m \\ \end{array}\right] }_{S} %\underbrace{ \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right] %}_{x(t)} \ (M=S_2^{-1}S_1) }

(5)に対して、座標変換

\displaystyle{(7)\quad \begin{array}{l} \left[\begin{array}{c} x_1(t)\\ s(t) \end{array}\right] = \underbrace{ \left[\begin{array}{cc} I_n & 0 \\ S_1 & S_2 \\ \end{array}\right] }_{T_s} \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right]\\ \Leftrightarrow \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right] = \underbrace{ \left[\begin{array}{cc} I_n & 0 \\ -S_2^{-1}S_1 & S_2^{-1} \\ \end{array}\right] }_{T_s^{-1}} \left[\begin{array}{c} x_1(t)\\ s(t) \end{array}\right] \end{array} }

を行って、次式を得ます。

\displaystyle{(8a)\quad \begin{array}{l} %\underbrace{ \left[\begin{array}{c} \dot x_1(t)\\ \dot s(t) \end{array}\right] %}_{\dot{x}'(t)} = \underbrace{ \left[\begin{array}{cc} \bar{A}_{11} & \bar{A}_{12} \\ S_2\bar{A}_{21} & S_2\bar{A}_{22}S_2^{-1} \\ \end{array}\right] }_{T_sA_ET_s^{-1}} %\underbrace{ \left[\begin{array}{c} x_1(t)\\ s(t) \end{array}\right] %}_{x'(t)} + \underbrace{ \left[\begin{array}{cc} 0\\ S_2B_2 \end{array}\right] }_{T_sB_E} u(t)\\ + \left[\begin{array}{cc} B_r \\ S_1B_r \end{array}\right] r(t) \end{array} }

ただし

\displaystyle{(8b)\quad \left\{\begin{array}{l} \bar{A}_{11}=\underbrace{ \left[\begin{array}{cc} 0 & -C_1 \\ 0 & A_{11} \end{array}\right]}_{\tilde{A}_{11}} -\underbrace{\left[\begin{array}{c} -C_2\\ A_{12} \end{array}\right]}_{\tilde{A}_{12}}M\quad(M=S_2^{-1}S_1)\\ \bar{A}_{12}= \underbrace{\left[\begin{array}{c} -C_2\\ A_{12} \end{array}\right]}_{\tilde{A}_{12}}S_2^{-1}\\ \bar{A}_{21}=S_2(M\bar{A}_{11} + \left[\begin{array}{cc} 0 & A_{21} \end{array}\right] -A_{22}M)\\ \bar{A}_{22}=S_2(M \left[\begin{array}{c} -C_2\\ A_{12} \end{array}\right] +A_{22})S_2^{-1}\\ B_r=\left[\begin{array}{cc} I_m \\ 0 \end{array}\right] \end{array}\right. }

ここで、\bar{A}_{11}が安定行列となるように行列Mが選ばれているとします。

●特別なr(t)=0の場合のスライディングモードはs(t)=0で表されますが、一般のr(t)\ne0の場合のスライディングモードは

\displaystyle{(9)\quad s(t)-S_rr(t)=0 \quad\Rightarrow \dot{s}(t)-S_r\dot{r}(t)=0 }

で表されるとします。ここで、S_rの選び方についてはあとで述べます。

●以上の準備の下で、制御則は次式で表されます。

\displaystyle{(10)\quad  \begin{array}{l} u(t)=u_L(t)+\nu_c\\ u_L(t)=-\underbrace{(S\tilde{B})^{-1}(S\tilde{A}-\Phi S)}_{L=L_{eq}+L_\Phi}\left[\begin{array}{c} x_r(t)\\ x(t) \end{array}\right]\\ -\underbrace{(S\tilde{B})^{-1}(\Phi S_r+S_1B_r)}_{L_r} r(t) +\underbrace{(S\tilde{B})^{-1}S_r}_{L_{\dot r}} \dot{r}(t)\\ \nu_c=-\underbrace{(S\tilde{B})^{-1}\rho_c(u_L,y)}_{L_n}\frac{P_2(s(t)-S_rr(t))}{||P_2(s(t)-S_rr(t))||} \end{array} }

これをSMオブザーバを用いて実施する場合は次式を用います(\Lambda=S\tilde{B}=S_2B_2)。

\displaystyle{(11)\quad \begin{array}{l} \hat{u}(t)=\underbrace{-L\left[\begin{array}{c} x_r(t)\\ z(t) \end{array}\right]-L_rr(t)+L_{\dot r}\dot{r}(t)}_{\hat{u}_L}+\hat{\nu}_c\\ \displaystyle{\hat{\nu}_c=-L_n\frac{P_2(S\left[\begin{array}{c} x_r(t)\\ z(t) \end{array}\right]-S_rr(t))}{||P_2(S\left[\begin{array}{c} x_r(t)\\ z(t) \end{array}\right]-S_rr(t))||}}\\ L=\Lambda^{-1}(S\tilde{A}-\Phi S)\\ L_r=\Lambda^{-1}(\Phi S_r+S_2MB_r)\\ L_{\dot r}=\Lambda^{-1}S_r\\ L_n=\Lambda^{-1}\rho_c(\hat{u}_L,y) \end{array} }

\displaystyle{(11')\quad %\Phi\bar{P}_2^{-1}+\bar{P}_2^{-1}\Phi^T=-\hat{Q}_2 P_2\Phi+\Phi^TP_2=-I_m }

\displaystyle{(11'')\quad \rho_c(\hat{u}_L,y)=||\Lambda||\underbrace{\frac{k_1||\hat{u}_L||+\alpha(t,y)+k_1\gamma_c||\Lambda^{-1}||+\gamma_o}_{1-k_1\kappa(\Lambda)}}_{\rho_o(\hat{u}_L,y)}+\gamma_c }

Note C91 S_rの選び方

積分動作で示した閉ループ系の状態方程式の一部

\displaystyle{(12)\quad  \dot{x}_1(t)=\bar{A}_{11}x_1(t)+\bar{A}_{12}(s(t)-S_rr(t))+(B_r+\bar{A}_{12}S_r)r(t) }

を考えます。定常状態でスライディングモードが達成されたとすると

\displaystyle{(13)\quad  \begin{array}{l} 0=\bar{A}_{11}x_1(\infty)+\bar{A}_{12}\underbrace{(s(t)-S_rr(t))}_{0}+(B_r+\bar{A}_{12}S_r)}r(\infty)\\ \Rightarrow  x_1(\infty)=-\bar{A}_{11}^{-1}(B_r+\bar{A}_{12}S_r)r_c\\ \Rightarrow  x_r(\infty)=-B_r^T\bar{A}_{11}^{-1}(B_r+\bar{A}_{12}S_r)r_c \end{array} }

を得ます。x_r(\infty)=0とするためには

\displaystyle{(14)\quad  \begin{array}{l} 0=-B_r^T\bar{A}_{11}^{-1}(B_r+\bar{A}_{12}S_r)\\ \Rightarrow  \underbrace{B_r^T\bar{A}_{11}^{-1}\tilde{A}_{12}}_{K_s}S_2^{-1}S_r=-B_r^T\bar{A}_{11}^{-1}B_r \end{array} }

において、K_sが正則であれば、S_r

\displaystyle{(14)\quad  \boxed{S_r=-S_2K_s^{-1}B_r^T\bar{A}_{11}^{-1}B_r =-S_2(B_r^T\bar{A}_{11}^{-1}\tilde{A}_{12})^{-1}B_r^T\bar{A}_{11}^{-1}B_r} }

と求めることができます。そこで次式に注目します。

\displaystyle{(15)\quad  \begin{array}{l} \left[\begin{array}{cc} I & 0\\ B_r^T\tilde{A}_{11}^{-1} & -K_s \end{array}\right]= \left[\begin{array}{cc} \tilde{A}_{11} & \tilde{A}_{12}\\ B_r^T & 0 \end{array}\right] \left[\begin{array}{cc} \bar{A}_{11}^{-1} & -\bar{A}_{11}^{-1}\tilde{A}_{12}\\ 0 & I \end{array}\right]\\ = \left[\begin{array}{cc} \tilde{A}_{11} & \tilde{A}_{12}\\ B_r^T & 0 \end{array}\right] \left[\begin{array}{cc} I & 0\\ -M & I \end{array}\right] \left[\begin{array}{cc} \bar{A}_{11}^{-1} & -\bar{A}_{11}^{-1}\tilde{A}_{12}\\ 0 & I \end{array}\right] \end{array} }

これよりK_sが正則であるための条件が次のように求められます。

\displaystyle{(16)\quad  \begin{array}{l} {\rm det}\left[\begin{array}{cc} \tilde{A}_{11} & \tilde{A}_{12}\\ B_r^T & 0 \end{array}\right]\ne 0 \Leftrightarrow  {\rm det}\left[\begin{array}{cc|c} 0 & -C_1 & -C_2\\ 0 & A_{11} & A_{12}\\\hline I & 0 & 0 \end{array}\right]\ne 0\\ \Leftrightarrow  {\rm det}\left[\begin{array}{cc} -C_1 & -C_2\\ A_{11} & A_{12} \end{array}\right]\ne 0 \end{array} }

これは不変零点が複素平面原点にはないことを意味しますが、仮定3^\circにより保証されており、K_sの正則性が成り立ちます。

SMオブザーバ

Walcott-Zak’s observer…Homework

[1] 制御対象の状態空間表現として次式を考えます。

\displaystyle{ \begin{array}{ll} (1.1) & \dot{x}(t)=Ax(t)+Bu(t)+f(t,x,u)\\ (1.2) & y(t)=Cx(t)\\ & (x(t)\in{\rm\bf R}^n, u(t)\in{\rm\bf R}^m, y(t)\in{\rm\bf R}^p, 1\le m\le p < n) \end{array} }

ただし、f(t,x,u)\in{\rm\bf R}^nはモデル誤差、非線形要素、外乱などの影響を表し、次のマッチング条件を満たすとします。

\displaystyle{ \begin{array}{ll} (2.1) & \boxed{f(t,x,u)=B\xi(t,x,u)}\\ (2.2) & ||\xi(t,x,u)||<r_1||u||+\alpha(t,y)\\ & (f(t,x,y)\in{\rm\bf R}^n, \xi(t,x,u)\in{\rm\bf R}^m) \end{array} }

●このとき、Walcott-Zakは次のSMオブザーバを提案しています(z(t)\in{\rm\bf R}^n)。

\displaystyle{(3)\quad \boxed{\begin{array}{l} \dot{z}(t)=Az(t)+Bu(t)-G \overbrace{C\underbrace{(z(t)-x(t))}_{e(t)}}^{e_y(t)=Cz(t)-y(t)}+B\nu\\ =\underbrace{(A-GC)}_{A_o}z(t)+Gy(t)+Bu(t)+B\nu \end{array}} }

ここで、GA_0=A-GCが安定行列となるように選ばれているとします。また、

\displaystyle{(4)\quad PA_0+A_o^TP=-Q\quad(Q>0) }

を満足するP>0と、あるF\in{\bf R}^{m\times p}に対して

\displaystyle{(5)\quad PB=C^TF^T }

が満足されているものとします。このとき、\nu

\displaystyle{(6.1)\quad \boxed{\nu=-\rho(t,y,u)\frac{Fe_y(t)}{||Fe_y(t)||}} }

ただし

\displaystyle{(6.2)\quad \rho(t,y,u)\ge r_1||u||+\alpha(t,y)+\gamma_0  %\rho(t,y,u)\ge r_1||u||+\alpha(t,y)+\gamma_0 \ge ||\xi(t,x,u)||+\gamma_0 }

のように与えます。

これは、通常のオブザーバと同様に、出力の推定誤差 e_y(t)=C\hat{x}(t)-y(t) をフィードバックした上で、出力の推定誤差のスイッチング動作が加えられています。これにより、モデル誤差、非線形要素、外乱などの影響があるにも拘わらず、e_y(t)=0の超平面に載せることが考えられます。

[2] (3)から(1.1)を辺々引き算して、誤差方程式

\displaystyle{(7)\quad \begin{array}{l} \underbrace{\dot{z}(t)-\dot{x}(t)}_{\dot{e}(t)} =Az(t)+Bu(t)-G Ce(t)+B\nu\\ -(Ax(t)+Bu(t)+B\xi(t,x,u))\\ =Ae(t)-GCe(t)+B\nu-B\xi(t,x,u)\\ =\underbrace{(A-GC)}_{A_o}e(t)+B(\nu-\xi(t,x,u)) \end{array} }

すなわち

\displaystyle{(7')\quad \boxed{\dot{e}(t)=A_oe(t)+B(\nu-\xi(t,x,u))} }

を得ます。このとき、リャプノフ関数

\displaystyle{(8)\quad V(e)=e^T(t)Pe(t) }

に対して

\displaystyle{(9)\quad \begin{array}{l} \dot{V}(e)=2e^T(t)P\dot{e}(t)\\ =2e^T(t)P(A_oe(t)-B\xi(t,x,u)+B\nu)\\ =e^T(t)(PA_o+A^T_oP)e(t)-2e^T(t)PB\xi(t,x,u)+2e^T(t)PB\nu\\ <-e^T(t)Qe(t)-2e^T(t)C^TF^T\xi(t,x,u)-2e^T(t)C^TF^T\rho(t,y,u)\frac{FCe(t)}{||FCe(t)||}\\ =-e^T(t)Qe(t)-2(-||FCe(t)||||\xi(t,x,u)||)-2\rho(t,y,u)||FCe(t)||\\ \le -e^T(t)Qe(t)-2||FCe(t)||(\rho(t,y,u)-||\xi(t,x,u)||)\\ \le -e^T(t)Qe(t)-2\eta||FCe(t)||\\ \le -e^T(t)Qe(t)<0 \end{array} }

を得て、2次安定性が成り立ちます。したがって、ある有限時間で、次の超平面上でのスライディングモードが達成されます。

\displaystyle{(10)\quad {\cal S}_{wz}=\{e\in{\bf R}^n: Fe_y=FCe=0\} }

[3] 適当な座標変換を用いて、(1.1)の状態空間表現として次式が得られます。

\displaystyle{(11.1)\quad \begin{array}{l} \underbrace{ \left[\begin{array}{c} \dot x_1(t)\\ \dot y(t) \end{array}\right] }_{\dot{x}'(t)} = \underbrace{ \left[\begin{array}{cc} {\bar A}_{11} & {\bar  A}_{12} \\ {\bar A}_{21} & {\bar  A}_{22} \\ \end{array}\right] }_{{\bar A}=TAT^{-1}} \underbrace{ \left[\begin{array}{c} x_1(t)\\ y(t) \end{array}\right] }_{x'(t)} + \boxed{\underbrace{ \left[\begin{array}{c} 0_{n-p\times p}\\ {\bar  B}_{2} \end{array}\right] }_{{\bar B}=TB}} (u(t)+\xi(t))\\ \end{array} }

\displaystyle{(11.2)\quad y(t) = \boxed{\underbrace{ \left[\begin{array}{cc} 0_{p\times n-p} & I_p \\ \end{array}\right] }_{{\bar C}=CT^{-1}}} \underbrace{ \left[\begin{array}{c} x_1(t)\\ y(t) \end{array}\right] }_{x'(t)} }

ただし、{\bar A}_{11}は安定行列です。

●これは予備的検討における(3.1)と(3.2)と同じタイプですから、そこでの(18)に相当する

\displaystyle{(12)\quad \begin{array}{l} \dot{\hat x}(t)=A\hat{x}(t)+Bu(t)-G_\ell Ce(t)+G_n\nu\\ G_\ell=T_o^{-1}\left[\begin{array}{c} {\cal A}_{12}\\ {\cal A}_{22}-{\cal A}_{22}^{s} \end{array}\right]\\ G_n=||{\cal D}_{2}||T_o^{-1}\left[\begin{array}{c} 0_{n-p\times p}\\ I_p \end{array}\right]\\ \displaystyle{\nu=-\rho(t,y,u)\frac{P_2e_y(t)}{||P_2e_y(t)||} \quad(P_2{\cal A}_{22}^{s}+{\cal A}_{22}^{s}^TP_2<0)} \end{array} }

を設計できます。これから、(3)と(6.1)におけるGFを、次のように定めることが提案されています。

\displaystyle{(13)\quad \boxed{G=(T_LT_bT_c)^{-1}\left[\begin{array}{c} {\cal A}_{12}\\ {\cal A}_{22}-{\cal A}_{22}^{s} \end{array}\right]} }

\displaystyle{(14)\quad \boxed{F={\bar B}_{2}^T{P}_{2}} }

ここまでの手順を、関数smobs2としてプログラムすることにします。

Note C-83: (11)への座標変換

いま

\displaystyle{(1)\quad P=\left[\begin{array}{cc} {P}_{11} & {P}_{12} \\ {P}_{21} & {P}_{22} \end{array}\right]\quad({P}_{11}\in{\bf R}^{n-p\times n-p}) }

と分割し、座標変換行列

\displaystyle{(2)\quad T=\left[\begin{array}{cc} I_{n-p} & {P}_{11}^{-1}{P}_{12} \\ 0 & I_p \end{array}\right] }

を定義します。このとき

\displaystyle{(3)\quad \bar{C}=CT^{-1}=\left[\begin{array}{cc} 0 & I_p \end{array}\right] }

を得ます、また

\displaystyle{(4)\quad P^{-1}=\left[\begin{array}{cc} {\tilde P}_{11} & {\tilde P}_{12} \\ {\tilde P}_{21} & {\tilde P}_{22} \end{array}\right]\quad({P}_{11}{\tilde P}_{12} + {P}_{12}{\tilde P}_{22}=0)

と表すと、B=P^{-1}C^TF^Tに注意して

\displaystyle{(5)\quad \begin{array}{l} \bar{B}=TB= \left[\begin{array}{cc} I_{n-p} & {P}_{11}^{-1}{P}_{12} \\ 0 & I_p \end{array}\right] \left[\begin{array}{cc} {\tilde P}_{11} & {\tilde P}_{12} \\ {\tilde P}_{21} & {\tilde P}_{22} \end{array}\right] \left[\begin{array}{cc} 0 \\ I_p \end{array}\right] F^T\\ =\left[\begin{array}{cc} {\tilde P}_{12} + {P}_{11}^{-1}{P}_{12}{\tilde P}_{22} \\ {\tilde P}_{22} \end{array}\right] F^T= \underbrace{\left[\begin{array}{cc} 0 \\ {\tilde P}_{22}F^T \end{array}\right] }_{\left[\begin{array}{cc} 0 \\ {\bar B}_{2} \end{array}\right]} \end{array} }

および

\displaystyle{(6)\quad \begin{array}{l} \bar{P}=T^{-T}PT^{-1}\\ = \left[\begin{array}{cc} I_{n-p} & 0 \\ -{P}_{12}^T{P}_{11}^{-1} & I_p \end{array}\right] \left[\begin{array}{cc} {P}_{11} & {P}_{12} \\ {P}_{21} & {P}_{22} \end{array}\right] \left[\begin{array}{cc} I_{n-p} & -{P}_{11}^{-1}{P}_{12} \\ 0 & I_p \end{array}\right]\\ = \left[\begin{array}{cc} {P}_{11} & {P}_{12} \\ 0 & {P}_{22}-{P}_{12}^T{P}_{11}^{-1}{P}_{12} \end{array}\right] \left[\begin{array}{cc} I_{n-p} & -{P}_{11}^{-1}{P}_{12} \\ 0 & I_p \end{array}\right]\\ =\underbrace{\left[\begin{array}{cc} {P}_{11} & 0 \\ 0 & {P}_{22}-{P}_{21}{P}_{11}^{-1}{P}_{12} \end{array}\right] }_{\left[\begin{array}{cc} {\bar P}_{1} & 0 \\ 0 & {\bar P}_{2} \end{array}\right]} \end{array} }

を得ます。また

\displaystyle{(7)\quad \begin{array}{l} \bar{A}=TAT^{-1}\\ = \left[\begin{array}{cc} I_{n-p} & {P}_{11}^{-1}{P}_{12} \\ 0 & I_p \end{array}\right] \left[\begin{array}{cc} {A}_{11} & {A}_{12} \\ {A}_{21} & {A}_{22} \end{array}\right] \left[\begin{array}{cc} I_{n-p} & -{P}_{11}^{-1}{P}_{12} \\ 0 & I_p \end{array}\right]\\ = \left[\begin{array}{cc} {A}_{11}+{P}_{11}^{-1}{P}_{12}{A}_{21} & {A}_{12}+ {P}_{11}^{-1}{P}_{12}{A}_{22}\\ {A}_{21} & {A}_{22} \end{array}\right] \left[\begin{array}{cc} I_{n-p} & -{P}_{11}^{-1}{P}_{12} \\ 0 & I_p \end{array}\right]\\ =\underbrace{\left[\begin{array}{cc} {A}_{11}+{P}_{11}^{-1}{P}_{12}{A}_{21} & * \\ {A}_{21}  & {A}_{22}-{A}_{21}{P}_{11}^{-1}{P}_{12} \end{array}\right] }_{\left[\begin{array}{cc} {\bar A}_{11} & {\bar A}_{12} \\ {\bar A}_{21} & {\bar A}_{22} \end{array}\right]} \end{array} }

より

\displaystyle{(8)\quad \begin{array}{l} \bar{A}_o=\underbrace{TA_oT^{-1} }_{\left[\begin{array}{cc} {\bar A}_{o11} & {\bar A}_{o12} \\ {\bar A}_{o21} & {\bar A}_{o22} \end{array}\right]} =T(A-GC)T^{-1}\\ =\underbrace{TAT^{-1}}_{ \left[\begin{array}{cc} {\bar A}_{11} & {\bar A}_{12} \\ {\bar A}_{21} & {\bar A}_{22} \end{array}\right]} -\underbrace{TGCT^{-1}} _{\left[\begin{array}{cc} 0 & TG \end{array}\right]} = \left[\begin{array}{cc} {\bar A}_{11} & * \\ {\bar A}_{21} & * \end{array}\right] \end{array} }

すなわち{\bar A}_{o11}={\bar A}_{11}であることに注意します。

●本文(4)の左右から、T^{-T}T^{-1}をかけて

\displaystyle{(9)\quad \underbrace{T^{-T}PT^{-1}}_{\bar P}\cdot \underbrace{TA_oT^{-1}}_{\bar{A}_o} +\underbrace{T^{-T}A_o^TT^T}_{\bar{A}_o^T}\cdot \underbrace{T^{-T}PT^{-1}}_{\bar P} =-\underbrace{T^{-T}QT^{-1}}_{\bar Q} }

また本文(5)の左から、T^{-T}をかけて

\displaystyle{(10)\quad \underbrace{T^{-T}C^T}_{\bar{C}^T}F^T=\underbrace{T^{-T}PT^{-1}}_{\bar P}\underbrace{TB}_{\bar B} }

を得ます。したがって、座標変換後も、本文(4)と(5)は同様に成り立ちます。

(9)において(6)と(8)を考慮すると

\displaystyle{(11)\quad \begin{array}{l} \left[\begin{array}{cc} {\bar P}_{1} & 0 \\ 0 & {\bar P}_{2} \end{array}\right]  \left[\begin{array}{cc} {\bar A}_{o11} & {\bar A}_{o12} \\ {\bar A}_{o21} & {\bar A}_{o22} \ \end{array}\right]  +\left[\begin{array}{cc} {\bar A}_{o11} & {\bar A}_{o12} \\ {\bar A}_{o21} & {\bar A}_{o22} \ \end{array}\right]^T \left[\begin{array}{cc} {\bar P}_{1} & 0 \\ 0 & {\bar P}_{2} \end{array}\right]\\ =- \left[\begin{array}{cc} \bar{Q}_{11} & \bar{Q}_{12} \\ \bar{Q}_{12}^T & \bar{Q}_{22} \end{array}\right] \end{array} }

すなわち

\displaystyle{(12)\quad \bar{P}_{1}{\bar A}_{o11}+{\bar A}_{o11}^T\bar{P}_{1}=-\bar{Q}_{11} }

したがって、{\bar A}_{11}={\bar A}_{o11}は安定行列となります。

また(10)において(3)と(5)を考慮すると

\displaystyle{(13)\quad \underbrace{\left[\begin{array}{cc} 0 & I_p \end{array}\right]}_{\bar{C}^T}F^T=\underbrace{\left[\begin{array}{cc} {\bar P}_{1} & 0 \\ 0 & {\bar P}_{2} \end{array}\right]}_{\bar P}\underbrace{\left[\begin{array}{cc} 0 \\ {\bar B}_{2} \end{array}\right]}_{\bar B} }

すなわち

\displaystyle{(14)\quad F={\bar B}_{2}^T{\bar P}_{2} }