Matlab 在逻辑矩阵中模拟障碍物
我正在为我的一个项目写一个最优路径规划算法,我有点被困在如何生成地图上。为了测试我的算法,我想生成一个随机的地图,这个地图上有障碍物的物体会通过。为了生成地图,我制作了一个逻辑数组,其中“1”表示墙或障碍物,而“0”表示没有障碍物。然而,我在设置障碍时遇到了一些问题 现在,这是我用MATLAB编写的(尽管我认为核心思想可以用任何语言解决): obsSize参数表示方形障碍物一侧的尺寸。以下是我运行的示例解决方案:Matlab 在逻辑矩阵中模拟障碍物,matlab,math,Matlab,Math,我正在为我的一个项目写一个最优路径规划算法,我有点被困在如何生成地图上。为了测试我的算法,我想生成一个随机的地图,这个地图上有障碍物的物体会通过。为了生成地图,我制作了一个逻辑数组,其中“1”表示墙或障碍物,而“0”表示没有障碍物。然而,我在设置障碍时遇到了一些问题 现在,这是我用MATLAB编写的(尽管我认为核心思想可以用任何语言解决): obsSize参数表示方形障碍物一侧的尺寸。以下是我运行的示例解决方案: >> createMap(10,10,1,[5,5],1,1) an
>> createMap(10,10,1,[5,5],1,1)
ans =
1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 1 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
看起来不错!但问题开始于障碍物大小和分辨率不是1或2
>> createMap(10,10,1,[5,5],0.5,2)
ans =
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
>> createMap(10,10,1,[5,5],3,2)
ans =
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1
1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1
1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1
1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1
1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1
1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1
1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1
1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1
1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
对于第一个,我们希望在靠近中间的某个地方会有一个1,但却找不到。在第二个例子中,我们希望在每个方向上找到6个(3m*3cell/m=6 cell),但我们得到了8个(也有可能这不是我的代码所计算的,但这是我所希望的。这两个例子都不起作用,我想这与这一行有关:
Recalculating obstacle size for this grid
obsSize = obsSize - 1;
我很确定我必须重新计算对象大小,使其适合网格,但我如何才能对任何网格和障碍物进行计算?是否有方法缩放“-1”,使其根据网格/障碍物的大小进行操作
让我知道你想出了什么,如果我的代码中有任何其他突出的问题
谢谢!障碍物的边长应该取决于变量res,因为地图会随着res的变化而缩放。因此,您指出的线应该更改为obsSize=obsSize*res。障碍物的边长应该取决于变量res,因为地图会随着res的变化而缩放。因此,您指出的线应该更改d到OBSIZE=OBSIZE*res。
Recalculating obstacle size for this grid
obsSize = obsSize - 1;