2013-11-22 35 views
8

Tôi vừa mới bắt đầu sử dụng thư viện đám mây điểm tuyệt vời và muốn hiển thị hai đám mây điểm trong một trình xem nhưng mỗi màu khác nhau.Thêm hai đám mây điểm khác nhau vào trình xem (Thư viện điểm đám mây (PCL))

Khi tôi sử dụng một đối tượng đám mây điểm (con trỏ ?!), nó hoạt động tốt nhưng nếu tôi muốn thêm thứ hai, chỉ phần thứ hai sẽ được hiển thị trong trình xem.

Tôi đang sử dụng phiên bản pcl 1.6 và đã thực hiện khá giống như trong số tutorial này.
Có thể các bạn có một niềm đam mê.

Đoạn mã có liên quan bên dưới. Cảm ơn trước!!!

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

Bạn đã kiểm tra bạn không tải cùng một 'PCD'? –

+0

Tôi thực sự chỉ tải một máy tính nhưng tôi đang sao chép và di chuyển nó 10 mét từ đám mây điểm khác. copyPointCloud (* cloud, * cloud2);/Sau khi sao chép, tôi thực hiện cloud2-> sensor_origin_ = p; – GeoGecco

+0

Ok. Sau đó, hãy thử tải tệp hai lần, thay vì sao chép. Tôi không nghĩ rằng điều này sẽ giải quyết nó, nhưng chỉ trong trường hợp ... –

Trả lời

5

Để áp dụng biến đổi (ví dụ như quay và bản dịch) vào một đám mây điểm bạn đã nạp bạn nên sử dụng chức năng pcl::transformPointCloud (see here). Hàm này lấy 3 đối số: đám mây đầu vào, đám mây đầu ra và Eigen::Transform. Chỉ cần xác định chuyển đổi bản dịch và đưa nó vào hàm để dịch đám mây của bạn một cách chính xác.

Có hướng dẫn Eigen tốt (here) cho bạn biết cách xác định và sử dụng các phép biến đổi không gian.

3

Dexter đã giúp tôi rất nhiều =)

đây là những gì tôi đã sử dụng để biến Pointcloud để những người khác có thể sử dụng nó!

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

có những cách khác để hiển thị hai đám mây điểm trong vòng một viewer.you có thể tạo hai khung nhìn differet trên cửa sổ, một số suy nghĩ như thế này:

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); 

cách này, bạn có thể thấy hai điểm những đám mây bên cạnh nhau (và không chồng chéo).

Các vấn đề liên quan