三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

杆球平衡系统运动补偿:从PID调参到系统抗干扰策略

杆球平衡系统运动补偿:从PID调参到系统抗干扰策略

最近在整理往年电赛资料时,发现一个很有意思的现象:很多队伍在准备“杆球平衡”这类经典控制题目时,会把绝大部分精力放在PID调参、算法仿真和硬件搭建上。这当然没错,但往往在比赛现场,决定最终成绩上限的,可能并不是你的控制算法有多精妙,而是你的系统能否扛住真实物理世界里的各种“意外扰动”——比如电机启动的抖动、传感器安装的微小形变、甚至裁判走动带来的地面震动。

“杆球平衡”的核心是稳定,但“运动补偿”要解决的,恰恰是“不稳定”本身。它不是一个独立的算法模块,而是一套贯穿硬件选型、机械结构、信号处理和控制律设计的系统性抗干扰策略。很多人以为补偿就是加个滤波或者调个前馈,结果在实验室跑得飞起的小球,一上赛场就“翩翩起舞”。问题出在哪?很可能从一开始,对“补偿”的理解就停留在表面了。

2026年电赛若真以“杆球平衡运动补偿”为题,其考察重点绝不会是让你复现一个平衡状态,而是在存在持续或突变外部扰动的条件下,如何让系统依然保持稳定,并快速准确地响应新的位置指令。这要求我们跳出“单点调参”的思维,建立一套从“现象感知”到“扰动归类”再到“分层抑制”的完整工程化应对框架。今天,我们就来拆解一下,面对这样一个题目,从理解到实现,真正需要关注的是什么。

1. 先厘清核心矛盾:我们要补偿的到底是什么“运动”?

拿到题目,第一反应不应该是去找代码,而是先拆解“运动补偿”这个目标里的“运动”究竟指什么。如果定义不清,后续所有工作都可能跑偏。

1.1 扰动来源的三层分解:内部、耦合与外部

在杆球平衡系统中,“运动”干扰可以按来源分为三层,每一层需要的补偿策略截然不同。

  1. 执行器与传动层扰动(内部):这是最基础也最常被忽视的一层。你的电机(通常是舵机或直流减速电机)本身就不是理想的。它可能存在:

    • 齿槽转矩:电机转子转动时磁阻变化引起的周期性转矩波动,在低速时尤为明显,会导致平台产生细微的、规律性的抖动。
    • 响应延迟与过冲:电机接收到控制指令后,从开始转动到达到目标速度需要时间,停止时也可能因惯性过冲。PID输出的是“期望力矩”,而电机给出的是“实际力矩”,两者之间的动态差异就是一种扰动。
    • 传动间隙:齿轮、联轴器等存在的微小旷量,会导致电机转动之初,平台并未立即运动(死区),或运动反向时存在空程。这相当于在控制回路中引入了一个非线性和滞后。
  2. 机械结构层扰动(耦合):这一层源于我们自己的设计。

    • 平台形变与振动:为了减轻重量,我们常使用3D打印或碳杆作为平台。当电机驱动平台快速运动时,材料会发生弹性形变并产生衰减振动。这个振动会通过平台直接传递给球,传感器(如摄像头)也会捕捉到平台的虚假运动。
    • 传感器安装误差:摄像头或OpenMV如果固定不牢,会随着平台一起振动或发生微小偏转,它测量到的“球位置”实际上是“球相对于晃动摄像头”的位置,引入了巨大的测量噪声。
    • 重心偏移:电机、电池、控制板的布局如果不均衡,会导致平台重心不在旋转中心,电机需要额外出力克服一个周期性的重力矩干扰。
  3. 环境与任务层扰动(外部):这是题目“运动补偿”最可能直接指涉的部分。

    • 基础扰动:人为用手轻推平台、敲击桌面、风吹等。这类扰动幅度、方向、时长随机,考验系统的抗干扰恢复能力。
    • 指令扰动:题目可能要求平台在保持球平衡的同时,进行指定的轨迹运动(如让平台匀速旋转、正弦摆动)。此时,平台的主动运动对球来说就是一个巨大的、持续的“扰动”。补偿的核心就从“抵抗”变成了“预测与跟随”。
    • 复合扰动:以上多种扰动同时发生。例如,在平台执行正弦运动指令(外部)时,电机自身的齿槽转矩(内部)和结构振动(耦合)也一并存在。

