繁体   English   中英

实时一维数据中的步距检测

[英]Step detection in real-time 1D data

对于一个小型项目,我们正在尝试为老虎机实现自动驾驶仪。 陀螺仪传感器连接到汽车,并每秒传递20次Z值(意味着作用在汽车/传感器上的离心力的大小)。 其中一个至关重要的部分是检测汽车是否在弯道上或在直线部分上,何时准确进入以及何时离开该部分。 只有这样,我们才能对未来会发生的情况做出可靠的预测。

到目前为止,我们正在使用滑动窗口来平滑数据,然后使用硬编码的限制(左曲线为-400,右曲线为+400)来检测我们是哪种扇区(左,右,笔直)显然,这花了太长时间,因为要花费几条消息,直到程序由于平滑和硬编码限制而检测到方向改变为止。

这是一个从方格区域开始的简单回合中两回合的示例: 示例图 赛道示例

完美的算法将检测SSRRSLSRSRSRSRS扇区一轮,而延迟只有几个数据点。

我们曾考虑过使用陀螺仪值的一阶导数,但在示例图中,在第一条左曲线之后的第二条右曲线(介于22:36:40和22:36:42之间)显示出弯曲的迹象。 在这里,一阶导数将接近0并表示一个笔直的部分。此外,我们还需要再次设置一个硬编码的阈值,但是由于数据的噪声,可能会导致磁道中的小凸起在这样的噪声水平下,其导数将超过阈值。

现在我们不确定处理这种检测的最简单/最快/最可靠的方法。 使用导数会是个好主意吗? 有没有更好的办法?

任何投入将不胜感激 :)

现有软件是用Java编写的。

在此类问题中,您必须以鲁棒性为代价。 如果您不知道将来会发生什么,则只能进行假设。 这些假设可能成立,也可能不会成立。

从数据的外观来看,不需要进行任何平滑处理。 如果定义一个合理的阈值,则曲线应该被非常可靠地识别。 但是,如果不是这种情况,可以尝试以下操作:

您已经提到平滑。 关键点是您如何平滑。 一个不对称的平滑核可能是可取的(半三角滤波器可以在恒定时间内更新)。 您可以通过修改内核宽度直接权衡鲁棒性和即时性。

过滤的一种简单替代方法是计数。 如果您的数据高于曲线阈值,请暂时不要将其称为曲线。 连续计算有多少个数据点高于阈值。 如果超过阈值的数据点超过n个,则很可能会出现曲线。

使用导数可能存在问题。 反对导数的主要原因是,曲线根本不由任何导数定义(至少没有力的导数)。 第二个问题是,您只能通过数值估计导数,这在很多噪声的情况下非常不稳定。 因此,您将不得不平滑数据(或为噪声模型找到一个数值方案),这又需要一些延迟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM