我在下面的代码片段的两个打印之间收到“调试断言失败”错误消息,其中显示“ vector 下标超出范围”。我在64位计算机Win7和VS2010上使用PCL 1.7.1。

问题是,这是随机发生的,我不知道该怎么办。我该如何调试这样的东西,因为它看起来像是点云库(PCL)中的错误,但我很犹豫,因为通常该错误与我有关。

代码的作用是,使用文件中的点云数据加载.pcd文件,然后尝试从中创建ESF描述符。现在我知道,我在该 vector 中没有索引,但是仍然不会在我的代码中发生...任何想法我可能做错了什么?

pcl::PointCloud<pcl::ESFSignature640>::Ptr  createESFDescriptor(std::vector<float> v) {

    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
    pcl::io::loadPCDFile("data.pcd", *cloud);
    std::cout << "size: " << cloud->size() << std::endl;

    pcl::ESFEstimation<pcl::PointXYZ,pcl::ESFSignature640> esf;
    esf.setInputCloud(cloud);

    pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree (new pcl::search::KdTree<pcl::PointXYZ>);
    esf.setSearchMethod(kdtree);

    pcl::PointCloud<pcl::ESFSignature640>::Ptr esfPointer(new pcl::PointCloud<pcl::ESFSignature640> ());

    printf("dbg1");
    esf.compute(*esfPointer);
    printf("dbg2");

    return esfPointer;
}

最佳答案

您的kdtree没有输入,请在kdtree.setInputCloud (cloud);下添加pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree (new pcl::search::KdTree<pcl::PointXYZ>);
查看官方教程:http://pointclouds.org/documentation/tutorials/kdtree_search.php#kdtree-search

09-07 07:33