控制系统到底是什么?(JavaScript模拟)

2020-05-18 21:42:47

在这篇文章中,我将给出一些直觉,说明在2D世界中,无人机的基本控制系统是如何工作的。

这纯粹是为了好玩,解释的目的是为问题空间器提供一些直观的信息,而不是深入到实现中去(稍后我会介绍的!)。

假设我们有一架四轴飞行器,我们想要写一些软件来引导它到达目标位置,我们该怎么做呢?为什么这甚至是一个难题呢?

我们将从一个简单的模型开始,看看理想的无人机是如何工作的,暂时不考虑高度组件。您可以使用下面的箭头键进行控制(请确保您先单击画布)。

当你对驾驶我们的小四轴飞行器有了感觉时,注意你实际控制的变量(是速度还是加速度?)。

你不能直接控制速度,否则你可以直接放开一个箭头键,立刻让车停下来。

相反,你实际上是在控制四轴飞行器的加速度,所以如果你建立了太多的速度,然后想要停止,你必须加速与你的速度相反。

我们可以采用恒温器的方法!你可爱的恒温器整天在做什么?嗯,努力把温度读数保持在一个舒适的小范围内真的很难。

当温度过高一定程度时,它会开启冷却,直到温度回到最佳温度。

在我们的情况下,我们会认为这意味着总是全速向我们的目标加速。

让我们在下面看看这种类型的控制系统是如何运行的(您可以单击或轻触来移动目标位置)。

你会注意到这个控制器最终会把我们带到合适的位置,但是一旦它到了目标位置,加速度矢量就会朝着相反的方向疯狂跳跃。

这在理论上可能是可行的,但你可以想象加速命令的剧烈和突然变化可能会给你的无人机带来一系列机械压力(通常看起来有点可怕)。

一种想法是,少量的位置误差实际上应该只会引起与误差量成正比的加速度,所以如果我们离得很远,我们可以猛击它来靠近它,如果我们已经很近了,我们可以只用一点加速度就可以到达那里。

这叫做比例控制器。你可以看到,当无人机远离目标时,加速度矢量会变大,而在其他情况下,加速度矢量会保持在很小的位置。

这实际上工作得很好!当然,我们在开始的时候会超调,但事情会稳定下来,当我们真正接近目标时,我们就不会摆动了。

因此,在这一点上,我们或多或少地控制了我们的无人机,我们没有炸毁发动机或吓唬任何人,那么下一步还有什么要做的呢?

速度!特别是安顿时间。我们希望我们的无人机以最小的超调量尽快击中目标。

我们怎么走得更快?如果我们仔细想想,在我们超过目标后才开始减速是愚蠢的。我们真的需要一种方法来教无人机如何先发制人地减速。

一个不错的方法是查看我们的错误在上一个时间步长中的变化。

如果我们的误差比上次小,我们知道我们正在接近目标,如果误差比上次大,我们知道我们正在远离目标。

所以如果上一个时间步长的误差减去这个时间步长的误差非常大,那就说明我们太快接近目标了,需要放慢速度。

我们可以通过取上面计算的比例控制值,然后减去误差中的这个变化来实现这一点。我们可以为比例部分设置单独的(可调的)常数,并利用此误差差来调整控制器的性能。

哇,那真是太棒了!我们自信地加速到我们的最高速度,巡航一小段,然后在达到目标之前减速,完美!

在我们继续之前,我们可以为我们所说的误差差想出一个更好的名字,它实际上只是一个数字导数!另外,顺便说一句,因为我们取的是误差的导数,正好是一个相对位置,这个导数项实际上是在为我们计算速度,并防止速度变得太高!。

我们正要宣布胜利的时候,突然你开始注意到无人驾驶飞机偏离了目标。

不是很多,也不是不稳定,但肯定有一个明显的差距不会消失。出什么事啦?

让我们考虑一下持续强风对我们东南方向控制器的影响。

你可以想象,一旦无人机偏离目标足够大的距离,你的比例控制器将完全抵消风,但我们的控制算法中没有任何东西可以抵消风,让我们完全达到目标。

我们知道我们的无人机足够强大,可以驾驭风力并保持在目标位置,我们只是需要一些监测风力的东西。

要做到这一点,一种方法是通过记录过去所有错误的总和来跟踪历史错误,然后只需将其添加到我们的控制公式中(具有自己的可调常数)。

这个误差和应该越来越大,直到它对控制器产生足够的影响,将无人机推到目标位置。

我们可以在下面显示这一点,您可以使用下面的按钮启用或禁用此误差累加器,并随机化风向,以查看添加此增益对我们的控制能力有何影响。

显然,累积误差(或积分误差),并通过我们的误差回路回传,消除了我们在比例和导数控制器上看到的偏差问题。凉爽的!。

假设无人机在世界的最左边,目标在世界的最右边。无人机会根据比例反馈加速到最大加速度,无人机会以最快的速度到达目标(我在模拟世界中增加了速度限制),但在整个车辆行驶的过程中,误差和只会越来越大。

一旦我们最终接近目标,我们的误差和仍然会很大,并将我们推过目标位置。此效果一直持续到误差和重新平衡到更接近0的值为止。

我们真正想要的只是在比例控制做得不够的时候让积分器介入来解决控制问题,而不是当比例控制器已经控制了事情的时候。

因此,解决这一积分终结问题的一种天真的方法就是在控制器输出达到最大值时清除积分器和。

这意味着我们忘记了我们的集成商在大转变中学到的东西,一旦我们接近目标,就让它重新建立起来。

我们刚才介绍的是一种经典的控制技术,叫做PID控制。P代表比例,I代表积分,D代表导数。

如果调整得当,这个控制器(可能还有一些特定领域的调整)可以很好地处理任何典型的控制问题,并且可以作为飞机控制、巡航控制以及大量机器人和自动驾驶汽车应用的基础。