1.2 补偿的本质:是“对抗”还是“协同”?

基于以上分解,我们可以形成第一个关键判断:“运动补偿”不是一个统一的魔法,而是针对不同层扰动,采取“隔离”、“抑制”或“利用”等不同策略的组合。

  • 对于内部扰动,目标是隔离与建模。例如,通过前馈补偿来抵消已知的电机非线性(如死区补偿),或选用更高品质的电机、减速箱来从源头减少齿槽转矩和间隙。
  • 对于耦合扰动,目标是抑制与加固。通过机械设计(增加刚度、优化重心)、传感器减震安装、以及软件滤波(但需谨慎)来减少其对控制回路的影响。
  • 对于外部扰动(尤其是指令运动),目标是预测与协同。这是算法的核心战场。我们需要在控制律中,不仅考虑球自身的动力学,还要将平台的已知运动作为一个输入项考虑进去,让控制器“知道”平台即将怎么动,从而提前给出控制量,让球的运动与平台运动“协同”起来,而不是被动地“抵抗”。

很多队伍失败,是因为用处理“基础扰动”(被动抵抗)的思路,去处理“指令扰动”(主动协同)问题,导致系统响应迟钝、超调严重。因此,审题时务必明确题目要求的“运动”是哪一类。

2. 构建控制框架:在PID之上,我们需要什么?

假设我们明确了要补偿的是“平台执行指定轨迹运动”这类外部指令扰动。那么,一个只有球位置反馈的单环PID控制器就远远不够了。我们需要一个能感知并利用“平台运动信息”的框架。

2.1 从单环PID到串级与前馈复合控制

经典的单环PID(输入:球位置偏差,输出:电机控制量)对于静态平衡是有效的。但对于运动平台,平台运动本身会持续产生“虚假”的位置偏差。例如,平台向右加速,由于惯性,球会相对向左偏移。单环PID看到球偏左了,就会命令平台向左转去“追”球,这反而干扰了平台自身的轨迹,形成正反馈,导致失稳。

因此,必须引入平台状态信息。一个更强大的框架是:串级控制 + 前馈补偿

  1. 内环(速度环):控制对象是平台。输入是平台期望转速(由外环或轨迹发生器给出)与实际转速(由编码器测量)的偏差,输出是电机控制量(如PWM)。这个环负责让平台快速、准确地跟踪我们想要的运动。
  2. 外环(位置环):控制对象是。输入是球期望位置(通常为平台中心)与实际位置的偏差。但它的输出不再是直接给电机,而是作为平台期望运动的修正量。例如,球偏左了,外环计算出“需要平台稍微向右加速一点,以利用惯性把球‘甩’回中心”。这个修正量会叠加到预设的平台轨迹上。
  3. 前馈通道:这是“运动补偿”的精髓。我们已知平台的期望运动轨迹(位置、速度、加速度)。根据球的动力学模型,我们可以直接计算出,为了抵消该平台运动对球的影响,理论上需要给球施加什么样的控制力(或等价地,需要平台做什么运动)。这个计算出的量作为前馈量,直接叠加到控制输出中。

简单理解:前馈负责“预测和抵消”已知扰动(平台指令运动),串级PID负责“微调和纠正”剩余误差(建模不准、其他随机扰动)。前馈是开环的、基于模型的、快速的;反馈是闭环的、基于误差的、稳健的。

2.2 状态空间与LQR:更现代的视角

对于线性化后的杆球系统,我们可以将其表述为一个状态空间模型。状态变量通常包括球的位置、球的速度、平台的角度、平台的角速度。[x, x_dot, theta, theta_dot]

那么,平台的一个指令运动(如一个恒定的旋转速度theta_dot_ref)可以看作是对系统状态的一个持续激励或干扰。线性二次型调节器(LQR)控制器可以很好地处理这类问题。LQR通过求解一个优化问题(最小化状态偏差和控制能量的加权和),得到一个最优状态反馈矩阵K

控制律为:u = -K * (x - x_ref)

