我正在尝试完成本地化管道,而我需要的最后一个模块是用于我的姿势估计的过滤框架。虽然卡尔曼滤波器可能是最受欢迎的选择,但我正在使用相机进行感应,但我无法确保KF可以很好地适应各种噪声,我怀疑它在突然出现的异常值中是否也能正常工作我的姿势:所以我正在寻找其他可以处理实时数据并且不受异常值影响的选项。

我遇到的一件事是带有基于阈值的更新拒绝的Kalman过滤器,例如Mahalanobis距离:但是我不知道这是否完全适用,因为本地化将实时进行,这不像我有一大堆“好姿势”。我期望的最终结果是类似平滑处理,但是无法访问全部值。我发现的另一个选择是从提出“鲁棒贝叶斯加权卡尔曼滤波器”的论文中得出的,该滤波器对于实时离群值剔除非常有用,但是我仍然需要通读它:而且我在滤波/平滑方面没有太多经验,因此建议可能非常有帮助,也许与此有关的一个不错的定位机制?

#1 楼

如果您要谈论像素或现实空间中的地标位置,则将相机观察值与卡尔曼滤镜一起使用既是可接受的,也是标准做法。像素空间观测值通常是随机的Caushy分布,但事实证明,在这种情况下,高斯卡尔曼滤波效果很好。

您描述的使用马哈洛诺比斯距离拒绝更新的方法是$ \ chi ^ 2 $选通,使用估计平均值的“运行”协方差确定候选观察值是否不在给定的置信区间内。

$$ \ chi ^ 2 =(z-\ hat {z})^ \ top S ^ {-1}(z-\ hat {z})$$

然后用您选择的置信区间替换$ \ chi ^ 2 $通常是在给定系统自由度($ S $等级)的表格或图表中进行选择。例如,对于6个自由度,$ \ chi ^ 2_ {0.01} = 16.812 $,这意味着,如果$ \ chi ^ 2 \ ge 16.812 $则有$ 99 \%$的概率是异常值,您应该拒绝它。
要执行此操作,您需要跟踪协方差$ S $,最简单的方法是使用卡尔曼滤波器。

更简单的方法是对e中位数绝对偏差度量标准。

KF和MAD方法涉及记录小的数据集并描述方差。

注意:
任何拒绝方法的缺点是如果您从一个无效的姿势开始,并且没有“重置”的机制,那么您将始终被锁定在一个无效的姿势。一种简单的机制可以避免连续计数拒绝的次数,如果超过2秒,则强制过滤器更新(忽略拒绝)并重置$ P $矩阵。

评论


$ \ begingroup $
我使用if(residual> 3 * sqrt(Measurement_covariance_noise)then >>>>>,则拒绝异常值;如果我要尝试卡方检验,请结束,您如何选择阈值?因为,如果确定测量协方差噪声的等级会在所有步骤中发生变化,您需要对数据中位数进行所有测量,以使其无法在线工作!
$ \ endgroup $
–维吾尔族
18年7月10日在12:20



#2 楼

我真的很喜欢Gouda的答案。
但是,有一个问题,您指出“像素空间观察通常通常是随机柯西分布的”,这是怎么发生的?您能否指出一些参考文献或给出直观的解释?谢谢!

关于离群鲁棒卡尔曼滤波,有两种类似的方法可用于本文的高压。
一个基于L1正则化,请参见通过异常稀疏约束对动态过程进行双稳健平滑,另一个基于稀疏贝叶斯学习,请参见对异常值不敏感的卡尔曼平滑和边际消息传递。

评论


$ \ begingroup $
欢迎使用Effesian机器人技术。在堆栈交换中,答案只能回答问题。如果您有一个相关的问题,则应将其作为一个新问题(最好是参考此问题)提出。如果您想讨论问题或答案,可以在拥有聊天权限的情况下使用机器人聊天。如果您有关于如何改善问题或答案的想法,则可以在拥有评论权限时发表评论。请查看如何提问和游览以获取更多信息。
$ \ endgroup $
– Mark Booth♦
17年5月29日在11:37