PCL常见错误集合

15 篇文章 7 订阅

PCL常见错误集合

PCL错误4996:项目属性页>C/C++>常规>SDL检查(设置为否)

C:\Program Files\PCL 1.8.1\3rdParty\FLANN\include\flann\algorithms\dist:修改将503行的“typedef unsigned long long pop_t;”移到前面的“#if GNUC”这一行前面就可以了。

原位置503/504

点云的基本类型:

pcl::PointCloud<pcl::PointXYZ>
pcl::PointCloud<pcl::PointXYZI>
pcl::PointCloud<pcl::PointXYZRGBA>

第二种类型包含点的强度信息,也就是激光的反射率.第一种没有,只有xyz坐标信息.所以用第二种可以将点云保存成带点的强度的PCD文件,或者订阅ROS点云消息后转化为带强度的普通点云类型。

一般以find开头的函数是查询,以set开头的函数是设置,以is开头的函数是判断,以get开头的函数是获取,以start开头的函数是启动,以stop开头的函数是停止,以register开头的函数是注册,以unregister开头的函数是注销,以load开头的函数是打开,以save开头的函数是保存,以delete的函数开头是删除,以switch的函数开头是交换,尾缀Supported代表是否支持,尾椎Callback代表是否回调函数,

#include <pcl/io/openni2_grabber.h>

pcl::Grabber* interface = new pcl::io::OpenNI2Grabber();

OpenNI2并不和OpenNI向下兼容,如需使用OpenNI开发以前的产品,需要同时安装OpenNI。

PCL_EXPORTS int pcl::console::parse_argument  ( int  argc,  
  char **  argv,  
  const char *  str,  
  char &  val  
 ) 
  
///解析具有给定扩展名的文件名的命令行参数。

在输入地址时,最好输入绝对路径,相对路径经常报错。

在代码中输入地址时用双斜线,单斜线会引起歧义。

PCL中有许多类函数来自其父类,如果在说明中找不到可以到其父类的说明中去寻找。

#include <boost/make_shared.hpp>              //boost指针相关头文件
#include <pcl/point_types.h>                  //点类型定义头文件
#include <pcl/point_cloud.h>                  //点云类定义头文件
#include <pcl/point_representation.h>         //点表示相关的头文件
#include <pcl/io/pcd_io.h>                    //PCD文件打开存储类头文件
#include <pcl/filters/voxel_grid.h>           //用于体素网格化的滤波类头文件 
#include <pcl/filters/filter.h>             //滤波相关头文件
#include <pcl/features/normal_3d.h>         //法线特征头文件
#include <pcl/registration/icp.h>           //ICP类相关头文件
#include <pcl/registration/icp_nl.h>        //非线性ICP 相关头文件
#include <pcl/registration/transforms.h>      //变换矩阵类头文件
#include <iostream>//标准C++库中输入输出文件类相关头文件
#include <boost/thread/thread.hpp>//线程处理头文件
#include <pcl/common/common_headers.h>//一次输入common整个文件夹头文件的头文件
#include <pcl/range_image/range_image.h>//深度图像头文件
#include <pcl/visualization/range_image_visualizer.h>//深度图像可视化头文件
#include <pcl/visualization/pcl_visualizer.h>//PCLVisualizer可视化类头文件
#include <pcl/console/parse.h>//命令行解析头文件
#include <pcl/features/fpfh.h>//FPFH快速点特征直方图头文件
#include <pcl/sample_consensus/method_types.h>//随机参数估计方法头文件
#include <pcl/sample_consensus/model_types.h>//模型定义头文件
#include <pcl/segmentation/sac_segmentation.h>//基于采样一致性分割的类的头文件
#include <pcl/filters/crop_hull.h>//CropHull滤波器类头文件
#include <pcl/surface/concave_hull.h>创建凹多边形类定义头文件
#include <pcl/range_image/range_image.h>//深度图像类头文件
#include <pcl/features/integral_image_normal.h>//法线估计类头文件
#include <pcl/kdtree/kdtree_flann.h>//kdtree类定义头文件