关键在于,当存在平台指令运动时,我们的参考状态x_ref不再是固定的[0, 0, 0, 0]。例如,若要求平台匀速旋转,则theta_ref会随时间线性增长,theta_dot_ref是一个常数。LQR控制器会自动计算出,为了将球稳定在中心,平台需要如何配合这个旋转运动。这本质上是一种最优的、全局的“运动补偿”。

选择建议:对于电赛这种快速实现的场景,串级PID+前馈更直观、更容易调试上手。可以先实现这个,达到基本要求。LQR性能上限可能更高,但对建模准确性更敏感,需要调节权重矩阵,适合作为进阶优化方案。

3. 从仿真到实物的关键跨越:那些仿真里没有的“坑”

算法在Simulink或Python里跑得完美,一上实物就崩溃,这是电赛的常态。问题往往出在从理想模型到物理世界的跨越上。

3.1 传感器融合与信号处理:获取干净的状态

你的控制器需要尽可能准确的球位置、球速度、平台角度、平台角速度。但传感器给出的都是带噪声的原始数据。

  • 球位置(视觉):摄像头处理有延迟,图像噪声、光照变化会影响识别。除了优化算法,更关键的是速率。你需要一个稳定的、足够高的帧率(如60fps以上)。速度的获取,不要直接用位置差分(噪声会被放大),可以使用观测器(如卡尔曼滤波器),融合位置测量值和系统模型,来估计出更平滑的速度值。
  • 平台角度/角速度:不要只用一个传感器!强烈建议使用IMU(惯性测量单元)结合编码器
    • 编码器(安装在电机上):测量电机轴转角,精度高、无漂移,但反映的是电机输出端的角度,经过减速箱和传动后,与平台实际角度可能有差异(由于间隙和形变)。
    • IMU(直接固定在平台上):测量平台的真实角度和角速度,动态响应好,但存在零点漂移,长时间积分会累积误差。
    • 融合策略:用编码器的高精度静态数据来校正IMU的漂移;用IMU的高频动态数据来弥补编码器传动链的柔性。可以用互补滤波或卡尔曼滤波进行融合。这是获得高质量平台状态信息的关键,也是实现高性能运动补偿的基础。

3.2 前馈模型的实际校准:理论值只是起点

前馈量依赖于模型。最基本的模型是:平台加速度a_platform会在非惯性系中产生一个“虚拟力”,导致球产生相对加速度a_ball = -a_platform(假设无摩擦)。为了抵消它,需要平台提供一个额外的加速度a_feedforward = k * a_platform

这个比例系数k理论上是1,但现实中由于球滚动摩擦、平台不平、传感器误差等因素,绝不会是1。它必须通过实验校准

校准方法

  1. 让平台做一个简单的正弦运动(幅度小一些)。
  2. 关闭前馈,只使用反馈控制,观察球的跟踪误差。
  3. 打开前馈,设置一个初始k(如0.8)。
  4. 运行系统,观察球的位置误差。如果球运动相位滞后于平台,说明前馈量不足,增大k;如果球运动相位超前甚至振荡,说明前馈量过大,减小k。反复调整,直到球的轨迹与平台运动协同一致,误差最小。

3.3 机械与硬件的“隐形”要求

  1. 平台刚度与重量:在强度和重量间取舍。刚度不够,振动大;重量太大,电机负载重、响应慢。碳纤维杆是很好的选择。固定所有部件,避免任何松动。
  2. 电机选型:扭矩要足够,但更重要的是低速平稳性。舵机有抖动问题,直流电机+编码器+高性能驱动(如DRV8833、TB6612)的方案往往更平滑。注意电机的减速比,太大的减速比会影响响应速度。
  3. 供电与布线:电机是大电流负载,必须与控制板、传感器分开供电,共地处理要做好。电源线要粗,避免因电压跌落导致单片机复位或传感器异常。电机驱动线、编码器线、IMU线最好分开捆扎,减少干扰。
  4. 安装隔离:将摄像头或OpenMV通过海绵、橡胶柱等减震材料与主平台隔离,避免测量被机械振动污染。IMU也应牢固安装在平台上,且安装平面与运动平面平行。

4. 系统调试与性能提升:一个迭代的流程

调试这样一个多环、带前馈的系统,需要章法,切忌所有参数一起调。

