我正在使用ROS,并且试图调整地图派生的占用栅格的大小,以使其适合机器人的直径D(我的机器人为圆柱体形式),这意味着任何栅格单元的大小将为D XD。 我可以假设机器人的直径将大于原始网格像元的分辨率,并且如果新的像元大小未除以原始像元大小,则可以“扔掉”原始像元的剩余空间。当我考虑所有的极端情况时,我发现我的步骤应该是这样的: 1)查找有多少原始单元格适合一个直径并将其四舍五入到最接近的整数。我们称之为因素。 2)遍历新的D尺寸的网格单元,以确定是否应占用新的单元: a)然后,如果发现在第一次迭代中,我应该循环遍历第一次 因数X是原始网格的因数X因子,如果我发现一个被占用的像元,则(0,0)新的D像元将被占有,如果没有,则其空闲。但是我注意到,对于第二次迭代中的(0,1)新D单元格,我还需要检查数量因子单元格,以及之后的因子单元格数量。 在这里,我反复尝试以一种优雅的方式编写这个复杂的嵌套循环,但失败了。 我希望对自己的思维过程进行一些评论,并为编写此嵌套循环提供一些帮助。
这是一个数字示例: 我的机器人直径是1.6米。 我原来的网格高度是10米。 我原来的网格宽度是10米。 我原来的网格分辨率是0.5米。
我的因素将是:向上舍入(1.6 / 0.5)= 4。 我的新D网格顺序将向下舍入(10 / 1.6)=6。这意味着6 X 6单元格。 -对于(0,0)D单元格,我将循环(0,0)到(3,3)原始单元格, 如果其中一个已被占用,我会将此D单元标记为已占用,否则将不会被占用。 -对于(0,1)D单元格,我将循环(3,0)到(7,4)原始单元格。
依此类推,这意味着我在第一行和最后一行和最后一列中都遇到了问题。
谢谢!