數據預處理(16)_基於點雲數據的傳感器感知區域柵格化

對於移動機器人感知系統來說,我們要想辦法去描述感知區域,這裏提出一種柵格化的表示方法。比如有一個agv小車前後搭載了兩個rgbd傳感器,我們關心它前後2m,左右1m的感知區域,那麼可以把整個感知區域劃分爲40*80個格子的平面柵格,也就是說每個格子的大小爲5cm。
如下圖所示:
在這裏插入圖片描述
對於這樣的一個感知區域,可以用一個二維數組來表示,即percepitonrange[40][80],那麼二維數組每一個元素的類型是什麼,取決於我們對於一個柵格內的點雲想要關注的信息,比如說處於該柵格內的點雲、均值、方差、最高點與最低點的高度差等等,因此可以定義一個結構體變量描述。
這裏假設每個柵格里面存放對應點雲最小的高度值(這裏需要注意的是RGBD點雲的座標系爲前Z,下Y,右X)

const float STD_MAX = std::numeric_limits<float>::max();
float percepitonrange[40][80];//行:左右1m,列:前後2m
    for(int i = 0; i < 40; ++i)//rows
    {
      for(int j = 0; j < 80; ++j)//cols
      {
        percepitonrange[i][j] = STD_MAX;
      }
    }

然後把輸入點雲cloud對應的x,y,z投影到對應柵格。

    for(int i = 0; i < cloud->points.size(); ++i)
    {
        int index_x=cloud->points[i].x*100/5;
        int index_z=cloud->points[i].z*100/5;
        if(index_x>=20||index_x<=-20||index_z>=40||index_z<=-40)//超出索引範圍,不予考慮
            continue;
	    index_x += 20;
	    index_z += 40;
	    percepitonrange[index_x][index_z] = cloud->points[i].y < percepitonrange[index_x][index_z]?cloud->points[i].y : percepitonrange[index_x][index_z];
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章