主要内容

Iterative Learning Control

R2026b

为重复控制任务设计迭代学习控制器

自 R2024b 起

  • Iterative Learning Control block icon

库:
Simulink Control Design / Adaptive Control

描述

迭代学习控制 (ILC) 是逐次运行控制的一种改进方法。该方法以前一批量运行的误差轨迹的形式进行频繁测量,来更新后续批量运行的控制信号。ILC 可提高从相同初始工况开始执行重复操作的系统的性能。ILC 可以应用于制造业、机器人和化学加工领域的许多实际工业系统,在这些系统中,装配线上的大规模生产需要重复操作。

Iterative Learning Control 模块提供以下配置:

  • 无模型 ILC - 此方法不需要系统动态特性的先验知识,并使用比例导数 (PD) 误差反馈来更新控制历史记录。无模型 ILC 更新律为:

    uk+1(t)=Q(q)(uk(t)+γpek(t+1)+γd(ek(t+1)−ek(t))).

    其中,γp 是比例增益,γd 是导数增益,Q(q) 是一阶低通滤波器。根据选择的 PD 增益,您可以选择实现 P 型、D 型或 PD 型 ILC。此方法仅适用于 SISO 系统。

  • 基于模型的 ILC - 此方法是 ILC 的更一般形式,适用于以下形式的连续时间和离散时间 LTI 状态空间系统:

    xk(t+1)=Axk(t)+Buk(t),x(0)=x0,yk(t)=Cxk(t).

    此外,此方法支持使用以下两种更新方法中的任意一种:

    • 基于梯度的 ILC - uk+1(t)=Q(q)(uk(t)+γGTek(t))

    • 基于逆模型的 ILC - uk+1(t)=Q(q)(uk(t)+γG−1ek(t))

有关 ILC 的详细信息,请参阅迭代学习控制。

示例

端口

输入

全部展开

在此端口指定期望参考信号与输出之间的误差。

数据类型: single | double

在此端口指定 ILC 模式信号。在运行时,模块会在“控制”和“复位”两种模式之间切换。在控制模式下,模块在指定时间点输出 uk(t),并测量期望参考信号 r(t) 与输出 yk(t) 之间的误差。在控制模式结束时,模块会计算用于下一次迭代的新控制序列 uk+1(t)。在复位模式下,模块输出为 0。

通常,您可以使用从 0 变为 1 的信号切换到控制模式,使用从 1 变为 0 的信号切换到复位模式。复位模式的持续时间必须足够长,以确保在该模式下,参考信号能够通过标称控制器将被控对象带回其初始条件。

数据类型: Boolean

输出

全部展开

更新后的控制信号,用于第 k 次迭代。模块在指定时间点输出 uk(t),并测量期望参考信号与输出之间的误差。

数据类型: single | double

参数

全部展开

要以交互方式编辑模块参数,请使用属性检查器。在 Simulink® 工具条中,在仿真选项卡的准备库中,选择属性检查器。

ILC 控制器的采样时间,指定为正标量。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: Ts
值: "0.01" (默认) | positive scalar in quotes

示例: set_param(gcb,"Ts","0.1")

一次 ILC 迭代的持续时间,指定为正标量。此参数决定模块在控制模式下提供多少个控制动作。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: Tspan
值: "1" (默认) | positive scalar in quotes

示例: set_param(gcb,"Tspan","10")

指定输出数据类型。

数据类型助手可帮助您设置数据属性。要使用数据类型助手,请点击 。

您可以指定以下数据类型。

  • 内置 - 单精度或双精度数据类型。

  • 表达式 - 使用用于指定类型的 MATLAB 表达式。

有关详细信息,请参阅使用数据类型助手指定数据类型。

ILC 算法,指定为无模型 ILC 或基于模型的 ILC。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: Algorithm
值: "Model free ILC" (默认) | "Model based ILC"

示例: set_param(gcb,"Algorithm","Model based ILC")

无模型 ILC 更新律中的比例增益 (γp),指定为非负标量。无模型 ILC 更新律定义如下:

uk+1(t)=Q(q)(uk(t)+γpek(t+1)+γd(ek(t+1)−ek(t))).

依赖关系

要启用此参数,请将 ILC 算法设置为无模型 ILC。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: gamma_p
值: "1" (默认) | nonnegative scalar in quotes

示例: set_param(gcb,"gamma_p","5")

无模型 ILC 更新律中的导数增益 γd,指定为非负标量。无模型 ILC 更新律定义如下:

uk+1(t)=Q(q)(uk(t)+γpek(t+1)+γd(ek(t+1)−ek(t))).

依赖关系

要启用此参数,请将 ILC 算法设置为无模型 ILC。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: gamma_d
值: "0" (默认) | nonnegative scalar in quotes

示例: set_param(gcb,"gamma_d","1")

基于模型的 ILC 中状态空间模型的时域,指定为连续时间或离散时间(Ts)。模型的采样时间必须等于使用采样时间(Ts) 指定的 ILC 采样时间。

依赖关系

要启用此参数,请将 ILC 算法设置为基于模型的 ILC。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: ModelTimeDomain
值: "Continuous time" (默认) | "Discrete time (Ts)"

示例: set_param(gcb,"ModelTimeDomain","Discrete time (Ts)")

指定基于模型的 ILC 算法的标称或近似状态空间模型矩阵。模块要求您用以下形式指定被控对象动态特性:

x(t+1)=Ax(t)+Bu(t)y(t)=Cx(t).

依赖关系

要启用这些参数,请将 ILC 算法设置为基于模型的 ILC。

基于模型的 ILC 方法,指定为基于梯度或基于逆模型。

依赖关系

要启用此参数,请将 ILC 算法设置为基于模型的 ILC。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: ModelBasedILCType
值: "Gradient based" (默认) | "Inverse-model based"

示例: set_param(gcb,"ModelBasedILCType","Inverse-model based")

基于梯度的 ILC 增益,指定为正标量。

依赖关系

要启用此参数,请将 ILC 算法设置为基于模型的 ILC,并将 ILC 方法设置为基于梯度。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: gamma_grad
值: "1" (默认) | positive scalar in quotes

示例: set_param(gcb,"gamma_grad","2")

基于逆模型的 ILC 增益,指定为小于 2 的正标量。

依赖关系

要启用此参数,请将 ILC 算法设置为基于模型的 ILC,并将 ILC 方法设置为基于逆模型。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: gamma_inverse
值: "1" (默认) | positive scalar less than 2 in quotes

示例: set_param(gcb,"gamma_inverse","1.5")

选择此参数可将一阶低通滤波器应用于 ILC 更新律。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: LPFEnable
值: "off" (默认) | "on"

示例: set_param(gcb,"LPFEnable","on")

一阶低通滤波器的时间常数,指定为正标量。

依赖关系

要启用此参数,请选择启用一阶低通滤波器。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: tau
值: "1" (默认) | positive scalar in quotes

示例: set_param(gcb,"tau","10")

扩展功能

全部展开

C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2024b 中推出

另请参阅