我有LEGO NXT和100x100cm的方形房间。我想将房间的中心始终作为我的起点(黑匣子)。绿色的盒子将成为我的公园区域。在我的路上,圆圈可以是随机放置的障碍物。红色是房间的墙壁。目标:
最糟糕的情况:机器人从拐角处开始,在停车的路上有障碍物。 我暂时使用的是颜色传感器和超声波传感器,我还可以添加一个陀螺仪传感器,但尚未对其进行深入研究。我也有RFID传感器,但我认为只有2个转发器它不会有太多帮助。
我的第一个挑战是没有任何障碍,首先会识别机器人的中心,它知道它必须来自一个随机位置。有小费吗?我正在使用leJOS。
超声波能够测量5到255厘米的距离,精度为+/- 3厘米。任何低于5厘米的东西都显示为6-8厘米,三角形/圆形面是有问题的,在这些时间距离误差可以是10厘米,但我们将所有作为方形/漂亮的物体开始考虑。颜色传感器位于超声波传感器下面,它们都像机器人的灯光一样位于我的机器人前面。
答案 0 :(得分:0)
我同意这些评论:很难想象一个“可接受的”答案是什么。就像这样的任务看似简单,这是一个高度复杂的过程,涉及经典的“感知计划 - 行动”循环
这里有许多未知数。例如,那些机器人被障碍墙包围的“退化”情况呢?机器人是否知道它的方向(即它所朝向的方向)?如何控制机器人?使用DifferentialPilot课程?机器人是否以厘米为单位知道其尺寸(宽度),以便它可以检测它是否可以通过两个靠近的障碍物?机器人应该尝试采取一些“最短路径”,还是可以在一段时间内广泛探索这个世界?假设通过距离传感器和停车区域通过颜色传感器检测到帽子障碍是否有效?颜色传感器只有几厘米的范围是真的吗?也许最重要的是:您知道停车位置在哪里吗?
考虑到所有这些问题,我们只能尝试提供有关可能的方法的一般提示。我会在答案结束前尝试这样做。但这应该不被认为是一个非常深刻的逐步解决方案,但仅作为建议,因为上面提到的所有问题必须先得到解答才能说出来
您应该考虑“世界”的预期表示(或描述此表示,如果您已经考虑过一个!)。我可以想象这里某种“网格”就足够了。但是使用LineMap来表示世界可能是有益的,因为这使您可以使用NXT API的现有基础结构。
一旦你有了世界的代表,你必须找到它的中心。再次,当有障碍时,这甚至可能都不可能(我在考虑这里的Allegory of the Cave)。但是当没有障碍物时,您可以将机器人旋转到大约360°:这将为所有壁点提供距离信息。根据这些信息,应该可以检测到世界的角落 - 这些将完全是LineMap
的边界矩形的角落。计算这些角落位置的平均值将产生中心。
移动到中心后,您必须移动到停车位置。如果我理解了设置,你甚至不知道这个停车位置。在这种情况下,你必须开始一个系统的探索:你可以尝试从中心开始向外“螺旋”。每当遇到障碍物时,你都会尝试移动到这个“螺旋”上的下一个自由点。如果您知道停车位置,您可以尝试直接移动到这个位置,避开所有障碍物。
在这两种情况下,你都有一个“当前位置”和一个“目标位置” - 后者要么是“螺旋上的下一个自由点”,要么是“停车位置”。要在世界地图中找到这些点之间的路径,您可以使用A* search algorithm。幸运的是,NXT API已经提供了ShortestPathFinder。集成它以便正确控制机器人可能仍然很棘手。但是,如果您使用DifferentialPilot
类,可能有许多资源的免费/示例源代码用于已经类似于您尝试的任务,也许您可以找到一些...“灵感“那里。