更新点云可视化程序时未捕获到异常

时间:2018-09-04 21:06:41

标签: c++ point-cloud-library

我正在使用最新版本的PCL处理.pcd文件。我正在使用PCL可视化器可视化整个云,同时从格式化的点创建最多两个新的云,以为这些点添加一些颜色。但是,有时在可视化新云时会收到此错误:

libc++abi.dylib: terminating with uncaught exception of type std::length_error: allocator<T>::allocate(size_t n) 'n' exceeds maximum supported size

由于updatePointCloud函数而发生。该行是:

viewer->updatePointCloud(cloud, *visualization_handler, cloud_name);

代码在.pcd文件处理和可视化过程中的特定位置崩溃,但是尚不清楚为什么此功能在大多数时间都能正常运行,但有时会导致异常。什么会造成问题?这可能与PCL的这一已知问题有关吗? :https://github.com/PointCloudLibrary/pcl/issues/2386

谢谢

编辑:

我已经通过正确处理处理和查看云的联合线程解决了该问题。种族状况可能正在发生。我正在使用互斥锁来处理云(过滤器,创建感兴趣的区域等),然后使用另一个锁来查看处理过的云,而不是以前是通过在可视化线程中处理点云来完成的。

要指定,我正在使用UnaNancyOwen中的以下代码可视化pcap文件: https://gist.github.com/UnaNancyOwen/9f9459d3c10f7a6325ebebabda9865f7

所有对云的处理都在这里进行(第76行中建议的地方):

// Retrieved Point Cloud Callback Function
boost::mutex mutex;
boost::function<void( const pcl::PointCloud<PointType>::ConstPtr& )> function =
    [ &cloud, &mutex ]( const pcl::PointCloud<PointType>::ConstPtr& ptr ){
        boost::mutex::scoped_lock lock( mutex );

        /* Point Cloud Processing */
        /* ACTUALLY DO ALL PROCESSING HERE */
        cloud = ptr;
    };

在可视化步骤中可以访问云的位置不是其他诱人的位置:

while( !viewer->wasStopped() ){
    // Update Viewer
    viewer->spinOnce();

    boost::mutex::scoped_try_lock lock( mutex );
    if( lock.owns_lock() && cloud ){
        // Update Point Cloud

    /* NO PROCESSING OF THE POINT CLOUD TO AVOID FAULT */

        handler->setInputCloud( cloud );
        if( !viewer->updatePointCloud( cloud, *handler, "cloud" ) ){
            viewer->addPointCloud( cloud, *handler, "cloud" );
        }
    }
}

请随时添加有关种族状况可能如何发生的建议。

谢谢!

0 个答案:

没有答案