#include <boost/make_shared.hpp>                            //boost指针相关头文件
#include <pcl/point_types.h>                                //点类型定义头文件
#include <pcl/point_cloud.h>                                //点云类定义头文件
#include <pcl/features/normal_3d.h>                         //法线特征头文件
#include <pcl/features/normal_3d_omp.h>                     //法线特征加速头文件    
#include <pcl/features/fpfh.h>                              //fpfh类特征头文件
#include <pcl/features/fpfh_omp.h>                          //fpfh加速类头文件
#include <pcl/features/boundary.h>                          //边界提取头文件 
#include <pcl/search/kdtree.h>                              //kdtree搜索对象类头文件
#include <pcl/point_representation.h>                       //点表示相关的头文件
#include <pcl/io/pcd_io.h>                                  //PCD文件打开存储类头文件
#include <pcl/filters/passthrough.h>                        //直通滤波器头文件
#include <pcl/filters/voxel_grid.h>                         //用于体素网格化的滤波类头文件
#include <pcl/filters/filter.h>                             //滤波相关头文件 
#include <pcl/filters/project_inliers.h>                    //点云投影头文件
#include <pcl/filters/extract_indices.h>                    //索引提取头文件
#include <pcl/filters/statistical_outlier_removal.h>        //统计离群点类头文件 
#include <pcl/segmentation/sac_segmentation.h>              //RanSaC分割
#include <pcl/segmentation/region_growing.h>                //区域生长
#include <pcl/segmentation/region_growing_rgb.h>            //基于颜色的区域生长
#include <pcl/segmentation/supervoxel_clustering.h>         //超体聚类
#include <pcl/segmentation/lccp_segmentation.h>             //基于凹凸性分割
#include <pcl/surface/mls.h>                                //点云平滑类头文件
#include <pcl/registration/icp.h>                           //ICP类相关头文件
#include <pcl/registration/icp_nl.h>                        //非线性ICP 相关头文件
#include <pcl/registration/transforms.h>                    //变换矩阵类头文件
#include <pcl/registration/ia_ransac.h>                     //sac-ia类头文件 
#include <pcl/registration/correspondence_estimation.h>     //直方图配准
#include <pcl/registration/correspondence_rejection_features.h>//特征的错误对应关系去除
#include <pcl/registration/correspondence_rejection_sample_consensus.h>//随机采样一致性去除 
#include <pcl/ModelCoefficients.h>//模型参数头文件
#include <pcl/sample_consensus/method_types.h>//随机参数估计方法头文件
#include <pcl/sample_consensus/model_types.h>//模型定义头文件
#include <deque>      //STL 双端队列容器
#include <exception>    //异常处理类
#include <fstream>    //文件输入/输出
#include <functional>   //STL 定义运算函数(代替运算符)
#include <limits>     //定义各种数据类型最值常量
#include <list>      //STL 线性列表容器
#include <map>       //STL 映射容器
#include <iomanip>    //参数化输入/输出
#include <ios>       //基本输入/输出支持
#include <sstream>     //基于字符串的流
#include <stack>      //STL 堆栈容器
#include <algorithm>    //STL 通用算法
#include <bitset>     //STL 位集容器
#include <cctype>     //字符处理
#include <stdexcept>    //标准异常类
#include <streambuf>    //底层输入/输出支持
#include <string>     //字符串类
#include <utility>     //STL 通用模板类
#include <vector>     //STL 动态数组容器
#include <iosfwd>     //输入/输出系统使用的前置声明
#include <cerrno>     //定义错误码
#include <clocale>    //定义本地化函数
#include <cmath>     //定义数学函数
#include <complex>     //复数类
#include <cstdio>     //定义输入/输出函数
#include <cstdlib>    //定义杂项函数及内存分配函数
#include <cstring>    //字符串处理
#include <ctime>     //定义关于时间的函数
#include <iostream>    //数据流输入/输出
#include <istream>     //基本输入流
#include <ostream>     //基本输出流
#include <queue>      //STL 队列容器
#include <set>       //STL 集合容器
#include <cwchar> //宽字符处理及输入/输出
#include <cwctype>     //宽字符分类
#include <complex.h>   //复数处理
#include <fenv.h>    //浮点环境
#include <inttypes.h>  //整数格式转换
#include <stdbool.h>   //布尔环境
#include <stdint.h>   //整型环境
#include <tgmath.h>   //通用类型数学宏

C:\Program Files\PCL 1.8.1\3rdParty\Boost\include\boost-1_64\boost\typeof\msvc\typeof_impl.hpp错误

在项目源文件的顶部加上#define BOOST_TYPEOF_EMULATION

Microsoft.Cpp.x64.user项目属性表因该是VS自动添加的,由于同时添加Debug和Release情况下的属性表,会在Debug模式下引起异常。

5.2.1简单点云可视化中圆球麦子点云运行会出现如下错误:

Generic Warning: In C:\Build\3rdPartyx6 4\VTK 8.0.0\Rendering\CorelyvtkPolyDataMapper.cxx, line 28

Error: no override found for ‘vtkPolyDataMapper’.

解决方法参考网站:https://www.it610.com/article/1290633330752036864.htm

在所有代码的最前面加如下代码块:

#include "vtkAutoInit.h" 
VTK_MODULE_INIT(vtkRenderingOpenGL); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);

错误:未识别标识符sleep

pcl_macros.h文件中将18行的pcl_sleep(x) d=的宏定义sleep(x) 改为Sleep(x)

