我有一个与变更检测有关的问题。应用领域是机器人/规划。
背景/设置:
在环境中的特定位置有一个传感器检测与障碍物的距离(超声波/声纳传感器)(x, y, theta)
。
它会定期返回一些读数。可以说读数是R
在一段时间内记录R+
或R-
(+/-
表示由于传感器不准确而导致的变化)。
案例 1:我在传感器和障碍物之间引入了一个额外的物体D
(D < R
),以便在下一个实例D
中检测并返回
案例 2:我移除了原来的障碍,现在下一个障碍是D'
( D' > R
) 并且在下一个实例D'
返回。
问题
有没有办法准确(或很有可能)说现在发生了变化(当我添加或移除障碍物时)?
大多数变化分析算法考虑变化点之前的游程长度和变化点之后的一些数据,并指示发生的位置变化。
但是到目前为止,我读过的没有一个说现在发生了变化;即使是“在线”算法似乎也需要一些数据。
编辑:
最终目标
我想实现一个方法,该方法采用数据向量并在最新数据点是变化点时返回。
一个可能的解决方案/黑客
由于我的工作涉及流数据,这是我目前正在采用的方法。
- 从流的末尾读取一个数据窗口(目前,我的窗口大小为 20 个值)。
- 在此窗口上运行 bcp(来自 R)。
- 检查位置 18 处更改的后验概率。(对于我刚刚进行的所有运行,最后一个值为 NA,因此忽略它,并且数据索引为零,(使用 rpy2 从 Python 调用 R),因此,对于 20 的窗口大小,位置结果为 18。
- 为后验概率设置一个 70% 的阈值(现在在我的实验设置中这工作正常,我以后可能需要努力获得一个合适的阈值)
- 如果位置 18 > 70% 的后验概率,我返回 TRUE,表示最近的数据点具有不同的均值,或“检测到变化”,否则返回 FALSE。
这可能不是最有效的方法,但它现在正在做它的工作。我正在使用这种方法来推进我的工作。
如果我找到更好的方法,我会更新线程。
谢谢大家的帮助!