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