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