同一个学习更新,放到单关节、两连杆画圆、带柔性输出的运动上,会产生什么不同现象?本篇把每轮的参考、实际输出、学习补偿和误差保留下来,让“逐次改善”成为可以检查的数据。先观察,再解释曲线,最后尝试故意把学习步长调得过大。
前置:01 ILC 原理 · 后续:03 工程集成 · 数学关联:机械臂动力学与控制
1. 页面显示的是什么实验
页面读取已经计算好的教学数据。选择学习档位、拖动轮次滑杆,或使用前后切换与重置,是在比较对应的预计算结果;页面不自动播放,浏览器也不实时训练机器人。三个模型均以关节参考修正为学习量,单位是 rad,反馈控制的效果已经包含在闭环伺服等效模型里。
它们用于解释 ILC 的时间对齐、学习步长和重复条件,不含 ROS 接口或真实硬件连接,也不是 FANUC 商用学习控制算法的复现。每轮都重新设置全部内部初态,参考轨迹、扰动和采样设置保持相同;实验没有加入随机测量噪声。
| 实验 | 单轮时长/采样间隔 | 输出 | 主要观察 |
|---|---|---|---|
| 单关节 | 5 s / 0.02 s |
关节角,rad | 重复滞后与输出偏差怎样被补偿 |
| 两连杆 | 6 s / 0.025 s |
两关节角,rad;末端位置,m | 关节误差怎样变成画圆偏差 |
| 柔性输出 | 6 s / 0.02 s |
柔性等效角,rad | 运动停止后为什么仍会振动 |
每种档位从 k = 0 的零学习补偿开始,最多进行 20 次更新;第 20 轮已经使用了更新 20 次后的补偿。采样点显示在 dt、2dt……T;初始 t = 0 状态单独定义,不应把第一个已采样输出当成初态。
2. 三组实验共用的学习步骤
本篇数据把学习修正记为 u_k,它就是原理篇的 f_k。送给等效闭环伺服的是:
整轮完成后,用有限时域输入输出映射的转置更新:
这里的 P 是零初态下“参考修正到输出”的映射;实际运行的非零初态单独计入输出。学习器使用的模型与生成输出的模型一致,所以这是理想、可重复条件下的教学对照。
实际实验没有额外的 Q 滤波器,也没有正则化项。 它采用平方跟踪误差的梯度更新,不求解原理篇介绍的完整 norm-optimal 子问题。把后面的改善归因于“Q 滤波”或“在线辨识”都会读错实现。
三个档位的区别如下:
| 档位 | 步长如何选择 | 应当怎样阅读结果 |
|---|---|---|
| 保守 | α = 0.35 / B |
更新较小,通常需要更多轮 |
| 默认 | α = 1.5 / B |
在已知模型给出的边界内加快学习 |
| 激进 | α = 2.25 / λ_est |
故意越过常用梯度稳定区间,观察误差是否放大 |
B 是 ‖P‖₂² 的保守上界,来自有限时域脉冲响应;λ_est 是幂迭代得到的谱估计,不能把它当作认证的上界。两关节实验对整体分块对角映射使用同一个 α,上界取两个通道的较大值。
默认、保守档的结论针对全时域角度误差二范数。它不自动保证最大误差、某一时刻误差、末端位置误差或单独的停稳窗口指标也逐轮下降。
激进档若出现输出角或修正幅值超过 20 rad,会保留触发阈值的有限数值轮次,再停止后续更新;曲线没有被截成“看起来稳定”的形状。非有限候选数据则不输出。这个阈值只是教学计算保护,不是机器人关节限位或硬件安全策略。
3. 实验一:学会补偿单关节的重复滞后
把闭环伺服简化成时间常数 τ = 0.14 s 的一阶系统。它能跟随参考,但参考变化较快时会滞后。实际计算使用一阶系统的离散更新:
第 n 个命令作用后才记录输出,图中 r[n]、y[n] 对齐到显示时刻 t = (n + 1)Δt;数组从 n = 0 开始,但第一个输出时间为 Δt。每轮初态为 x[0] = 0。用于观察的平滑角度参考为:
每轮还加入同一段输出扰动:
这个扰动直接加在输出上,用来表示可重复偏差;它没有被宣称为某个真实电机的摩擦或重力力矩。
先选第 0 轮,比较参考与实际曲线。然后查看后续轮次:补偿不再为零,变化的位置应当与原先的误差及系统的延迟有关。补偿曲线和误差曲线不必完全同形,因为在较早时刻修改输入,会影响后面的多个采样点。
再切到保守档,用相同轮次与默认档比较。最后观察激进档:短时间内误差小一点,不意味着后面也会保持改善;不能只截取最好看的前几轮。
这一组最值得回答的问题是:“学到的是一个固定角度偏置,还是一条随时间变化的修正?”直接看补偿曲线就能判断。
4. 实验二:关节角误差怎样让圆变形
两段杆长都为 1 m。参考圆心为 (0.85, 0.4) m,半径为 0.35 m;使用五次平滑时间标度,在前 4.8 s 走完一圈,随后保持到 6 s。
先通过 2R 逆运动学得到固定肘部分支的关节参考,再分别经过时间常数为 0.10 s、0.16 s 的一阶闭环伺服。两个输出角加入固定的小幅重复扰动后,再代入正运动学:
因此,同样大小的关节角误差,在不同姿态下会转化成不同方向和大小的末端偏差。局部近似就是前一专题讲过的 Δp ≈ J_p(q)Δq。
这一实验使用两个独立的关节等效伺服加正运动学,不包含完整的耦合刚体动力学、重力、接触与电机转矩控制。看到机械臂图形,并不意味着后台正在求解完整机器人动力学。
建议按这个顺序检查:
- 在第
0轮看实际轨迹与参考圆是否重合。 - 选择后续轮次,同时比较两关节角误差和末端位置误差。
- 分清“沿圆迟到”和“偏离圆形”:同一时刻的位置距离会同时受到二者影响。
这里的 positionRms 是每个采样时刻实际末端与同一时刻参考点的欧氏距离 RMS,单位为米。它不是实际点到整条圆曲线的最短距离,也不是 ISO 重复定位精度。
5. 实验三:已经停下来,为什么还在摆
本组把时间常数 0.08 s 的驱动伺服,与一个低阻尼二阶角度输出串联。柔性部分的连续原型是:
其中 c 是驱动角,q 是柔性输出角,原型参数为 ω_n = 8 rad/s、ζ = 0.07。程序对驱动采用精确一阶离散,对柔性部分采用半隐式 Euler 更新:先更新角速度,再用新角速度更新角度。学习与执行使用同一个离散模型,不能把绘制的数据当作连续方程的解析解,也不能把原型频率直接当成离散轨迹的精确振动频率。完整递推式记在仓库的 docker/iterative-learning-lab/README.md。
参考在 0.4 s 开始上升,经过 1.2 s 的五次平滑过渡达到 0.7 rad;从 1.6 s 到 6 s 保持不变。初始驱动角、柔性输出角和输出角速度每轮都重置为零,未加入额外输出扰动。
要分别看两个阶段:运动段内,输出能否跟上参考;保持段内,即使目标不再变化,输出是否还在目标附近来回波动。ILC 可以利用前一轮的振动规律修改整段输入,使后续输出更接近目标,但它没有改变模型的物理阻尼比。
两个保持段指标回答不同问题:
| 指标 | 本实验的计算方式 | 能发现什么 |
|---|---|---|
| 保持段误差 RMS | 在 [1.6, 6] s 上对目标减输出求 RMS |
同时受到残余振动和偏置影响 |
| 保持段输出峰峰值 | 该窗口内输出最大值减最小值 | 窗口内整体波动范围 |
峰峰值很小的曲线,也可能停在错误的位置,因此要和误差 RMS 一起看。相反,全程 RMS 下降,也不意味着每个停止阶段的振动峰值都必然下降。
这里的驱动角和柔性输出角单位都是 rad。它是展示残余振动机制的等效模型,没有建立实际长工具的形状、柔性模态位移或空间末端加速度;不能把图里的数值直接换算成 FANUC 末端振动毫米数。
6. 指标应该怎样比较
设第 k 轮有 N 个采样点、m 个角度通道,页面的全程角度 RMS 为:
最大绝对误差则取所有采样和通道中最大的 |e|。两者可能给出不同排序:RMS 小,说明总体误差能量低;某一次短促尖峰却可能仍然很大。学习补偿幅值也要一起观察,避免只看输出,忽略为了获得改善而付出的命令变化。
同一实验比较档位时应使用相同轮次和相同指标。不同实验之间,关节角 rad、末端位置 m 和保持段波动是不同的量,不能直接凭数值大小排“谁控制得更好”。
本次预计算数据的实际结果
下表来自页面使用的完整 JSON 数据,数据版本为 finite-horizon-reference-ilc-v1;比较默认档的第 0 轮与第 20 轮,数值按显示精度取舍。
| 场景与指标 | 第 0 轮 | 第 20 轮 | 单位 |
|---|---|---|---|
| 单关节:全程角度 RMS | 0.0524324 | 0.0000331345 | rad |
| 2R:全程角度 RMS | 0.0526723 | 0.0000103680 | rad |
| 2R:同一时刻末端位置 RMS | 0.0613628 | 0.0000161383 | m |
| 柔性:全程角度 RMS | 0.0335343 | 0.0124441 | rad |
| 柔性:保持段误差 RMS | 0.0149710 | 0.00169196 | rad |
| 柔性:保持段输出峰峰值 | 0.0750570 | 0.00969673 | rad |
单关节和 2R 能取得很小的数值,依赖于模型完全已知、初态完全重复且没有测量噪声等理想条件;这不是实体机器人达到相应精度的证据。柔性系统学得更慢,也提醒我们不能把同样的轮次数当成同样的学习难度。
激进档的结果保留了失败现象:第 20 轮的全程角度 RMS,单关节为 1.23960 rad,2R 为 1.15867 rad,柔性为 0.972321 rad,都大于各自基线。当前这三组数据均完成了 20 次更新,没有触发提前停止;“未越过 20 rad 计算阈值”显然不等于“学习有效”。
7. 与工业机器人的联系
本篇保留了三件与工程相关的事情:保存整轮误差、根据输入输出关系更新下一轮命令、验证更新后的结果。真正的工业实现还需要处理测量时间戳、模型误差、反馈带宽、限幅和运行条件变化,详见工程集成篇。
可以用两类一手资料对照本实验:
- FANUC M20iA 的 AILC 动态路径实验:使用 C-Track 780 外部测量,关注真实 TCP 位置和姿态,与本页关节等效模型不同。
- 柔性物体搬运的学习控制研究:把学习模型与点到点轨迹设计结合,处理柔性物体残余振动;研究算法和本页的简单梯度更新也不相同。
论文中的改善结果依赖各自平台、轨迹和对照条件,不应拿来当作这三个教学模型的实测性能。
8. 自己解释三条曲线
练习 A: 两个独立关节的全程角度 RMS 降低后,末端同一时刻的位置 RMS 是否一定按相同比例降低?
练习 B: 柔性输出在保持段完全不振,但一直停在 0.65 rad,目标为 0.7 rad。两个保持段指标分别说明什么?
练习 C: 把已学好的补偿用于更重的工具,或只把动作时间缩短一半,能否根据本页曲线直接保证仍然改善?
展开检查思路
A:不一定。正运动学是非线性的,局部雅可比也随姿态变化,各方向误差的组合不同。B:输出峰峰值为零,保持段误差 RMS 为 0.05 rad;无波动不等于到达目标。C:不能,输入输出动态或时间对齐关系已经改变,应重新验证模型、任务条件和学习结果。