第 1 章

开环与闭环

我们能不能直接告诉无人机用多大推力?

第 1 章:开环与闭环 ↗

认识一下无人机

朱恩: 我借来了一架无人机!它的任务:运送小包裹,并精确悬停在 2 米高度,好让人来取。

米卡: 这就像淋浴,对吧?一个我们想要的数值(2 米),一个我们能改变的东西(螺旋桨推力有多大)。

事实如下。无人机重 0.5 kg,所以重力以 0.5×9.81≈4.90.5 \times 9.81 \approx 4.9 牛顿把它往下拉。螺旋桨用一个我们选择的推力 T\eff{T} 往上推。无人机移动时,空气会稍微往回推:大约每米每秒速度 1 牛顿。

0.5 h¨⏟质量×加速度=T−4.9⏟重力−1.0 h˙⏟空气阻力\underbrace{0.5\,\ddot{\out{h}}}_{\text{质量}\times\text{加速度}} = \eff{T} - \underbrace{4.9}_{\text{重力}} - \underbrace{1.0\,\dot{\out{h}}}_{\text{空气阻力}}

先别管 h\out{h} 上面的点。它们描述速度和加速度;我们会在第 3 章里把这两者都建立起来。当无人机静止时,4.9 N 与重力平衡:推力更大就让它向上运动,推力更小就让它下落。当它在运动时,空气阻力也会阻碍它的运动,所以 4.9 N 会把它减速到静止。

只要告诉它该做什么

西奥: 我们完全知道物理规律。所以我们不需要看任何东西。我们可以计算出一个计划:先用力推一会儿来爬升,然后精确地推 4.9 N 来悬停。

这种计划叫做开环:计划决定推力,没有人检查实际发生了什么。试试看。选择一个爬升推力和爬升时长,然后发射。

第 1 章:开环与闭环 ↗

西奥: 我算出来了。在爬升过程中,无人机很快会稳定在一个恒定速度上,即(额外推力 ÷ 阻力)。你最终到达的高度就是(额外推力 ÷ 阻力)× 爬升时间。对于 6 N,那是 (6−4.905)/1=1.095(6 - 4.905)/1 = 1.095 m/s,所以爬升 2÷1.095≈1.832 \div 1.095 \approx 1.83 秒。

西奥的计算里有个微妙之处:当他切换到 4.9 N 时,无人机还在上升。阻力会逐渐让它停下来。他的最终高度公式里包含了切换之后多飞的那段距离。

按下 西奥的方案。它落在 2.00 m。漂亮。

米卡: 西奥,太厉害了!我们搞定了!这章结束!

朱恩: 我们来看看外面会发生什么……今天有点微风。

再运行一次西奥的方案,在它悬停的时候按下 阵风(向下推 1 N,持续一秒)。

西奥: 它掉下去了大概一米……而且就停在那儿了。我的数字没错啊!

朱恩: 你的数字完美无缺。只是风不在你的方案里。而且无人机根本不知道自己在错误的位置。

这就是我们的错误:我们相信了“只要数字算对了,就不需要反馈。” 无风时的成功是真的,可一旦世界做出了方案没预料到的事,这个方案就毫无用处了。阵风过后,推力又正好是 4.9 N,所以无人机就停在阵风把它吹到的地方。

包裹测试

现在来点真格的。下面,无人机正悬停在 2 m 高度,推力固定为 4.9 N,恰好平衡它的重量。这时有人给它挂上一个 0.2 kg 的包裹。

先预测一下! 包裹让无人机变重了,但推力仍然保持 4.9 N。会发生什么?

第 1 章:开环与闭环 ↗

坠机。 开环方案里没有任何东西能察觉到无人机正在下坠。现在把模式切换到 反馈:观察高度,重置,再试一次包裹和阵风。

在反馈模式下,无人机使用一条简单的规则:用悬停推力往上推,每低一米就额外加 8 N 的力。

T=4.9+8×(2−h)\eff{T} = 4.9 + 8 \times (\sp{2} - \out{h})

米卡: 哇。阵风把它吹低了不到 20 cm,它马上就爬回来了。包裹让它下沉了一下,但它没有坠机!

西奥: 它不需要知道发生了什么。它只是看到自己太低了,就推得更用力。这就是诀窍。

朱恩: 但你看:带着包裹时它稳定在约 1.75 m,而不是 2 m。为什么它不能完全回到原位呢?

把它画出来

工程师把这些系统画成方框和箭头,叫做框图。每个方框做一件事;每个箭头传递一个信号。我们在白板上一点一点地画出了我们的框图。

第 1 章:开环与闭环 ↗

关键区别在于那根从输出绕回到起点的箭头。这就是为什么反馈控制被称为闭环:信息要绕一整圈。往上翻回包裹测试那里:无人机下方的图会亮起当前正在工作的部分。

新词

给定值 r\sp{r}
我们想要的是:2 米的高度,38 °C 的水。
输出 h\out{h}
实际发生的是:真实的高度。
误差 e=r−h\err{e} = \sp{r} - \out{h}
我们偏离了多远。正值表示太低。
控制器
把误差变成动作的规则。目前是:“每低一米就额外加 8 N。”
控制量 T\eff{T}
控制器实际做的事:推力。
被控对象
被控制的东西:无人机本身,包括它的物理特性。(这个词有点怪,来自老式工厂里的“plant”。)
传感器
任何测量输出的东西:无人机的测高传感器,淋浴时你的皮肤。
扰动
外界发生的、我们没计划到的任何事:阵风、包裹、有人冲马桶。
开环 / 闭环
照着计划行动而不看结果 / 根据你测量到的东西行动。

同一张图,不同的机器

下面是汽车定速巡航的同一张图。给定值是速度,被控对象是汽车,扰动是坡道。当车速低于应有速度时,控制器会把油门踩得更深。

第 1 章:开环与闭环 ↗

朱恩: 恒温器、定速巡航、淋浴、我们的无人机……每次都是同一个回路,只是标签不同!

目前我们知道的

我们搞清楚了什么

  • 开环意味着照着计划走,不看结果。它在风平浪静时可能完美,但一旦出现意外就毫无用处。
  • 闭环(反馈)意味着测量输出,把它与给定值比较(得到误差),并据此行动。
  • 反馈能应对它从未听说过的扰动:阵风、包裹,任何东西。
  • 框图展示了整个回路:给定值 → 误差 → 控制器 → 被控对象 → 输出 → 传感器 → 再回到起点。
  • 我们简单的反馈规则阻止了坠机,但加上包裹后它稳定在低了大约 25 cm 的位置。为什么?

我们的回路里有一个神秘数字:8 牛顿每米。为什么是 8?为什么不是 2,或者 50?还有,为什么无人机会稳定在太低的位置?

第 1 章:开环与闭环 ↗