从系列中:理解卡尔曼滤波器
Melda Ulusoy, MathWorks
本视频演示如何在Simulink中使用卡尔曼滤波器估计简单摆系统的角位置金宝app®.
使用MATLAB®和Sim金宝appulink,你可以实现线性时不变或时变卡尔曼滤波器。在本视频中,使用Simscape Multibody™在Simulink中建模一个简单的摆系统。金宝app摆的角度位置是使用控制系统工具箱™中的卡尔曼滤波块来估计的。视频展示了如何配置卡尔曼滤波器块参数,如系统模型、初始状态估计和噪声特性。
记录日期:2017年10月25日
在本视频中,我们将使用一个简单的钟摆示例来演示如何在Simulink中使用公共滤波器来估计钟摆的角位置。金宝app
在这个系统中,我们感兴趣的是角位置。让我们假设我们可以用一个传感器测量这个角度,比如旋转电位角。虽然我们可以测量,但是我们的测量是有噪声的。为了滤除噪声并得到一个很好的估计,我们将使用卡尔曼滤波器。
在切换到Simulink之前,让我们看一金宝app下摆的自由体图和运动方程。对于摆模型,我们假设摩擦为零。
想象一下,摆与一根刚性杆相连,我们以一个角度启动它。当我们放开它时,它开始来回摆动。
注意,有一个与角位置相关的非线性项。如果你看一下这个函数的图,我们会发现对于很小的值,这个函数几乎是线性的。因此,对于小角度,我们可以线性化这个方程并把它写成这种形式。
接下来,我们可以用状态空间的形式来表示这个系统,我们选择第一个状态作为角位置,第二个状态作为角速度。
我们在这个脚本中定义了参数和状态空间模型。正如我们之前提到的,我们对通过卡尔曼滤波器估计感兴趣,因为对theta的测量是有噪声的。
您可以使用MATLAB或Simulink来实现线性时不变或金宝app时变卡尔曼滤波器。在这里,为了估计摆的角位置,我们将使用Simulink。金宝app
我们首先将这个预制的摆块拖到我们的模型中。这是使用Simscape Multibody创建的,它允许我们使用诸如主体、关节、力元素和传感器等组件定义机械系统。然后解出机械系统的运动方程。
在这里,我们通过一个转动关节将一个固定的枢轴与一个连杆连接起来,以此来模拟钟摆。我们也可以在机制探索器中查看这些内容。
在这些块中,我们定义了物体的尺寸、质量和惯性特性。作用在关节上的驱动力矩是这两个信号的和。我们输出关节位置,通过转动关节块。
如果你想看积木的内部,可以从视频描述中的链接下载这个S金宝appimulink模型。正如我们刚刚看到的,这个方块需要两个单位。
第一个输入是施加的扭矩,我们将其设为零。第二个输入是过程噪声。在这个例子中,我们假设过程噪声只存在于角加速度上。
在脚本中定义了过程噪声的协方差。所以我们把这个值输入到我们的块中。我们通过双击钟摆块来设置这些状态的初始条件。
我们将钟摆从10度开始,对应于/ 18的半径。开始时角速度为0。
摆块的输出是角位置,假设用传感器测量。我们期望传感器读数有一些噪声,我们将使用这个噪声块来模拟。
与我们对过程噪声所做的类似,我们使用协方差r定义噪声特性。现在,我们有了theta的实际值和测量值。接下来,我们想用卡尔曼滤波估计。
我们将控制系统工具箱中的卡尔曼滤波器块添加到我们的模型中。这个块计算卡尔曼滤波算法方程,我们在前面的视频中讨论过。
利用系统模型和测量方法,通过最小化误差协方差p来求解卡尔曼增益,并输出最优状态估计。
对于我们的示例,我们将使用连续时间估计。但是请注意,如果你想在微处理器上实时运行估算,那么你可以使用脚本时间Kalman Filter,为这个块生成cc++代码,并将其部署到你的硬件上。
这个块采用一个系统模型,我们将在脚本中定义它,以及它的输入,并且它还使用度量。
在摆模型中,我们使用初始条件pi / 18半径作为角位置。在这里,我们假设我们只知道大约,并输入一个稍微不同的数字来研究当初始条件不确切时卡尔曼滤波器估计将如何合并。我们需要配置的其他参数是我们的噪声协方差矩阵,我们选择与摆系统中的相同。
注意摆系统有两种状态。过程噪声协方差是一个2 × 2矩阵。但由于我们假设过程噪声只作用于角加速度,我们输入协方差矩阵中的相关项为0。
接下来,我们输入测量协方差。交叉协方差矩阵n用于捕获过程和测量噪声之间的相关性。在我们的例子中,它们是不相关的。n = 0。
另外,请注意,您可以通过取消选中旁边的复选框,将协方差矩阵指定为时变矩阵。如果未选中,该块将为时变协方差添加额外的输入。
接下来,我们运行脚本和Simulink模型,并通过卡尔曼滤波器查金宝app看这个负theta。需要注意的一点是,在此块中使用的摆模型包括非线性项sin。
但是卡尔曼滤波器使用线性化的系统。然而,我们仍然期望卡尔曼滤波器工作得很好,因为我们用一个小的值初始化了。所以钟摆模型几乎是线性的。
让我们看看模拟结果。我们假设完全了解摆模型,它的输出,实际的theta用绿线表示。噪声是橙色显示的信号,是测量值。估计的用蓝色表示。
这个估计告诉我们卡尔曼滤波器滤掉了噪声。尽管它的初始条件与模型本身略有不同,但我们看到卡尔曼滤波器在大约5秒内收敛,并提供了一个很好的摆角位置估计。
在这个视频中,我们模拟了摆系统,并使用卡尔曼滤波器估计了它的角位置。我们假设对系统模型有充分的了解,并在噪声协方差矩阵Q和r上进行处理。但如果您不确切地知道系统参数或传感器特征,那么这个模拟给您一个机会来处理您的模型参数以及噪声协方差矩阵,并观察和改进您的状态估计。
在这个模拟中,我们用10度的小值初始化theta,并通过卡尔曼滤波器观察良好的估计。如果用更大的值呢?
如果我们现在在摆模型和卡尔曼滤波器中都将初始值增加到90度,然后模拟模型,我们会得到一个较差的估计。
这是因为对于较大的theta值,钟摆模型的作用是非线性的。卡尔曼滤波器只适用于线性系统。正如我们在前面的视频中讨论的,这个问题可以通过使用扩展的卡尔曼滤波器来解决。
在下一个视频中,我们将使用相同的摆模型,并演示如何在Simulink中使用扩展的卡尔曼滤波器。金宝app
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。