从系列中:了解卡尔曼滤波器
Mathworks Melda Ulusoy
本视频演示如何在Simulink中使用扩展卡尔曼滤波器估计非线性摆系统的角度位置金宝app®.
在本视频中,使用Simscape Multibody在Simulink中对单摆系统进行建模™. 使用控制系统金宝app工具箱中的扩展卡尔曼滤波器块估计非线性摆系统的角位置™. 视频演示了如何指定扩展卡尔曼滤波器块参数,如状态转换和测量函数、初始状态估计和噪声特性。如果要在硬件上实时运行状态估计,可以从Simulink中的扩展卡尔曼滤波器块生成C/C++代码,并将其部署到硬件上。
在本视频中,我们将演示如何在Simulink中使用扩展卡尔曼滤波器。之前,我们使用了单摆系统,并假设摆的角位置θ是用传感器测量的。为了滤除噪声测量金宝app,我们使用了卡尔曼滤波器,并且表明当θ的初始条件很小时,它提供了一个很好的估计。然而,当我们将θ的值增加到90度时,我们无法准确估计,因为摆锤模型对较大的θ值起非线性作用。因此,为了估计这个非线性系统的θ,我们将使用扩展卡尔曼滤波器。
我们首先将扩展的Kalman过滤器块从控制系统工具箱添加到我们的型号。请记住,在先前的视频中,我们讨论了状态转换和测量功能可能是非线性的,并且扩展卡尔曼滤波器算法如何使用线性近似对这些非线性函数来计算状态估计。现在,在扩展的卡尔曼过滤器块中,我们将指定这些函数。在这里,我们将使用MATLAB函数来创建F和G,但请注意您也可以使用Simulink功能块。金宝app状态转换功能使用当前状态和输入来确定将如何计算下次步骤的状态。这里,除了状态和过程噪声之外的状态转换功能的任何输入都通过输入端口连接。因此,我们将u连接为块的第一个输入。我们首先使用零阶保持将该信号分开,作为扩展的卡尔曼滤波器块估计离散非线性系统的状态。
在我们的示例中,我们不会指定雅可比矩阵,因为它将通过数值计算得到。但如果分析雅可比矩阵可用,则可以创建一个函数来计算它,并在此处输入该函数的名称。接下来,我们输入过程噪声协方差,这是我们之前在脚本中定义的。我们还输入状态的初始值。在摆锤模型中,θ以90度和0速度初始化。我们在扩展卡尔曼滤波块中使用相同的值。因为我们知道初始状态值,所以我们将初始状态估计误差协方差设置为一个较小的值。但如果您对初始状态值没有信心,可以为协方差指定一个高值。
接下来,我们使用MATLAB函数指定测量函数。然后,我们将测量的THET连接对应于我们在块中指定的测量函数。我们输入了以前在脚本中定义的值的测量协方差。请记住,卡尔曼滤波器也称为传感器融合算法,因为它结合了来自多个传感器的测量值,以减少状态估计中的不确定性。因此,如果您有多次测量,可以通过单击“添加测量”来输入它们。不同的传感器可能具有不同的采样率,因此您可以指定测量的采样时间和“Multiorate”选项卡下的状态转换。最后,我们输入了采样时间。
现在我们为扩展卡尔曼滤波器块指定了参数,我们可以运行此模拟并查看结果。这里,蓝色信号表示实际的θ,有噪声的信号表示测量值,绿线表示估计的θ。这一结果表明,尽管摆系统是非线性的,但使用扩展卡尔曼滤波器可以很好地估计θ。但是,请注意,如果系统中存在更严重的非线性,扩展卡尔曼滤波器可能不足以处理系统中的非线性。但在这种情况下,您可以使用无迹卡尔曼滤波器,可以在控制系统工具箱中找到。
在此模拟中,我们展示了如何使用扩展卡尔曼滤波器估算非线性系统的状态。如果您有兴趣实时地运行硬件上的状态估计,则可以从此块生成代码并将其部署到硬件。请记住,卡尔曼滤波算法由两个步骤组成:预测和校正。如果您查看生成的代码,您将识别要处理这些算法步骤的计算的功能。例如,该代码段显示了如何计算校正。
这里,我们结束对卡尔曼滤波器的讨论。在本系列中,我们讨论了为什么要使用卡尔曼滤波器,它们是什么,如何处理非线性系统中的状态估计,我们还展示了Simulink中的示例。我们将继续做关于不同控制主题的控制技术讲座。同时,请随时留下任何评论,并分享您对未来主题的建议。金宝app
您还可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。