第 13 章

无人机挑战

你能让无人机在一切干扰下都保持在 2 米吗?

第 13 章:无人机挑战 ↗

任务简报

朱恩: 好。真无人机,真送货。它带着包裹起飞,挺过一阵风,投下包裹,全程保持 2 米。二十秒。

米卡: 而且飞行过程中我们不允许碰任何东西?

西奥: 这正是关键。控制器得靠自己搞定。我们只挑三个数。好吧,四个:还有滤波器。

任务,一秒一秒地看:

  • 0 秒: 带着 0.2 kg 的包裹从地面起飞(总共 0.7 kg)。
  • 6–9 秒: 一阵向下的阵风以 1.5 N 的力推它。
  • 12 秒: 包裹掉落。无人机突然轻了 0.2 kg。
  • 20 秒: 任务结束。

为了这场压轴戏,我们的无人机模型要变得更老实一点。下面每一条都是真实无人机必须面对的,而且每一条都是前面章节的老朋友:

  • 电机滞后(τ ≈ 0.05 s): 螺旋桨没法瞬间改变转速。它的推力跟着指令走,就像第 3 章那杯慢慢变凉的咖啡,是一个一阶滞后:0.05 s 后走完 63%。晚到的一推,就是乔装打扮的第 12 章相位滞后。
  • **有噪声的传感器(σn\sigma_n ≈ 2 cm,n 取自英文 noise(噪声);不是极点的 σ):** 每个高度读数都随机偏差大约 2 cm,每秒一千次。第 11 章警告过我们:D 会把这种抖动变成巨大的推力尖峰。
  • 有限的电机(0 到 20 N): 第 10 章的电机限制照样生效。带上包裹,无人机重 6.9 N,所以 20 N 只是它重量的三倍左右,而且电机永远不能往下拉。电机顶在极限上时,那堆面积会暂停增长(第 11 章的抗积分饱和)。
  • D 经过滤波: 第 11 章的办法。D 对平滑后的传感器读数求斜率,平滑用的是一个一阶滞后,时间常数 τf\tau_f 由你来选。τf\tau_f 越长越平静,但也越迟。

第 13 章:无人机挑战 ↗

第 12 章会这样画。这是无人机自己的回路,六星调参绕回路一圈:控制器、电机、无人机。拖动电机滞后,看着相位往下弯。

第 13 章:无人机挑战 ↗

西奥: 没有滞后时,相位永远到不了 −180°,所以根本没有悬崖:不管你把增益调得多高,这个回路都永远够不到第 10 章的 −1。正是电机那一点点滞后,造出了悬崖。

先预测一下! 当包裹在 12 秒时掉落,哪一项承担了主要作用,让无人机精确回到 2 米?

第 13 章:无人机挑战 ↗

米卡: 等等。所以包裹掉落后,无人机必须有一阵子飘得偏高一点?那堆面积就是靠这个误差把多余的推力“忘掉”的!

执行任务

每拖动一次滑块,任务就重新开始,上一次飞行会留下一个影子。小小的 s 平面显示的是标称极点:电机滞后和滤波器都算进去了,只有噪声、包裹和电机限制没算。这样你就能看到线性的那张图,而真实又凌乱的飞行就在它旁边进行。六颗星全拿就是金牌。

这些标准是送货客户会在意的:3 s 内稳定下来,任何时候都不超过目标 10%,被阵风吹偏不超过一掌宽(20 cm),包裹掉落后 2 s 内回来,绝不擦到地面,电机也不嗡嗡响(抖动低于 0.5 N)。

到达这颗星的意思是:从到达那一刻起直到 6 s 的阵风之前,真实高度一直保持在 ±5 cm 以内;只是穿过 2 m 一次不算。“电机平静”这颗星看的是 3 到 6 s(起飞之后、阵风之前)推力的标准差:它围绕平均值的典型波动,迟迟稳定不下来和传感器抖动都算在内。把鼠标指向清单里的某一行(或用 Tab 键移过去),就会给它评判的那几秒打上阴影。

第 13 章:无人机挑战 ↗

朱恩: 我在脑子里调出了一个完美控制器:巨大的 KdK_d,极小的滤波器,让 D 瞬间响应。在平静空气里它无懈可击!看……

朱恩: ……电机为什么在尖叫?橙色线全是毛刺,现在还超调了!

