仅使用距离和方位查找位置?

时间:2010-05-12 03:06:18

标签: java c++ language-agnostic matlab robotics

通过检查三个已知目标的角度来进行三角测量。

“我知道那是亚历山大的灯塔,它位于地图上(X,Y),它位于我的右侧90度。”对不同的目标和角度重复2次。

通过检查三个已知目标的距离来实现三边测量。

“我知道那是亚历山大灯塔,它位于地图上(X,Y),我距离那里100米。”对不同的目标和范围重复2次。

但这两种方法都依赖于知道你在看什么。

假设您在森林中而无法区分树木,但您知道关键树木的位置。这些树被手工挑选为“地标”。

你有一个机器人慢慢穿过那片森林。

您是否了解任何基于角度和范围确定位置的方法,利用地标之间的几何图形?请注意,您也会看到其他树,因此您不会知道哪些树是关键树。忽略目标可能被遮挡的事实。我们的预算法可以解决这个问题。

1)如果存在,它叫什么?我找不到任何东西。

2)你认为两次相同的位置命中的可能性是多少?我想这是相当罕见的。

3)如果有两个相同的位置'命中',我怎样才能确定我接下来移动机器人后的确切位置。 (我假设在重新定位机器人之后连续出现2次精确角度的可能性在统计上是不可能的,除非森林像玉米一样生长)。我会再次计算一下这个位置并希望最好吗?或者我会以某种方式将我之前的位置估计值纳入我的下一个猜测中?

如果存在,我想阅读它,如果没有,将其作为一个侧面项目开发。我现在没有时间重新发明轮子,也没有时间从头开始实施。因此,如果它不存在,我将不得不找出另一种本地化机器人的方法,因为这不是本研究的目的,如果确实如此,那就希望它是半容易的。

5 个答案:

答案 0 :(得分:10)

很棒的问题。

  1. 您正在调查的问题的名称是本地化,它与映射一起是目前机器人技术中最重要和最具挑战性的两个问题。简而言之,本地化是“给出一些传感器观察我怎么知道我在哪里?”的问题。

  2. 地标识别是隐藏在机器人技术实践中的“技巧”之一。如果无法唯一地识别地标,则最终可能会出现高比例的错误信息,特别是考虑到真实的传感器是随机的(即/会有一些与结果相关的不确定性)。您选择合适的本地化方法几乎肯定取决于您可以唯一地识别地标,或将地标模式与地图相关联。

  3. 在许多情况下,最简单的自我定位方法是Monte Carlo localization。实现此目的的一种常见方法是使用粒子过滤器。这样做的好处是,当你没有很好的运动模型,传感器能力以及需要能够处理意外效果(如移动障碍物或地标遮挡)的强大功能时,它们能很好地应对。粒子代表车辆的一种可能状态。最初,当车辆移动时,粒子均匀分布,并且添加了更多的传感器观测结果。粒子状态被更新以远离不太可能的状态 - 在给定的示例中,粒子将远离范围/轴承与当前位置估计可见的区域不匹配的区域。给定足够的时间和观察,颗粒倾向于聚集成车辆定位概率很高的区域。查看Sebastian Thrun的作品,特别是“概率机器人”一书。

答案 1 :(得分:2)

我假设您想从开启森林内的机器人开始。我进一步假设机器人可以使用角度和距离来计算每棵树的位置。

然后,您可以通过遍历树并计算到其所有邻居的距离来识别地标。在Matlab中,您可以使用pdist获取所有(唯一)成对距离的列表。

然后你可以遍历树木来识别地标。对于每棵树,将与其所有邻居的距离与地标之间的已知距离进行比较。每当您找到候选地标时,都会检查其可能的地标邻居以获得正确的距离签名。既然你说你总是应该能够在任何给定时间看到五个地标,那么你将尝试匹配20个距离,所以我要说误报的可能性不是太高。如果候选地标及其候选地标与完整的相对距离模式不匹配,则检查下一棵树。

找到所有地标后,您只需三角测量即可。

请注意,根据您测量角度和距离的准确程度,您需要能够在任何给定时间看到更多标志性树木。我的猜测是你需要将足够密度的地标空间放置,如果你有很高的测量精度,你一次至少可以看到三个。

答案 2 :(得分:2)

您正在寻找的是蒙特卡罗定位(也称为粒子滤波器)。 Here's a good resource on the subject

