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