机器人反复执行同一条轨迹,每次都在相近的时刻落后、过冲或振动。普通反馈能在当次发现误差后纠正;迭代学习控制(Iterative Learning Control,ILC)还会保存这次经历,提前修正下一次的输入。先从“第三次为什么可以比第一次更准”入手,再理解学习律、收敛条件和它真正能改善的精度。
本系列依次阅读:01 原理 → 02 三组可观察的实验 → 03 工程集成。动力学基础可先看从虚功到动力学与控制。
1. 两条时间轴:这次几点,已经做了几次
假设机械臂每次用 3 秒完成同一个动作。在第 1 次动作的 t = 0.8 s,末端开始出现可重复的滞后。即使反馈控制器参数不变,第 2 次也可以在这个时刻之前加入合适补偿。
这里必须分开两个下标:
| 记号 | 表示什么 | 一个例子 |
|---|---|---|
t 或离散采样号 n |
本轮内部的时间 | 本次执行到 0.8 秒 |
k |
完整动作重复了多少轮 | 正在执行第 4 轮 |
r(t) |
每轮相同的期望轨迹 | 希望关节在每个时刻到哪里 |
y_k(t) |
第 k 轮的实际输出 |
测得的关节角或末端位置 |
e_k(t) = r(t) − y_k(t) |
第 k 轮跟踪误差 |
期望减实际,符号固定 |
f_k(t) |
第 k 轮使用的学习补偿 |
一整段随时间变化的输入修正 |
ILC 的“学习”发生在重复轴上。反馈处理本轮正在发生的偏差,ILC 利用已经完成的整轮数据修正下一轮;两者可以协作。它也不要求必须使用神经网络。经典 ILC 的未知量经常就是一整条补偿信号。Bristow、Tharayil、Alleyne,2006 综述
2. 先用三行数值看一次学习
暂时把动态系统缩成一个便于手算的静态例子:
把所有角度都按弧度理解,0.8 是简化增益,−0.1 是每次相同的偏差。这是说明更新方向的玩具模型,不是后文机械臂实验的动力学。
取学习规则 f_(k+1) = f_k + 0.5 e_k:
| 轮次 | 已使用补偿 f_k |
输出 y_k |
误差 e_k |
下一轮补偿 |
|---|---|---|---|---|
| 0 | 0 | 0.700 | 0.300 | 0.150 |
| 1 | 0.150 | 0.820 | 0.180 | 0.240 |
| 2 | 0.240 | 0.892 | 0.108 | 0.294 |
每次输出偏小,就把下一次命令适当增加。这里误差每轮乘以 1 − 0.8 × 0.5 = 0.6,因此逐渐缩小。若把学习增益随意放大,误差因子的绝对值可能超过 1,反而越学越差。动态系统还多了时延和相位问题,不能仅凭“把当前误差加回去”就保证改善。
3. 通用学习律里,L 和 Q 各做什么
一种常见的表达是:
这是对整段信号的运算。L 是学习算子,用上一轮误差生成修正;Q 是作用于候选补偿的滤波或整形算子。二者都不必只是一个常数。
如果在某一时刻增加命令,要过一段时间才影响输出,学习算子就要考虑这种对应关系。上一轮的全部数据已经保存,可以用后面的误差修正下一轮较早的输入;这并没有预知下一轮的随机未来。离线零相位滤波也基于同样的原因可用。
Q 常用于限制不可靠的高频学习,避免把测量噪声、未建模振动一起积累进补偿。但过滤信息也会留下误差,不能同时默认“强滤波”和“任意轨迹零误差”。
学习信号加在哪里取决于系统接口:可以修正位置参考,也可以修正速度或转矩前馈。本系列网页实验学习的是关节参考修正,单位为 rad。 其内侧使用闭环伺服的等效模型,不应把这段修正直接当成电机转矩。
4. 把整轮数据排成向量
一次动作采样 N 次,把同一关节的 N 个补偿值堆叠成向量 f。对于固定初态、固定任务、轮次间不变的线性等效模型,可以写成:
b 包含不加学习补偿时的输出以及固定的初态、重复扰动影响;P 表示整段补偿怎样影响整段输出。这种把时间序列堆成有限维向量的方法称为 lifted/有限时域表示。
矩阵的第 j 列回答:“只在第 j 个采样点增加一点输入,后面各时刻会受到什么影响?”因此真实的动态 P 通常不是对角矩阵。输入输出有延迟时,还要处理时间对齐、不可直接影响的起始输出和末端边界,不能忽略它们后强行求逆。
若增加一段候选补偿 Δf,预测下一轮误差为:
这一行把控制问题变成了“选怎样的一组修正,可以同时降低整条轨迹的误差”。
5. 最优子问题和梯度更新不是同一种算法
一种 norm-optimal ILC 思路是为下一轮选择修正,同时惩罚误差与过大的更新。例如:
在这个无约束线性二次子问题里,最优修正满足:
实际应求解线性系统,而不是显式计算大矩阵的逆。如果还限制位置、速度、补偿幅值,通常要解带约束的优化问题;若模型只在当前轨迹附近有效,也需要限制更新范围。
另一种更简单的办法是对整段补偿的目标函数做一次梯度下降:
Pᵀe 把各输出时刻的误差汇总回对其有影响的输入时刻。这里的转置来自对平方误差求导,不意味着“把系统反着运行”,也不是直接使用 P⁻¹。
| 方法 | 一轮更新主要在做什么 | 不要混淆的地方 |
|---|---|---|
| P/PD 型学习 | 用误差及其差分等构造修正 | 学习增益、相位和噪声都影响结果 |
| 逆模型型学习 | 通过近似逆动态把误差变成输入修正 | 非最小相位、延迟和模型误差要处理 |
| norm-optimal ILC | 求解整轮误差和控制代价的优化子问题 | 不是简单乘一次转置 |
| 梯度型学习 | 沿目标函数的负梯度走一步 | 多次小步不等于一次精确求解 |
网页中的更新应以实验篇公布的模型和参数为准;不能因为都叫 ILC,就把不同论文的保证套到同一个实现上。
6. 收敛条件真正保证了什么
先只讨论上一节的理想线性梯度例子:P 已知且每轮不变,初态和重复偏差相同,测量无噪声,暂不施加幅值限制。令 λ > 0,则目标函数的 Hessian 为:
当 0 < η < 2 / λ_max(H) 时,这个正定二次目标上的梯度迭代收敛到唯一最小点。这里保证的是所定义的总目标函数;由于它同时惩罚补偿幅值,最终跟踪误差不一定为零。
这和“机器人每次跑都更好”之间还隔着条件。模型不准会让计算方向偏离真实梯度;噪声会进入更新;限幅会改变算法;学习曲线即使最终下降,也可能先出现不允许的中间峰值。数学上的渐近收敛,也不自动等于每一轮的最大轨迹误差都单调下降。
针对不同的模型、学习律、范数、约束与初态,收敛结论需要分别推导。较新的ILC 算法与应用教程也明确区分单轮时间行为、轮次间收敛以及各种假设的放宽。
7. 哪些误差适合学习,哪些需要别的方法
| 现象 | ILC 能利用的信息 | 实际需要做的处理 |
|---|---|---|
| 同轨迹同负载下反复出现的滞后 | 误差发生时刻和形状可重复 | 时间对齐,选择可靠学习频段 |
| 每次在相近阶段出现的柔性振动 | 激励与残余振动存在可重复关系 | 同时看运动段与停止后的振动 |
| 各轮独立的测量噪声 | 上一轮噪声无法预测下一轮 | 滤波、正则化、停止学习,配合反馈 |
| 起始角度或速度变化 | 原来保存的瞬态补偿可能不适用 | 复位并验证初态,或采用专门的初态鲁棒算法 |
| 换工具、载荷或明显改变速度 | 输入输出关系及振动频率可能变化 | 重新验证模型和学习结果 |
| 编码器看不到的末端偏差 | 学习器没有相应误差信号 | 增加合适测量或进行标定 |
“重复任务”不只是路径形状相同。经典时间参数化 ILC 还要求轨迹的时间安排有足够一致性;同一个圆若转速改变,直接按旧时间表播放补偿可能不再合适。
8. 重复定位、路径准确度与时间跟踪误差
重复定位精度关注相同测试条件下多次到达同一目标时,实际落点聚得有多紧。定位准确度还关心这些点整体离目标多远。一个机器人可能每次都稳定停在目标右侧 0.5 mm:重复性很好,却仍然有系统偏差。
运动过程中还要区分路径几何偏差和时间跟踪误差。一台机器人沿正确的圆走,但始终晚半拍,几何路径可以接近正确;与同一时刻的参考点比较,误差仍然很大。评价 ILC 时应说清楚测量的是关节误差、TCP 同时刻位置误差、轮廓误差,还是停止后的振动。
FANUC 的 Learning Vibration Control 资料展示了利用重复执行进行振动补偿的产品思路;2024 年的一项独立研究则在 FANUC M20iA 上结合外部 C-Track 780 测量研究动态路径学习。两者关注点和实现依据不同,不应把外部研究算法当作厂家商用控制器源码,也不能把抑振等同于绝对定位标定。FANUC 中文资料、M20iA 实验论文
9. 带着问题阅读,再做三道检查
推荐按这个顺序读:
- Bristow 等,2006 综述:先理解反馈与 ILC 的配合,以及
L、Q、噪声和鲁棒性。 - Shu 等,2024,FANUC M20iA 实验:重点检查测量装置、误差定义、对照实验和使用条件。
- Ronzani、Mamedov、Swevers,柔性物体学习控制:观察抑振如何与模型、运动轨迹和约束联系起来。
- Arimoto、Kawamura、Miyazaki,1984:回看利用上一轮运动误差改进下一轮输入的早期构造;该论文给出的是数值仿真验证。
检查 A: 手算例子的学习增益从 0.5 改成 3,会发生什么?
检查 B: 同一时间点每轮的测量误差都来自独立、零均值噪声,把它无限累加到补偿中合理吗?
检查 C: 关节编码器跟踪误差很小,就能认定夹爪的绝对位置准确吗?
展开答案
A:误差因子变为 1 − 0.8 × 3 = −1.4,符号交替且幅值变大。B:不能这样推断,上一轮噪声不能预测下一轮,盲目积累可能增加命令波动。C:不能,连杆尺寸、零位、工具坐标和结构形变等误差未必会出现在关节编码器误差中。
接下来打开三组实验,同时观察参考、实际、补偿和误差曲线,检查“学习发生在哪里”。