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