Gou*_*uda 5 matlab filtering computer-vision inertial-navigation kalman-filter
我一直在尝试为使用惯性测量单元(IMU)和相机观察已知地标的机器人实施导航系统,以便在其环境中进行本地化.我选择了间接反馈卡尔曼滤波器(又名误差状态卡尔曼滤波器,ESKF)来做到这一点.我在扩展KF方面取得了一些成功.
我已经阅读了很多文本,我用来实现ESKF的两个是" 用于错误状态KF的四元数运动学 "和" 用于IMU相机校准的基于卡尔曼滤波器的算法 "(付费壁纸,google-able) .我使用的是第一个文本,因为它更好地描述了ESKF的结构,第二个是因为它包含了有关视觉测量模型的详细信息.在我的问题中,我将使用第一个文本中的术语:'名义状态','错误状态'和'真实状态'; 它指的是IMU积分器,卡尔曼滤波器,以及两者的组成(标称减去误差).
下图显示了我在Matlab/Simulink中实现的ESKF的结构; 如果您不熟悉Simulink,我将简要介绍该图表.绿色部分是标称状态积分器,蓝色部分是ESKF,红色部分是标称状态和错误状态的总和.'RT'块是'Rate Transitions',可以忽略.
我的第一个问题:这个结构是否正确?
我的第二个问题:测量模型的误差状态方程是如何导出的? 在我的情况下,我尝试使用第二个文本的测量模型,但它没有用.
亲切的问候,
您的框图结合了两种将 IMU 数据引入 KF 的间接方法:
u
,我假设它是 KF 的“命令”输入。这是外部积分器的替代方案。在直接 KF 中,您会将 IMU 数据视为测量值。为了做到这一点,IMU 必须对(位置、速度和)加速度和(方向和)角速度进行建模:否则不可能H
产生Hx
估计的 IMU 输出项。如果您将 IMU 测量值作为命令输入,则您的预测步骤可以简单地充当积分器,因此您只需对速度和方向进行建模。您应该只选择其中一个选项。我认为第二个更容易理解,但它更接近直接卡尔曼滤波器,并且要求您对每个 IMU 样本进行预测/更新,而不是在(我假设)较慢的相机帧速率下进行预测/更新。
关于版本(1)的测量方程,在任何 KF 中,你只能预测从你的状态中可以知道的事情。在这种情况下,KF 状态是误差项向量,因此您只能预测“位置误差”之类的内容。因此,您需要将测量结果预先调整为z
位置误差。因此,让你的测量结果是“估计的真实状态”和“嘈杂的相机观察”中的位置之间的差异。xHat
这个确切的想法可以通过间接 KF 的输入来表示。我对那里发生的 MATLAB/Simulink 内容一无所知。
关于求和块(红色)的现实世界考虑因素,我建议您参考有关间接卡尔曼滤波器的另一个答案。