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