误差分类:系统性误差与随机性误差
做轨迹跟踪控制这些年,我踩过最大的坑就是——分不清误差到底从哪来的。
你想想看,明明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的径向误差。我花了两个月调控制器、换滤波器,效果甚微。最后发现是减速器的背隙——典型的系统性误差。换了个精密减速器,问题直接解决。所以啊,先定位误差类型,再动手调参,这个顺序不能乱。
五、实战建议:拿到数据后怎么做?
好了,理论讲完了。如果你现在拿到一段跟踪误差数据,我建议你按这个流程走:
- 先看均值——均值大不大?如果明显偏离零,优先怀疑系统性误差
- 再看方差——方差大不大?如果波动剧烈,考虑随机性误差
- 做重复性测试——跑10次,看曲线是否一致
- 做速度扫描——改变速度,看误差变化趋势
- 做频谱分析——找特征频率,定位具体来源
我个人习惯,会把误差拆解结果记录成一张表:
误差来源 | 类型 | 贡献占比 | 处理方案
----------------|----------|----------|------------------
工具标定偏差 | 系统性 | 35% | 重新标定TCP
关节摩擦 | 系统性 | 20% | 前馈补偿
编码器噪声 | 随机性 | 15% | 低通滤波
地面振动 | 随机性 | 30% | 增加隔振垫
有了这张表,你就知道该先解决哪个问题了。而不是像无头苍蝇一样乱调参数。
核心思想:系统性误差靠补偿(标定、前馈、模型修正),随机性误差靠抑制(滤波、鲁棒控制、自适应)。搞反了方向,事倍功半。
嗯,关于误差分类就聊到这儿。记住一句话:误差不可怕,可怕的是不知道它从哪来的。下次拿到跟踪数据,先花10分钟做分类,你会发现调参效率翻倍。