从系列:无人机仿真与控制
布莱恩•道格拉斯
在上个视频中,我们学习了非线性模型的准确性,它对模拟非常有用,但对线性分析和设计却不太适用。本视频采用了Parrot miniidrone的非线性模型,并建立了一个可用于在我们的控制体系结构中调整6个PID控制器的线性化模型。
我们使用Simulink中的PID调谐器应用程序来调整高金宝app度控制回路,并说明为什么拥有一个良好的系统模型是基于模型的设计的基础。
在上个视频中,我们学习了非线性模型在模拟中有多精确,但它们并不适合线性分析和设计。为此我们需要一个线性模型。它不会像我们的仿真模型那样精确,但我们将能够在我们的控制体系结构中使用它来调整6个PID控制器。这就是我们这节课要做的。我是Brian,欢迎来到MATLAB技术讲座。
我们将花大部分时间在Simulink中工作,但不是从这里开始,我认为如果我先设置上下文,一切都会更有意义。金宝app
到目前为止我们得到了什么?我们有一套非线性模型包裹着一个完整的飞行控制软件模型。这是一个用来自动生成代码的软件,它有控制器和状态估计器,它们直接在控制回路中,还有其他的逻辑,比如故障保护和数据记录。每一个都有非线性成分。所以,为了有一个整个系统的线性模型,我们需要线性化战斗软件和围绕它的模型。
然而,根据我的经验,很难有一个飞行软件能够很好地进行自动代码生成和线性化。这是因为飞行软件有if语句、开关和状态机以及运行代码所需要的各种东西,但这些东西很难或不可能线性化。因此,我们通常建立一个完全独立的控制器设计模型。具体来说,就是能够被线性化的。在这个视频中,我将从完整的四轴飞行器模型开始它是伴随着航天模块的然后开始移除一些控制器设计中不需要的东西。特别是那些使线性化变得困难的东西。
一旦我们剥离了模型,我们将在Simulink中使用PID调谐器应用程序来线性化这个模型并调整PID控制器。金宝app
如果你回想第二段视频,我们的控制结构是这样的有几个不同的控制循环和6个不同的PID控制器。我们先从调整一个回路开始,高度回路。记住,这是独立于其他回路的,所以我们可以在不影响滚转、俯仰或偏航的情况下调整和调整高度。为了确保它们完全脱离方程,我们将翻滚、俯仰和偏航的命令设置为0。
我们还假设传感器动态和噪声不会对控制器设计产生有意义的影响。如果这是真的,那么我们可以去掉传感器模型和状态估计逻辑。基本上,我们假设控制器完全知道无人机的真实高度。在完成控制器调整后,我们将在整个非线性模型上测试结果,看看这个假设是否正确。如果它不工作,那么我们将重新添加传感器,再次尝试。我喜欢从最简单的模型开始,必要时再进行更复杂的操作。
然后我们将线性化高度循环,并调整增益,以获得我们所追求的高度性能。在这个视频中,我只会调优这个控制器,但其他控制器的过程几乎是一样的。
在高度回路之后,我将开始调整偏航控制器,保持滚转和俯仰不变,保持高度固定。一旦完成,我就开始翻滚,然后投球。一旦这些内环控制器都调好了,我就会转向外环位置控制器当内环控制器是主动的并保持方向时进行调优。通过这种方式,我们将逐步通过6个PID控制器,最后让它们一起工作。
这就是我们将要做的概述,我将添加更多的背景,但这应该足以理解我在做什么,当我开始移动Simulink块。金宝app让我们开始吧。
我要做的第一件事就是看看标准高度控制器做得有多好。我从州巴士上取下高度然后用瞄准器画出来。控制器试图保持0.7米的高度,记住高度是在无人机参考系中测量的,正Z轴指向下。所以我们的控制器实际上把高度控制在-0.7。正如你所看到的,股票控制器调优的方式有轻微的超调,但它很好地稳定在-0.7。让我们看看是否可以针对不同的性能调整控制器。
这是我们的模拟模型,我不想改变它。相反,我将复制整个内容,并将其粘贴到它自己的模型中,以便我们可以修改并用于控制器调优。好了,现在开始删除东西。首先,我们没有任何的可视化或我刚刚添加的范围。
我们也可以去掉传感器块因为我们要反馈一个完美的高度状态。现在如果我进入飞行控制系统这里有很多我不需要的东西。记住,我们现在只关注高度控制器。所以在飞行控制器子系统中,我将获取高度参考和控制器加上电机混合算法和电机指令块的推力。这将是我们完成高度循环所需要的飞行代码的唯一部分。
我会把这些方块放到模型的顶层然后移除飞行控制软件的其余部分。这些块的输出是电机速度命令,我们可以直接输入到机身模型。现在我要把滚转、俯仰和偏航力矩设为0,以确保只要机体上没有其他外力和力矩,比如阵风之类的,机体就只能上下运动。我知道环境模块不会像那样模拟外部干扰所以我们只需要将命令设置为0就可以了。
现在我们需要将完美的高度状态反馈给高度控制器我们有简化的闭环系统,我之前给你们看过。现在我们可以进入高度模块看看PID控制器该怎么做。
我们在第三个视频中见过这个控制器,但我想再简单描述一下发生了什么。首先,这只是一个PD控制器,导数路径不是由实际的导数提供的,而是由卡尔曼滤波器估计的高度速率提供的。记住,这是设置PD控制器的好方法因为我们不是对噪声信号求导,而是直接估计速率。然而,当我们反馈实际状态而不是通过状态估计器时,这种设置就不起作用了。这是因为我们并没有反馈一个真实的速率状态。但这没关系,因为对于这个模型,我们已经去掉了传感器块和与它们相关的噪音,有一个相当干净的高度信号。所以我们可以将高度信号输入Simulink PID块,它会为我们处理导数,如果需要的话金宝app还会添加一些滤波。
我将它设为PD控制器并将增益设为当前值。然后我将移除现有的PD增益和逻辑,并用PID控制器块替换它。现在可以进行自动调优了。我们有高度参考,-0.7米,这是和真实高度的对比。将误差反馈到PD控制器中,然后在控制器中加入一个前馈重力项。这基本上增加了所需的推力来抵消无人机的重量,因此PD控制器只需要增加正推力来上升,负推力来下降。我们可以通过在PD控制器中添加积分来去除前馈路径但我们还是这样吧因为这是模型已经建立的方式。
好了,现在我们可以打开PD块,点击调谐按钮来启动自动调谐器。自动调谐器做的第一件事是线性化整个控制回路,记住现在我们移除了所有困难的组件这个系统能够被线性化。该工具创建了工厂的线性模型,我们可以导出并使用该模型手动设计我们的PID增益。
然而,我们将停留在PID调谐器应用程序中因为它为我们绘制了控制器的闭环响应和线性化的对象我们可以简单地调整响应时间和回路的瞬态行为用顶部的滑块。你可以看到,股票设计,虚线,有一个类似的行为,我们看到的模拟模型。它不会完全相同因为我们移除了所有的非线性成分,但目标是它足够接近增益选择。我们稍后会进行测试。现在我们可以移动滑块并调整行为。对于这个设计,我想通过设置带宽为5 rad/s和相位裕度为60度来获得一定的频域性能。
这产生的比例增益约为0.32,导数增益仍为0.3。
现在让我们离开我们的设计模型,回到完整的模拟模型,看看这些新增益是如何表现的。我将回到高度控制器,在比例路径上放0.32,在微分路径上留下0.3,然后回到顶层运行模拟。
看看这个,有了新的收获我们改变了悬停控制系统的性能。你会注意到超调消失了,但根据我们的线性分析,我们预计无人机仍会有一点超调。这种差异是由于我们用一个不完美的线性模型进行分析。然而,结果仍然接近我们的设计,所以线性分析给了我们一个很好的起点。如果我们对这个响应不是很满意,我们现在可以稍微调整增益,看看是否可以提高性能。
然而,真正的测试不是在模拟环境中进行测试,而是在真实的物理硬件上进行测试。现在,如果硬件的行为与这个模型完全相同,那么我们就知道基于模型的设计调优也将适用于它。
但是我们不需要假设,因为我们可以从这个Simulink模型为Parrot Minidrone生成代码,我们可以在实际硬件上尝试我们的新增益。金宝app
我上次提到过这个,但它值得重复。记住你的护目镜。你永远不可能100%确信你的控制律不会导致车辆失去控制,因为它实际上是一个飞行的割草机,这可能是危险的。好了,开始吧。我已经在我的迷你无人机上装载了新的增益和飞行代码准备起飞了。
好吧,这不是很好。那么发生了什么?
嗯,我不能百分之百肯定。但我确实知道一些事情,那就是硬件的表现和模型不一样。在我的硬件上,模型缺失了一些东西,或者建模不正确,这给了我控制规律可以工作的印象。拥有一个好的模型是基于模型设计的基础。如果您使用基于模型的设计(model - based Design),我认为您会发现您花在创建和验证系统模型上的时间要比开发控制律的时间多得多。但这些时间是值得花的,因为一旦您有了一个好的模型,那么设计、模拟和验证系统就会比使用物理硬件做所有这些事情容易得多。
一些肯定没有建模但可能很重要的东西是超声波在低空的工作效果如何,或者在接近地面飞行时空气动力学如何变化。我的一个问题是,这个模型是为普通的Parrot迷你无人机开发的,而我的特定无人机可能有不同的参数。可能是电池电压低,质量脱落,电机转矩不同,等等。
现在,我想通过系统识别或其他物理测试来研究这个模型与现实的不同之处,并做出必要的更改。但不幸的是,在这个视频中,我没有时间对模型进行详细的研究所以我只好把这个留到下次再讲了。
好吧,我改变主意了,我不想在这个视频中留下一个失败的实验。我开始思考这种行为,并提出了一个可能的问题。这个前馈项被计算来产生所需的推力,完美地抵消了无人机的重量。这样PD控制器只需要稍微调整推力上下来改变高度。但如果这一项太低了,或者换种说法,如果模型认为无人机的重量更低或者螺旋桨产生的推力比实际要高呢?然后会有一些剩余重量PD控制器需要处理通过降低比例路径我们已经降低了克服重量的能力无人机将会有起飞困难,就像我们看到的。
所以我做了一个测试,我移除了反馈高度控制器,仅仅依靠重力偏移项来提升无人机。我的无人机的股票价值导致它停在地上,没有起飞。然后我把值提高了10%,再试一次,然后再提高20%。在20%的时候,无人机勉强能够离开地面。所以,我认为这是一个更适合我的硬件的前馈术语。
然后我添加了反馈项,并运行了最后一次测试,并检查了这个。它的工作原理。现在这是一个快速解决问题的方法。我仍然需要调整无人机的模型来反映这一点。对我来说,这听起来是个很有趣的项目。所以,如果你发现自己在家里尝试这种方法,我认为这将是一个很好的基于模型的设计介绍,并让你有机会学习如何使用别人提供给你的模型,并根据你的特定情况进行调整。至少,如果给了你一个为四轴飞行器开发控制法则的借口。我希望你和我一样感到兴奋。
如果你不想错过下一个Tech Talk视频,别忘了订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我也涵盖了更多的控制理论主题。感谢收看,我们下期节目再见。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。