Zhejiang University RoboMaster Vision

PID 控制:学习与工程实践

用直观方式理解 PID,并区分自瞄控制器调参与下位机电机 PID 调参。

Cicada约 8 分钟
#电控#控制#PID#自瞄#调参

PID 是让系统“根据目标和现状的差距,持续修正动作”的一种方法。视觉组不需要从零编写电机控制代码,但需要知道:自瞄给出的目标如何最终变成云台动作,出现问题时应先判断属于视觉、上位机控制器,还是下位机 PID。

本文分为两个部分:

  • 学习部分:用最少的数学建立 PID 的直觉;
  • 工程部分:把 PID 放回自瞄链路,说明视觉新人怎样观察、定位并参与调参。

第一部分:学习 PID

1. PID 在解决什么问题

假设希望云台转到一个方向。控制器会不断比较“想要的位置”和“现在的位置”,两者的差叫作误差:

误差 = 目标值 − 反馈值

误差不为零时,控制器就给电机一个输出;云台运动后,传感器又把新的位置反馈回来。这个反复测量和修正的过程就是闭环控制

flowchart LR
    target[目标角度] --> compare[比较目标与反馈]
    feedback[当前角度 / 速度] --> compare
    compare --> pid[PID 控制器]
    pid --> output[电流扭矩或速度指令]
    output --> plant[电机与云台]
    plant --> feedback

这里的“反馈”非常重要。没有反馈,只按预先给定的输出转动,叫开环;有了反馈,系统才有机会抵抗负载变化、摩擦和外部扰动。

2. P-I-D 的直观含义

PID 由比例 P、积分 I、微分 D 三部分组成。可以把它理解为三种不同的纠偏习惯:

部分它看什么直观作用过大时的常见现象
P(比例)当前差了多少差得越多,推得越用力来回摆动、振荡
I(积分)过去一直差多少处理长期“总差一点”的偏差越积越多,冲过头、低频晃动
D(微分)误差变化得有多快提前刹车,增加阻尼放大噪声、高频抖动

常见的数学形式为:

输出 = Kp × 误差 + Ki × 误差的累积 + Kd × 误差变化速度

不用急着推导公式。先记住这三个判断就足够:

  • 反应太慢,先怀疑 P 太小,或输出被限幅;
  • 到目标后冲过头、来回摆,先怀疑 P 太大;必要时少量增加 D;
  • 稳定后总有固定偏差,才考虑少量增加 I。

I 会不断累积,因此实际工程一般会给积分项设置上限;D 容易受到传感器噪声影响,因此也不是越大越好。

3. 串级 PID:云台为什么常有两层

云台常使用串级控制:外层看角度,内层看速度。外层只决定“应该以多快的速度转”,内层再决定“应该给电机多大的力”。

flowchart LR
    angle_target[目标角度] --> angle_pid[角度环 PID]
    angle_feedback[角度反馈] --> angle_pid
    angle_pid --> velocity_target[目标速度]
    velocity_target --> velocity_pid[速度环 PID]
    velocity_feedback[速度反馈] --> velocity_pid
    velocity_pid --> current[电流 / 扭矩指令]
    current --> motor[电机与云台]
    motor --> angle_feedback
    motor --> velocity_feedback

因此“PID 参数”没有脱离上下文的意义:角度环和速度环的参数不能混用,不同电机、减速比、负载和单位下的数值也不能直接照抄。

4. 推荐学习资料

先看视频建立直觉,再用文章补充细节即可,不必一次学完全部控制理论:

看完后,至少应能说清目标、反馈、误差和输出分别是什么,并能用“P 太小 / P 太大 / I 积累 / D 放大噪声”描述基本现象。

第二部分:在自瞄工程中怎样理解和参与调参

5. 先分清:自瞄控制器不是电机 PID

自瞄工程中的控制器位于视觉与 C 板之间。它接收跟踪结果和云台当前姿态,完成坐标变换、目标预测、弹道补偿与安全限制,最后向下位机发送目标 pitch、yaw 等指令。

