我是一名软件研究员,在业余时间指导一个机器人团队,在软件方面提供帮助。多年来,我一直回想着同样的问题:如何确定机器人的位置以及比赛中的前进方向?我们尝试了许多成功/失败程度不同的事情。驱动轮,加速度计,陀螺仪等上的编码器。我最近购买了带有3轴加速度计,3轴陀螺仪和3轴磁力计的IMU,它们均由Arduino预处理,并将其输出到串行端口。我认为肯定有一种方法可以进行所有这些测量并获得位置和航向的综合视图。我们在此特定机器人上使用了Mecanum车轮,因此车轮编码器并不是特别有用。我环顾四周,关于使用四元数的方向和使用相似板的传感器融合的讨论很多,但是对我来说还不清楚如何获取四元数和估计值并得出距起始位置的x,y距离?现在,我用于这些测量的时间窗口很小,约15秒,但我需要在该窗口内保持准确。我准备放弃使用IMU,并尝试其他方法。一种想法是使用USB球形鼠标来尝试跟踪机器人的动作,但是我敢肯定,鼠标会被猛烈地撞击,从而导致噪音和无效结果。附带说明:机器人的重量约为2ft x 3ft,重120磅。任何想法或建议表示赞赏。

评论

您是否尝试过卡尔曼滤波器?

我已经读过有关卡尔曼滤波器的信息,但从未写过。

如果您有约1600美元的支出,ADI公司的IMU带有嵌入式扩展卡尔曼滤波器(我不适用于AD)。链接

我认为任何鼠标都可以测量与球形鼠标相同的运动。是否应该使用球形鼠标有什么特别的原因?带有红色LED的LED可能会由于物理撞击而减少噪音。两者都需要与道路表面进行物理接触(或其附近)。小鼠可能擅长线性平移,但很可能会错过旋转运动。

#1 楼

如何估算机器人的位置取决于您估算机器人的能力。如果您只需要粗略的猜测,请尝试测距法,它可以正常工作。为了获得更好的结果,您必须合并更多的传感器。这是一个增量过程,涉及很多传感器融合,突然间,您构建了扩展卡尔曼滤波器。

,我认为最好的方法是使用每个传感器来形成自己的估算值。然后,对所得估计值进行加权平均。权重对应于与每个估计相关的确定性。这本质上就是卡尔曼滤波器。缺少的是如何估计确定性。这是KF的难处。尝试一些临时值作为开始。您会惊讶地发现它的工作原理如何。

在任何主要的机器人技术教科书中,甚至在此站点上,这都是作为首要问题解决的。

在此站点上,我们已解决了许多与此问题有关的问题。



如何在KF中融合线性和角度数据。这可能是一个很好的起点,因为它也涵盖了KF / EKF
如何为轮式机器人选择一个好的imu
如何融合多个位置估计值
为什么我需要一个卡尔曼滤波器
什么是适合两轮机器人的模型?

我想念的更多东西。

但老实说,这些都是笨拙的方法。您必须了解基础知识(例如,根据测距法估算位置)才能理解其余内容。

评论


$ \ begingroup $
我确实了解其中涉及的问题。并尝试了各种机器人。我们已经有了编码器,并计算了速度和行进距离,但是发现滑移和其他机器人的推动使物体变形。我们已经完成了加速度计的双重集成,发现复合误差很快使该值无用。我们有一个陀螺仪,发现以前相对便宜的组件的漂移是一个问题。所以我买了一些更贵的东西,希望它会更好。感谢您的链接,我来看一下
$ \ endgroup $
– Michael Coss
15年2月24日在23:08

$ \ begingroup $
嗨,我不是要暗示您没有。只是每个传感器都可以提供独立的位置估计值,而且令人惊讶的是,通过将它们融合在一起,您可以获得比最好的更好的组合估计值。如果没有一个单独的传感器足够好,这是需要使用的基本概念。
$ \ endgroup $
–乔什·范德·胡克(Josh Vander Hook)
15年2月24日在23:10

$ \ begingroup $
同意,这就是我提出这个问题的原因。如何融合它们,并获得更好的结果。最重要的是,如何推导运动模型和协方差矩阵是我不完全了解的,以及为什么我从未沿着为机器人实现卡尔曼滤波器的道路前进。如果我不了解如何调整滤波器的增益,即使只是获取一些代码也无济于事。具有集成卡尔曼滤波器的IMU可能是更好的解决方案。我确实看到了麦格威克(Madgwick)的IMU / AHRS算法卡尔曼(Kalman)的其他替代方案,但看起来好像不是我想要的
$ \ endgroup $
– Michael Coss
15年2月24日在23:40

$ \ begingroup $
我认为,最好的方法是使用每个传感器形成自己的估算值。然后,对所得估计值进行加权平均。权重对应于与每个估计相关的确定性。这本质上就是卡尔曼滤波器。缺少的是如何估计确定性。这是KF的难处。尝试一些临时值作为开始。您会感到惊讶的是,这种方法的效果如何。
$ \ endgroup $
–乔什·范德·胡克(Josh Vander Hook)
15年2月24日在23:45

#2 楼

我不允许发表评论,因此我必须添加回复。通过位置,您是指空间中的位置(因此X,Y坐标)还是方向(倾斜等)?

如果是位置,则可以使用加速度计值并积分加速度来获得行进距离,尽管这是相当不准确的。我们已经尝试对四轴飞行器执行此操作,并且由于误差导致的漂移非常大。

可以将加速度计与陀螺仪一起使用,以及卡尔曼滤波器,以更好地了解机器人在各个方向上的移动距离。这是有关此主题的先前讨论。

您可以直接从加速度计值中计算出倾斜度(但可以对它们进行滤波,即使FIR滤波器也可以)。

您可以从陀螺仪和/或磁力计获得的标题。陀螺仪可以检测到旋转,因此请确保其位于机器人中心附近(或旋转轴所在的任何位置)。

我希望能有所帮助。我必须去教书,但是我会在一个小时后回来并添加更多信息。

评论


$ \ begingroup $
我查看了有关Kalman滤波器的各种文档,这似乎是减少加速度计中噪声的一般答案,但是我从来没有为这种滤波器编写代码,而且不确定从哪里开始集成其他传感器。不难看出,在我们的机器人嘈杂的,充满振动的环境中,仅将加速度计集成两次是非常糟糕的。同样,我认为考虑其他传感器会减少误差,假设一开始就进行了适当的校准。首先,我们只需要x,y坐标和方向航向。
$ \ endgroup $
– Michael Coss
2015年2月23日在23:36

$ \ begingroup $
@MichaelCoss:有很多软件可以为您实现卡尔曼滤波器。新手入门的主要困难是开发合适的运动模型并表征传感器模型中的协方差。
$ \ endgroup $
– Paul
15-2-24在3:14



$ \ begingroup $
@MichaelCoss,卡尔曼在线有Arduino代码可用。这是关于调优Kalman和陀螺仪+加速度计的Arduino代码的很好的讨论,并在此处提供了指南。如果您查看用于四轴飞行器代码的卡尔曼滤波器,可能会更有运气-它非常流行。
$ \ endgroup $
– Mewa
15年2月24日在4:24

$ \ begingroup $
@MichaelCoss,也用于用磁力计计算航向,但是我认为机器人中的电动机和倾斜会影响该测量的准确性。在这种情况下,您可能需要使用加速度计来测量机器人是否处于水平状态(将其校准至某个水平),然后将其调整为磁力计读数。
$ \ endgroup $
– Mewa
15年2月24日在4:30