Skip to content

控制论导论:先把回路画出来

WARNING

🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。

控制论要解决的不是「算一个最优动作」,而是:系统会自己漂,你必须用测量把漂拉回来。本章只建立三件事:开环为什么不够、闭环误差从哪来、极点在左半平面还是右半平面如何决定阶跃长什么样。PID 细节见 PID;把植物写成矩阵见 状态空间


一、开环猜输入,闭环看误差

开环是「模型说该用力 u,就一直用这个 u」。植物参数稍错、有外力、初值不对,输出就会漂,没有人告诉控制器「现在差多少」。

闭环把输出 y 送回来,和参考 r 相减:

e=ry.

控制器只看 e,再决定作用到植物上的 u。单位反馈时传感器 H=1

闭环反馈回路

图解说明:左端参考 r(t) 与反馈 y 相减得 e;控制器 Cu,植物 Py;虚线把 y 送回。比较 ry,用误差驱动系统趋近期望。

信息必须沿回路走一圈,误差才有机会被消掉。开环没有这圈:你把「正确答案」一次性交给植物,之后就瞎了。

demo 的植物是质量-弹簧-阻尼

mx¨+cx˙+kx=u,

参数 m=1c=0.4k=2,参考 r=1。开环给稳态力 u=kr=2:模型完全对时,稳态确实停在 x=1。闭环用比例 u=KpeKp=8:稳态会停在 0.8 而不是 1——弹簧仍在把质量往 0 拉,纯 P 留静差。这不是 bug,是后面要加积分项的原因。

保姆级数字例。 稳态时速度、加速度都是 0,植物退化成 kxss=uss

策略ussxss
开环 u=kr22/k=1(模型对才成立)
纯 P u=Kp(rx)Kp(1xss)Kp/(Kp+k)=8/10=0.8

开环「看起来更准」,前提是 k 你猜对了。若真实弹簧是 k=2.4,开环仍出力 2,稳态变成 2/2.40.83,没人纠正。闭环仍然测量 x,静差公式自动用真实k:只是 0.8 变成 8/(8+2.4)0.77,不会漂到完全错误的世界里。对模型误差的这点韧性,就是反馈的第一笔分红。

机器人关节伺服、ROS 2 里的跟踪、世界模型 里「预测再纠偏」,都是这张图的变体。

卡点。 闭环不是免费午餐。反馈把传感器噪声、时延一并绕进回路;增益太大,稳定的植物也会被你绕振荡。导论只要记住:先把 e=ry 画出来,再谈 Kp 该多大。

逐步推导:开环为何能到 r=1,纯 P 为何停在 0.8(点击展开)

植物 mx¨+cx˙+kx=u。稳态 x¨=x˙=0,只剩 kxss=uss

开环。 指定 ukr=2。则 xss=2/k=1。暂态是齐次方程 mx¨+cx˙+kx=0 的自由振荡,从 x(0)=0 晃到 1。自然频率 ωn=k/m=21.41,阻尼比

ζ=c2mk=0.4220.141

——欠阻尼,所以开环曲线会超调再收。k 若不是 2,这个 u 就对不上,xss 跟着错,而且没有测量去改 u

纯 P。 u=Kp(rx) 代回植物:

mx¨+cx˙+kx=Kp(rx)mx¨+cx˙+(k+Kp)x=Kpr.

稳态:(k+Kp)xss=Kpr,故

xss=KpKp+kr=810=0.8.

等效弹簧从 k 加硬到 k+Kp=10,所以闭环 ωn=103.16(更快),阻尼比

ζ=c2m(k+Kp)=0.42100.063

更小——P 增益把系统变「硬」的同时变「更会晃」。左图闭环曲线往往比开环抖,原因在这里。积分项把静差积掉,微分项补阻尼,那是 PID 的事。

demo 用半隐式欧拉:先更新 a=(ucvkx)/m,再 vv+Δtaxx+ΔtvΔt=0.01,积到 t=8


二、不是只有经典和现代两箱

侧栏把课拆开,避免两篇「什么都塞一点」的长文。读这一节的目的只有一个:同一条回路,两套字母。 经典把植物压成传递函数 G(s),控制器看一个标量误差;现代把内部量摊开成向量 x,控制器看状态或状态的估计。不是两门宗教,是同一件物理的两种记账法。

控制论怎么拆

图解说明:经典用 G(s)、PID、根轨迹、Bode;现代用 xK、卡尔曼、V。数字控制、MPC、自适应本笔记先不展开——MPC 滚动时域和世界模型规划是亲戚。

分组语言入口
经典控制传递函数、误差标量传递函数PID
现代控制状态向量、矩阵增益状态空间

几何接到手臂上,见 机器人学


三、极点决定「晃不晃、收不收」

线性系统的自由响应由特征根(极点)决定。二阶标准形

y¨+2ζωny˙+ωn2y=ωn2r

里,ζ 是阻尼比:ζ>1 过阻尼(不晃)、0<ζ<1 欠阻尼(超调再收)、ζ=0 等幅振荡、ζ<0 发散。demo 用同一 ωn=2,只改 ζ,把四条阶跃画在一张图上。

闭环比例反馈相当于把极点往左推(或推过头变成振荡)——这就是后面根轨迹要画的那条路。右半平面极点:特征根实部为正,齐次解里有 e+αt,阶跃会爆炸。控制要做的几何,常常就是「把极点赶到左半平面,并且别贴虚轴太近」。

保姆级数字例。 ωn=2 固定,参考 r=1,demo 四条:

ζ极点(约)阶跃长什么样
1.4 过阻尼两个负实根,约 4.760.84不超调,慢慢爬到 1
0.5 欠阻尼1±j3超调后衰减振荡
0 无阻尼±j21 等幅振荡,频率 ωn
0.15 负阻尼实部 +0.3,在右半平面振幅越来越大

欠阻尼超调量近似 σexp(ζπ/1ζ2)ζ=0.5σeπ/316%,峰值大约 1.16ζ 再小,极点更靠虚轴,包络 eζωnt 衰得更慢。

卡点。 「加反馈」不会自动稳定。符号反了(正反馈)或增益太大,极点可以穿过虚轴。导论右图的负阻尼,就是「已经在右半平面」的样子——先认出来,再去学怎么搬回来。

逐步推导:二阶标准形的极点怎样写成 ζ,ωn(点击展开)

齐次方程 y¨+2ζωny˙+ωn2y=0。试探 y=est,得到特征方程

s2+2ζωns+ωn2=0.

求根公式:

s=ζωn±ωnζ21.
  • ζ>1:根号里为正,两个相异负实根(ωn>0 时)。快根先死掉,慢根决定爬升。ζ=1.4ωn=2s=2.8±20.964.76,0.84
  • ζ=1:重根 ωn。临界阻尼,刚好不振荡。
  • 0ζ<1:共轭复根 ζωn±jωn1ζ2。实部是包络衰减率,虚部是振荡角频率。ζ=0.5ωn=2:实部 1,虚部 23/2=31.73
  • ζ=0:纯虚根 ±jωn,等幅。
  • ζ<0:实部变正,指数增长。

单位阶跃相当于强迫项 ωn2r。稳态特解 yss=r(直流增益为 1)。demo 不走拉普拉斯反演,直接欧拉积微分方程,四条曲线与上表一一对应。

质量-弹簧那一台也可以写成标准形:开环 ωn=k/mζ=c/(2mk)。加了 Kp 之后等效 kk+Kp,两个数都变——这就是第一节折叠块里 ωn 变大、ζ 变小的来源。


四、代码在做什么

demo.py 两张图:左是质量-弹簧在「开环给稳态力」与「比例闭环」下的位置;右是二阶系统四个 ζ 的单位阶跃。没有拉普拉斯工具箱,积分都是欧拉。

开环闭环与阻尼比

开环靠植物自己晃到目标;闭环 u=Kpe 把静差缩小(本例植物有弹簧,单靠 P 往往仍留一点差,末端应接近 0.8 而不是 1)。右图从过阻尼到负阻尼,曲线从「爬楼梯」变成「爆炸」。


五、小结

概念一句话
开环不看 y,输入预先算死;模型错了就错到底
闭环e=ry 驱动 u;纯 P 对本例停在 0.8
极点 / ζ决定衰减还是振荡;右半平面会爆炸
下游经典四章 + 现代四章

下一章建议 传递函数与时域响应。已经熟悉阶跃的读者可直接进 PID

📥 Code

FileViewDownload
demo.pyOpenDownload
exercise.pyOpenDownload

参考

  1. Åström & Murray, Feedback Systems
  2. Wiener, Cybernetics(「控制论」这个词的来源,不必从这里读公式)