0 引言
在进行motion planning运动规划学习过程中,对代码进行回顾记录。
1 引入
在栅格地图中,已知
地图分辨率 | |
地图边界(m) | |
地图栅格索引边界 | |
存放地图数据一维数组 |
上述是部分Occupy Grid Map相关参数。
将地图栅格化表示可以根据如下公式进行:
对于地图中某点(x,y,z)及其栅格索引计算为:
而对于占据栅格地图而言,障碍物的状态一般为1,而free空间设定为0;所以对于某个坐标(x,y,z)是障碍物的话,应该设定该点的值为1。
由于我们将整个地图数据放置到一维数组data中,即需要对data进行索引进而设置上述坐标为障碍物。数组索引的地址data[address]中address求解公式如下:
具体代码如下:
void gridPathFinder::setObs(const double coord_x, const double coord_y, const double coord_z)
{
if( coord_x < gl_xl || coord_y < gl_yl || coord_z < gl_zl ||
coord_x >= gl_xu || coord_y >= gl_yu || coord_z >= gl_zu )
return;
int idx_x = static_cast<int>( (coord_x - gl_xl) * inv_resolution);
int idx_y = static_cast<int>( (coord_y - gl_yl) * inv_resolution);
int idx_z = static_cast<int>( (coord_z - gl_zl) * inv_resolution);
data[idx_x * GLYZ_SIZE + idx_y * GLZ_SIZE + idx_z] = 1;
}
2 问题
如何理解上述障碍物设置的公式呢(代码部分也是一样)?
这里给出我个人的理解方式:
对于一个三维占据栅格地图,部分表明y-z平面按照
进行序号1所示索引,而索引到某x列的黑色平面部分栅格;然后
部分表明继续在黑色栅格中z轴线按照
进行序号2所示索引,索引蓝色列栅格;最后
表明继续在蓝色栅格中按照序号3所示索引,索引到最后红色栅格,对该栅格进行障碍物设定。