问题描述

最近在开发一套云台自动追踪算法,但在实际测试中发现了一个非对称性跟随问题

  • 向左转动时: 云台基本能跟上目标移动速度,目标偏离中心点约 10%。

  • 向右转动时: 云台明显跟不上目标,目标偏离中心点达到了 30% 左右。

如下图所示,屏幕中心的播放按钮即为我们的理想对准点:

情况 A:向左追踪

目标与中心点的偏差较小,表现正常。
Img

情况 B:向右追踪

目标严重偏离中心,云台响应滞后。
Img

核心疑问: 为什么同一套算法,左右移动的偏移量会存在如此大的差异?


实现原理

算法的逻辑链条如下:

  1. 位置变化: 计算目标在屏幕上的归一化移动速度。

  2. 速度转换: 将移动速度转换为所需的角速度。

  3. 指令下发: 将角速度映射到云台对应的控制档位,通过蓝牙发送指令。

Img


分析与猜想

针对这一现象,我最初提出了四个猜想:

  1. 系统延迟: 识别、计算到蓝牙传输存在滞后。但细想后排除,因为如果是延迟问题,左右转动应该都会滞后,不会只出现在单侧。

  2. 硬件阻尼/Bug: 怀疑云台硬件在向右转动时存在某种物理阻力,或者固件在处理负电压方向时有 Bug。

  3. 角速度算法: 怀疑计算逻辑有误。但也基本排除,因为左右跟随使用的是同一套逻辑。

  4. 拟合公式误差: 云台的档位与速度关系是通过数据测量后进行线性拟合得到的,怀疑拟合精度不足。


实验验证

我重点研究了第 1 点(验证链路稳定性)和第 4 点(验证拟合准确性)。

首先,我编写了一个测试页面,手动发送固定速度档位,观察云台的实际表现是否与预期的“档位—角速度”映射表一致。 测试结果显示:硬件响应基本稳定,映射关系与原始表一致,排除了硬件突然“抽风”的可能性。
Img
接着,我回到 Excel 对拟合公式的理论计算值实际测量值进行了二次比对。 真相大白: 图表显示,实验值与公式计算值之间存在明显偏差,部分区间偏差达到了 10% 甚至更高。正是这看似微小的拟合误差,在闭环追踪过程中被不断放大,导致了向右跟随时的严重滞后。
Img


总结

其实在最初进行函数拟合时,我已经发现了部分测量点与函数曲线不完全重合。但当时觉得这点偏差“应该影响不大”,就直接忽略了。

没成想,这个被我“由于偷懒而忽略”的小细节,最后让我苦思冥想了好几天。这次教训告诉我也提醒大家:在精密控制算法中,任何细微的偏差都可能在特定条件下演变成巨大的 Bug。