11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

モデル誤差抑制補償器(Model Error Compensator, MEC)

11
Last updated at Posted at 2025-08-20

モデル誤差抑制補償器(MEC)は、制御系のロバスト性(外乱やモデル誤差に対する頑健性)を高める汎用的な手法です。既存の制御系にアドオンしてロバスト性を付加でき、PID制御やMPC等の様々な制御方式と併用できます。

model error compensator.jpg

執筆者:制御工学の研究を20年行っている国立大学教員(熊本大学 岡島寛

MECはモデル $P_n$ と誤差補償器 $D$ から成るシンプルな構造で、逆モデルが不要なため非最小位相系や非線形系にも適用可能です。

20240121093228.jpg

理論の詳細、適用クラスの説明、外乱オブザーバとの比較は以下のブログ記事にまとめています。

詳細記事(blog.control-theory.com):

総合論文:


Pythonシミュレーション(Google Colab対応)

以下のコードでMECの効果を確認できます。Google Colaboratory上での実行方法はこちら

# インストール
!pip install control numpy matplotlib

# Python コード
import numpy as np
import matplotlib.pyplot as plt
import control.matlab as control_matlab

# 基本伝達関数の定義
pm_num = [1]
pm_den = [1, 3, 2]
pm = control_matlab.tf(pm_num, pm_den)

# ハイゲイン誤差補償器
d_num = [300, 100]
d_den = [1, 0]
d = control_matlab.tf(d_num, d_den)

# 制御器
c_num = [3, 5]
c_den = [1]
c = control_matlab.tf(c_num, c_den)

# パラメータ変動設定
ks = [0.9, 1.1, 1, 1, 0.9, 1.1, 0.95, 1.05]
ts = [1, 1, 0.9, 1.1, 0.9, 1.1, 1.05, 0.95]

time_vector = np.linspace(0, 10, 500)

# MEC適用時とMEC無し時の応答を比較
plt.figure()
plt.title('Open-Loop System Step Response (MEC On)')
plt.xlabel('Time')
plt.ylabel('Output')
plt.grid(True)

plt.figure()
plt.title('Open-Loop System Step Response (MEC Off)')
plt.xlabel('Time')
plt.ylabel('Output')
plt.grid(True)

for i in range(len(ks)):
    k = ks[i]
    t = ts[i]
    p = control_matlab.tf([k], [t, 1]) * control_matlab.tf([1], [1, 2])
    pc = p * (1 + pm * d) / (1 + p * d)
    
    yout_pc, T_pc = control_matlab.step(pc, time_vector)
    plt.figure(1)
    plt.plot(T_pc, yout_pc, label=f'pc (k={k}, t={t})')
    
    yout_p, T_p = control_matlab.step(p, time_vector)
    plt.figure(2)
    plt.plot(T_p, yout_p, linestyle='-', label=f'p (k={k}, t={t})')

plt.figure(1)
plt.legend()
plt.figure(2)
plt.legend()
plt.show()
plt.close('all')

MATLABシミュレーション

2次系に対するMECの効果(MATLABコード)

制御対象 $P(s) = (c+\delta c)\frac{s+b+\delta b}{(s -(a+\delta a))(s+5)}$ に対して、パラメータ変動下でのMECの効果を確認するコードです。

clear;
close all;
a = 1;
b = 2;
c = 1.5;
for i = 1:10
    delb = -0.1+0.2*rand();
    dela = -0.1+0.2*rand();
    delc = -0.1+0.2*rand();
    P=(c+delc)*tf([1 b+delb],[1 -(a+dela)])*tf([1],[1 5]);
    Pn = c*tf([1 b],[1 -a])*tf([1],[1 5]);
    Con=5;
    D=tf([50 50],[1 0]);
    
    % MECなし
    feedback(P*Con,1);
    figure(1)
    step(ans)
    xlabel('Time')
    ylabel('Out')
    title('Usual')
    xlim([0 5])
    ylim([0 2])
    hold on

    % MECあり
    feedback(Pn*Con,1)*feedback(P*D,1)-feedback(Con,Pn)*feedback(P,D);
    figure(2)
    step(ans)
    xlabel('Time')
    ylabel('Out')
    title('With MEC')
    xlim([0 5])
    ylim([0 2])
    hold on
end

GitHubのMATLABコード一覧

リポジトリ 内容
Robust-control-MATLAB_MEC01 ポリトープ型不確かさに対する設計(PSO+LMI)
MATLAB_MEC02_sensor_noise センサノイズ環境下での設計
MATLAB_MEC03_withPFC 並列フィードフォワード補償器との併用(非最小位相系対応)
non_linear_control_MATLAB_MEC04 非線形システムへの適用
MATLAB_MEC05_signal_limitation_filter 信号制限フィルタ
Vehicle_control_MEC05 ビークル制御系への適用
MEC05-rengo2022 PID制御との併用

MATLAB File Exchange


関連記事・比較記事

外乱オブザーバとの比較

構造的関連(IMC, 2自由度制御)

関連する制御手法

動画

研究者ページ


他グループによるMECの研究

他の研究グループにおけるモデル誤差抑制補償器の研究を抜粋します(タイトルにMECを含むものを中心に)。

学術論文

国内会議(2024以降)

  • 板宮敬悦, モデル誤差抑制補償要素を併用した適応制御系に関する研究, MSCS2024
  • 板宮敬悦, ロバストモデル規範形適応制御系における固定補償要素のモデル誤差抑制制御器としての役割, SCI 2024
  • 菅原貴弘, 脇谷伸, 山本透, 落岩崇, 富山秀樹, 機械システムに対するGMV-MECの適用検討, MSCS2024
  • 佐竹泰智, 楊熙, 萩原朋道, モデル誤差抑制補償器に基づくブーストコンバータの非線形出力電圧制御, SCI 2025
  • 下東知隼, 澤田賢治, モデル誤差抑制補償器を用いた状態予測制御のロバスト化, SCI 2025
  • 脇谷伸, 津田竜宏, MPCとMECによるパフォーマンス駆動型階層制御系の一設計, SCI 2025

自身のMECに関する学術論文

研究業績の全リストはブログ記事を参照

代表的な論文:


Qiita記事タグ: 制御工学, ロバスト制御, 外乱オブザーバ, モデル誤差抑制補償器, 内部モデル制御

11
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?