2013-11-22 2 views
8

Я только начал использовать большую облачную облачную библиотеку и хотел отображать два облака точки внутри одного зрителя, но каждый в другом цвете.Добавление двух различных облаков точек для просмотра (Point Cloud Library (PCL))

Когда я использую одноточечный объект облака (указатель ?!), он работает нормально, но если я хочу добавить второй, в средстве просмотра будет отображаться только второй.

Я использую pcl версию 1.6 и сделал это в значительной степени, как в этом tutorial.
Возможно, у вас есть предложение.

Соответствующий фрагмент кода приведен ниже. Заранее спасибо!!!

boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer_two_clouds (new pcl::visualization::PCLVisualizer("3D Viewer")); 
    viewer_two_clouds->setBackgroundColor(0,0,0); 

    // cloud: green/cloud2: red 
    pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZRGB> single_color1 (cloud, 0, 255, 0); 
    pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZRGB> single_color2 (cloud2, 255, 0, 0); 

    //add both 
    viewer_two_clouds->addPointCloud<pcl::PointXYZRGB> (cloud, single_color1, "sample_cloud_1"); 
    viewer_two_clouds->addPointCloud<pcl::PointXYZRGB> (cloud2, single_color2, "sample_cloud_2"); 

    // set coordinateSystem and init camera 
    viewer_two_clouds->addCoordinateSystem(1.0); 
    viewer_two_clouds->initCameraParameters(); 

    while(!viewer_two_clouds->wasStopped()) 
    { 
     viewer_two_clouds->spinOnce(); 
     boost::this_thread::sleep (boost::posix_time::microseconds(100000)); 
    } 

    viewer_two_clouds->close(); 
+0

Вы проверили, что вы не загружаете тот же «PCD»? –

+0

Я на самом деле загружаю только один pcd, но я копирую его и перемещаю его в 10 метрах от другого облака точек. copyPointCloud (* cloud, * cloud2);/После копирования я облако2-> sensor_origin_ = p; – GeoGecco

+0

Хорошо. Затем попробуйте загрузить файл дважды, а не копировать. Я не думаю, что это решит его, но на всякий случай ... –

ответ

5

Для того, чтобы применить преобразования (например, вращений и переводов) к точке облака вы уже загружен, вы должны использовать функцию pcl::transformPointCloud (see here). Эта функция принимает 3 аргумента: облако ввода, облако вывода и Eigen::Transform. Просто определите преобразование перевода и подайте его в функцию, чтобы правильно перевести ваше облако.

Существует хороший справочник Eigen (here), в котором показано, как определять и использовать преобразования пространства.

3

Декстер помог мне много =)

вот что я использовал, чтобы превратить PointCloud так, чтобы другие могли использовать его, как хорошо!

void trans(); 
    { 
     Eigen::Affine3f t; 

     pcl::getTransformation(10.0,5.0,20.0,0.0,0.0,0.0,t); 
     pcl::transformPointCloud(*cloud, *cloud2, t); 
    } 
3

есть другие способы отображения два облаков точек в пределах одного viewer.you может создать два гладкошерстные видовые на окне, некоторые думают, как это:

viewer_two_clouds->createViewPort (0.0,0.0,0.5,1.0,0); 
viewer_two_clouds->setBackgroundColor(0,0,0,0); // background color dark 
viewer_two_clouds->addText("sample_cloud_1", 10, 10, "right", 0); 
viewer_two_clouds->addPointCloud(cloud, "sample_cloud_1", 0); 

viewer_two_clouds->createViewPort (0.5,0.0,0.1,1.0,0); 
viewer_two_clouds->setBackgroundColor(0.1,0.1,0.1,0); // background color light 
viewer_two_clouds->addText("sample_cloud_2", 10, 10, "left", 0); 
viewer_two_clouds->addPointCloud(cloud2, "sample_cloud_2", 0); 

таким образом, вы можете увидеть две точки облака, кроме друг друга (и не перекрывающиеся).

Смежные вопросы