或几乎任何来自概率机器人人群,Dellaert,Thrun,Burgard或Fox。如果你有野心,你可以尝试使用完整的SLAM解决方案 - 发布了一堆库here

或者如果你真的非常雄心勃勃,你可以使用Factor Graphs从第一原则实施。

答案 3 :(得分:0)

我猜你只需要到两个地标的距离和看到它们的顺序(即从左到右你看到A点和B点)

答案 4 :(得分:0)

  • (1)“机器人映射”和“感知别名”。
  • (2)两个相同的点击不可避免。由于机器人只能区分有限数量的可区分的树配置,即使配置完全是随机的,几乎可以肯定至少有一个位置看起来与其他位置“相同”甚至如果你遇到的少于X / 2个不同的树。那些被称为“生日悖论碰撞”。您可能很幸运,您所在的特定位置实际上是独一无二的,但我不会打赌我的机器人。

所以你:

  • (a)有一张大面积的地图 一些,但不是所有的树木。
  • (b)a 机器人在实际森林里的某个地方 那,没有看地图,有 看着附近的树木和 生成了一个全部的内部地图 一个小区域的树木及其 他们的相对位置
  • (c)到 机器人,每棵树看起来都一样 每隔一棵树。
  • 您想要找到:大地图上的机器人在哪里?

如果每个实际的树上都写有一个唯一的名字,机器人可以读取,然后(某些)那些树和它们的名字都在地图上,这将是微不足道的。

一种方法是在每棵树上附加一个(不一定是唯一的)“签名”,描述它相对于附近树木的位置。

然后,当你一起旅行时,机器人开到树上并找到该树的“签名”,你会发现地图上所有与该签名“匹配”的树木。 如果地图上只有一棵独特的树匹配,那么机器人正在寻找的树可能是地图上的那棵树(你知道机器人在哪里) - 放下一个重量但是暂定的点在地图上机器人与匹配树的相对位置 - 机器人旁边的树肯定不是地图上的任何其他树。 如果地图上的几棵树匹配 - 它们都具有相同的非唯一签名 - 那么你可以在机器人位置相对于它们中的每一个在地图上放置一些重量较小的暂定点。 唉,即使找到一个或多个匹配项,机器人正在查看的树仍然可能根本不在地图上,并且该树的签名巧合地与地图上的一棵或多棵树相同,并且所以机器人可以在地图上任何地方。 如果地图上没有任何树匹配,那么机器人正在查看的树绝对不在地图上。 (也许以后,一旦机器人确切地知道它在哪里,它应该开始这些树添加到地图中?)

当你沿着小路行驶时,按照估计的行进方向和行进速度推动点。

然后当你检查其他树木时,可能在沿着路径向下走一点之后,你最终在地图上有很多点,并且希望在实际位置有一个沉重的,高度重叠的星团,并且希望彼此的点是一个容易被忽视的孤立巧合。

最简单的签名是从特定树到附近树的距离列表。 地图上的特定树与森林中的特定树“匹配”时,对于地图上的每个附近树,在森林中“相同”距离处有相应的附近树,尽可能地告诉您已知的距离和角度误差。

(通过“附近”,我的意思是“足够接近,机器人应该能够明确地确认树实际上在那里”,尽管用“My”这样的东西来估算它可能更简单机器人可以看到所有树到R的范围,所以我只是打扰尝试来匹配我机器人的R * 1/3圈内的树,以及我的列表距离只包括我试图匹配的特定树中R * 2/3圈内的树木。“

如果你非常粗略地了解你的南北方向,你可以创建“更独特”的签名,即在地图上(希望)在真实森林中有更少的虚假匹配。 当地图上每个附近的树在森林中存在“相同”距离和方向的相应树时,就会发生机器人接下来的树的“匹配”,只要您知道距离已知和角度误差。 假设你看到地图上的树“弗雷德”在它的N到W象限有10米的另一棵树,但是机器人在N到W象限的那个距离肯定没有任何树的树旁边,但它有一棵树在10米以外的南方。 在那种情况下,然后(使用更复杂的签名)你可以肯定地告诉机器人不在Fred的旁边,即使简单的签名会给出(假)匹配。

另一种方法: “数字纸”解决了类似的问题......你能用一种专门设计的图案种植一些树吗?