Robot SysID Lab

K0 · 为什么需要系统辨识

机器人在仿真里动作流畅,换到实物上,却可能跟不上指令,或者在停下时多晃几下。遇到这样的偏差,我们需要知道:模型哪里不够准确,应该根据什么来修改它?

系统辨识就是从实验数据中了解系统、建立和改进模型。这一课先从一个关节的运动看起,理解我们为什么需要它,以及怎样判断一次改进是否有效。

同样的输入,为什么会有不同的运动

设想一个能够转动的关节。我们给它施加一段随时间变化的力矩,同时让一个模型预测它的位置和速度。如果模型中的惯量或阻尼不准确,预测的运动就会逐渐偏离观测。

下面的短片展示了这个现象。白色表示作为实验对象的系统,橙色表示我们最初使用的模型。两者接收相同的力矩,速度条也使用相同的刻度,可以直接比较。

模型偏差看起来是什么样?
阅读视频说明

同一个方程:J qdd + b qd = u。比较真实系统与初始模型。

同一段实际力矩驱动两个系统。白色表示真实系统,橙色表示初始模型。

下方速度条使用相同尺度。阻尼不正确时,运动响应会明显不同。

这里的实验对象也是模拟出来的。这样我们就知道它的真实参数,可以在辨识后核对答案;负责估计参数的程序只能使用实验数据。后续课程会逐步走向真实硬件。

图纸告诉了我们什么,还缺少什么

图纸和 CAD 模型可以提供形状、尺寸以及质量分布的估计。但一个关节怎样运动,还受到摩擦、控制器、指令延迟和负载变化的影响。有些特性需要测量,有些还会随着使用条件改变。

因此,即使模型看起来合理,它也可能预测得不够准确。系统辨识让我们用实际记录的输入和运动来检验模型,并估计其中不确定的量。在刚才的例子中,这些量就是惯量和阻尼。

怎样用实验改进模型

先选定一个问题,例如“这个关节有多难加速,运动时又会损失多少能量”。再给关节施加已知的力矩,记录它怎样运动。

接下来调整模型参数,使模型在同样输入下的预测尽量接近记录的数据。这个过程叫作拟合。实验本身也很重要:如果关节一直缓慢匀速转动,我们就很难看出惯量对加速过程的影响。

拟合完成后,要换一段未用于调参的运动来检查预测。这一步叫作验证。它帮助我们判断模型是否学到了可以用于新运动的规律。

参数更准、预测更准、真机表现更好

这三件事有关联,但需要分别检查。

参数是否准确,需要有可信的参考值。合成实验知道真实参数,所以可以直接比较。在硬件上,我们往往需要独立测量,才能确认拟合出的数值是否对应某个物理量。

预测是否准确,需要用新的实验数据检验。即使某个参数不容易单独确定,模型仍可能在特定范围内预测得很好;也可能在一条轨迹上很准,换一种运动就出现偏差。

控制器或策略在真机上是否更好,还需要单独的硬件评估。模型预测变好,为这一步提供了更好的起点,但不能替代它。

在接下来的 L0 中,我们先检查参数和运动预测,把结果限制在这个简单实验能够回答的范围内。

想一想

一位同学调整模型后,发现它几乎完全重现了用于拟合的运动,于是说:“这个模型已经能预测关节的运动了。”你还想看什么结果?

查看参考思路

先看一段未参与拟合的运动。输入的变化应当能检验我们关心的特性,例如换一组频率或幅值。比较改进前后的预测误差,并说明模型在哪些条件下有效。

如果根据这次验证结果继续调参,这份数据就参与了模型开发。要再做一次独立检验,就需要另外保留一份数据。

如果还不能说出改变了什么条件,先找一段完整的留出运动,并在看分数前写下它的输入范围。当你能说出这次对比支持的工作范围时再继续。

接下来学什么

我们已经有了一个目标:让模型根据输入预测系统的运动。下一课 K1 · 系统辨识基础 会把其中的输入、状态、观测和参数逐一说明,为第一个实验做准备。