flowchart LR
    tracker[检测跟踪与预测] --> controller[自瞄控制器]
    gimbal_feedback[下位机反馈的云台姿态] --> controller
    controller --> command[目标 pitch / yaw 与工作状态]
    command --> board[C 板下位机]
    board --> motor[角度环速度环 PID 与电机]
    motor --> gimbal_feedback

图中最后一段才是实际驱动电机的 PID 闭环。自瞄控制器输出的是目标,并不直接替代下位机的角度环、速度环 PID。

可以用下面的表先把问题归层:

现象优先检查的层典型原因
静止目标始终偏向一侧标定、坐标系、固定补偿相机/枪口外参、零位或方向约定错误
移动目标总落后或总超前跟踪预测与控制器时间戳、延迟估计、弹道参数、预测时间
目标角度指令本身跳变检测、跟踪或控制器平滑目标切换、跟踪不稳、限速或平滑参数不合适
目标角度平滑,但电机高速抖动下位机 PID、传感器、机械P/D 过大、反馈噪声、机械间隙
指令正确但云台不动或反向下位机状态、接线与坐标定义未使能、限位、方向或反馈符号错误

6. 从控制器输出开始观察

调参前不要先改参数。先在现有调试工具中同时观察三类量:

  1. 输入:跟踪器是否稳定给出同一目标,目标的时间戳是否连续;
  2. 控制器输出:发送给 C 板的目标 pitch、yaw 是否连续、是否合理;
  3. 反馈与执行结果:下位机返回的实际角度、模式和电机响应是否跟得上。

这样能把“看起来没跟上”拆开:是视觉没有稳定目标,还是控制器给出的目标不对,抑或下位机没有执行该目标。一次只改变一个层级,才不会把两个问题互相掩盖。

7. 自瞄控制器中可粗略调整的内容

控制器配置通常包含弹速、发射补偿角、俯仰限制、预测时长或指令平滑等参数。新人可以在负责人确认后从这些高层参数开始理解和验证:

参数类别它影响什么何时怀疑它
固定 pitch / yaw 补偿给最终目标角叠加固定偏置多距离、多次测试都稳定偏向同一方向
弹速与弹道参数弹道下坠补偿距离越远,俯仰误差越明显
预测时间与延迟估计对移动目标的提前量静态准确,运动时稳定落后或超前
指令限幅、限速或平滑防止目标角突变跟踪偶尔切换时枪口抽动,但不应借此掩盖错误输入
俯仰/安全限制防止给出不可执行或危险指令目标接近机械限位或异常数据出现时

这些不是 PID 的 Kp、Ki、Kd。它们改变的是“下位机应该去哪里”,而下位机 PID 决定“怎样稳定地去那里”。

8. 一个安全的调试顺序

以静止目标到运动目标的顺序测试,并始终保存原始配置和测试记录:

  1. 先验证方向:小幅改变目标时,目标 pitch、yaw 与实际云台运动方向是否一致;不一致先查坐标系和符号。
  2. 再验证静态偏差:固定距离、固定目标下观察偏差是否恒定;恒定偏差优先查标定或固定补偿。
  3. 再验证距离变化:近、中、远距离分别记录误差;随距离系统性变化时查弹速和弹道参数。
  4. 最后验证运动目标:记录目标速度、时间戳、控制器目标角和实际角;持续落后或超前时查预测时间与延迟。
  5. 确认电机响应:若下位机收到的目标平滑正确、实际角仍振荡,再由电控同学处理角度环/速度环 PID、反馈滤波和机械问题。

调参时一次只改一个参数,改动要小,并写下测试条件、参数前后值、现象和结论。云台测试必须遵守队内安全流程:低功率、执行器受控或架空、急停有效;发现方向反了、异常发热或持续振荡时立即停止。

对于视觉成员,最有价值的贡献不是直接改底层 PID,而是提供能复现的问题证据:目标数据、控制器输出、实际姿态、时间信息和视频。把这五项交给电控,就能让“感觉不跟手”变成可定位、可验证的问题。

返回入组培训
|