我得到一个' Debug断言失败'错误消息,它在下面的代码片段中的两个打印件之间显示'矢量下标超出范围'我在64位机器,Win7和VS2010上使用PCL 1.7.1。
问题是,这是随机发生的,我不知道该怎么做。我如何调试这样的东西,因为这看起来像点云库(PCL)中的错误,但我犹豫不决,因为通常错误是我。
代码的作用是,从文件中加载带有点云数据的.pcd文件,然后尝试从中创建ESF描述符。现在我知道,我在那个向量中没有索引,但是,我的代码中没有发生这种情况......任何想法我可能做错了什么?
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;
}
答案 0 :(得分:0)
您的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