【问题标题】:Adding two different point clouds to viewer (Point Cloud Library (PCL))将两个不同的点云添加到查看器(点云库 (PCL))
【发布时间】:2013-12-07 09:28:13
【问题描述】:

我刚开始使用出色的点云库,想在一个查看器中显示两个点云,但每个点云的颜色不同。

当我使用一个点云对象(指针?!)时,它工作得很好,但如果我想添加第二个,则只有第二个会显示在查看器中。

我使用的是 pcl 1.6 版,并且非常像 tutorial 中的那样。
也许你们有一个建议。

相关代码sn-p如下。先谢谢了!!!

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

【问题讨论】:

  • 您是否检查过您没有加载相同的PCD
  • 我实际上只加载了一个 pcd,但我正在复制它并将它移动到距离另一个点云 10 米的地方。 copyPointCloud(*cloud, *cloud2);/ 复制后我做cloud2->sensor_origin_ = p;
  • 好的。然后,尝试加载文件两次,而不是复制。我认为这不会解决它,但以防万一......
  • 嗯,不……那也不会。在调试时,我注意到 cloud2 对象中的点在执行 cloud2->sensor_origin_ = p 时立即消失。是否有另一种移动现有云的方法?

标签: c++ point-cloud-library point-clouds


【解决方案1】:

为了对已加载的点云应用变换(例如旋转和平移),您应该使用 pcl::transformPointCloud 函数 (see here)。该函数接受 3 个参数:输入云、输出云和 Eigen::Transform。只需定义一个翻译转换并将其输入函数,以便正确翻译您的云。

有一个很好的 Eigen 教程 (here) 向您展示了如何定义和使用空间变换。

【讨论】:

    【解决方案2】:

    德克斯特帮了我很多 =)

    这是我用来转换点云的东西,以便其他人也可以使用它!

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

      这样,您可以看到两个点云彼此并排(并且不重叠)。

      【讨论】:

        猜你喜欢
        • 2018-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-15
        • 2018-01-17
        • 1970-01-01
        相关资源
        最近更新 更多