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