无人机仿真与控制,第3部分:如何构建飞行代码
从系列中:无人机仿真与控制
布莱恩•道格拉斯
本视频描述了如何创建四轴飞行器飞行软件,并从上一个视频中开发的控制架构编程无人机。它涵盖了如何处理原始传感器读数,并使用它们与控制器计算电机速度命令。
除上述两项功能外,飞行控制软件还负责参考命令生成、数据记录和故障保护。你将看到这些是如何使四轴飞行器安全盘旋的。
Simulink中的四轴飞行器例子万博1manbetx®用于无人机编程,作为飞行软件的起点,您将学习如何在Parrot上加载和运行代码®迷你无人机直接从Simulink。万博1manbetx
我们正在为四轴飞行器设计控制系统。在本系列的这一点上,我们已经了解了四轴飞行器如何通过四个螺旋桨产生运动,我们已经逐步完成了控制系统架构,我们认为能够让我们的无人机悬停。然而,在我们真正让无人机升空飞行之前,我们还需要采取一些步骤。首先,我们需要对控制逻辑进行编码,以便将其放在微型无人机上。我们称它为航班代码。其次,我们需要调整飞行代码,直到悬停性能达到我们所期望的水平。为了做到这一点,我们将使用基于模型的设计,我们将使用四轴飞行器和环境的真实模型来设计我们的飞行代码并模拟结果。我们将编写两种不同的软件:在四轴飞行器上运行的实际飞行代码,以及我们用来模拟真实世界的模型代码。在这个视频中,我们将更详细地探索飞行代码。我是Brian,欢迎来到MATLAB技术讲座。
飞行控制软件只是鹦鹉微型无人机整体飞行代码的一小部分。还有代码来操作和接口传感器和处理他们的测量。有管理电池的代码,还有蓝牙®接口,led,还有管理电机速度的代码,等等,有一堆。
实现飞行控制器的一种选择是手动编写C代码,然后用对飞行控制器的更改编译整个飞行代码,最后将编译后的代码加载到迷你无人机上。这是一种非常合理的创建飞行代码的方法,但在开发反馈控制软件时,它有一些缺点。使用这种方法,除了在硬件上调整控制器外,我们没有简单的方法来调优控制器。我们可以开发自己的调优工具和系统模型,并模拟它的行为方式。但我的经验是,用C代码设计和建模控制系统很难向其他人解释架构,而且与图形化方法相比,更难以理解变化如何影响整个系统。
所以我们将使用第二种选择,用框图图形化地描述飞行控制器。有了这个选项,我们将在Simulink中开发飞行控制器,然后自动将其编码为C代码,如果我们想要,我们可以手动进行更万博1manbetx改,然后编译C代码并将其加载到迷你无人机上。增加这个额外步骤的好处是,我认为Simulink代码更容易理解,加上在接下来的两个视频中,我们将讨论如何在Simul万博1manbetxink中构建无人机和环境的模型,以便我们可以模拟飞行控制器的性能,并使用现有的工具来调整控制器增益。
我们不需要担心编写大部分的飞行代码,因为我们将使用Simulink支持包鹦鹉迷你无人机编程我们的自定义飞行控制软件。万博1manbetx万博1manbetx这个包将新的飞行固件加载到飞行器上,以一种保持无人机所有正常操作功能的方式,但让我们只替换固件的控制部分。只要我们保持相同的输入和输出信号完整,那么当我们通过Simulink为迷你无人机编程时,我们编写的任何代码都将被放置在正确的位置,并且可以与迷你无人机固件的其余部分连接。万博1manbetx
在这个视频中,这是我们要做的。设计一个Simul万博1manbetxink模型,将外部命令和测量的传感器读数作为输入,并输出命令电机速度和一个安全标志,如果设置将关闭迷你无人机。这个标志是我们的保护,以防我们的代码导致无人机逃跑或以某种方式发疯。然后我们可以根据这个模型构建C代码,用这个软件驾驶实际的无人机,看看它是如何工作的。
我们在飞行控制系统上有了一个很好的开始根据我们在上个视频中开发的架构,但这并不是我们需要编写的所有软件。这只是控制系统的控制器部分。例如,无人机有一个测量气压的传感器,这个气压读数是什么传递到我们的飞行控制系统。然而,我们并不是试图控制无人机到一个特定的压力,我们是试图控制一个高度。因此,需要额外的逻辑来将来自传感器的所有测量状态转换为控制器所需的控制状态。我们称这个块为状态估计器。
除了状态估计器和控制器之外,我们还必须编写决定是否设置关机标志的逻辑。我们可以省略这个代码,但这样我们就会冒着无人机飞走或对附近观察者造成伤害的风险。我们可以检查无人机的转速是否高于某个阈值,或者位置或高度是否在某个边界集之外。创建这段代码相对容易,并且可以避免对硬件或其他人造成损害。
最后,我们需要考虑数据日志。迷你无人机上的所有固件都记录了我们在飞行期间和飞行结束后可以访问的数据。由于迷你无人机不知道我们所编写的软件,我们需要确保为我们感兴趣的变量设置了数据记录。由于我们将使用Simulink来编写飞行代万博1manbetx码,我们可以轻松地创建逻辑,将数据存储为无人机本地的.mat文件,我们可以下载到MATLAB中®在飞行之后。
这是我们需要在Simulink中开发的四个主要子系统为了有安全有效的飞行代码。万博1manbetx但是在这个视频中,我们不会从头开始构建这段代码的整个Simulink模型,这将花万博1manbetx费太多时间。幸运的是,我们不需要这样做。MATLAB中的Aerospace Blockset™有一个基于Parrot微型无人机的四轴飞行器项目,我们将使用它作为起点。有一些很好的网络研讨会,我将在描述中链接,描述如何打开这个模型并使用它,所以我不打算在这里介绍太多。相反,我将向您展示这个Simulink代码如何与我们在上个视频中开发的控制体系结万博1manbetx构相匹配,并指出它如何实现状态估计、数据记录和故障保护。我们将通过自动编码Simulink模型结束,并通过飞行迷你万博1manbetx无人机看到它的行动。
在看这个Simulink模型时需要注意的一件事是,它是在麻省理工学院为控制理论万博1manbetx课程的实验室部分开发的,因此,它是以教授基础理论的方式设置的。在某些情况下,它具有比我们执行相对简单的悬停机动所需的更多逻辑。我将从这个库存模型开始,这样当你打开它时,它看起来是一样的,但随着我们的进行,我会稍微修改它,使它更清楚地达到我们的目的。
好吧,我们开始吧。正如你所看到的,这个模型的顶层有几个子系统:FCS、机身、环境等等。它可能看起来不像,但这是我们经典的反馈控制系统。在左上角,我们有一个系统,它产生参考信号或我们想让无人机遵循的设定点。有飞行控制系统块,在那里产生误差项和PID控制器。这是飞行代码块,它被自动编码并加载到迷你无人机上,我们将在这个视频的剩余部分中花费大部分时间。
来自FCS模块的输出是通过设备播放的电机指令,即机体动力学。在角落里的可视化块只是绘制信号并在模拟运行时运行3D可视化器-它在我们的反馈循环之外。有一个环境块可以为植物和传感器的重力矢量和空气压力建模。最后是传感器模型块,它模拟了微型无人机上四个传感器的噪声和动态。所以你可以在顶层看到特征反馈循环。在这个视频中需要意识到的重要事情是,FCS块是飞行代码,其他所有东西都是用于模拟的模型的一部分。
现在,让我们进入FCS块,看看那里有什么。首先,您会注意到这里有三个输入,而不是我提到的两个。这是因为所编写的软件利用相机和图像处理来帮助精确着陆。虽然精确着陆是有用的,但这使我们的悬停控制器变得复杂,所以我现在要删除它,回到只有两个输入。
好了,让我们打开飞行控制系统块,这里的东西看起来很熟悉。我们将从控制系统的核心开始,控制器本身。作为一个快速提醒,控制器子系统获取参考信号,并将其与估计状态进行比较,以获得错误信号。然后将误差输入几个PID控制器,最终生成所需的电机命令。让我们打开子系统块,看看它是什么样子。
从图形上看,它看起来与我们在上个视频中介绍的控制器架构不同,但我向你保证,逻辑基本上是相同的,只是组织方式略有不同,这种逻辑允许我们指挥特殊的起飞行为,以及直接控制降落的滚俯仰角度。这两种能力我们在简单的悬停机动中都不需要。为了向您展示剩余的逻辑与我们之前开发的体系结构相匹配,我将快速进行一些重组,以便我们剩下的符合我们的期望。好了。
你现在可以看到,我们有XY位置外环控制器馈送到滚距内环控制器。独立于这些,我们有偏航和高度控制器。总的来说,有六个PID控制器一起工作来控制迷你无人机的位置和方向。
如果我们看一下高度控制器,它被设置成比例和导数,你会看到它的实现可能和你习惯的略有不同。
P增益应用于从超声得到的高度误差,而D增益应用于直接从陀螺得到的垂直速率测量,而不是将一个单一的高度误差项输入P和D分支。
这样,我们就不需要对有噪声的高度信号求导,我们已经从不同的传感器得到了导数。它比超声波传感器的导数噪音更小。
在本系列的后续视频中,我将更多地讨论以这种方式设置PID控制器时调优的好处和缺点。现在,我们接受现实,继续生活。
这些PID控制器的输出是力和扭矩命令,它们都输入到混合算法中。这将产生每个电机所需的推力,然后推力命令通过该块转换为电机速度命令。
总的来说,这个子系统执行的是我们在上个视频中构建的逻辑。
现在让我们离开控制器,转向状态估计器,因为在这个块中有一些很酷的东西,我们应该讨论一下。
进行原始传感器测量和生成估计状态涉及两个步骤。首先,我们处理测量,然后我们将它们与滤波器混合在一起,以估计控制状态。让我们来看看传感器处理块的细节。乍一看,这似乎令人生畏,但其基本概念相当简单。沿着顶部,加速度和陀螺仪数据通过减去先前确定的偏差进行校准。通过消除偏差,零加速度和零角速率应该导致零测量。下一步是将测量值从传感器参考框架旋转到车身框架。最后,通过低通滤波器对数据进行滤波,去除高频噪声。
类似地,超声波传感器已经消除了其自身的偏差。光流数据只有一个通过/失败的准则。如果光流传感器有一个有效的位置估计,并且我们想使用这个估计,那么这个块设置有效性标志,TRUE。总有更多的传感器处理可以完成,但我们很快就会看到,我们的无人机通过简单的偏差去除、坐标转换和滤波就能很好地盘旋。
现在我们已经过滤和校准了数据,我们可以开始结合测量来估计控制器所需的状态。两个橙色块用于估计高度和XY位置。如果你仔细观察这些块,你会发现每个块都使用卡尔曼滤波器将测量结果和我们认为系统应该如何表现的预测混合在一起,以便得出最佳估计。已经有一个MATLAB技术讲座系列涵盖了卡尔曼滤波,所以我不打算在这里花更多的时间,但如果你不熟悉它,我建议你看那个系列,我在这个视频的描述中留下了一个链接。
另一个非橙色块估计横摇,俯仰和偏航,它使用互补滤波器而不是卡尔曼滤波器。互补滤波器是一种将两个传感器的测量结果混合在一起的简单方法,它非常适合这个系统。在这个视频的描述中,我还链接了一个关于补充控制器的补充视频,如果你感兴趣的话,我张贴在我的频道上。
在描述了状态估计和控制器子系统之后,我们现在可以转向其他重要但不那么耀眼的子系统。
日志子系统保存了一堆信号,如电机命令和位置引用到.mat文件。这些值我们可以在飞行后下载并绘制出来。我们还有崩溃预测标志子系统。这里的逻辑只是检查感觉的变量,如位置和角速度的异常值。当这种情况发生时,它会设置关闭迷你无人机的标志。如果您愿意,可以在这里添加额外的故障保护逻辑。
还有传感器数据组,它只是从传感器总线上提取单个传感器值,以便我们可以在代码的其他地方访问它们。
最后是着陆逻辑块。如果设置了着陆标志,该块将用着陆命令覆盖外部引用命令。再一次,我将删除开关和着陆部分以简化逻辑,因为我们不想执行精确着陆。
我必须在这里改变另一件事,因为来自模型顶层的引用块不是运行在无人机上的自动编码器的一部分。所以它不会被加载到无人机上并执行。但这没关系,因为我现在可以把这个逻辑移到飞行代码中。因为我知道我只想让无人机悬停,所以我将在这个块中硬编码参考值。好了。这将使无人机保持在X和Y的位置0和0和高度-0.7米。记住,z轴在无人机参考系中是向下的,所以这是向上0.7米的高度。
好了,这不再是着陆逻辑,而是生成参考命令的块。我们不再需要这些输入,因为引用命令现在是硬编码的值。
这就完成了这个四轴飞行器模型中整个飞行控制软件的快速演练。现在你应该了解这些子系统是如何帮助我们的迷你无人机安全悬停的,无论是传感器处理和过滤,还是各种反馈控制器,甚至是设置停止标志的逻辑。我们需要这一切来拥有一个成功的控制系统。我还没有谈到如何调整所有这些控制器,这将是本系列的未来视频。现在,我们可以相信这样一个事实,即模型提供的默认增益已经经过了很好的调整。好了,Simulink模型看得够多了,我想是万博1manbetx时候让我们看看这个默认的飞行代码在Parrot迷你无人机上飞行了。
我们需要为Parrot迷万博1manbet万博1manbetxx你无人机安装Simulink支持包,以允许Simulink与无人机通信。我已经有了这个包,所以我所需要做的就是通过蓝牙将我的无人机与我的计算机配对,并点击模型顶部的构建模型按钮。同样,如果你有兴趣在家里做这些,描述中链接的网络研讨会介绍了如何设置所有这些。
在构建软件时,让我回顾一下幕后发生的事情。我们在Simulink中有所有的飞行代码,它在顶层有必要的接口,用于其万博1manbetx余的迷你无人机固件。我们现在正在从Simulink框图中自动编码C代码。万博1manbetx如果您像我一样安装了Si万博1manbetxmulink Coder™,那么您将可以访问C代码,并可以根据需要进行更改。如果您没有Similink Coder,那么您就无法看到代码,但它仍然会生成。然后在计算机上编译C代码,编译后的二进制代码通过蓝牙发送到迷你无人机,并放置在固件的正确位置。一旦它准备好飞行,这个GUI界面就会弹出,允许我们在无人机上启动代码,更重要的是,停止它。我已经把我的电脑和无人机设置在一个可以安全飞行的地方,但别忘了带上你的安全眼镜。现在我们只需坐下来,点击开始,并观察我们的反馈控制系统的运作。
我说过,默认收益很不错。在下一个视频中,我将深入研究模型,这样你就能很好地了解我们是如何模拟现实世界的,然后我们将如何使用这些模型来调整控制器。如果你不想错过下一期Tech Talk视频,不要忘记订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我在那里涵盖了更多的控制理论主题。感谢收看,我们下期见。
相关产品s manbetx 845
了解更多
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。