Заполнение MRPT наблюдение велодин сканирования - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок в MRPT, и я хотел бы использовать его для построения карты сетки занятости с использованием облаков точек велодина.

Набор данных KITTI предоставляет облака точек велодина в (x, y, z, r)формат, где r - коэффициент отражения.Я пытаюсь заполнить mrpt :: obs :: CObservationVelodyneScan такими данными, но использование метода insertObservation, похоже, ничего не дает.Можете ли вы указать мне правильное направление для использования этого типа наблюдения?

Мой код в основном выглядит следующим образом:

COccupancyGridMap2D map;

// allocate 4 MB buffer (only ~130*4*4 KB are needed)
int32_t num = 1000000;
float *data = (float*)malloc(num*sizeof(float));

// pointers
float *px = data+0;
float *py = data+1;
float *pz = data+2;
float *pr = data+3;

// load point cloud
FILE *stream;
stream = fopen (args.velodyne_filename.c_str(),"rb");
num = fread(data,sizeof(float),num,stream)/4;

obs::CObservationVelodyneScan v;
v.point_cloud.x.resize(num);
v.point_cloud.y.resize(num);
v.point_cloud.z.resize(num);
v.point_cloud.intensity.resize(num);

for (int32_t i=0; i<num; i++) 
{
    v.point_cloud.x[i] = *px;
    v.point_cloud.y[i] = *py;
    v.point_cloud.z[i] = *pz;
    v.point_cloud.intensity[i] = *pr;

    px+=4; py+=4; pz+=4; pr+=4;
}
fclose(stream);

map.likelihoodOptions.likelihoodMethod = OccupancyGridMap2D::lmRayTracing;

map.insertObservation(&v);

Спасибо,

Франческо

1 Ответ

0 голосов
/ 25 ноября 2018

В эти дни я также работал над набором данных Kitti, поэтому я просто добавил новую функцию для загрузки файла данных kiti velodyne непосредственно в MRPT (см. этот PR ).

Однако, подумав, я заметил, что необработанные данные Kitti не совпадают точно с CObservationVelodyneScan, который нацелен на сохранение необработанных диапазонов для каждого луча LiDAR и, только, необязательно, точечного облака.Данные Kitti velodyne являются точечными облаками, поэтому я добавил новый тип PointCloud с XYZ + Intensity mrpt::maps::CPointsMapXYZI и добавил к нему метод loadFromKittiVelodyneFile().Обратите внимание, что это для основной ветки grt mrpt, «версия 1.9.9».

Теперь, как вставить это в gridmap?Ваша идея использовать Velodyne CObservation для вставки его в карту сетки является одной из нерешенных проблем в нашей очереди, но, в любом случае, как уже было сказано выше, наборы данных Kitti лучше загружать в виде облаков точек.

Я бы порекомендовал вам преобразовать pointcloud в CObservation2DRangeScan, а затем вставить его в сетку.Это позволило бы вам контролировать, какую часть 3D-данных вы действительно хотите отразить в сетке (т.е. какие высоты и т. Д.)

Надеюсь, это помогло!

...