4.1 分层调试法

  1. 第零步:开环测试。不接控制算法,手动给电机发送指令,观察平台运动是否平滑,编码器、IMU读数是否正常,视觉识别是否稳定。确保硬件基础正常。
  2. 第一步:内环(平台速度环)调试。将外环断开,给定一个平台速度阶跃信号,只调内环PID,让平台能快速、无超调地跟踪速度指令。这是整个系统响应速度的基础。
  3. 第二步:静态平衡调试。将平台运动指令设为零,只使用外环(球位置环)控制,调试PID参数,让球能在静止的平台上稳定住。此时前馈量为零。
  4. 第三步:前馈补偿调试。加入一个非常缓慢、小幅度的平台周期运动(如0.1Hz,±5°)。先关闭前馈,观察球的摆动误差。然后开启前馈,按照前述方法校准前馈系数k。调试时,可以暂时将外环PID参数调得保守一些(比例系数小一点),避免系统不稳定。
  5. 第四步:动态协同调试。逐步提高平台运动的频率和幅度,同时微调外环PID和前馈系数,观察球是否能始终较好地跟踪平台中心。记录不同运动模式下的最大跟踪误差。
  6. 第五步:抗扰测试。在系统执行轨迹运动时,施加外部扰动(如轻吹小球),测试其恢复能力。可能需要适当加强外环的控制作用(如增大微分系数以提供阻尼)。

4.2 性能瓶颈分析与排查清单

当系统性能不达标时,按以下顺序排查:

现象可能原因排查方向
球始终向一侧漂移平台不水平;重心偏移;传感器零点不准;电机死区不对称。调水平;重新配重;校准传感器零点;检查电机驱动。
小球高频抖动平台机械共振;视觉处理噪声大;微分系数过大;电机本身抖动(舵机)。加固机械结构;图像滤波/降采样;降低D参数;更换更平滑的电机。
跟踪指令运动时,球滞后严重前馈量不足 (k太小);内环速度响应太慢;外环响应太慢。增大前馈系数;优化内环PID(提高带宽);适当增大外环比例系数。
跟踪指令运动时,球振荡发散前馈量过大 (k太大);外环参数过于激进(特别是微分);内环有振荡。减小前馈系数;降低外环P和D参数;先确保内环稳定。
静止稳定,一动就失控前馈未启用或模型严重不准;内外环采样周期不匹配;传感器数据不同步。检查前馈通道是否接通;统一所有控制任务的时钟;检查数据时间戳。
响应随机扰动恢复慢外环积分作用太弱或太强;系统阻尼不足。调整外环I参数;适当增加外环D参数(提供阻尼)。

4.3 从功能实现到竞赛提分

在满足基本要求后,要想获得更高分数,可以考虑以下方向:

  • 更丰富的轨迹跟踪:不仅能做匀速圆周运动,还能跟踪方波、正弦波、甚至任意绘制的轨迹。
  • 自适应与鲁棒性:设计参数自整定机制,当球的质量、平台摩擦力变化时,系统能自动调整。或者使用滑模变结构控制等鲁棒性更强的算法。
  • 人机交互与演示效果:增加蓝牙/Wi-Fi,用手机APP实时设定运动轨迹和参数,并显示球的位置、误差等数据。良好的演示效果很加分。
  • 系统辨识:赛前用程序自动激励系统并记录数据,拟合出更精确的系统模型参数,用于优化控制器和前馈。

“杆球平衡运动补偿”这个题目,表面上考的是算法,深层次考的是系统思维。它要求你不仅把球看作控制对象,更要把“平台-球”看作一个整体,把“指令”和“扰动”统一到“外部输入”的框架下去处理。从精准的传感器数据获取,到合理的控制架构选择,再到细致的分层调试和机械优化,每一个环节的疏漏都会在“运动”这个放大镜下暴露无遗。

真正的准备,不是去寻找一个“万能代码”,而是搭建一个可观测、可调试、可迭代的软硬件平台。先让系统在静止时稳如磐石,再让它学会在运动中协同共舞。当你理解了补偿的本质是“预测与协同”,而不仅仅是“抵抗与修正”时,你就已经拿到了解开这道题的第一把钥匙。剩下的,就是在不断的实验、观察和调整中,让你的系统真正理解,什么是“平衡中的运动”。

← 返回列表