Как сохранить значение интенсивности в sensor_msgs / Image из PointCloud? - PullRequest
0 голосов
/ 24 сентября 2018

Я использую ROS-Kinetic.У меня есть Pointcloud типа PointCloud.Я спроецировал то же облако точек на самолет.Я хотел бы преобразовать планарное облако точек в изображение типа sensor_msgs / Image.

toROSMsg(cloud, image); 

введите код здесь, выдавая ошибку, как

error: ‘const struct pcl::PointXYZI’ has no member named ‘rgb’
         memcpy (pixel, &cloud (x, y).rgb, 3 * sizeof(uint8_t));

Пожалуйста, просветите меня в этом отношении.По возможности вместе с фрагментом кода.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

То, что вы пытаетесь достичь, это некоторая 2D вокселизация.И я предполагаю, что вы хотите реализовать некоторую «модель обратного датчика» (ISM), как объяснено Thrun , верно?Этот подход обычно напрямую внедряется в алгоритм отображения, чтобы обойти исчерпывающий расчет простого ISM.Поэтому вы вряд ли найдете готовое решение.

В любом случае, вы можете сделать это несколькими способами, например:

  1. Использовать pointcloud_to_laserscan для2D проекция (но она у вас все равно есть)
  2. Используйте ISM alg.объяснено в книге

или

  1. Преобразовать PCL в октре
  2. Downsample to aquadtree и преобразовать его в imge
0 голосов
/ 24 сентября 2018

Если toROSMsg () жалуется на то, что ваше входное облако не имеет члена 'rgb', попробуйте ввести облако типа pcl :: PointXYZRGB.Это еще один тип облака точек, обрабатываемый PCL.Вы можете посмотреть документацию типов точек PCL.

Преобразовать в тип pcl :: PointXYZRGB с помощью следующих строк:

pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudrgb (new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::copyPointCloud(*cloud, *cloudrgb);

Затем вызвать вашу функцию как:

toROSMsg(cloudrgb, image); 
...