通过检查三个KNOWN目标的角度来进行三角测量。
“我知道那是亚历山大的灯塔,它位于地图上(X,Y),它位于我90度的右侧。”对不同的目标和角度重复2次。
通过检查距离三个已知目标的距离来进行三边测量。
“我知道那是亚历山大灯塔,它位于地图上(X,Y),我距离那里100米。”对不同的目标和范围重复2次。
但这两种方法都依赖于知道你在看什么。
假设你在森林里,你无法区分树木,但你知道关键树木的位置。这些树被手工挑选为“地标”。
你有一个机器人慢慢穿过那片森林。
您是否了解任何基于角度和范围确定位置的方法,利用地标之间的几何图形?请注意,您也会看到其他树,因此您不会知道哪些树是关键树。忽略目标可能被遮挡的事实。我们的预算法可以解决这个问题。
1)如果存在,它叫什么?我找不到任何东西。
2)你认为两次相同的位置命中的可能性是多少?我想这是相当罕见的。
3)如果有两个相同的位置'命中',我怎样才能确定我下次移动机器人后的确切位置。 (我假设在重新定位机器人之后连续出现2次精确角度的可能性在统计上是不可能的,除非森林生长成像玉米一样的行)。我会再次计算这个位置并希望最好吗?或者我会以某种方式将我以前的位置估计纳入我的下一个猜测?
如果存在,我想阅读它,如果没有,将其作为一个副项目开发。我现在没有时间重新发明轮子,也没有时间从头开始实施。因此,如果它不存在,我将不得不找出另一种本地化机器人的方法,因为这不是本研究的目的,如果它的话,让我们希望它是半容易的。
您正在寻找的是蒙特卡罗定位(也称为粒子滤波器)。 这是关于这个主题的一个很好的资源。
或几乎任何来自概率机器人人群,Dellaert,Thrun,Burgard或Fox。如果你有野心,你可以尝试使用完整的SLAM解决方案 - 发布一堆库 这里。
或者,如果你真的非常雄心勃勃,你可以使用第一原则实现 因子图。
我假设你想开始在森林里打开机器人。我进一步假设机器人可以使用角度和距离来计算每棵树的位置。
然后,您可以通过遍历树并计算到其所有邻居的距离来识别地标。在Matlab中你可以使用 pdist
获得所有(唯一)成对距离的列表。
然后,您可以遍历树木以识别地标。对于每棵树,将与其所有邻居的距离与地标之间的已知距离进行比较。每当您找到候选地标时,都会检查其可能的地标邻居以获得正确的距离签名。既然你说你总是应该能够在任何给定时间看到五个地标,那么你将尝试匹配20个距离,所以我要说误报的可能性不是太高。如果候选地标及其候选地标与完整的相对距离模式不匹配,则检查下一棵树。
一旦找到了所有的地标,你就可以简单地进行三角测量。
请注意,根据您测量角度和距离的准确程度,您需要能够在任何给定时间看到更多标志性树木。我的猜测是你需要将足够密度的地标空间化,如果你有很高的测量精度,你一次至少可以看到三个。
我想你只需要到两个地标的距离和看到它们的顺序(即从左到右你看到点A和B)
- (1)“机器人映射”和“感知混叠”。
- (2)两个相同的命中 必然。由于机器人只能区分有限数量X. 可分辨 树配置,即使配置完全随机,几乎可以肯定至少有一个位置看起来与其他位置“相同”,即使您遇到 远 少于X / 2个不同的树木。那些被称为“生日悖论碰撞”。你可能很幸运 特定 你所在的位置实际上是独一无二的,但我不会打赌我的机器人。
那么你:
- (a)有一张大面积的地图
一些,但不是所有树木。
- (b)a
机器人在实际森林里的某个地方
那,没有看地图,有
看着附近的树木和
生成了一个全部的内部地图
一个小区域的树木及其
他们的相对位置
- (c)致
机器人,每棵树看起来都一样
每隔一棵树。
- 你想找到:大地图上的机器人在哪里?
如果每个实际的树上都写有一个唯一的名称,机器人可以读取,然后(某些)那些树和它们的名字都在地图上,这将是微不足道的。
一种方法是将(不一定是唯一的)“签名”附加到每棵树上,描述其相对于附近树木的位置。
然后,当你一起旅行时,机器人驾驶一棵树并找到该树的“签名”,你会发现地图上所有与该签名“匹配”的树木。
如果地图上只有一个唯一的树匹配,那么机器人正在查看的树 威力 是地图上的那棵树(你知道机器人在哪里) - 在机器人与匹配树的相对位置放下一个重量但暂时的点在地图上 - 机器人旁边的树肯定不是任何一个的 其他 地图上的树木。
如果地图上的几棵树匹配 - 它们都具有相同的非唯一签名 - 那么你可以在地图上的机器人位置相对于它们中的每一个放置一些重量较轻的暂定点。
唉,即使找到一个或多个匹配项,机器人正在查看的树仍然可能根本不在地图上,并且该树的签名巧合地与地图上的一棵或多棵树相同,并且所以机器人可以 随地 在地图上。
如果地图上没有任何树匹配,那么机器人正在查看的树绝对不在地图上。 (也许以后,一旦机器人确切地知道它在哪里,就应该开始 加入 这些树到地图?)
当您沿着路径行驶时,您可以按照估计的行进方向和行进速度推动点。
然后当你检查其他树木时,可能在沿着路径向下走一点之后,你最终在地图上有很多点,并且希望在实际位置有一个沉重的,高度重叠的簇,并且希望每个点都容易被忽略孤立的巧合。
最简单的签名是从特定树到附近树的距离列表。
地图上的特定树与森林中的特定树“匹配”时,对于地图上的每个附近树,在森林中“相同”距离处有相应的附近树,尽可能地告诉你已知的距离和角度误差。
(通过“附近”,我的意思是“足够接近机器人 应该 能够明确地确认树实际上在那里“,虽然用”我的机器人可以看到所有树木到R的范围内“这样的东西可能更简单,所以我只会打扰它 试 从我的机器人匹配R * 1/3圈内的树,我的距离列表只包括我想要匹配的特定树中R * 2/3圈内的树。
如果你非常粗略地了解你的南北方向,你可以创建“更独特”的签名,即在地图上(希望)在真实森林中有更少的虚假匹配。
当地图上的每个附近树木在森林中以“相同”的距离和方向存在相应的树时,就会发生机器人接下来树的“匹配”,只要您知道距离已知和角度误差。
假设你看到地图上的树“弗雷德”在它的N到W象限有10米的另一棵树,但是机器人在N到W象限的那个距离肯定没有任何树的树旁边,但它有一棵树,距离南方10米。
在那种情况下,然后(使用更复杂的签名)你肯定可以告诉机器人不在Fred的旁边,即使简单的签名会给出(假)匹配。
另一种方法:
“数字纸”解决了类似的问题......你能以一种专门设计的图案种植几棵树吗?