误差分类:系统性误差与随机性误差

做轨迹跟踪控制这些年,我踩过最大的坑就是——分不清误差到底从哪来的。

你想想看,明明PID参数调得差不多了,轨迹还是偏。有时候偏得很有规律,有时候又忽大忽小。这时候你要是盲目调参数,大概率越调越乱。

我个人习惯,拿到跟踪数据第一件事:先把误差拆成两类——系统性误差和随机性误差。这两兄弟性质完全不同,处理手段也天差地别。

轨迹跟踪误差 系统性误差 随机性误差 标定误差 模型失配 摩擦/间隙等 测量噪声 外部扰动 量化/抖动 核心区分特征 系统性误差 → 有规律、可重复、可补偿 随机性误差 → 无规律、不可预测、需滤波/鲁棒

一、系统性误差:那个「总往一边偏」的坏毛病

系统性误差,说白了就是有规律的偏差。你让机器人走100次同样的轨迹,它每次都偏同一个方向、同一个幅度。这不是偶然,是系统本身的问题。

典型表现:跟踪误差的均值明显不为零,且在不同速度、不同位置下呈现固定模式。

1.1 标定误差——最冤的一种

我在项目里遇到过最典型的例子:一台六轴机械臂,走直线轨迹总是末端偏右2mm。查了三天,最后发现是工具坐标系标定时,TCP的Z轴偏了0.5度。

标定误差的来源其实很常见:

  • 运动学参数标定不准——连杆长度、关节零点偏了那么一点点
  • 传感器安装偏差——相机装歪了、IMU没对中
  • 手眼标定残差——相机到机械臂的变换矩阵有误差

我的经验:标定误差有个特点——跟运动速度无关。你跑慢跑快,它偏的量基本不变。这是区分标定误差和动力学误差的好办法。

1.2 模型失配——理论跟现实打架

模型失配,就是你的控制模型跟实际系统不一样。我刚开始做移动机器人时,用的两轮差速模型,总以为轮子不打滑。结果在瓷砖地上一跑,转弯半径永远比模型算的大一圈。

常见的模型失配包括:

  • 动力学参数不准——质量、惯量、质心位置跟设计值有出入
  • 摩擦模型简化——实际摩擦是Stribeck曲线,你用了库仑+粘滞
  • 柔性忽略——把关节当成刚性的,实际有弹性变形

注意:模型失配导致的误差,通常随速度/加速度增大而增大。低速时可能不明显,一跑高速就露馅了。我有个项目,AGV空载时跟踪精度±2cm,满载直接飙到±8cm——这就是模型没考虑负载变化。

二、随机性误差:那个「忽大忽小」的捣蛋鬼

随机性误差,就是没有固定规律的偏差。你重复跑100次,每次误差都不一样。这种误差没法直接补偿,只能靠滤波或者鲁棒控制来压制。

典型表现:误差的方差较大,均值接近零,但单次轨迹的波动明显。

2.1 测量噪声——传感器天生自带

所有传感器都有噪声。激光雷达的测距抖动、编码器的量化误差、IMU的零偏漂移……这些都是随机性的。

我记得有一次调试四足机器人,站立时腿的位置一直在微抖。一开始以为是控制周期问题,后来发现是关节编码器的量化噪声被微分后放大了。嗯,加了个低通滤波器就解决了。

2.2 外部扰动——环境不配合

这个就更多了:

  • 地面不平带来的颠簸
  • 风载荷(户外无人机尤其明显)
  • 电缆拖拽力变化
  • 负载重心晃动

外部扰动有个特点——频率通常较低,而且跟系统状态有关。比如机械臂在某个位形下对扰动特别敏感,换个姿势就没事了。

三、怎么区分?我常用的三个方法

光讲理论没用,关键是怎么在实际数据里把它们分开。我分享三个实战方法:

方法一:重复性测试

让机器人跑同一段轨迹N次(建议至少10次),记录每次的误差曲线。

  • 如果误差曲线几乎重合 → 系统性误差占主导
  • 如果误差曲线散得很开 → 随机性误差占主导
  • 如果趋势一致但每次有波动 → 两者都有

方法二:速度扫描

改变运行速度,观察误差变化:

误差类型 低速时 高速时
标定误差 基本不变 基本不变
模型失配 较小 明显增大
测量噪声 占比增大 占比减小
外部扰动 影响大 影响相对小

方法三:频谱分析

把误差信号做FFT:

  • 低频成分(<1Hz) → 多半是系统性误差或低频扰动
  • 中频成分(1-10Hz) → 可能是模型失配或结构谐振
  • 高频成分(>10Hz) → 测量噪声或高频振动

一个小技巧:我曾经在调试一个SCARA机器人时,发现误差频谱在2.3Hz有个尖峰。查了半天,发现是皮带轮的偏心导致的周期性误差——这其实算系统性误差,但因为频率较高,很多人误当成随机噪声处理了。

四、影响权重:谁才是「罪魁祸首」?

这个问题没有标准答案,但我根据多年经验给个大致参考:

应用场景 系统性误差占比 随机性误差占比 主要矛盾
高精度工业机器人(±0.02mm) 70-80% 20-30% 标定精度
移动机器人/AGV 40-50% 50-60% 轮子打滑+地面扰动
无人机/飞行器 30-40% 60-70% 风扰+IMU噪声
协作机器人(力控) 50-60% 40-50% 摩擦+柔性

我曾经犯过的错:有个项目,机器人走圆弧轨迹总是有0.5mm的径向误差。我花了两个月调控制器、换滤波器,效果甚微。最后发现是减速器的背隙——典型的系统性误差。换了个精密减速器,问题直接解决。所以啊,先定位误差类型,再动手调参,这个顺序不能乱。

五、实战建议:拿到数据后怎么做?

好了,理论讲完了。如果你现在拿到一段跟踪误差数据,我建议你按这个流程走:

  1. 先看均值——均值大不大?如果明显偏离零,优先怀疑系统性误差
  2. 再看方差——方差大不大?如果波动剧烈,考虑随机性误差
  3. 做重复性测试——跑10次,看曲线是否一致
  4. 做速度扫描——改变速度,看误差变化趋势
  5. 做频谱分析——找特征频率,定位具体来源

我个人习惯,会把误差拆解结果记录成一张表:

误差来源        | 类型     | 贡献占比 | 处理方案
----------------|----------|----------|------------------
工具标定偏差    | 系统性   | 35%      | 重新标定TCP
关节摩擦        | 系统性   | 20%      | 前馈补偿
编码器噪声      | 随机性   | 15%      | 低通滤波
地面振动        | 随机性   | 30%      | 增加隔振垫

有了这张表,你就知道该先解决哪个问题了。而不是像无头苍蝇一样乱调参数。

核心思想:系统性误差靠补偿(标定、前馈、模型修正),随机性误差靠抑制(滤波、鲁棒控制、自适应)。搞反了方向,事倍功半。

嗯,关于误差分类就聊到这儿。记住一句话:误差不可怕,可怕的是不知道它从哪来的。下次拿到跟踪数据,先花10分钟做分类,你会发现调参效率翻倍。

可可精品资料库