我要制作的地图将具有大约1000 x 2000成员。这意味着我需要200万成员。好像很多。如果我有关于每个成员的八个属性(例如温度,光照水平,声音水平等),那么我要捕获1600万条信息。
这是正确的吗,还是有更好的方法使用软件为机器人创建地图?
#1 楼
它真的真的取决于地图的种类。如果您想要的地图是布尔值的二维网格,则取决于期望地图的稀疏程度。如果要保留所有布尔值,则需要在至少
N * M * S
位(假设地图是N
乘M
,并且每个位置都有S
传感器读数),对于您的数字,这将转换为约2MB的数据。如果您的微控制器没有那么多空间,那么这是一种不好的方法。但是,一切都不会丢失!通常,环境具有一些可以利用的功能。例如,如果环境中没有很多障碍,则无需记住所有空白区域,对吗?或者,如果某个区域被障碍物所封闭,那么您就不必跟踪其中的内部内容,因为无论如何您都无法到达该区域。记忆将是通过一组封闭的多边形对环境进行建模。在探索世界时,您可以优化多边形(但不包含极端细节)以减少内存占用。然后,所有算法都可以使用多边形(例如,碰撞检测)而不是位图,这可能也可以降低成本,因此对所有人来说都是一个胜利!以及由此链接的Map Database Management,也可以提供一些见解。
评论
$ \ begingroup $
您是否知道显示如何存储基于多边形的地图的示例?这也存储在数组中吗?
$ \ endgroup $
–鳄鱼皮
2014年5月19日15:34
$ \ begingroup $
我不知道您可以使用任何特定的实现。但实际上,它可以是一组点(如果需要,可以存储在数组中),也可以是四叉树或基于使用情况的任何其他数据结构,以及一组指向这些点的索引列表,显示一个逆时针遍历的闭合多边形例。
$ \ endgroup $
– Shahbaz
2014年5月19日下午16:
#2 楼
世界总是大于机器人的内存可以容纳的范围(它也比您的内存可以容纳的范围大)。第一个是考虑是否需要预分配存储空间,第二个是考虑可以使用哪种压缩。如果已经具有用于以下目的的值,则预分配空间才有意义这8个属性在每个平方上,或者机器人的工作是访问所有200万平方并进行测量。但是,如果机器人仅要访问总平方的一小部分,那么您也许可以将数据存储在四叉树之内。 (还有许多其他结构可以利用稀疏数据集,我将不在此处列出。)
如果无法避免预分配空间,则压缩会有所帮助。例如,您可以将访问过的正方形的状态存储为位而不是字节,从而以最小的努力获得8:1的压缩率。对于空格的属性,您需要确切的值吗?您是否可以利用数据中的模式来节省存储空间(例如GIF,JPEG和其他2D压缩方案)。
#3 楼
看看大学里其他人如何做到的论文和项目。机器人。这就是我所做的...
我为我做的是一张代表房间的1“正方形图。
要“填充”正方形,我将其值增加1。要“清除”它,我将其减小2,至最小值0。
然后在IR和超声波检测器检测到正方形时填充正方形。清除了它们,因为看起来正方形很清晰。
这可以处理瞬态障碍,但是随着传感器及其精度与栅格的匹配度不高而走了。
这还取决于如Shahbaz在存储/处理能力等资源上所述。
评论
$ \ begingroup $
好的方法,但是问题在于如何存储数据。那么在您的情况下,哪种数据类型用于存储正方形?
$ \ endgroup $
–德米特
2014年5月20日在22:08
$ \ begingroup $
抱歉,我很忙,没有回来...我为每个点都使用了一个有符号的字节。
$ \ endgroup $
–马特M
2014年6月3日18:46
#4 楼
您只是在使用微控制器吗?您是否可以选择将笔记本电脑系在笔记本电脑上?我使用Octomap(通过机器人操作系统)存储机器人的地图:
这是我发现以有效方式存储丰富的机器人感官数据的最佳方法。有一个很好的PDF解释了它的工作原理:到原始的嵌入式机器人。
评论
考虑打包数据。请勿在不需要的字节/字中使用整个字节/字。那些0和1可以打包8到一个字节-相当节省。温度-实际上,范围不超过-10至+40C。一个范围或50个可以打包为6位(您可以将其降低到5位)。多少光度?您可能只需要一点点就可以摆脱。性能会有轻微的下降,但是按位和移位操作通常很有效。另外,您也可以添加一个多GB固态硬盘