PID コントローラーに対するバリア証明書の制約の適用
この例では、Barrier Certificate Enforcement ブロックを使用して PID コントローラー アプリケーションに対するバリア証明書の制約を適用する方法を示します。
概要
この例では、プラント ダイナミクスは次の方程式 [1] で記述されます。
プラントの目標は、次のように定義された望ましい軌跡を追従することです。
同じ PID 制御アプリケーションに予測された制約関数を適用する例については、PID コントローラーに対する制約の適用を参照してください。
モデル パラメーターと初期状態を設定します。
r = 1.5; % Radius for desired trajectory Ts = 0.1; % Sample time Tf = 22; % Duration x0_1 = -r; % Initial condition for x1 x0_2 = 0; % Initial condition for x2
PID コントローラーの設計
制約を適用する前に、基準軌跡を追従するための PID コントローラーを設計します。barrierCertificatePID
モデルには、調整されたゲインをもつ 2 つの PID コントローラーが含まれています。Simulink® モデルにおける PID コントローラーの調整の詳細については、Simulink でのモデルベースの PID 調整の紹介を参照してください。
Simulink モデルを開きます。
constrained = 0; % Disable barrier certificate constraint enforcement mdl = 'barrierCertificatePID'; open_system(mdl)
PID コントローラーをシミュレートし、追従性能をプロットします。
% Simulate the model. out = sim(mdl); % Extract trajectories. logData = out.logsout; x1_traj = zeros(size(out.tout)); x2_traj = zeros(size(out.tout)); for ct = 1:size(out.tout,1) x1_traj(ct) = logData{3}.Values.Data(:,:,ct); x2_traj(ct) = logData{4}.Values.Data(:,:,ct); end x1_des = logData{1}.Values.Data; x2_des = logData{2}.Values.Data; % Plot trajectories. figure('Name','Tracking with Constraint'); plot(x1_des,x2_des,'r') xlabel('x1') ylabel('x2') hold on plot(x1_traj,x2_traj,'b:','LineWidth',2) hold on plot(x1_traj(1),x2_traj(1),'g*') hold on plot(x1_traj(end),x2_traj(end),'go') legend('Desired','Trajectory','Start','End','Location','best')
バリア証明書
この例では、同じプラント モデルと PID コントローラーに対してバリア証明書の制約を適用します。
プラントの実行可能領域は、 で求められます。したがって、バリア証明書は によって求められます。
に対する の偏導関数は によって求められます。
Barrier Certificate Enforcement ブロックは形式 のプラント ダイナミクスを受け入れます。このアプリケーションの場合、 および となります。
バリア証明書の制約を使用した PID コントローラーのシミュレーション
制約の実装を表示するには、Constraint
、Constrained
サブシステムを開きます。
バリア証明書の制約の適用を有効にします。
constrained = 1;
モデルを実行し、シミュレーション結果をプロットします。このプロットから、プラントの状態が 1 より小さいことがわかります。
% Simulate the model. out = sim(mdl); % Extract trajectories. logData = out.logsout; x1_traj = zeros(size(out.tout)); x2_traj = zeros(size(out.tout)); for ct = 1:size(out.tout,1) x1_traj(ct) = logData{3}.Values.Data(:,:,ct); x2_traj(ct) = logData{4}.Values.Data(:,:,ct); end x1_des = logData{1}.Values.Data; x2_des = logData{2}.Values.Data; % Plot trajectories. figure('Name','Tracking with Constraint'); plot(x1_des,x2_des,'r') xlabel('x1') ylabel('x2') hold on plot(x1_traj,x2_traj,'b:','LineWidth',2) hold on plot(x1_traj(1),x2_traj(1),'g*') hold on plot(x1_traj(end),x2_traj(end),'go') legend('Desired','Trajectory','Start','End','Location','best')
Barrier Certificate Enforcement ブロックによって、プラント状態が 1 より小さい状態を維持するように、正常に制御動作が制約されています。
モデルを閉じます。
bdclose(mdl)
参考文献
[1] Robey, Alexander, Haimin Hu, Lars Lindemann, Hanwen Zhang, Dimos V. Dimarogonas, Stephen Tu, and Nikolai Matni. "Learning Control Barrier Functions from Expert Demonstrations." Preprint, submitted April 7, 2020. https://arxiv.org/abs/2004.03315
参考
Barrier Certificate Enforcement