我正在尝试为Java中的机器人实现粒子过滤器。该机器人具有范围传感器。世界有6个障碍-顶部3个,底部3个。我正在计算机器人到每个障碍物中心的距离,然后对每个粒子执行相同的活动。然后,我计算出机器人和粒子之间的差异。与机器人测量距离的差异较小的粒子,我给它们重采样的可能性更高。

但是,我朋友告诉我的这种方法的问题是,我假设我已经知道障碍物的位置,这使所有过程毫无用处。从某种程度上讲我不了解障碍,我应该如何处理呢?那么如何实现粒子过滤器呢?万一我不知道障碍物的位置,粒子过滤器将如何工作?一个过程示例将对您大有帮助。谢谢



#1 楼

您的问题解决了三个非常不同的问题,使用复杂的研究型算法很难解决所有这些问题。



本地化:当您拥有已知的环境图和未知的图时机器人位置。最常用的算法是Monte Carlo Localizataion。这是一个与您所描述的完全一样的粒子过滤器。

映射:当机器人在未知环境中醒来并必须构建地图时。通常,映射算法会假设您知道机器人的位置,即从GPS或类似设备知道。我从来没有做过纯映射,所以我不知道任何算法,但是一个快速的Google应该会找到它们。

SLAM:当您将两个问题结合在一起时,一个未知的环境和一个未知的位置会导致问题称为同时定位和映射(SLAM)。这很难。有好的算法和好的软件包可以执行此操作,但是它们都仍处于实验阶段,仅适用于某些类型的环境/传感器。我强烈建议您使用现有程序包,而不要自己实施SLAM,因为它可能需要花费数月的研究工作才能调整所有参数。我不知道是否有用于Java的SLAM软件包,但是openslam.org上有大量最新的SLAM算法。我个人已经使用了GMapping了很多,我相信它不会让我的$ 25k机器人崩溃。请注意,您正在研究领域。

很抱歉为您回答了这么短的问题。我的建议是假设您知道障碍物的位置,然后做一个简单的蒙特卡洛粒子过滤器。

评论


$ \ begingroup $
您是否需要了解粒子过滤器的环境图?因此,在未知地图上使用粒子过滤器将不起作用。
$ \ endgroup $
–MoneyBall
18年1月13日在2:49

#2 楼

如果您不知道障碍物的位置并想应用滤镜,我会看到两种解决方案:



使用易于实现的简单算法进行快速映射类似于“占用网格算法”(通过该方法您可以相对于机器人来定位障碍物)
应用粒子过滤器
移动机器人
使用测距法重新定位机器人
通过使用以下方法纠正测距误差尽可能进行另一次传感器测量

使用SLAM算法同时定位和映射障碍物。与占用网格算法相比,SLAM算法对传感器和测距法错误的鲁棒性更高,但更难以实现,并且通常需要更多的CPU消耗。

NB:您必须了解,没有“最佳”解决方案由于此问题仍然是机器人技术中非常活跃的研究领域,因此这两种解决方案各有利弊。
还要考虑处理器或微控制器的速度。