西奥: 第 11 章,警告 2。大 KdK_d 配上极小的滤波器,会把传感器每 2 cm 的抖动都变成推力尖峰。而这些尖峰在 0 N 处被限幅的次数远多于在 20 N 处(淡橙色线显示控制器要求的推力:看看它多频繁地碰到 0 N),所以它们额外加了一股偏向一边的推力。这就是超调,和第 11 章抓到的是同一种向上漂移。它之前之所以完美无缺,只是因为你想象中的平静空气配了一个完美的传感器。

第 13 章:无人机挑战 ↗

试试朱恩的平静空气调参,看着“电机平静”那颗星拿不到。然后把滤波器加长到 0.04 s,把 KdK_d 降到 7 左右。在 KdK_d = 7 时,它大约 1.9 s 到达,而不是朱恩梦想中的 1.3 s:这就是电机平静的代价。这种取舍,速度对噪声、速度对鲁棒性,就是控制工程。

朱恩: 稍微慢一点,电机就不尖叫了。成交。在我脑子里,空气是平静的,传感器也是完美的。

回顾

米卡: 我一开始以为"使劲推"能解决一切。其实恰恰相反,对吧?大部分麻烦都来自对陈旧或有噪声的信息推得太狠。我很庆幸自己把那些傻问题都问了出来。它们没有一个是傻问题。

西奥: 我终于相信拉普拉斯变换了。它不是一张查表:它是一个探针,问信号"你里面有多少 este^{st}?"而且因为斜率变成了乘以 ss,微积分就变成了代数。极点就是答案爆炸的地方:系统正是由那些 este^{st} 构成的。

朱恩: 我还明白了"更多"不等于"更好":更多增益、更多阻尼、更多 KiK_i、更多速度。总有一道悬崖,好的设计会与它保持一段距离。还有:永远要在无人机上试一试。

这是我们搭建的一切,从淋浴到终章。每个气泡都链回它诞生的地方。

我们搞清楚了什么

  • 反馈:测量发生了什么,与目标比较,针对误差采取行动(第 0–1 章)。
  • P 控制按误差成比例地推动,但当它很强时会留下静差并且来回晃动(第 2 章)。
  • 导数、指数和旋转的数描述事物如何变化:este^{st} 中的 s=σ+iωs = \sigma + i\omega 会让它增长或衰减,并且来回摆动(第 3–7 章)。
  • 拉普拉斯变换把斜率变成乘以 ss,于是微积分就变成了代数(第 9 章)。
  • 传递函数中未被抵消的极点标记了从所选输入到输出可见的自然运动:左半平面的运动衰减,右半平面的运动增长(第 10 章)。
  • PID:I 消除静差,D 增加阻尼,而每一项都会移动极点(第 11 章)。
  • 延迟会带来相位滞后;裕度告诉你离悬崖边缘还有多远(第 12 章)。
  • 真实硬件会带来限制(第 10 章)、吃掉相位裕度的滞后(第 3 章 + 第 12 章),以及被 D 放大的噪声(第 11 章),所以好的控制器既要快,也要平静(第 13 章)。

讲给朋友听

先说你的任务:你拿到了几颗星,哪一颗最难?往下读之前,先把为什么大声说出来。

米卡: 我最难的是平静那颗星。我一个劲儿地加 D 想让电机安静,结果它们只是越来越吵。

检验理解的最好方式就是讲解。在每次回答之前,先试着把你自己的版本大声说出来。然后选出与它最匹配的解释。

再看一张图:状态平面

西奥: 这门课里的每张图,画的都是高度随时间的变化。可光有高度,说不出接下来会发生什么:在 2 m 处往上爬,和在 2 m 处往下掉,完全是两回事。

有两个数能锁定未来:从目标量起的高度 Δh\Delta h,以及速度 vv。它们合在一起,就是无人机的状态。把它们放到同一个平面上,横着是高度,竖着是速度,整段飞行就变成了一个移动的点走出的路径。

它的规则就是第 3 章的斜率,每个数一条:高度按速度变化,速度按第 1 章方程里的加速度变化。先把悬停推力处理掉,再加上 PD 控制 T=−Kp Δh−Kd vT = -K_p\,\Delta h - K_d\,v,两条规则就能装进一张表里:

ddt(Δhv)=(01−Kpm−c+Kdm)⏟A(Δhv)\frac{d}{dt}\begin{pmatrix}\Delta h\\ v\end{pmatrix} = \underbrace{\begin{pmatrix}0 & 1\\ -\frac{K_p}{m} & -\frac{c+K_d}{m}\end{pmatrix}}_{A}\begin{pmatrix}\Delta h\\ v\end{pmatrix}

这张表 AA 就是一个矩阵:把它乘到状态上,出来的就是状态的变化速度。它的上面一行说高度按速度变化;下面一行就是牛顿第二定律。

先预测一下! 取 KpK_p = 20 N/m、不加 D,无人机从低 1 m 处静止出发。它的状态会画出一条什么样的路径?

第 13 章:无人机挑战 ↗

朱恩: 这就是第 6 章的螺旋线!而当我把 KdK_d 推过大约 5.3,螺旋就被拉直了,沿着两条虚线滑进去。

那两条直线就是模态:刚好从其中一条上出发,状态就会按那个模态自己的速率直直地滑进去。这些速率是矩阵的特殊数,也就是它的特征值,在 det⁡(sI−A)=0\det(sI - A) = 0 的地方找到:

det⁡(sI−A)=s2+c+Kdm s+Kpm=0\det(sI - A) = s^2 + \frac{c + K_d}{m}\,s + \frac{K_p}{m} = 0

米卡: 这是第 7 章的方程!特征值就是极点。同一架无人机,换了一张图。

而第 10 章的极点游乐场,其实一直在悄悄地做状态反馈:T=−Kp Δh−Kd vT = -K_p\,\Delta h - K_d\,v 同时推着状态的两个数,选定两个增益,就摆好了两个极点。给状态更多的数(倾斜、旋转、侧向位置),矩阵就会变大,但道理不变:特征值就是极点,把整个状态反馈回去,就能把它们全都摆到想要的位置。

还要再坦白一件事。这门课里的每条规则都是直线规则,可真实的东西会弯。螺旋桨的推力随转速的平方增长,T=k w2T = k\,w^2。在悬停附近,这条曲线几乎是直的,所以我们用它在悬停点的切线来代替它,也就是第 3 章的那把尺子:

T≈T0+2k w0 ΔwT \approx T_0 + 2k\,w_0\,\Delta w

第 13 章:无人机挑战 ↗

西奥: 所以那些直线从来都不是谎话。它们是一张放大的局部图:在悬停附近很老实,离得越远就越不准。这就是为什么我们的数学需要无人机待在 2 m 附近。

新词

状态
锁定未来的那几个数:对我们的无人机来说,就是高度和速度。状态平面上的一个点。
矩阵 AA
一张数表,把状态变成它的变化速度。
特征值
矩阵的特殊速率,在 det⁡(sI−A)=0\det(sI - A) = 0 的地方。对无人机的 AA 来说,它们就是它的极点。
线性化
在你关心的那一点附近(这里是悬停点),用切线代替弯曲的规则。

接下来去哪儿

你现在懂的控制理论,已经比大多数人一辈子接触到的还多了。下面这条路继续往前延伸,每一站都是一本新的笔记本:

  • 根轨迹: 不去拖极点,而是拖增益,看极点画出一条条路径。你一眼就能看出哪个 KpK_p 太大了。
  • 状态空间控制: 上面你已经尝过第一口了。同时处理许多传感器和电机:真实的无人机必须同时稳住倾斜、旋转和位置,一次只调一个旋钮的办法就不管用了。
  • 数字控制: 真实的控制器跑在计算机上,每隔几毫秒采样一次。采样也是一个小小的延迟,而 s 平面还有个表亲:z 平面。
  • 卡尔曼滤波器: 把模型的预测和传感器的读数融合起来,这样用有噪声的传感器也不需要一个慢吞吞的滤波器。
  • 史密斯预估器和模型预测控制: 控制器内部带着一个小仿真,能绕过延迟往前看,这才是治淋浴的真正良方。
  • 非线性控制和鲁棒控制: 当阻力不是线性的,或者无人机在三维空间里飞时该怎么办,以及如何证明你仍然有裕度。

西奥: 先学根轨迹。我想看着极点在我拧一个旋钮时移动。

下次洗澡时你在滚烫和冰冷之间来回跳舞,你就会清楚到底发生了什么。而且你会知道这不是你的错。是相位裕度的问题。

第 13 章:无人机挑战 ↗