为自主机器人创建和存储2D / 3D地图

时间:2015-12-16 22:05:39

标签: c++

我已经建造了一辆自动遥控车,能够跟踪其位置并扫描其环境中的障碍物。然而,我被困在如何存储/创建其环境的地图。环境的大小不会固定,因为机器人探索它可能会发现新的区域。我的背景是导航,因此该部分和确定障碍物的位置是很容易的部分(对我而言)。困难的部分是如何存储/访问数据。

最初我打算使用分辨率为2-5厘米的二维阵列/矩阵,即当投影到地面时,每个单元的宽度为2-5厘米。然而,这可能占用大量内存(它是嵌入式的,因此我的资源有限,现在512mb的RAM,但在原型完成后可能会减少)。同样,我最终会将系统移动到四轴飞行器,所以我将在3D中工作。 下一个解决方案是创建一个具有位置的障碍物体。然而,我不确定如何:1。跟踪物体的大小和方向,即如何判断物体是墙壁还是桌腿(不能避开墙壁,可以绕腿)和2如何有效地搜索/判断障碍物是否在机器人中。

我正在使用c ++,并集成了摄像头和超声波传感器来检测环境。如上所述,坚持如何有效地存储环境。我想保留环境信息,无论是保存到文件还是发送到服务器,以便我以后可以使用/访问地图。任何人都有任何关于尝试什么的建议,或者在哪里开始寻找,这个领域对我来说都是新的?

1 个答案:

答案 0 :(得分:0)

您可以使用R-Tree,其中您的初始位置是树的根。每次你可以去某个地方,你可以添加你在树上的地方。 如果可能的话,你也可以将一些邻居部分融合在一起。

从内存的角度来看,您不受数组/矩阵限制的限制,只存储有价值的数据。您可以选择存储的内容:障碍物或自由空间。 搜索这种结构也很有效。

对于实现,您可以查看r-tree in the boost library

稍后,如果您希望机器人从一个点移动到另一个点,您甚至可以根据您的树创建一个由路径搜索算法使用的图形。