Assertion failed: px != 0, file c:\program files\pcl 1.8.1\3rdparty\boost\include\boost-1_64\boost\smart_ptr\shared_ptr.hpp, line 711

在子函数中不用boost::shared_ptr,而是直接使用变量试一下。

PCL_VISUALIZER_POINT_SIZE和PCL_VISUALIZER_FONT_SIZE不同。

通过命令行来读取文件的代码:

if (argc < 2)
	{
		std::cout << "please input \".exe source.pcd \" . " << std::endl;
		return (0);
	}
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);//实例化一个点云对象来存储点云文件
	if (pcl::io::loadPCDFile(argv[1] ,*cloud) == -1)//打开输入的pcd文件
	{
		std::cout << "Was not able to open file \"" << argv[1] << std::endl;
		return (0);
	}//打不开时报错

pcl_isfinite函数返回一个布尔值,检查某个值是不是正常数值。用于去除无效点。

double
computeCloudResolution(const pcl::PointCloud<PointType>::ConstPtr &cloud)//计算点云分辨率的函数
{
	double res = 0.0;
	int n_points = 0;
	int nres;
	std::vector<int> indices(2);//保存搜索完的邻域点对应的索引
	std::vector<float> sqr_distances(2);//保存搜索完的每个邻域点与查询点之间的欧氏距离
	pcl::search::KdTree<PointType> tree;//创建一个kd tree对象
	tree.setInputCloud(cloud);//向kd tree中传入点云

	for (size_t i = 0; i < cloud->size(); ++i)//遍历整个点云
	{
		if (!pcl_isfinite((*cloud)[i].x))
		{
			continue;
		}//如果遇到无效点,跳过	
		nres = tree.nearestKSearch(i, 2, indices, sqr_distances);//对索引为i的点进行K邻域搜索,考虑第二个邻域点,因为第一个邻域点就是点本身。
		if (nres == 2)
		{
			res += sqrt(sqr_distances[1]);
			++n_points;
		}//如果在邻域内只找到2个点,n_points+1,并球所有满足此条件点的求欧式距离之和
	}
	if (n_points != 0)
	{
		res /= n_points;
	}//如果n_points,计算点云分辨率
	return res;//返回点云分辨率值
}

在法线估计等特征提取操作前进行下采样很重要,会极大地影响特征的提取速度。有序点云积分图法估计速度快于无序点云。

viewer.setCameraPosition(pos_vector[0], pos_vector[1], pos_vector[2], look_at_vector[0],
		look_at_vector[1], look_at_vector[2], up_vector[0], up_vector[1], up_vector[2]);
	viewer.updateCamera();
	/*viewer.camera_.pos[0] = pos_vector[0];
	viewer.camera_.pos[1] = pos_vector[1];
	viewer.camera_.pos[2] = pos_vector[2];
	viewer.camera_.focal[0] = look_at_vector[0];
	viewer.camera_.focal[1] = look_at_vector[1];
	viewer.camera_.focal[2] = look_at_vector[2];
	viewer.camera_.view[0] = up_vector[0];
	viewer.camera_.view[1] = up_vector[1];
	viewer.camera_.view[2] = up_vector[2];
	viewer.updateCamera();*/
//uniform_sampling.compute(sampled_indices);
//pcl::copyPointCloud(*model, sampled_indices.points, *model_keypoints);
uniform_sampling.filter(*model_keypoints);//计算并输出模型点云经过下采样得到的点云,存储到model_keypoints。

C1128节数超过对象文件格式限制:请使用/bigobj进行编译:单击“C/C++”项,单击“命令行”属性页,在“附加选项”框中键入编译器选项,添加/bigobj。

由于找不到flann.dll,无法继续执行代码。重新安装程序可能会解决此问题。

解决方案:
将PCL1.8.1\3rdParty\FLANN\bin文件里的flann.dill复制到PCL1.8.1\bin文件夹下即可

错误 LNK2005 qh_makeridges 已经在 qhull_d.lib(qhull_d.dll) 中定义 用release,而不用debug。

没有viewer.spinOnce ();,可视化窗口会在打开后直接卡死。

sensor_msgs::PointCloud2修改为pcl::PCLPointCloud2

error C2039: “fromROSMsg”: 不是“pcl”的成员:pcl::fromROSMsg修改为pcl::fromPCLPointCloud2

‘pcl::SAC_SAMPLE_SIZE’: This map is deprecated and is kept only to prevent breaking existing user code. Starting from PCL 1.8.0 model sample size is a protected member of the SampleConsensusModel class

可能只是警告,问题出在typeof_impl.hpp错误。

严重性 代码 说明 项目 文件 行 禁止显示状态
错误(活动) E1097 未知特性 “no_init_all” Test_83 C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um\winnt.h 3901

切换Windows Kits版本即可

读取或保存文件时抛出异常:检查点云形状,点云是否为空点云。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值