首页 文章

向 Spectator 添加两个不同的点 Cloud (点 Cloud 库(PCL))

提问于
浏览
9

我刚刚开始使用伟大的点 Cloud 库,并希望在一个观察者中显示两个点 Cloud ,但每个点都有不同的颜色 .

当我使用一个点 Cloud 对象(指针?!)时,它工作正常,但如果我想添加第二个,只有第二个将显示在查看器中 .

我正在使用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();

3 回答

  • 8

    为了将转换(例如旋转和平移)应用于已加载的点 Cloud ,您应该使用 pcl::transformPointCloud 函数(see here) . 此函数有3个参数:输入 Cloud ,输出 Cloud 和 Eigen::Transform . 只需定义翻译转换并将其提供给函数,即可正确转换 Cloud .

    有一个很好的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

    还有其他方法可以在一个查看器中显示两个点 Cloud . 您可以在窗口上创建两个不同的视口,有些像这样思考:

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

    通过这种方式,您可以看到彼此之间的两个点 Cloud (并且不重叠) .

相关问题